benjamin5607 commited on
Commit
da0beb9
ยท
verified ยท
1 Parent(s): 09cfe8f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -49
app.py CHANGED
@@ -1,52 +1,13 @@
1
  import gradio as gr
2
- import google.generativeai as genai
3
  import edge_tts
4
  import os
 
5
 
6
- # 1. ๊ตฌ๊ธ€ API ์„ค์ •
7
  GENAI_KEY = os.getenv("GEMINI_KEY")
8
- genai.configure(api_key=GENAI_KEY)
9
 
10
- # ==========================================
11
- # ๐Ÿ•ต๏ธโ€โ™‚๏ธ [๊ฒธ์†ํ•œ ํƒ์ƒ‰๊ธฐ] ๋ฌด๋ฃŒ๋กœ ํ™•์‹คํ•œ ๋ชจ๋ธ๋งŒ ์ฐพ๊ธฐ
12
- # ==========================================
13
- def get_safe_model():
14
- print("๐Ÿ“ก ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•ˆ์ „ํ•œ ๋ชจ๋ธ์„ ์ฐพ์Šต๋‹ˆ๋‹ค...")
15
-
16
- # ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” '๋ฌด๋ฃŒ ๋Œ€์žฅ' ๋ชจ๋ธ๋“ค (์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!)
17
- # 2.0์€ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋‹ˆ๊นŒ ์•„์˜ˆ ๋ฆฌ์ŠคํŠธ์—์„œ ๋บ์Šต๋‹ˆ๋‹ค.
18
- target_models = [
19
- "gemini-1.5-flash", # 1์ˆœ์œ„: ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ 
20
- "gemini-1.5-flash-latest", # 2์ˆœ์œ„: ์ตœ์‹  ๋ณ„๋ช…
21
- "gemini-1.5-pro", # 3์ˆœ์œ„: ์„ฑ๋Šฅ ์ข‹์Œ (์กฐ๊ธˆ ๋А๋ฆผ)
22
- "gemini-pro" # 4์ˆœ์œ„: ๊ตฌ๊ด€์ด ๋ช…๊ด€
23
- ]
24
-
25
- try:
26
- # ๊ตฌ๊ธ€์— ์žˆ๋Š” ์ „์ฒด ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
27
- available_models = [m.name for m in genai.list_models()]
28
-
29
- for target in target_models:
30
- # ์ด๋ฆ„์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜, ๊ฒฝ๋กœ(models/) ํฌํ•จํ•ด์„œ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
31
- if target in available_models or f"models/{target}" in available_models:
32
- print(f"โœ… ์•ˆ์ „ํ•œ ๋ชจ๋ธ ํ™•๋ณด! [{target}] ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.")
33
- return genai.GenerativeModel(target)
34
-
35
- # ๋งŒ์•ฝ ์œ„ ๋ชฉ๋ก์— ๋‹ค ์—†์œผ๋ฉด? (๊ทธ๋Ÿด ๋ฆฌ ์—†์ง€๋งŒ)
36
- print("โš ๏ธ ํƒ€๊ฒŸ ๋ชจ๋ธ ์—†์Œ. ๊ฐ•์ œ๋กœ 'gemini-1.5-flash' ์‹œ๋„.")
37
- return genai.GenerativeModel("gemini-1.5-flash")
38
-
39
- except Exception as e:
40
- print(f"โŒ ํƒ์ƒ‰ ์ค‘ ์—๋Ÿฌ: {str(e)}")
41
- # ์—๋Ÿฌ๋‚˜๋ฉด ๋ฌด์กฐ๊ฑด ์ด๊ฑธ๋กœ ๊ณ ์ •
42
- return genai.GenerativeModel("gemini-1.5-flash")
43
-
44
- # ์„œ๋ฒ„ ์ผœ์งˆ ๋•Œ ๋ชจ๋ธ ํ™•์ •
45
- model = get_safe_model()
46
-
47
- # ==========================================
48
- # 2. ๋ฉค๋ฒ„ ๋ฐ์ดํ„ฐ (๊ทธ๋Œ€๋กœ)
49
- # ==========================================
50
  MEMBERS = {
51
  "์„œ์œค (Korea)": {
52
  "role": "๋ฉ”์ธ ๋ณด์ปฌ",
@@ -90,6 +51,26 @@ MEMBERS = {
90
  }
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  async def band_consulting(user_input, member_name):
94
  try:
95
  if member_name not in MEMBERS:
@@ -97,15 +78,15 @@ async def band_consulting(user_input, member_name):
97
 
98
  member = MEMBERS[member_name]
99
 
100
- chat_prompt = f"{member['prompt']}\n\nUser's Error/Worry: {user_input}\nResponse:"
 
101
 
102
  try:
103
- # ์•ˆ์ „ํ•˜๊ฒŒ ํ™•๋ณด๋œ ๋ชจ๋ธ๋กœ ์ƒ์„ฑ
104
- response = model.generate_content(chat_prompt)
105
- ai_text = response.text
106
  except Exception as e:
107
- return f"Error (Gemini): ๋ชจ๋ธ ์ƒ์„ฑ ์‹คํŒจ.\n{str(e)}", None
108
 
 
109
  try:
110
  output_file = f"/tmp/{member_name}_reply.mp3"
111
  communicate = edge_tts.Communicate(ai_text, member['voice'])
@@ -120,7 +101,7 @@ async def band_consulting(user_input, member_name):
120
 
121
  # Blocks UI
122
  with gr.Blocks() as demo:
123
- gr.Markdown("# Error 404 Band API Server (Safe Mode)")
124
  with gr.Row():
125
  inp_text = gr.Textbox(label="๊ณ ๋ฏผ ์ž…๋ ฅ")
126
  inp_member = gr.Dropdown(choices=list(MEMBERS.keys()), label="๋ฉค๋ฒ„ ์„ ํƒ", value="์„œ์œค (Korea)")
@@ -128,6 +109,7 @@ with gr.Blocks() as demo:
128
  out_audio = gr.Audio(label="์Œ์„ฑ")
129
  btn = gr.Button("์ƒ๋‹ด ์š”์ฒญ")
130
 
 
131
  btn.click(fn=band_consulting, inputs=[inp_text, inp_member], outputs=[out_text, out_audio], api_name="predict")
132
 
133
  demo.launch()
 
1
  import gradio as gr
2
+ import requests # ๊ตฌ๊ธ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ญ์ œ -> requests๋กœ ๋Œ€์ฒด
3
  import edge_tts
4
  import os
5
+ import json
6
 
7
+ # 1. API ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
8
  GENAI_KEY = os.getenv("GEMINI_KEY")
 
9
 
10
+ # 2. ๋ฉค๋ฒ„ ๋ฐ์ดํ„ฐ (๊ทธ๋Œ€๋กœ ์œ ์ง€)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  MEMBERS = {
12
  "์„œ์œค (Korea)": {
13
  "role": "๋ฉ”์ธ ๋ณด์ปฌ",
 
51
  }
52
  }
53
 
54
+ # โ˜… ํ•ต์‹ฌ: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ํ•จ์ˆ˜
55
+ def call_gemini_direct(prompt):
56
+ # 1.5 Flash ๋ชจ๋ธ ์ฃผ์†Œ ์ง์ ‘ ํ˜ธ์ถœ
57
+ url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={GENAI_KEY}"
58
+
59
+ headers = {'Content-Type': 'application/json'}
60
+ data = {
61
+ "contents": [{
62
+ "parts": [{"text": prompt}]
63
+ }]
64
+ }
65
+
66
+ response = requests.post(url, headers=headers, json=data)
67
+
68
+ if response.status_code == 200:
69
+ return response.json()['candidates'][0]['content']['parts'][0]['text']
70
+ else:
71
+ # ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ƒ์„ธ ๋‚ด์šฉ ๋ฐ˜ํ™˜
72
+ raise Exception(f"Google API Error {response.status_code}: {response.text}")
73
+
74
  async def band_consulting(user_input, member_name):
75
  try:
76
  if member_name not in MEMBERS:
 
78
 
79
  member = MEMBERS[member_name]
80
 
81
+ # [Step 1] ๋‡Œ: ์ง์ ‘ ํ†ต์‹  ํ•จ์ˆ˜ ํ˜ธ์ถœ
82
+ full_prompt = f"{member['prompt']}\n\nUser's Error/Worry: {user_input}\nResponse:"
83
 
84
  try:
85
+ ai_text = call_gemini_direct(full_prompt)
 
 
86
  except Exception as e:
87
+ return f"Error (Gemini Direct): {str(e)}", None
88
 
89
+ # [Step 2] ์ž…: Edge-TTS
90
  try:
91
  output_file = f"/tmp/{member_name}_reply.mp3"
92
  communicate = edge_tts.Communicate(ai_text, member['voice'])
 
101
 
102
  # Blocks UI
103
  with gr.Blocks() as demo:
104
+ gr.Markdown("# Error 404 Band API Server (Direct REST Mode)")
105
  with gr.Row():
106
  inp_text = gr.Textbox(label="๊ณ ๋ฏผ ์ž…๋ ฅ")
107
  inp_member = gr.Dropdown(choices=list(MEMBERS.keys()), label="๋ฉค๋ฒ„ ์„ ํƒ", value="์„œ์œค (Korea)")
 
109
  out_audio = gr.Audio(label="์Œ์„ฑ")
110
  btn = gr.Button("์ƒ๋‹ด ์š”์ฒญ")
111
 
112
+ # API ์ด๋ฆ„ 'predict' ๊ฐ•์ œ ์ง€์ •
113
  btn.click(fn=band_consulting, inputs=[inp_text, inp_member], outputs=[out_text, out_audio], api_name="predict")
114
 
115
  demo.launch()