benjamin5607 commited on
Commit
4f60ef0
Β·
verified Β·
1 Parent(s): c895cf8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -12
app.py CHANGED
@@ -78,20 +78,25 @@ async def band_consulting(user_input, member_name, consult_category):
78
  try:
79
  member = MEMBERS.get(member_name, MEMBERS["μ„œμœ€ (Korea)"])
80
 
81
- # β˜… μ–Έμ–΄ κ²°μ • 둜직 (λΆ„μ•Ό ν…μŠ€νŠΈλ₯Ό λΆ„μ„ν•΄μ„œ μ˜μ–΄μΈμ§€ νŒλ‹¨)
82
- target_lang = "English" if "English" in consult_category or member_name != "μ„œμœ€ (Korea)" else "Korean"
83
- # (μ°Έκ³ : script.jsμ—μ„œ 보낸 category ν…μŠ€νŠΈμ— 따라 νŒλ‹¨ν•˜λ„λ‘ 둜직 보강)
84
 
85
  system_instruction = f"""
86
  {member['prompt']}
87
- [IMPORTANT] YOU MUST RESPOND ENTIRELY IN THE CHOSEN LANGUAGE: {consult_category.split('(')[0]}
 
 
 
 
 
 
88
 
89
  쑰언을 μ œκ³΅ν•œ λ’€ λ°˜λ“œμ‹œ λ§ˆμ§€λ§‰μ— λ‹€μŒ ν˜•μ‹μ„ ν¬ν•¨ν•˜μ„Έμš”:
90
  1. [TAB]: μŒμ•…μ˜ κ°„λ‹¨ν•œ μ½”λ“œ μ§„ν–‰μ΄λ‚˜ ν…μŠ€νŠΈ 악보λ₯Ό κ·Έλ¦¬μ„Έμš”.
91
  2. [MUSIC]: 뢄야와 μ–΄μšΈλ¦¬λŠ” 고음질 μŒμ•… ν”„λ‘¬ν”„νŠΈλ₯Ό μ˜μ–΄λ‘œ μž‘μ„±ν•˜μ„Έμš”.
92
  """
93
 
94
- # Gemini API 호좜
95
  url = f"https://generativelanguage.googleapis.com/v1beta/models/{ACTIVE_MODEL}:generateContent?key={GENAI_KEY}"
96
  payload = {"contents": [{"parts": [{"text": f"{system_instruction}\n질문: {user_input}"}]}]}
97
  res = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})
@@ -101,26 +106,20 @@ async def band_consulting(user_input, member_name, consult_category):
101
 
102
  ai_text_raw = res.json()['candidates'][0]['content']['parts'][0]['text']
103
 
104
- # 악보([TAB]) 및 μŒμ•… λͺ…λ Ή([MUSIC]) μΆ”μΆœ
105
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL)
106
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
107
-
108
  tab_display = tab_match.group(1).strip() if tab_match else "No Score Available"
109
 
110
- # ν…μŠ€νŠΈ μ •μ œ 및 μŒμ„± 필터링 (특수문자 μ œκ±°ν•˜μ—¬ μ„œμœ€μ΄κ°€ 읽지 μ•Šκ²Œ 함)
111
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
112
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
113
  tts_text = re.sub(r'[\*\#\-\_\~]', '', clean_text)
114
 
115
- # 6. λͺ©μ†Œλ¦¬(TTS) 생성
116
  voice_path = f"/tmp/v_{member_name.replace(' ', '_')}.mp3"
117
  await edge_tts.Communicate(tts_text, member['voice']).save(voice_path)
118
 
119
- # 7. μŒμ•…(MusicGen) 생성 (음질 보정 트릭)
120
  music_path = None
121
  if music_match and music_synthesiser:
122
  music_p = music_match.group(1).strip() + ", high quality, studio recording, power rock, intense drums"
123
- # guidance_scale=4.5둜 λ†’μ—¬ 음질 및 ν”„λ‘¬ν”„νŠΈ 정확도 ν–₯상
124
  music_output = music_synthesiser(music_p, forward_params={"max_new_tokens": 512, "guidance_scale": 4.5, "do_sample": True})
125
  music_path = f"/tmp/m_{member_name.replace(' ', '_')}.wav"
