jeongsoo commited on
Commit
ff21f8e
ยท
1 Parent(s): 1defd08
Files changed (1) hide show
  1. app/app_routes.py +35 -44
app/app_routes.py CHANGED
@@ -191,6 +191,10 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
191
  @login_required
192
  def chat():
193
  """ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ฑ„๋ด‡ API"""
 
 
 
 
194
  try:
195
  # ์•ฑ์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
196
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
@@ -213,41 +217,33 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
213
  search_results = []
214
  search_warning = None
215
  try:
216
- # retriever ์ƒํƒœ ๊ฒ€์ฆ
217
  if retriever is None:
218
  logger.warning("Retriever๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
219
- # Retriever๊ฐ€ None์ธ ๊ฒฝ์šฐ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
220
- from types import SimpleNamespace
221
- retriever = SimpleNamespace()
222
- retriever.search = lambda q, **kwargs: []
223
- logger.info("์ž„์‹œ retriever ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋นˆ search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€")
224
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
225
  elif hasattr(retriever, 'is_mock') and retriever.is_mock:
226
  logger.info("Mock Retriever ์‚ฌ์šฉ ์ค‘ - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ.")
227
- # search ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ์—†์œผ๋ฉด ์ถ”๊ฐ€
228
- if not hasattr(retriever, 'search'):
229
- retriever.search = lambda q, **kwargs: []
230
- logger.info("Mock retriever์— search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€")
231
  search_warning = "๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๊ฐ€ ์•„์ง ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‘๋‹ต๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค."
232
  elif not hasattr(retriever, 'search'):
233
  logger.warning("Retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
234
- # search ๋ฉ”์†Œ๋“œ ๋™์  ์ถ”๊ฐ€
235
- retriever.search = lambda q, **kwargs: []
236
- logger.info("retriever์— ๋นˆ search ๋ฉ”์†Œ๋“œ ๋™์  ์ถ”๊ฐ€")
237
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
238
  else:
239
  try:
240
  logger.info(f"๊ฒ€์ƒ‰ ์ˆ˜ํ–‰: {query[:50]}...")
241
  # ์˜ค๋ฅ˜ ์‹œ ๋นˆ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ถ”๊ฐ€ try-except ๋ธ”๋ก
242
- try:
243
- search_results = retriever.search(query, top_k=5, first_stage_k=6)
244
- except AttributeError as attr_err:
245
- logger.error(f"retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค: {attr_err}", exc_info=True)
246
- # retriever๊ฐ€ MockComponent๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
247
- # ๋™์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
248
- if not hasattr(retriever, 'search'):
249
- logger.warning("retriever์— search ๋ฉ”์†Œ๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.")
250
- retriever.search = lambda q, **kwargs: []
 
251
  search_results = []
252
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
253
  except Exception as search_err:
@@ -364,6 +360,9 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
364
  @login_required
365
  def voice_chat():
366
  """์Œ์„ฑ ์ฑ— API ์—”๋“œํฌ์ธํŠธ"""
 
 
 
367
  try:
368
  # ์•ฑ์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
369
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
@@ -417,40 +416,32 @@ def register_routes(app, login_required, llm_interface, retriever, stt_client, D
417
  search_results = []
418
  search_warning = None
419
  try:
420
- # retriever ์ƒํƒœ ๊ฒ€์ฆ
421
  if retriever is None:
422
  logger.warning("Retriever๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
423
- # Retriever๊ฐ€ None์ธ ๊ฒฝ์šฐ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
424
- from types import SimpleNamespace
425
- retriever = SimpleNamespace()
426
- retriever.search = lambda q, **kwargs: []
427
- logger.info("์ž„์‹œ retriever ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋นˆ search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€")
428
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
429
  elif hasattr(retriever, 'is_mock') and retriever.is_mock:
430
  logger.info("Mock Retriever ์‚ฌ์šฉ ์ค‘ - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ.")
431
- # search ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ์—†์œผ๋ฉด ์ถ”๊ฐ€
432
- if not hasattr(retriever, 'search'):
433
- retriever.search = lambda q, **kwargs: []
434
- logger.info("Mock retriever์— search ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€")
435
  search_warning = "๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๊ฐ€ ์•„์ง ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‘๋‹ต๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค."
436
  elif not hasattr(retriever, 'search'):
437
  logger.warning("Retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
438
- # search ๋ฉ”์†Œ๋“œ ๋™์  ์ถ”๊ฐ€
439
- retriever.search = lambda q, **kwargs: []
440
- logger.info("retriever์— ๋นˆ search ๋ฉ”์†Œ๋“œ ๋™์  ์ถ”๊ฐ€")
441
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
442
  else:
443
  try:
444
  logger.info(f"๊ฒ€์ƒ‰ ์ˆ˜ํ–‰: {transcription[:50]}...")
445
- try:
446
- search_results = retriever.search(transcription, top_k=5, first_stage_k=6)
447
- except AttributeError as attr_err:
448
- logger.error(f"retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค: {attr_err}", exc_info=True)
449
- # retriever๊ฐ€ MockComponent๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
450
- # ๋™์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
451
- if not hasattr(retriever, 'search'):
452
- logger.warning("retriever์— search ๋ฉ”์†Œ๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.")
453
- retriever.search = lambda q, **kwargs: []
 
454
  search_results = []
455
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
456
  except Exception as search_err:
 
191
  @login_required
192
  def chat():
193
  """ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ฑ„๋ด‡ API"""
194
+ # ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์ „์—ญ retriever ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
195
+ # nonlocal ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์Šค์ฝ”ํ”„์˜ retriever ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ
196
+ nonlocal retriever
197
+
198
  try:
199
  # ์•ฑ์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
200
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
 
217
  search_results = []
218
  search_warning = None
219
  try:
220
+ # retriever ์ƒํƒœ ๊ฒ€์ฆ - ์—ฌ๊ธฐ์„œ retriever ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜
221
  if retriever is None:
222
  logger.warning("Retriever๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
223
+ # retriever๊ฐ€ None์ธ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋งŒ ๊ธฐ๋กํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
 
 
224
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
225
  elif hasattr(retriever, 'is_mock') and retriever.is_mock:
226
  logger.info("Mock Retriever ์‚ฌ์šฉ ์ค‘ - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ.")
227
+ # ์ƒํƒœ ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
 
228
  search_warning = "๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๊ฐ€ ์•„์ง ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‘๋‹ต๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค."
229
  elif not hasattr(retriever, 'search'):
230
  logger.warning("Retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
231
+ # ์ƒํƒœ ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
232
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
233
  else:
234
  try:
235
  logger.info(f"๊ฒ€์ƒ‰ ์ˆ˜ํ–‰: {query[:50]}...")
236
  # ์˜ค๋ฅ˜ ์‹œ ๋นˆ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ถ”๊ฐ€ try-except ๋ธ”๋ก
237
+ # retriever๊ฐ€ ์œ ํšจํ•˜๊ณ  search ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฒ€์ƒ‰ ์‹คํ–‰
238
+ if retriever is not None and hasattr(retriever, 'search'):
239
+ try:
240
+ search_results = retriever.search(query, top_k=5, first_stage_k=6)
241
+ except Exception as search_err:
242
+ logger.error(f"retriever.search() ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {search_err}", exc_info=True)
243
+ search_results = []
244
+ search_warning = f"๊ฒ€์ƒ‰ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(search_err)}"
245
+ else:
246
+ logger.warning("๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: retriever๊ฐ€ None์ด๊ฑฐ๋‚˜ search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
247
  search_results = []
248
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
249
  except Exception as search_err:
 
360
  @login_required
361
  def voice_chat():
362
  """์Œ์„ฑ ์ฑ— API ์—”๋“œํฌ์ธํŠธ"""
363
+ # ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์ „์—ญ retriever ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
364
+ nonlocal retriever
365
+
366
  try:
367
  # ์•ฑ์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
368
  is_ready = app_ready_event.is_set() if isinstance(app_ready_event, threading.Event) else False
 
416
  search_results = []
417
  search_warning = None
418
  try:
419
+ # retriever ์ƒํƒœ ๊ฒ€์ฆ - ์—ฌ๊ธฐ์„œ retriever ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜
420
  if retriever is None:
421
  logger.warning("Retriever๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
422
+ # ์ƒํƒœ ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
 
 
423
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
424
  elif hasattr(retriever, 'is_mock') and retriever.is_mock:
425
  logger.info("Mock Retriever ์‚ฌ์šฉ ์ค‘ - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ.")
426
+ # ์ƒํƒœ ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
 
427
  search_warning = "๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๊ฐ€ ์•„์ง ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‘๋‹ต๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค."
428
  elif not hasattr(retriever, 'search'):
429
  logger.warning("Retriever์— search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
430
+ # ์ƒํƒœ ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
 
 
431
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
432
  else:
433
  try:
434
  logger.info(f"๊ฒ€์ƒ‰ ์ˆ˜ํ–‰: {transcription[:50]}...")
435
+ # retriever๊ฐ€ ์œ ํšจํ•˜๊ณ  search ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฒ€์ƒ‰ ์‹คํ–‰
436
+ if retriever is not None and hasattr(retriever, 'search'):
437
+ try:
438
+ search_results = retriever.search(transcription, top_k=5, first_stage_k=6)
439
+ except Exception as search_err:
440
+ logger.error(f"retriever.search() ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {search_err}", exc_info=True)
441
+ search_results = []
442
+ search_warning = f"๊ฒ€์ƒ‰ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(search_err)}"
443
+ else:
444
+ logger.warning("๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: retriever๊ฐ€ None์ด๊ฑฐ๋‚˜ search ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
445
  search_results = []
446
  search_warning = "๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
447
  except Exception as search_err: