benjamin5607 commited on
Commit
6d9ccf6
Β·
verified Β·
1 Parent(s): 7483917

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -15
app.py CHANGED
@@ -16,8 +16,8 @@ except:
16
  MEMBERS = {
17
  "μ„œμœ€ (Korea)": "ko-KR-SunHiNeural",
18
  "Chloe (USA)": "en-US-AriaNeural",
19
- "Beatrice (Brazil)": "pt-BR-FranciscaNeural",
20
  "Naomi (Japan)": "ja-JP-NanamiNeural",
 
21
  "Elena (Spain)": "es-ES-ElviraNeural",
22
  "Amira (Egypt)": "ar-EG-SalmaNeural",
23
  "Liwei (China)": "zh-CN-XiaoxiaoNeural",
@@ -29,22 +29,28 @@ async def band_consulting(user_input, member_name, lang_code):
29
  lang_map = {"ko":"Korean","en":"English","ja":"Japanese","pt":"Portuguese","es":"Spanish","ar":"Arabic","zh":"Chinese","fr":"French"}
30
  target_lang = lang_map.get(lang_code, "Korean")
31
 
32
- system_instruction = f"""
33
- 당신은 λ°΄λ“œ 멀버 '{member_name}'μž…λ‹ˆλ‹€.
34
- 1. λ°˜λ“œμ‹œ '{target_lang}'둜만 λ‹΅λ³€ν•˜μ„Έμš”.
35
- 2. μŒμ„± λ‹΅λ³€μš© 본문은 μ•„μ£Ό μΉœμ ˆν•˜κ³  μƒμ„Έν•˜κ²Œ μž‘μ„±ν•˜μ„Έμš”.
36
- 3. λͺ¨λ“  악보와 연주법은 λ°˜λ“œμ‹œ [TAB] μ„Ήμ…˜μ— ν¬ν•¨ν•˜μ„Έμš”.
37
- 4. λ§ˆμ§€λ§‰μ— [MUSIC: μ˜μ–΄ ν”„λ‘¬ν”„νŠΈ]λ₯Ό ν¬ν•¨ν•˜μ„Έμš”.
38
- """
39
 
40
  url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={GENAI_KEY}"
41
- payload = {"contents": [{"parts": [{"text": f"{system_instruction}\n질문: {user_input}"}]}]}
 
 
 
 
 
 
 
 
 
 
42
 
43
  response = requests.post(url, json=payload)
44
  res_data = response.json()
45
 
46
- if 'candidates' not in res_data:
47
- return "API Error: No candidates found", None, None, "Score Error"
 
 
48
 
49
  ai_text_raw = res_data['candidates'][0]['content']['parts'][0]['text']
50
 
@@ -52,15 +58,12 @@ async def band_consulting(user_input, member_name, lang_code):
52
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
53
  tab_display = tab_match.group(1).strip() if tab_match else "상세 악보 μ—†μŒ"
54
 
55
- # TTSμ—μ„œ 악보 도렀내기
56
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
57
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
58
 
59
- # μŒμ„± 생성
60
  voice_path = f"/tmp/v_{member_name.split()[0]}.mp3"
61
  await edge_tts.Communicate(clean_text, MEMBERS.get(member_name, "ko-KR-SunHiNeural")).save(voice_path)
62
 
63
- # μŒμ•… 생성
64
  music_path = None
65
  if music_match and music_synthesiser:
66
  p = music_match.group(1).strip()
@@ -70,7 +73,7 @@ async def band_consulting(user_input, member_name, lang_code):
70
 
71
  return clean_text, voice_path, music_path, tab_display
72
  except Exception as e:
73
- return str(e), None, None, "Error"
74
 
75
  with gr.Blocks() as demo:
76
  i1 = gr.Textbox(); i2 = gr.Textbox(); i3 = gr.Textbox()
 
16
  MEMBERS = {
17
  "μ„œμœ€ (Korea)": "ko-KR-SunHiNeural",
18
  "Chloe (USA)": "en-US-AriaNeural",
 
19
  "Naomi (Japan)": "ja-JP-NanamiNeural",
20
+ "Beatrice (Brazil)": "pt-BR-FranciscaNeural",
21
  "Elena (Spain)": "es-ES-ElviraNeural",
22
  "Amira (Egypt)": "ar-EG-SalmaNeural",
23
  "Liwei (China)": "zh-CN-XiaoxiaoNeural",
 
29
  lang_map = {"ko":"Korean","en":"English","ja":"Japanese","pt":"Portuguese","es":"Spanish","ar":"Arabic","zh":"Chinese","fr":"French"}
30
  target_lang = lang_map.get(lang_code, "Korean")
31
 
32
+ system_instruction = f"당신은 {member_name}μž…λ‹ˆλ‹€. λ°˜λ“œμ‹œ {target_lang}둜만 λ‹΅λ³€ν•˜μ„Έμš”. μŒμ„±μ€ 5쀄 이내 μš”μ•½, 상세 μ„€λͺ…은 [TAB]에, μŒμ•… ν”„λ‘¬ν”„νŠΈλŠ” [MUSIC: ν”„λ‘¬ν”„νŠΈ]에 λ„£μœΌμ„Έμš”."
 
 
 
 
 
 
33
 
34
  url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={GENAI_KEY}"
35
+
36
+ # β˜… μ•ˆμ „ ν•„ν„° ν•΄μ œ 및 μ„€μ • κ°•ν™”
37
+ payload = {
38
+ "contents": [{"parts": [{"text": f"{system_instruction}\n질문: {user_input}"}]}],
39
+ "safetySettings": [
40
+ {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
41
+ {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
42
+ {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
43
+ {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"}
44
+ ]
45
+ }
46
 
47
  response = requests.post(url, json=payload)
48
  res_data = response.json()
49
 
50
+ # candidates μ—λŸ¬ μ„ΈλΆ€ 진단
51
+ if 'candidates' not in res_data or not res_data['candidates']:
52
+ reason = res_data.get('promptFeedback', {}).get('blockReason', 'Unknown')
53
+ return f"필터에 μ˜ν•΄ μ°¨λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€ (μ‚¬μœ : {reason}). λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ§ˆλ¬Έν•΄μ£Όμ„Έμš”.", None, None, "Score Error"
54
 
55
  ai_text_raw = res_data['candidates'][0]['content']['parts'][0]['text']
56
 
 
58
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
59
  tab_display = tab_match.group(1).strip() if tab_match else "상세 악보 μ—†μŒ"
60
 
 
61
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
62
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
63
 
 
64
  voice_path = f"/tmp/v_{member_name.split()[0]}.mp3"
65
  await edge_tts.Communicate(clean_text, MEMBERS.get(member_name, "ko-KR-SunHiNeural")).save(voice_path)
66
 
 
67
  music_path = None
68
  if music_match and music_synthesiser:
69
  p = music_match.group(1).strip()
 
73
 
74
  return clean_text, voice_path, music_path, tab_display
75
  except Exception as e:
76
+ return f"Backend Error: {str(e)}", None, None, "Error"
77
 
78
  with gr.Blocks() as demo:
79
  i1 = gr.Textbox(); i2 = gr.Textbox(); i3 = gr.Textbox()