Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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. Проверка специальных случаев
|