ekaterina-simonova commited on
Commit
bc63e48
·
verified ·
1 Parent(s): 8e79d28

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -0
app.py CHANGED
@@ -512,7 +512,76 @@ def load_data():
512
  except Exception as e:
513
  logger.error(f"Ошибка загрузки XLSX файла: {e}")
514
  return pd.DataFrame()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
 
 
 
 
 
 
 
 
 
 
 
516
  # Поиск ответа
517
  def get_answer(question):
518
  # 1. Проверка специальных случаев
 
512
  except Exception as e:
513
  logger.error(f"Ошибка загрузки XLSX файла: {e}")
514
  return pd.DataFrame()
515
+ @st.cache_data
516
+ @st.cache_data
517
+ def load_models():
518
+ """Загрузка моделей с расширенной проверкой BM25"""
519
+ try:
520
+ logger.info("="*80)
521
+ logger.info(f"Начало загрузки модели: {EMBEDDING_MODEL}")
522
+
523
+ # 1. Загрузка SentenceTransformer
524
+ start_time = time.time()
525
+ model = SentenceTransformer(
526
+ EMBEDDING_MODEL,
527
+ device='cpu',
528
+ cache_folder=os.path.expanduser("~/.cache/huggingface/hub")
529
+ )
530
+ logger.info(f"Модель загружена за {time.time()-start_time:.2f} сек")
531
+ logger.info(f"Размерность эмбеддингов: {model.get_sentence_embedding_dimension()}")
532
+
533
+ # 2. Загрузка FAISS индекса
534
+ logger.info(f"Загрузка FAISS индекса: {FAISS_INDEX_PATH}")
535
+ if not os.path.exists(FAISS_INDEX_PATH):
536
+ error_msg = f"Индекс не найден: {FAISS_INDEX_PATH}"
537
+ logger.error(error_msg)
538
+ raise FileNotFoundError(error_msg)
539
+
540
+ faiss_index = faiss.read_index(FAISS_INDEX_PATH)
541
+ logger.info(f"Индекс загружен (размерность: {faiss_index.d}, векторов: {faiss_index.ntotal})")
542
+
543
+ # 3. Инициализация гибридного поиска (BM25)
544
+ logger.info(f"Инициализация гибридного поиска: {VECTOR_DB_PATH}")
545
+
546
+ # Проверка существования файла БД для BM25
547
+ if not os.path.exists(VECTOR_DB_PATH):
548
+ logger.error(f"Файл базы данных для BM25 не найден: {VECTOR_DB_PATH}")
549
+ st.error(f"Файл базы данных для BM25 не найден: {VECTOR_DB_PATH}")
550
+ return model, faiss_index, None
551
+
552
+ # Проверка размера файла БД
553
+ db_size = os.path.getsize(VECTOR_DB_PATH)
554
+ logger.info(f"Размер файла БД: {db_size} байт")
555
+ if db_size == 0:
556
+ logger.error("Файл базы данных пуст!")
557
+ st.error("Файл базы данных пуст!")
558
+ return model, faiss_index, None
559
+
560
+ hybrid_search = HybridSearch(VECTOR_DB_PATH)
561
+
562
+ if hybrid_search and hybrid_search.bm25:
563
+ logger.info(f"BM25 успешно инициализирован! Документов: {len(hybrid_search.corpus)}")
564
+
565
+ # Тестовый поиск для проверки
566
+ test_query = "метрология"
567
+ test_results = hybrid_search.search(test_query)
568
+ logger.info(f"Тестовый поиск по '{test_query}' вернул {len(test_results)} результатов")
569
+ else:
570
+ logger.error("Не удалось инициализировать BM25!")
571
+ st.error("Не удалось инициализировать текстовый поиск (BM25)")
572
+
573
+ return model, faiss_index, hybrid_search
574
 
575
+ except Exception as e:
576
+ logger.critical(f"Фатальная ошибка при загрузке: {str(e)}", exc_info=True)
577
+ st.error("""
578
+ Критическая ошибка инициализации системы. Проверьте:
579
+ 1. Наличие всех файлов данных
580
+ 2. Логи в model_loading.log
581
+ 3. Доступ к интернету для загрузки моделей
582
+ """)
583
+ raise
584
+
585
  # Поиск ответа
586
  def get_answer(question):
587
  # 1. Проверка специальных случаев