ekaterina-simonova commited on
Commit
7a09aab
·
verified ·
1 Parent(s): 0330944

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -32
app.py CHANGED
@@ -16,6 +16,7 @@ from nltk.tokenize import word_tokenize
16
  import openai
17
  import time
18
  from huggingface_hub import model_info
 
19
 
20
  # 1. Первым делом - настройка логирования (до всех операций)
21
  logging.basicConfig(
@@ -213,17 +214,6 @@ class HybridSearch:
213
 
214
  # Загрузка данных из XLSX
215
  @st.cache_data
216
- def load_data():
217
- try:
218
- data = pd.read_excel(XLSX_FILE_PATH, engine='openpyxl')
219
- logger.info("Данные успешно загружены")
220
- return data
221
- except Exception as e:
222
- logger.error("Ошибка при загрузке данных из XLSX файла: %s", e)
223
- raise
224
-
225
- # Инициализация модели и FAISS индекса
226
- @st.cache_resource
227
  def load_models():
228
  """Загрузка моделей с подробным логированием и обработкой ошибок"""
229
  def log_model_info():
@@ -250,11 +240,6 @@ def load_models():
250
  )
251
  logger.info(f"Модель загружена за {time.time()-start_time:.2f} сек")
252
  logger.info(f"Размерность эмбеддингов: {model.get_sentence_embedding_dimension()}")
253
-
254
- # Проверка работы модели на тестовом тексте
255
- test_text = "тестовый текст для проверки"
256
- embedding = model.encode([test_text])
257
- logger.info(f"Тестовая эмбеддинг-вектор: {embedding.shape}, норма={np.linalg.norm(embedding):.2f}")
258
  except Exception as e:
259
  logger.critical(f"Ошибка загрузки модели: {str(e)}")
260
  raise RuntimeError("Не удалось загрузить модель") from e
@@ -269,11 +254,6 @@ def load_models():
269
  try:
270
  faiss_index = faiss.read_index(FAISS_INDEX_PATH)
271
  logger.info(f"Индекс загружен (размерность: {faiss_index.d}, векторов: {faiss_index.ntotal})")
272
-
273
- # Проверка поиска по тестовому тексту
274
- test_embedding = model.encode(["тестовый запрос"])
275
- D, I = faiss_index.search(test_embedding.astype('float32'), 1)
276
- logger.info(f"Тестовый поиск FAISS: расстояние={D[0][0]:.2f}, индекс={I[0][0]}")
277
  except Exception as e:
278
  logger.critical(f"Ошибка чтения индекса: {str(e)}")
279
  raise RuntimeError("Неверный формат FAISS индекса") from e
@@ -283,14 +263,19 @@ def load_models():
283
  hybrid_search = None
284
 
285
  if os.path.exists(VECTOR_DB_PATH):
 
 
 
286
  logger.info(f"Проверка базы для BM25:")
287
- logger.info(f" Размер файла: {os.path.getsize(VECTOR_DB_PATH)} байт")
288
- logger.info(f" Последнее изменение: {datetime.fromtimestamp(os.path.getmtime(VECTOR_DB_PATH))}")
289
 
290
  try:
291
- # Проверка структуры базы перед инициализацией
292
  conn = sqlite3.connect(VECTOR_DB_PATH)
293
  cursor = conn.cursor()
 
 
294
  cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
295
  tables = [row[0] for row in cursor.fetchall()]
296
  logger.info(f" Таблицы в базе: {tables}")
@@ -300,23 +285,23 @@ def load_models():
300
  count = cursor.fetchone()[0]
301
  logger.info(f" Записей в content: {count}")
302
 
303
- cursor.execute("SELECT chunk_text FROM content LIMIT 1")
304
- sample = cursor.fetchone()
305
- logger.info(f" Пример текста: {sample[0][:50] if sample else 'НЕТ ДАННЫХ'}")
 
306
 
307
  conn.close()
308
 
309
- # Инициализация BM25
310
  hybrid_search = HybridSearch(VECTOR_DB_PATH)
311
 
312
- if hybrid_search.bm25 is not None:
313
  logger.info(f"BM25 успешно инициализирован! Документов: {len(hybrid_search.corpus)}")
314
- logger.info(f"Пример первого документа: {hybrid_search.corpus[0][:3]}...")
315
  else:
316
- logger.error("BM25 не был создан в HybridSearch!")
317
 
318
  except Exception as e:
319
- logger.error(f"Ошибка инициализации гибридного поиска: {str(e)}", exc_info=True)
320
  if 'conn' in locals():
321
  conn.close()
322
  else:
 
16
  import openai
17
  import time
18
  from huggingface_hub import model_info
19
+ from datetime import datetime
20
 
21
  # 1. Первым делом - настройка логирования (до всех операций)
22
  logging.basicConfig(
 
214
 
215
  # Загрузка данных из XLSX
216
  @st.cache_data
 
 
 
 
 
 
 
 
 
 
 
217
  def load_models():
218
  """Загрузка моделей с подробным логированием и обработкой ошибок"""
219
  def log_model_info():
 
240
  )
241
  logger.info(f"Модель загружена за {time.time()-start_time:.2f} сек")
242
  logger.info(f"Размерность эмбеддингов: {model.get_sentence_embedding_dimension()}")
 
 
 
 
 
243
  except Exception as e:
244
  logger.critical(f"Ошибка загрузки модели: {str(e)}")
245
  raise RuntimeError("Не удалось загрузить модель") from e
 
254
  try:
255
  faiss_index = faiss.read_index(FAISS_INDEX_PATH)
256
  logger.info(f"Индекс загружен (размерность: {faiss_index.d}, векторов: {faiss_index.ntotal})")
 
 
 
 
 
257
  except Exception as e:
258
  logger.critical(f"Ошибка чтения индекса: {str(e)}")
259
  raise RuntimeError("Неверный формат FAISS индекса") from e
 
263
  hybrid_search = None
264
 
265
  if os.path.exists(VECTOR_DB_PATH):
266
+ db_size = os.path.getsize(VECTOR_DB_PATH)
267
+ last_modified = datetime.fromtimestamp(os.path.getmtime(VECTOR_DB_PATH)).strftime('%Y-%m-%d %H:%M:%S')
268
+
269
  logger.info(f"Проверка базы для BM25:")
270
+ logger.info(f" Размер файла: {db_size} байт")
271
+ logger.info(f" Последнее изменение: {last_modified}")
272
 
273
  try:
274
+ # Проверка структуры базы
275
  conn = sqlite3.connect(VECTOR_DB_PATH)
276
  cursor = conn.cursor()
277
+
278
+ # Проверка существования таблиц
279
  cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
280
  tables = [row[0] for row in cursor.fetchall()]
281
  logger.info(f" Таблицы в базе: {tables}")
 
285
  count = cursor.fetchone()[0]
286
  logger.info(f" Записей в content: {count}")
287
 
288
+ if count > 0:
289
+ cursor.execute("SELECT chunk_text FROM content LIMIT 1")
290
+ sample = cursor.fetchone()
291
+ logger.info(f" Пример текста: {sample[0][:50] if sample else 'НЕТ ДАННЫХ'}")
292
 
293
  conn.close()
294
 
295
+ # Инициализация HybridSearch
296
  hybrid_search = HybridSearch(VECTOR_DB_PATH)
297
 
298
+ if hybrid_search and hybrid_search.bm25:
299
  logger.info(f"BM25 успешно инициализирован! Документов: {len(hybrid_search.corpus)}")
 
300
  else:
301
+ logger.error("Не удалось инициализировать BM25!")
302
 
303
  except Exception as e:
304
+ logger.error(f"Ошибка при проверке базы данных: {str(e)}", exc_info=True)
305
  if 'conn' in locals():
306
  conn.close()
307
  else: