ekaterina-simonova commited on
Commit
0330944
·
verified ·
1 Parent(s): 6c1e923

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -7
app.py CHANGED
@@ -1,6 +1,5 @@
1
  import streamlit as st
2
  import pandas as pd
3
- from datetime import datetime
4
  import json
5
  import os
6
  import logging
@@ -335,6 +334,41 @@ def load_models():
335
  """)
336
  raise
337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  # Подключение к SQLite базе
339
  def get_db_connection(db_path):
340
  try:
@@ -628,7 +662,7 @@ def get_answer(question):
628
  return answer
629
 
630
  # 5. Ответ по умолчанию
631
- answer = "К сожалению, не удалось найти точный ответ в базе знаний. Попробуйте переформулировать вопрос."
632
  save_log(question, answer)
633
  return answer
634
 
@@ -710,18 +744,48 @@ if st.sidebar.button("Запустить диагностику BM25"):
710
  st.write(f"'{test_question}'")
711
 
712
  try:
713
- results = hybrid_search.search(test_question, top_k=5) if hybrid_search else []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
 
715
  if not results:
716
- st.write("Не найдено результатов или BM25 не инициализирован")
 
 
717
  else:
 
718
  for i, res in enumerate(results, 1):
719
- st.write(f"#### Результат {i} (оценка: {res['score']:.2f})")
 
 
 
 
 
 
720
  st.write(f"**Текст:** {res['text']}")
721
- st.write(f"**Источник:** {res['source']}")
722
  st.write("---")
 
723
  except Exception as e:
724
- st.error(f"Ошибка при диагностике BM25: {e}")
 
 
725
 
726
  # Проверка содержимого SQLite базы
727
  if st.sidebar.button("Проверить SQLite на наличие термина"):
 
1
  import streamlit as st
2
  import pandas as pd
 
3
  import json
4
  import os
5
  import logging
 
334
  """)
335
  raise
336
 
337
+ def run_bm25_diagnostic(hybrid_search, question, top_k=5):
338
+ """Отдельная функция для диагностики BM25 с явной передачей hybrid_search"""
339
+ try:
340
+ logger.info(f"Запуск диагностики BM25 для вопроса: '{question}'")
341
+
342
+ if not hybrid_search:
343
+ error_msg = "Гибридный поиск (hybrid_search) не инициализирован"
344
+ logger.error(error_msg)
345
+ raise ValueError(error_msg)
346
+
347
+ if not hybrid_search.bm25:
348
+ error_msg = "BM25 не был создан при инициализации HybridSearch"
349
+ logger.error(error_msg)
350
+ raise ValueError(error_msg)
351
+
352
+ # Запуск поиска с подробным логированием
353
+ logger.info(f"Поиск BM25 с top_k={top_k}")
354
+ results = hybrid_search.search(question, top_k=top_k)
355
+
356
+ if not results:
357
+ logger.info("BM25 вернул 0 результатов (возможно, низкие оценки)")
358
+ else:
359
+ logger.info(f"Найдено результатов BM25: {len(results)}")
360
+ for i, res in enumerate(results, 1):
361
+ logger.info(
362
+ f"Результат #{i}: Оценка={res['score']:.2f}, "
363
+ f"Тип={res.get('type', 'unknown')}, "
364
+ f"Текст={res['text'][:50]}..."
365
+ )
366
+
367
+ return results
368
+ except Exception as e:
369
+ logger.error(f"Ошибка в run_bm25_diagnostic: {str(e)}", exc_info=True)
370
+ raise
371
+
372
  # Подключение к SQLite базе
373
  def get_db_connection(db_path):
374
  try:
 
662
  return answer
663
 
664
  # 5. Ответ по умолчанию
665
+ answer = "К сожалению, не удалось найти точный ответ. Попробуйте переформулировать вопрос."
666
  save_log(question, answer)
667
  return answer
668
 
 
744
  st.write(f"'{test_question}'")
745
 
746
  try:
747
+ # Логирование начала диагностики
748
+ logger.info(f"Запущена диагностика BM25 для вопроса: '{test_question}'")
749
+
750
+ # Проверка инициализации
751
+ if not hybrid_search:
752
+ error_msg = "HybridSearch не инициализирован!"
753
+ logger.error(error_msg)
754
+ st.error(error_msg)
755
+ st.stop()
756
+
757
+ if not hybrid_search.bm25:
758
+ error_msg = "BM25 не был инициализирован в HybridSearch!"
759
+ logger.error(error_msg)
760
+ st.error(error_msg)
761
+ st.stop()
762
+
763
+ # Выполнение поиска
764
+ results = hybrid_search.search(test_question, top_k=5)
765
+ logger.info(f"Найдено результатов BM25: {len(results)}")
766
 
767
  if not results:
768
+ msg = "BM25 не вернул результатов (возможно, низкие оценки совпадения)"
769
+ logger.warning(msg)
770
+ st.warning(msg)
771
  else:
772
+ st.success(f"Найдено результатов: {len(results)}")
773
  for i, res in enumerate(results, 1):
774
+ logger.info(
775
+ f"Результат {i}: Оценка={res['score']:.2f}, "
776
+ f"Тип={res.get('type', 'unknown')}, "
777
+ f"Текст={res['text'][:50]}..."
778
+ )
779
+
780
+ st.markdown(f"#### Результат {i} (оценка: {res['score']:.2f})")
781
  st.write(f"**Текст:** {res['text']}")
782
+ st.write(f"**Источник:** {res.get('source', 'нет данных')}")
783
  st.write("---")
784
+
785
  except Exception as e:
786
+ error_msg = f"Критическая ошибка при диагностике BM25: {str(e)}"
787
+ logger.exception(error_msg)
788
+ st.error(error_msg)
789
 
790
  # Проверка содержимого SQLite базы
791
  if st.sidebar.button("Проверить SQLite на наличие термина"):