jeongsoo commited on
Commit
cd49bcd
Β·
1 Parent(s): d2839f5
Files changed (1) hide show
  1. app.py +38 -11
app.py CHANGED
@@ -1187,6 +1187,7 @@ class AutoRAGChatApp:
1187
 
1188
  # μŒμ„± 인식 처리 ν•¨μˆ˜
1189
  # app.py λ‚΄ process_audio ν•¨μˆ˜ 보강
 
1190
  def process_audio(audio):
1191
  logger.info("μŒμ„± 인식 처리 μ‹œμž‘...")
1192
  try:
@@ -1202,8 +1203,6 @@ class AutoRAGChatApp:
1202
  # μ˜€λ””μ˜€ 데이터λ₯Ό μž„μ‹œ 파일둜 μ €μž₯
1203
  sr, y = audio
1204
  logger.info(f"μ˜€λ””μ˜€ λ…ΉμŒ 데이터 μˆ˜μ‹ : μƒ˜ν”Œλ ˆμ΄νŠΈ={sr}Hz, 길이={len(y)}μƒ˜ν”Œ")
1205
-
1206
- # μŒμ„±μ΄ λ„ˆλ¬΄ 짧은 경우 체크 (1초 미만)
1207
  if len(y) / sr < 1.0:
1208
  return "λ…ΉμŒλœ μŒμ„±μ΄ λ„ˆλ¬΄ μ§§μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ‹œλ„ν•΄μ£Όμ„Έμš”."
1209
 
@@ -1212,12 +1211,9 @@ class AutoRAGChatApp:
1212
  sf.write(temp_path, y, sr, format="WAV")
1213
  logger.info(f"μž„μ‹œ WAV 파일 μ €μž₯됨: {temp_path}")
1214
 
1215
- # μŒμ„± 인식 μ‹€ν–‰
1216
  # μŒμ„± 인식 μ‹€ν–‰
1217
  stt_client = ClovaSTT()
1218
- with open(temp_path, "rb") as f:
1219
- audio_bytes = f.read()
1220
- result = stt_client.recognize(audio_bytes)
1221
 
1222
  # μž„μ‹œ 파일 μ‚­μ œ
1223
  try:
@@ -1226,7 +1222,6 @@ class AutoRAGChatApp:
1226
  except Exception as e:
1227
  logger.warning(f"μž„μ‹œ 파일 μ‚­μ œ μ‹€νŒ¨: {e}")
1228
 
1229
- # 결과 처리
1230
  if result["success"]:
1231
  recognized_text = result["text"]
1232
  logger.info(f"μŒμ„±μΈμ‹ 성곡: {recognized_text}")
@@ -1243,15 +1238,44 @@ class AutoRAGChatApp:
1243
  logger.error(f"μŒμ„± 처리 쀑 였λ₯˜ λ°œμƒ: {e}", exc_info=True)
1244
  return f"μŒμ„± 처리 쀑 였λ₯˜ λ°œμƒ: {str(e)}"
1245
 
1246
- # 이벀트 ν•Έλ“€λŸ¬ μ„€μ •
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1247
  def update_ui_after_refresh(result):
1248
  return (
1249
  result, # μƒνƒœ λ©”μ‹œμ§€
1250
- self._get_status_message(), # μƒνƒœ λ°•μŠ€ μ—…λ°μ΄νŠΈ
1251
- f"μ‹œμŠ€ν…œ μƒνƒœ: {'μ΄ˆκΈ°ν™”λ¨' if self.is_initialized else 'μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠμŒ'}", # μƒνƒœ 정보 μ—…λ°μ΄νŠΈ
1252
- self._get_cache_info() # μΊμ‹œ 정보 μ—…λ°μ΄νŠΈ
1253
  )
1254
 
 
 
 
 
 
 
 
 
1255
  # μŒμ„± 인식 κ²°κ³Όλ₯Ό 질문 μƒμžμ— μ—…λ°μ΄νŠΈ
1256
  audio_input.stop_recording(
1257
  fn=process_audio,
@@ -1303,6 +1327,9 @@ class AutoRAGChatApp:
1303
  except Exception as e:
1304
  logger.error(f"Gradio μ•± μ‹€ν–‰ 쀑 였λ₯˜ λ°œμƒ: {e}", exc_info=True)
1305
  print(f"Gradio μ•± μ‹€ν–‰ 쀑 였λ₯˜ λ°œμƒ: {e}")
 
 
 
1306
  def _get_status_message(self) -> str:
1307
  """
1308
  ν˜„μž¬ 처리 μƒνƒœ λ©”μ‹œμ§€ 생성
 
1187
 
1188
  # μŒμ„± 인식 처리 ν•¨μˆ˜
1189
  # app.py λ‚΄ process_audio ν•¨μˆ˜ 보강
1190
+ # Gradio μ•± 내에 μžˆλŠ” μŒμ„± 인식 처리 ν•¨μˆ˜ (원본)
1191
  def process_audio(audio):
1192
  logger.info("μŒμ„± 인식 처리 μ‹œμž‘...")
1193
  try:
 
1203
  # μ˜€λ””μ˜€ 데이터λ₯Ό μž„μ‹œ 파일둜 μ €μž₯
1204
  sr, y = audio
1205
  logger.info(f"μ˜€λ””μ˜€ λ…ΉμŒ 데이터 μˆ˜μ‹ : μƒ˜ν”Œλ ˆμ΄νŠΈ={sr}Hz, 길이={len(y)}μƒ˜ν”Œ")
 
 
1206
  if len(y) / sr < 1.0:
1207
  return "λ…ΉμŒλœ μŒμ„±μ΄ λ„ˆλ¬΄ μ§§μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ‹œλ„ν•΄μ£Όμ„Έμš”."
1208
 
 
1211
  sf.write(temp_path, y, sr, format="WAV")
1212
  logger.info(f"μž„μ‹œ WAV 파일 μ €μž₯됨: {temp_path}")
1213
 
 
1214
  # μŒμ„± 인식 μ‹€ν–‰
1215
  stt_client = ClovaSTT()
1216
+ result = stt_client.recognize_file(temp_path)
 
 
1217
 
1218
  # μž„μ‹œ 파일 μ‚­μ œ
1219
  try:
 
1222
  except Exception as e:
1223
  logger.warning(f"μž„μ‹œ 파일 μ‚­μ œ μ‹€νŒ¨: {e}")
1224
 
 
1225
  if result["success"]:
1226
  recognized_text = result["text"]
1227
  logger.info(f"μŒμ„±μΈμ‹ 성곡: {recognized_text}")
 
1238
  logger.error(f"μŒμ„± 처리 쀑 였λ₯˜ λ°œμƒ: {e}", exc_info=True)
1239
  return f"μŒμ„± 처리 쀑 였λ₯˜ λ°œμƒ: {str(e)}"
1240
 
1241
+ # μƒˆλ‘œ μΆ”κ°€ν•  process_audio_and_submit ν•¨μˆ˜
1242
+ def process_audio_and_submit(audio, chat_history):
1243
+ """
1244
+ λ…ΉμŒ μ •μ§€ μ‹œ μŒμ„± 인식 ν›„ μžλ™μœΌλ‘œ μ§ˆλ¬Έμ„ μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜.
1245
+ μž…λ ₯:
1246
+ - audio: λ…ΉμŒ 데이터 (gr.Audio의 κ°’)
1247
+ - chat_history: ν˜„μž¬ λŒ€ν™” 기둝 (gr.Chatbot의 κ°’)
1248
+ 좜λ ₯:
1249
+ - query_box: 빈 λ¬Έμžμ—΄ (질문 μž…λ ₯λž€ μ΄ˆκΈ°ν™”)
1250
+ - chatbot: μ—…λ°μ΄νŠΈλœ λŒ€ν™” 기둝
1251
+ """
1252
+ recognized_text = process_audio(audio)
1253
+
1254
+ # μŒμ„± 인식 κ²°κ³Όκ°€ 였λ₯˜ λ©”μ‹œμ§€μΈ 경우 κ·ΈλŒ€λ‘œ λ°˜ν™˜
1255
+ if not recognized_text or recognized_text.startswith("μŒμ„± 인식 μ‹€νŒ¨") or recognized_text.startswith(
1256
+ "μŒμ„± 처리 쀑 였λ₯˜"):
1257
+ return recognized_text, chat_history
1258
+
1259
+ # μΈμ‹λœ ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 질문 처리
1260
+ return app_instance.process_query(recognized_text, chat_history)
1261
+
1262
+ # κΈ°μ‘΄ update_ui_after_refresh ν•¨μˆ˜ μˆ˜μ • (self λŒ€μ‹  app_instance μ‚¬μš©)
1263
  def update_ui_after_refresh(result):
1264
  return (
1265
  result, # μƒνƒœ λ©”μ‹œμ§€
1266
+ app_instance._get_status_message(), # μƒνƒœ λ°•μŠ€ μ—…λ°μ΄νŠΈ
1267
+ f"μ‹œμŠ€ν…œ μƒνƒœ: {'μ΄ˆκΈ°ν™”λ¨' if app_instance.is_initialized else 'μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠμŒ'}", # μƒνƒœ 정보 μ—…λ°μ΄νŠΈ
1268
+ app_instance._get_cache_info() # μΊμ‹œ 정보 μ—…λ°μ΄νŠΈ
1269
  )
1270
 
1271
+ # --- Gradio 이벀트 ν•Έλ“€λŸ¬ μ„€μ • ---
1272
+ # 예: audio_input μ»΄ν¬λ„ŒνŠΈμ˜ stop_recording 이벀트λ₯Ό μ•„λž˜μ™€ 같이 μˆ˜μ •
1273
+ audio_input.stop_recording(
1274
+ fn=process_audio_and_submit,
1275
+ inputs=[audio_input, chatbot],
1276
+ outputs=[query_box, chatbot]
1277
+ )
1278
+
1279
  # μŒμ„± 인식 κ²°κ³Όλ₯Ό 질문 μƒμžμ— μ—…λ°μ΄νŠΈ
1280
  audio_input.stop_recording(
1281
  fn=process_audio,
 
1327
  except Exception as e:
1328
  logger.error(f"Gradio μ•± μ‹€ν–‰ 쀑 였λ₯˜ λ°œμƒ: {e}", exc_info=True)
1329
  print(f"Gradio μ•± μ‹€ν–‰ 쀑 였λ₯˜ λ°œμƒ: {e}")
1330
+
1331
+
1332
+
1333
  def _get_status_message(self) -> str:
1334
  """
1335
  ν˜„μž¬ 처리 μƒνƒœ λ©”μ‹œμ§€ 생성