jeongsoo commited on
Commit
9f3746a
Β·
1 Parent(s): b0188f6
Files changed (1) hide show
  1. app/app_routes.py +52 -24
app/app_routes.py CHANGED
@@ -200,7 +200,7 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
200
  "error": "μ•± μ΄ˆκΈ°ν™” 쀑...",
201
  "answer": "μ£„μ†‘ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ 아직 μ€€λΉ„ μ€‘μž…λ‹ˆλ‹€.",
202
  "sources": []
203
- }), 503
204
 
205
  data = request.get_json()
206
  if not data or 'query' not in data:
@@ -224,12 +224,18 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
224
  logger.warning("Retriever에 search λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
225
  search_warning = "검색 κΈ°λŠ₯이 ν˜„μž¬ μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
226
  else:
227
- logger.info(f"검색 μˆ˜ν–‰: {query[:50]}...")
228
- search_results = retriever.search(query, top_k=5, first_stage_k=6)
229
- if not search_results:
230
- logger.info("검색 κ²°κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
231
- else:
232
- logger.info(f"검색 κ²°κ³Ό: {len(search_results)}개 ν•­λͺ©")
 
 
 
 
 
 
233
  except Exception as e:
234
  logger.error(f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}", exc_info=True)
235
  search_results = []
@@ -261,15 +267,23 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
261
  logger.error("LLM μΈν„°νŽ˜μ΄μŠ€κ°€ μ€€λΉ„λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ rag_generate λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
262
  answer = "μ£„μ†‘ν•©λ‹ˆλ‹€. ν˜„μž¬ LLM μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€."
263
  else:
264
- # LLM 호좜 전에 κ²½κ³  λ©”μ‹œμ§€ μΆ”κ°€
265
  if search_warning:
266
- modified_query = f"{query}\n\nμ°Έκ³ : {search_warning}"
267
- logger.info(f"κ²½κ³  λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 쿼리 생성: {modified_query[:100]}...")
 
 
268
  else:
269
  modified_query = query
270
 
271
- answer = llm_interface.rag_generate(modified_query, context, llm_id=llm_id)
272
- logger.info(f"LLM 응닡 생성 μ™„λ£Œ (길이: {len(answer)})")
 
 
 
 
 
 
273
 
274
  # μ†ŒμŠ€ 정보 μΆ”μΆœ
275
  sources = []
@@ -328,7 +342,7 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
328
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
329
  if not is_ready:
330
  logger.warning("앱이 아직 μ΄ˆκΈ°ν™” μ€‘μž…λ‹ˆλ‹€.")
331
- return jsonify({"error": "μ•± μ΄ˆκΈ°ν™” 쀑...", "answer": "μ£„μ†‘ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ 아직 μ€€λΉ„ μ€‘μž…λ‹ˆλ‹€."}), 503
332
 
333
  # STT ν΄λΌμ΄μ–ΈνŠΈ 확인
334
  if stt_client is None or not hasattr(stt_client, 'transcribe_audio'):
@@ -387,16 +401,25 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
387
  logger.warning("Retriever에 search λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
388
  search_warning = "검색 κΈ°λŠ₯이 ν˜„μž¬ μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
389
  else:
390
- logger.info(f"검색 μˆ˜ν–‰: {transcription[:50]}...")
391
- search_results = retriever.search(transcription, top_k=5, first_stage_k=6)
392
- if not search_results:
393
- logger.info("검색 κ²°κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
394
- else:
395
- logger.info(f"검색 κ²°κ³Ό: {len(search_results)}개 ν•­λͺ©")
 
 
 
 
 
396
  except Exception as e:
397
  logger.error(f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}", exc_info=True)
398
  search_results = []
399
  search_warning = f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}"
 
 
 
 
400
 
401
  # LLM 응닡 생성
402
  context = ""
@@ -422,15 +445,20 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
422
  logger.error("LLM μΈν„°νŽ˜μ΄μŠ€κ°€ μ€€λΉ„λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ rag_generate λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
423
  answer = "μ£„μ†‘ν•©λ‹ˆλ‹€. ν˜„μž¬ LLM μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€."
424
  else:
425
- # LLM 호좜 전에 κ²½κ³  λ©”μ‹œμ§€ μΆ”κ°€
426
  if search_warning:
427
- modified_query = f"{transcription}\n\nμ°Έκ³ : {search_warning}"
428
- logger.info(f"κ²½κ³  λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 쿼리 생성: {modified_query[:100]}...")
 
429
  else:
430
  modified_query = transcription
431
 
432
- answer = llm_interface.rag_generate(modified_query, context, llm_id=llm_id)
433
- logger.info(f"LLM 응닡 생성 μ™„λ£Œ (길이: {len(answer)})")
 
 
 
 
434
 
435
  # μ†ŒμŠ€ 정보 μΆ”μΆœ
436
  sources = []
 
200
  "error": "μ•± μ΄ˆκΈ°ν™” 쀑...",
201
  "answer": "μ£„μ†‘ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ 아직 μ€€λΉ„ μ€‘μž…λ‹ˆλ‹€.",
202
  "sources": []
203
+ }), 200 # 503 λŒ€μ‹  200으둜 λ³€κ²½ν•˜μ—¬ 앱이 정상 μ‘λ‹΅ν•˜λ„λ‘ 함
204
 
205
  data = request.get_json()
206
  if not data or 'query' not in data:
 
224
  logger.warning("Retriever에 search λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
225
  search_warning = "검색 κΈ°λŠ₯이 ν˜„μž¬ μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
226
  else:
227
+ try:
228
+ logger.info(f"검색 μˆ˜ν–‰: {query[:50]}...")
229
+ # 였λ₯˜ μ‹œ 빈 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” μΆ”κ°€ try-except 블둝
230
+ search_results = retriever.search(query, top_k=5, first_stage_k=6)
231
+ if not search_results:
232
+ logger.info("검색 κ²°κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
233
+ else:
234
+ logger.info(f"검색 κ²°κ³Ό: {len(search_results)}개 ν•­λͺ©")
235
+ except Exception as search_err:
236
+ logger.error(f"retriever.search() 호좜 쀑 였λ₯˜ λ°œμƒ: {search_err}", exc_info=True)
237
+ search_results = []
238
+ search_warning = f"검색 쀑 였λ₯˜ λ°œμƒ: {str(search_err)}"
239
  except Exception as e:
240
  logger.error(f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}", exc_info=True)
241
  search_results = []
 
267
  logger.error("LLM μΈν„°νŽ˜μ΄μŠ€κ°€ μ€€λΉ„λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ rag_generate λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
268
  answer = "μ£„μ†‘ν•©λ‹ˆλ‹€. ν˜„μž¬ LLM μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€."
269
  else:
270
+ # LLM 호좜 μ‹œ 검색 κ²½κ³  처리 μΆ”κ°€
271
  if search_warning:
272
+ # κ²½κ³  λ©”μ‹œμ§€λ₯Ό 쿼리에 μΆ”κ°€ν•˜λŠ” λŒ€μ‹  λ‚΄λΆ€μ μœΌλ‘œ 처리 (μ½˜ν…μΈ λ§Œ 전달)
273
+ logger.info(f"검색 κ²½κ³  있음: {search_warning}")
274
+ # μ›λž˜ 쿼리만 μ‚¬μš©
275
+ modified_query = query
276
  else:
277
  modified_query = query
278
 
279
+ try:
280
+ answer = llm_interface.rag_generate(modified_query, context, llm_id=llm_id)
281
+ logger.info(f"LLM 응닡 생성 μ™„λ£Œ (길이: {len(answer)})")
282
+
283
+ # 검색 κ²½κ³ κ°€ μžˆμ„ 경우, 응닡 μ•žμ— κ²½κ³  λ©”μ‹œμ§€ μΆ”κ°€ 없이 κ·ΈλŒ€λ‘œ λ°˜ν™˜
284
+ except Exception as llm_err:
285
+ logger.error(f"LLM 호좜 쀑 였λ₯˜: {llm_err}", exc_info=True)
286
+ answer = f"μ£„μ†‘ν•©λ‹ˆλ‹€. 응닡 생성 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(llm_err)}"
287
 
288
  # μ†ŒμŠ€ 정보 μΆ”μΆœ
289
  sources = []
 
342
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
343
  if not is_ready:
344
  logger.warning("앱이 아직 μ΄ˆκΈ°ν™” μ€‘μž…λ‹ˆλ‹€.")
345
+ return jsonify({"error": "μ•± μ΄ˆκΈ°ν™” 쀑...", "answer": "μ£„μ†‘ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ 아직 μ€€λΉ„ μ€‘μž…λ‹ˆλ‹€."}), 200 # 503 λŒ€μ‹  200으둜 λ³€κ²½
346
 
347
  # STT ν΄λΌμ΄μ–ΈνŠΈ 확인
348
  if stt_client is None or not hasattr(stt_client, 'transcribe_audio'):
 
401
  logger.warning("Retriever에 search λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
402
  search_warning = "검색 κΈ°λŠ₯이 ν˜„μž¬ μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
403
  else:
404
+ try:
405
+ logger.info(f"검색 μˆ˜ν–‰: {transcription[:50]}...")
406
+ search_results = retriever.search(transcription, top_k=5, first_stage_k=6)
407
+ if not search_results:
408
+ logger.info("검색 κ²°κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
409
+ else:
410
+ logger.info(f"검색 κ²°κ³Ό: {len(search_results)}개 ν•­λͺ©")
411
+ except Exception as search_err:
412
+ logger.error(f"retriever.search() 호좜 쀑 였λ₯˜ λ°œμƒ: {search_err}", exc_info=True)
413
+ search_results = []
414
+ search_warning = f"검색 쀑 였λ₯˜ λ°œμƒ: {str(search_err)}"
415
  except Exception as e:
416
  logger.error(f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}", exc_info=True)
417
  search_results = []
418
  search_warning = f"검색 쀑 였λ₯˜ λ°œμƒ: {str(e)}"
419
+ except Exception as e:
420
+ logger.error(f"검색 μ—”μ§„ μ ‘κ·Ό 쀑 였λ₯˜ λ°œμƒ: {str(e)}", exc_info=True)
421
+ search_results = []
422
+ search_warning = f"검색 μ—”μ§„ μ ‘κ·Ό 쀑 였λ₯˜ λ°œμƒ: {str(e)}"
423
 
424
  # LLM 응닡 생성
425
  context = ""
 
445
  logger.error("LLM μΈν„°νŽ˜μ΄μŠ€κ°€ μ€€λΉ„λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ rag_generate λ©”μ†Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.")
446
  answer = "μ£„μ†‘ν•©λ‹ˆλ‹€. ν˜„μž¬ LLM μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€."
447
  else:
448
+ # LLM 호좜 μ‹œ 검색 κ²½κ³  처리 μΆ”κ°€
449
  if search_warning:
450
+ logger.info(f"검색 κ²½κ³  있음: {search_warning}")
451
+ # μ›λž˜ 쿼리만 μ‚¬μš©
452
+ modified_query = transcription
453
  else:
454
  modified_query = transcription
455
 
456
+ try:
457
+ answer = llm_interface.rag_generate(modified_query, context, llm_id=llm_id)
458
+ logger.info(f"LLM 응닡 생성 μ™„λ£Œ (길이: {len(answer)})")
459
+ except Exception as llm_err:
460
+ logger.error(f"LLM 호좜 쀑 였λ₯˜: {llm_err}", exc_info=True)
461
+ answer = f"μ£„μ†‘ν•©λ‹ˆλ‹€. 응닡 생성 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(llm_err)}"
462
 
463
  # μ†ŒμŠ€ 정보 μΆ”μΆœ
464
  sources = []