opex792 commited on
Commit
fa3df7f
·
verified ·
1 Parent(s): 153b40f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -27
app.py CHANGED
@@ -45,6 +45,7 @@ if JINA_API_KEY is None:
45
  raise ValueError("JINA_API_KEY environment variable not set.")
46
  JINA_RERANKER_MODEL = "jina-reranker-v2-base-multilingual"
47
 
 
48
  # Имена таблиц
49
  embeddings_table = "movie_embeddings"
50
  query_cache_table = "query_cache"
@@ -297,7 +298,7 @@ def get_movie_embeddings(conn):
297
  logging.error(f"Ошибка при загрузке эмбеддингов фильмов: {e}")
298
  return movie_embeddings
299
 
300
- def rerank_with_api(query, results):
301
  """Переранжирует результаты с помощью Jina AI Reranker API."""
302
  logging.info(f"Начало переранжирования для запроса: '{query}'")
303
  documents = []
@@ -305,46 +306,43 @@ def rerank_with_api(query, results):
305
  movie = next((m for m in movies_data if m['id'] == movie_id), None)
306
  if movie:
307
  movie_info = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genreslist']}\nОписание: {movie['description']}"
308
- documents.append({"text": movie_info})
309
 
 
 
 
 
310
  data = {
311
  "model": JINA_RERANKER_MODEL,
312
  "query": query,
313
- "top_n": len(results),
314
  "documents": documents
315
  }
316
- logging.info(f"Отправка данных на реранк (Jina AI API):\n{data}")
317
-
318
- headers = {
319
- 'Content-Type': 'application/json',
320
- 'Authorization': f'Bearer {JINA_API_KEY}'
321
- }
322
 
323
  try:
324
  response = requests.post(JINA_API_URL, headers=headers, json=data)
325
  response.raise_for_status() # Проверка на ошибки HTTP
326
- response_json = response.json()
327
- logging.info(f"Ответ от Jina AI API: {response_json}")
328
 
329
  reranked_results = []
330
- for result in response_json.get("results", []):
331
- index = result.get("index")
332
- score = result.get("relevance_score")
333
- if index is not None and score is not None:
334
- reranked_results.append((results[index][0], score))
 
 
 
335
 
336
- reranked_results.sort(key=lambda x: x[1], reverse=True)
337
  logging.info("Переранжирование завершено.")
 
338
  return reranked_results
339
-
340
  except requests.exceptions.RequestException as e:
341
- logging.error(f"Ошибка при запросе к Jina AI Reranker API: {e}")
342
  return []
343
- except (KeyError, ValueError) as e:
344
- logging.error(f"Ошибка при обработке ответа от Jina AI Reranker API: {e}")
345
- return []
346
- finally:
347
- time.sleep(0.5)
348
 
349
  def search_movies(query, top_k=20):
350
  """Выполняет поиск фильмов по запросу."""
@@ -397,11 +395,11 @@ def search_movies(query, top_k=20):
397
  logging.error(f"Ошибка при выполнении поискового запроса: {e}")
398
  results = []
399
 
400
- # Переранжируем результаты
401
- reranked_results = rerank_with_api(query, results)
402
 
403
  output = ""
404
- for movie_id, score in reranked_results[:top_k]:
405
  # Находим фильм по ID
406
  movie = next((m for m in movies_data if m['id'] == movie_id), None)
407
  if movie:
 
45
  raise ValueError("JINA_API_KEY environment variable not set.")
46
  JINA_RERANKER_MODEL = "jina-reranker-v2-base-multilingual"
47
 
48
+
49
  # Имена таблиц
50
  embeddings_table = "movie_embeddings"
51
  query_cache_table = "query_cache"
 
298
  logging.error(f"Ошибка при загрузке эмбеддингов фильмов: {e}")
299
  return movie_embeddings
300
 
301
+ def rerank_with_api(query, results, top_k):
302
  """Переранжирует результаты с помощью Jina AI Reranker API."""
303
  logging.info(f"Начало переранжирования для запроса: '{query}'")
304
  documents = []
 
306
  movie = next((m for m in movies_data if m['id'] == movie_id), None)
307
  if movie:
308
  movie_info = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genreslist']}\nОписание: {movie['description']}"
309
+ documents.append(movie_info)
310
 
311
+ headers = {
312
+ 'Content-Type': 'application/json',
313
+ 'Authorization': f'Bearer {JINA_API_KEY}'
314
+ }
315
  data = {
316
  "model": JINA_RERANKER_MODEL,
317
  "query": query,
318
+ "top_n": top_k,
319
  "documents": documents
320
  }
321
+ logging.info(f"Отправка данных на реранжировку: {data}")
 
 
 
 
 
322
 
323
  try:
324
  response = requests.post(JINA_API_URL, headers=headers, json=data)
325
  response.raise_for_status() # Проверка на ошибки HTTP
326
+ result = response.json()
327
+ logging.info(f"Ответ от API реранжировщика: {result}")
328
 
329
  reranked_results = []
330
+ if 'results' in result:
331
+ for item in result['results']:
332
+
333
+ index = item['index']
334
+ movie_id = results[index][0]
335
+ reranked_results.append((movie_id, item['relevance_score']))
336
+ else:
337
+ logging.warning("Ответ от API не содержит ключа 'results'.")
338
 
 
339
  logging.info("Переранжирование завершено.")
340
+ time.sleep(0.5)
341
  return reranked_results
342
+
343
  except requests.exceptions.RequestException as e:
344
+ logging.error(f"Ошибка при запросе к API реранжировщика: {e}")
345
  return []
 
 
 
 
 
346
 
347
  def search_movies(query, top_k=20):
348
  """Выполняет поиск фильмов по запросу."""
 
395
  logging.error(f"Ошибка при выполнении поискового запроса: {e}")
396
  results = []
397
 
398
+ # Переранжируем результаты с помощью API
399
+ reranked_results = rerank_with_api(query, results, top_k)
400
 
401
  output = ""
402
+ for movie_id, score in reranked_results:
403
  # Находим фильм по ID
404
  movie = next((m for m in movies_data if m['id'] == movie_id), None)
405
  if movie: