benjamin5607 commited on
Commit
a23a872
ยท
verified ยท
1 Parent(s): 62d9ce3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -15
app.py CHANGED
@@ -32,9 +32,9 @@ class ModelManager:
32
  cls._music_pipeline = pipeline("text-to-audio", "facebook/musicgen-small", device="cpu")
33
  return cls._music_pipeline
34
 
35
- # ํŽ˜๋ฅด์†Œ๋‚˜ ๋ฐ ๋ฉค๋ฒ„ ๋งต (๊ธฐ์กด ์œ ์ง€)
36
  PERSONA_MAP = {
37
- "์„œ์œค (Korea)": "์„œ์ •์ ์ด๋ฉด์„œ๋„ ๊ฐ•๋ ฌํ•œ K-Rock ๋ฆฌ๋”. ์ง„์ง€ํ•˜๊ณ  ๋”ฐ๋œปํ•˜๊ฒŒ ์กฐ์–ธํ•จ.",
38
  "Chloe (USA)": "์ž์œ ๋ถ„๋ฐฉํ•œ ์บ˜๋ฆฌํฌ๋‹ˆ์•„ ํŽ‘ํฌ ๋ฝ์Šคํƒ€. ๊ฑฐ์นจ์—†๊ณ  ์ฟจํ•˜๋ฉฐ ์—๋„ˆ์ œํ‹ฑํ•œ ๋งํˆฌ.",
39
  "Naomi (Japan)": "์™„๋ฒฝ์ฃผ์˜ J-Rock ๊ธฐํƒ€๋ฆฌ์ŠคํŠธ. ์„ฌ์„ธํ•˜๊ณ  ์˜ˆ์˜ ๋ฐ”๋ฅด๋ฉฐ ์Œ์•… ์ด๋ก ์— ๋‚ ์นด๋กœ์›€.",
40
  "Beatrice (Brazil)": "์—ด์ •์ ์ธ ์‚ผ๋ฐ” ๋ฝ์ปค. ๊ธ์ •์ ์ด๊ณ  ๋ฆฌ๋“ฌ๊ฐ์ด ๋„˜์น˜๋ฉฐ ์ธ์ƒ์˜ ์ฆ๊ฑฐ์›€์„ ๊ฐ•์กฐํ•จ.",
@@ -44,6 +44,7 @@ PERSONA_MAP = {
44
  "Sophie (France)": "์˜ˆ์ˆ ์  ์ž์กด์‹ฌ์ด ๊ฐ•ํ•œ ์•„๋ฐฉ๊ฐ€๋ฅด๋“œ ๋ฝ์ปค. ์‹œ์ ์ด๊ณ  ์„ธ๋ จ๋œ ํ‘œํ˜„์„ ์ฆ๊ฒจ ์”€."
45
  }
46
 
 
47
  LANG_MEMBER_MAP = {
48
  "Korean": {"name": "์„œ์œค (Korea)", "voice": "ko-KR-SunHiNeural"},
49
  "English": {"name": "Chloe (USA)", "voice": "en-US-AriaNeural"},
@@ -64,18 +65,15 @@ async def band_consulting(user_input, selected_lang, g_inst, b_inst, d_inst, cho
64
  m_info = LANG_MEMBER_MAP.get(selected_lang, LANG_MEMBER_MAP["Korean"])
65
  persona = PERSONA_MAP.get(m_info['name'], "์—ด์ •์ ์ธ ๋ฝ์Šคํƒ€")
66
 
67
- # [์ง€์‹œ ์ˆ˜์ •] ๋ณธ๋ฌธ์€ 5์ค„ ์ด๋‚ด ์š”์•ฝ, ๋‚˜๋จธ์ง€๋Š” [TAB] ์„น์…˜์— ํ†ตํ•ฉ
68
  system_prompt = f"""You are the rock star '{m_info['name']}'. Respond ONLY in {selected_lang}.
69
  Persona: {persona}.
70
 
71
  CRITICAL RULES:
72
- 1. MAIN ADVICE: Summarize your advice in exactly 3 to 5 sentences. This will be shown in the main chat.
73
- 2. [TAB] SECTION: This is where you provide all long, detailed explanations.
74
- - Explain the theory, chord progression, and tips in detail here.
75
- - Must include Drum patterns (e.g., H|x-x-x-x| S|--o---o-|).
76
- - Must include Guitar Solo Tab with fret numbers (e.g., e|--12-15-12--|).
77
- 3. [TRANSLATION]: English translation of your 3-5 sentence advice only.
78
- 4. [MUSIC]: English prompt for MusicGen: Guitar:{g_inst}, Bass:{b_inst}, Drums:{d_inst}, Chords:{chords}
79
  """
80
 
81
  ai_text_raw = ""
@@ -87,7 +85,8 @@ async def band_consulting(user_input, selected_lang, g_inst, b_inst, d_inst, cho
87
  model="llama-3.3-70b-versatile"
88
  )
89
  ai_text_raw = res.choices[0].message.content
90
- except: pass
 
91
 
92
  if not ai_text_raw:
93
  qwen = ModelManager.get_qwen()
@@ -95,6 +94,7 @@ async def band_consulting(user_input, selected_lang, g_inst, b_inst, d_inst, cho
95
  out = qwen(input_t, max_new_tokens=1024)
96
  ai_text_raw = out[0]['generated_text'].split("assistant\n")[-1]
97
 
 
98
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL | re.IGNORECASE)
99
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
100
  trans_match = re.search(r'\[TRANSLATION\](.*?)(\[|$)', ai_text_raw, re.DOTALL | re.IGNORECASE)
@@ -102,17 +102,19 @@ async def band_consulting(user_input, selected_lang, g_inst, b_inst, d_inst, cho
102
  tab_display = tab_match.group(1).strip() if tab_match else "No Detailed Data"
103
  eng_translation = trans_match.group(1).strip() if trans_match else ""
104
 
105
- # TTS ์Œ์„ฑ์—์„œ ๋ฒˆ์—ญ๋ฌธ ์ œ์™ธ ๋กœ์ง ๊ฐ•ํ™”
106
  speech_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL | re.IGNORECASE)
107
  speech_text = re.sub(r'\[MUSIC:.*?\]', '', speech_text, flags=re.IGNORECASE)
108
  speech_text = re.sub(r'\[TRANSLATION\].*?(\[|$)', '', speech_text, flags=re.DOTALL | re.IGNORECASE).strip()
109
 
 
110
  tts_text = re.sub(r'[\*\#\-\_\~\|]', '', speech_text)
111
  communicate = edge_tts.Communicate(tts_text, m_info["voice"])
112
  await communicate.save(voice_path)
113
 
 
114
  music_gen = ModelManager.get_music()
115
- music_p = music_match.group(1).strip() if music_match else "rock"
116
  music_output = music_gen(music_p, forward_params={"max_new_tokens": 512})
117
  audio_data = np.squeeze(music_output["audio"])
118
  audio_int16 = (audio_data * 32767).astype(np.int16)
@@ -121,11 +123,18 @@ async def band_consulting(user_input, selected_lang, g_inst, b_inst, d_inst, cho
121
  return speech_text, voice_path, music_path, tab_display, eng_translation
122
 
123
  except Exception as e:
124
- return f"Error: {str(e)}", None, None, "No Data", "Error"
 
125
 
126
  with gr.Blocks() as demo:
127
  inputs = [gr.Textbox(visible=False) for _ in range(6)]
128
- outputs = [gr.Textbox(visible=False), gr.Audio(visible=False), gr.Audio(visible=False), gr.Textbox(visible=False), gr.Textbox(visible=False)]
 
 
 
 
 
 
129
  btn = gr.Button("API", visible=False)
130
  btn.click(band_consulting, inputs, outputs, api_name="predict")
131
 
 
32
  cls._music_pipeline = pipeline("text-to-audio", "facebook/musicgen-small", device="cpu")
33
  return cls._music_pipeline
34
 
35
+ # ๋ฉค๋ฒ„๋ณ„ ๊ณ ์œ  ์„ฑ๊ฒฉ/๋งํˆฌ ํŽ˜๋ฅด์†Œ๋‚˜
36
  PERSONA_MAP = {
37
+ "์„œ์œค (Korea)": "์„œ์ •์ ์ด๋ฉด์„œ๋„ ๊ฐ•๋ ฌํ•œ K-Rock ๋ฆฌ๋”. ์ง„์ง€ํ•˜๊ณ  ์ฒ ํ•™์ ์ด๋ฉฐ ๋”ฐ๋œปํ•˜๊ฒŒ ์กฐ์–ธํ•จ.",
38
  "Chloe (USA)": "์ž์œ ๋ถ„๋ฐฉํ•œ ์บ˜๋ฆฌํฌ๋‹ˆ์•„ ํŽ‘ํฌ ๋ฝ์Šคํƒ€. ๊ฑฐ์นจ์—†๊ณ  ์ฟจํ•˜๋ฉฐ ์—๋„ˆ์ œํ‹ฑํ•œ ๋งํˆฌ.",
39
  "Naomi (Japan)": "์™„๋ฒฝ์ฃผ์˜ J-Rock ๊ธฐํƒ€๋ฆฌ์ŠคํŠธ. ์„ฌ์„ธํ•˜๊ณ  ์˜ˆ์˜ ๋ฐ”๋ฅด๋ฉฐ ์Œ์•… ์ด๋ก ์— ๋‚ ์นด๋กœ์›€.",
40
  "Beatrice (Brazil)": "์—ด์ •์ ์ธ ์‚ผ๋ฐ” ๋ฝ์ปค. ๊ธ์ •์ ์ด๊ณ  ๋ฆฌ๋“ฌ๊ฐ์ด ๋„˜์น˜๋ฉฐ ์ธ์ƒ์˜ ์ฆ๊ฑฐ์›€์„ ๊ฐ•์กฐํ•จ.",
 
44
  "Sophie (France)": "์˜ˆ์ˆ ์  ์ž์กด์‹ฌ์ด ๊ฐ•ํ•œ ์•„๋ฐฉ๊ฐ€๋ฅด๋“œ ๋ฝ์ปค. ์‹œ์ ์ด๊ณ  ์„ธ๋ จ๋œ ํ‘œํ˜„์„ ์ฆ๊ฒจ ์”€."
45
  }
46
 
47
+ # ์–ธ์–ด๋ณ„ ๋ฉค๋ฒ„/๋ณด์ด์Šค ๋งคํ•‘
48
  LANG_MEMBER_MAP = {
49
  "Korean": {"name": "์„œ์œค (Korea)", "voice": "ko-KR-SunHiNeural"},
50
  "English": {"name": "Chloe (USA)", "voice": "en-US-AriaNeural"},
 
65
  m_info = LANG_MEMBER_MAP.get(selected_lang, LANG_MEMBER_MAP["Korean"])
66
  persona = PERSONA_MAP.get(m_info['name'], "์—ด์ •์ ์ธ ๋ฝ์Šคํƒ€")
67
 
68
+ # ๋ณธ๋ฌธ ์š”์•ฝ ๋ฐ ์ƒ์„ธ ํƒญ ๋ถ„๋ฆฌ ์ง€์‹œ ํ”„๋กฌํ”„ํŠธ
69
  system_prompt = f"""You are the rock star '{m_info['name']}'. Respond ONLY in {selected_lang}.
70
  Persona: {persona}.
71
 
72
  CRITICAL RULES:
73
+ 1. MAIN ADVICE: Provide exactly 3 to 5 deep, soulful sentences for the main chat.
74
+ 2. [TAB] SECTION: Put ALL long explanations, music theory, Drum patterns (e.g., H|x-x-x-x| S|--o---o-|), and detailed Guitar Solo tabs here. This must be very technical and professional.
75
+ 3. [TRANSLATION]: English translation of your 3-5 sentence MAIN ADVICE only.
76
+ 4. [MUSIC]: English prompt for MusicGen reflecting: Guitar:{g_inst}, Bass:{b_inst}, Drums:{d_inst}, Chords:{chords}
 
 
 
77
  """
78
 
79
  ai_text_raw = ""
 
85
  model="llama-3.3-70b-versatile"
86
  )
87
  ai_text_raw = res.choices[0].message.content
88
+ except Exception as e:
89
+ print(f"Groq Error: {e}")
90
 
91
  if not ai_text_raw:
92
  qwen = ModelManager.get_qwen()
 
94
  out = qwen(input_t, max_new_tokens=1024)
95
  ai_text_raw = out[0]['generated_text'].split("assistant\n")[-1]
96
 
97
+ # ํŒŒ์‹ฑ ๋กœ์ง
98
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL | re.IGNORECASE)
99
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
100
  trans_match = re.search(r'\[TRANSLATION\](.*?)(\[|$)', ai_text_raw, re.DOTALL | re.IGNORECASE)
 
102
  tab_display = tab_match.group(1).strip() if tab_match else "No Detailed Data"
103
  eng_translation = trans_match.group(1).strip() if trans_match else ""
104
 
105
+ # ์Œ์„ฑ์—์„œ ๋ฒˆ์—ญ๋ฌธ/ํƒญ/์Œ์•…ํ”„๋กฌํ”„ํŠธ ์™„๋ฒฝ ์ œ๊ฑฐ
106
  speech_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL | re.IGNORECASE)
107
  speech_text = re.sub(r'\[MUSIC:.*?\]', '', speech_text, flags=re.IGNORECASE)
108
  speech_text = re.sub(r'\[TRANSLATION\].*?(\[|$)', '', speech_text, flags=re.DOTALL | re.IGNORECASE).strip()
109
 
110
+ # TTS ์ƒ์„ฑ
111
  tts_text = re.sub(r'[\*\#\-\_\~\|]', '', speech_text)
112
  communicate = edge_tts.Communicate(tts_text, m_info["voice"])
113
  await communicate.save(voice_path)
114
 
115
+ # MusicGen ์Œ์•… ์ƒ์„ฑ
116
  music_gen = ModelManager.get_music()
117
+ music_p = music_match.group(1).strip() if music_match else "rock music"
118
  music_output = music_gen(music_p, forward_params={"max_new_tokens": 512})
119
  audio_data = np.squeeze(music_output["audio"])
120
  audio_int16 = (audio_data * 32767).astype(np.int16)
 
123
  return speech_text, voice_path, music_path, tab_display, eng_translation
124
 
125
  except Exception as e:
126
+ print(f"Final Error: {e}")
127
+ return f"๋ฐด๋“œ ์‹œ์Šคํ…œ ์—๋Ÿฌ: {str(e)}", None, None, "No Data", "Error occurred"
128
 
129
  with gr.Blocks() as demo:
130
  inputs = [gr.Textbox(visible=False) for _ in range(6)]
131
+ outputs = [
132
+ gr.Textbox(visible=False),
133
+ gr.Audio(visible=False),
134
+ gr.Audio(visible=False),
135
+ gr.Textbox(visible=False),
136
+ gr.Textbox(visible=False)
137
+ ]
138
  btn = gr.Button("API", visible=False)
139
  btn.click(band_consulting, inputs, outputs, api_name="predict")
140