Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,52 +1,13 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
-
import
|
| 3 |
import edge_tts
|
| 4 |
import os
|
|
|
|
| 5 |
|
| 6 |
-
# 1.
|
| 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 |
-
|
|
|
|
| 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):
|
| 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 (
|
| 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()
|