opex792 commited on
Commit
a6d25e6
·
verified ·
1 Parent(s): 58ca2ed

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +7 -9
app.py CHANGED
@@ -7,6 +7,7 @@ import queue
7
  import torch
8
  import psycopg2
9
  import zlib
 
10
  from urllib.parse import urlparse
11
  import logging
12
 
@@ -87,7 +88,7 @@ def setup_database():
87
  cur.execute("CREATE EXTENSION IF NOT EXISTS vector;")
88
 
89
  # Удаляем существующие таблицы если они есть
90
- # cur.execute(f"DROP TABLE IF EXISTS {embeddings_table}, {query_cache_table};")
91
 
92
  # Создаем таблицу для хранения эмбеддингов фильмов
93
  cur.execute(f"""
@@ -98,7 +99,6 @@ def setup_database():
98
  model_name TEXT,
99
  embedding vector(1024)
100
  );
101
- CREATE INDEX ON {embeddings_table} USING ivfflat (embedding vector_cosine_ops);
102
  CREATE INDEX ON {embeddings_table} (string_crc32);
103
  """)
104
 
@@ -111,7 +111,6 @@ def setup_database():
111
  embedding vector(1024),
112
  created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
113
  );
114
- CREATE INDEX ON {query_cache_table} USING ivfflat (embedding vector_cosine_ops);
115
  CREATE INDEX ON {query_cache_table} (query_crc32);
116
  CREATE INDEX ON {query_cache_table} (created_at);
117
  """)
@@ -169,7 +168,7 @@ def get_embedding_from_db(conn, table_name, crc32_column, crc32_value, model_nam
169
  (crc32_value, model_name))
170
  result = cur.fetchone()
171
  if result and result[0]:
172
- return torch.tensor(result[0])
173
  except Exception as e:
174
  logging.error(f"Ошибка при получении эмбеддинга из БД: {e}")
175
  return None
@@ -267,7 +266,7 @@ def get_movie_embeddings(conn):
267
  # Находим название фильма по ID
268
  for movie in movies_data:
269
  if movie['id'] == movie_id:
270
- movie_embeddings[movie['name']] = torch.tensor(embedding)
271
  break
272
  logging.info(f"Загружено {len(movie_embeddings)} эмбеддингов фильмов.")
273
  except Exception as e:
@@ -313,9 +312,9 @@ def search_movies(query, top_k=10):
313
  FROM {query_cache_table}
314
  WHERE query_crc32 = %s
315
  )
316
- SELECT m.movie_id, m.embedding <=> (SELECT embedding FROM query_embedding) as distance
317
  FROM {embeddings_table} m, query_embedding
318
- ORDER BY distance ASC
319
  LIMIT %s
320
  """, (query_crc32, top_k))
321
 
@@ -326,7 +325,7 @@ def search_movies(query, top_k=10):
326
  results = []
327
 
328
  results_html = "<ol>"
329
- for movie_id, distance in results:
330
  # Находим название фильма по ID
331
  movie_title = None
332
  for movie in movies_data:
@@ -335,7 +334,6 @@ def search_movies(query, top_k=10):
335
  break
336
 
337
  if movie_title:
338
- similarity = 1 - distance # Конвертируем расстояние в сходство
339
  results_html += f"<li><strong>{movie_title}</strong> (Сходство: {similarity:.4f})</li>"
340
  results_html += "</ol>"
341
 
 
7
  import torch
8
  import psycopg2
9
  import zlib
10
+ import numpy as np
11
  from urllib.parse import urlparse
12
  import logging
13
 
 
88
  cur.execute("CREATE EXTENSION IF NOT EXISTS vector;")
89
 
90
  # Удаляем существующие таблицы если они есть
91
+ cur.execute(f"DROP TABLE IF EXISTS {embeddings_table}, {query_cache_table};")
92
 
93
  # Создаем таблицу для хранения эмбеддингов фильмов
94
  cur.execute(f"""
 
99
  model_name TEXT,
100
  embedding vector(1024)
101
  );
 
102
  CREATE INDEX ON {embeddings_table} (string_crc32);
103
  """)
104
 
 
111
  embedding vector(1024),
112
  created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
113
  );
 
114
  CREATE INDEX ON {query_cache_table} (query_crc32);
115
  CREATE INDEX ON {query_cache_table} (created_at);
116
  """)
 
168
  (crc32_value, model_name))
169
  result = cur.fetchone()
170
  if result and result[0]:
171
+ return np.array(result[0])
172
  except Exception as e:
173
  logging.error(f"Ошибка при получении эмбеддинга из БД: {e}")
174
  return None
 
266
  # Находим название фильма по ID
267
  for movie in movies_data:
268
  if movie['id'] == movie_id:
269
+ movie_embeddings[movie['name']] = np.array(embedding)
270
  break
271
  logging.info(f"Загружено {len(movie_embeddings)} эмбеддингов фильмов.")
272
  except Exception as e:
 
312
  FROM {query_cache_table}
313
  WHERE query_crc32 = %s
314
  )
315
+ SELECT m.movie_id, 1 - (m.embedding <=> (SELECT embedding FROM query_embedding)) as similarity
316
  FROM {embeddings_table} m, query_embedding
317
+ ORDER BY similarity DESC
318
  LIMIT %s
319
  """, (query_crc32, top_k))
320
 
 
325
  results = []
326
 
327
  results_html = "<ol>"
328
+ for movie_id, similarity in results:
329
  # Находим название фильма по ID
330
  movie_title = None
331
  for movie in movies_data:
 
334
  break
335
 
336
  if movie_title:
 
337
  results_html += f"<li><strong>{movie_title}</strong> (Сходство: {similarity:.4f})</li>"
338
  results_html += "</ol>"
339