126
  scipy.io.wavfile.write(music_path, music_output["sampling_rate"], music_output["audio"][0].T)
@@ -128,7 +127,7 @@ async def band_consulting(user_input, member_name, consult_category):
128
  return clean_text, voice_path, music_path, tab_display
129
 
130
  except Exception as e:
131
- print(f"❌ Error in band_consulting: {e}")
132
  return f"λ°΄λ“œ μ‹œμŠ€ν…œ 였λ₯˜: {str(e)}", None, None, "Error"
133
 
134
  # 8. Gradio μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ (API용)
 
78
  try:
79
  member = MEMBERS.get(member_name, MEMBERS["μ„œμœ€ (Korea)"])
80
 
81
+ # β˜… μ–Έμ–΄ κ²°μ • 둜직 보강: μΉ΄ν…Œκ³ λ¦¬ ν…μŠ€νŠΈμ—μ„œ μ–Έμ–΄ 정보λ₯Ό ν™•μ‹€νžˆ μΆ”μΆœ
82
+ # 예: "πŸ‡ΊπŸ‡Έ English (Global Random 🎲) / Guitar" -> "English"
83
+ requested_lang = "English" if "English" in consult_category else "Korean"
84
 
85
  system_instruction = f"""
86
  {member['prompt']}
87
+
88
+ [CRITICAL RULE]
89
+ The user wants to consult in {requested_lang}.
90
+ Regardless of your origin, you MUST respond ENTIRELY in {requested_lang}.
91
+ Do not use your native language if it's different from {requested_lang}.
92
+
93
+ [Current Category: {consult_category}]
94
 
95
  쑰언을 μ œκ³΅ν•œ λ’€ λ°˜λ“œμ‹œ λ§ˆμ§€λ§‰μ— λ‹€μŒ ν˜•μ‹μ„ ν¬ν•¨ν•˜μ„Έμš”:
96
  1. [TAB]: μŒμ•…μ˜ κ°„λ‹¨ν•œ μ½”λ“œ μ§„ν–‰μ΄λ‚˜ ν…μŠ€νŠΈ 악보λ₯Ό κ·Έλ¦¬μ„Έμš”.
97
  2. [MUSIC]: 뢄야와 μ–΄μšΈλ¦¬λŠ” 고음질 μŒμ•… ν”„λ‘¬ν”„νŠΈλ₯Ό μ˜μ–΄λ‘œ μž‘μ„±ν•˜μ„Έμš”.
98
  """
99
 
 
100
  url = f"https://generativelanguage.googleapis.com/v1beta/models/{ACTIVE_MODEL}:generateContent?key={GENAI_KEY}"
101
  payload = {"contents": [{"parts": [{"text": f"{system_instruction}\n질문: {user_input}"}]}]}
102
  res = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})
 
106
 
107
  ai_text_raw = res.json()['candidates'][0]['content']['parts'][0]['text']
108
 
 
109
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL)
110
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
 
111
  tab_display = tab_match.group(1).strip() if tab_match else "No Score Available"
112
 
 
113
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
114
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
115
  tts_text = re.sub(r'[\*\#\-\_\~]', '', clean_text)
116
 
 
117
  voice_path = f"/tmp/v_{member_name.replace(' ', '_')}.mp3"
118
  await edge_tts.Communicate(tts_text, member['voice']).save(voice_path)
119
 
 
120
  music_path = None
121
  if music_match and music_synthesiser:
122
  music_p = music_match.group(1).strip() + ", high quality, studio recording, power rock, intense drums"
 
123
  music_output = music_synthesiser(music_p, forward_params={"max_new_tokens": 512, "guidance_scale": 4.5, "do_sample": True})
124
  music_path = f"/tmp/m_{member_name.replace(' ', '_')}.wav"
125
  scipy.io.wavfile.write(music_path, music_output["sampling_rate"], music_output["audio"][0].T)
 
127
  return clean_text, voice_path, music_path, tab_display
128
 
129
  except Exception as e:
130
+ print(f"❌ Error: {e}")
131
  return f"λ°΄λ“œ μ‹œμŠ€ν…œ 였λ₯˜: {str(e)}", None, None, "Error"
132
 
133
  # 8. Gradio μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ (API용)