Kapex13 commited on
Commit
e2c8e0f
·
verified ·
1 Parent(s): 48b49d7

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +16 -24
src/streamlit_app.py CHANGED
@@ -77,7 +77,6 @@ def clean_tvshows_data(path):
77
  df["tvshow_title"] = df.get("tvshow_title", "").fillna("Неизвестно")
78
  df["description"] = df.get("description", "").fillna("Нет описания").astype(str).str.strip()
79
 
80
- # === Расширенная фильтрация мусорных описаний ===
81
  garbage_patterns = [
82
  r"(всё в порядке[.!?~ ,]*){3,}",
83
  r"(я не знаю[^.!?]*){2,}",
@@ -88,33 +87,26 @@ def clean_tvshows_data(path):
88
  r"(\s*ё\s*){2,}",
89
  r"(\s*ј\s*){2,}",
90
  r"(\s*ѕј\s*){2,}",
91
- r"(.)\1{3,}", # Последовательность одинаковых символов (например, 'хм хм хм')
92
  r"(\s*[.,;!?'`~]{2,}\s*)",
93
  r"(\s*[0-9]{2,}\s*)",
94
- r"([a-zA-Zа-яА-ЯёЁ]{1}\s*){10,}", # слишком много однобуквенных слов
95
- r"(\s*(хм){2,}\s*)", # "хм хм"
96
- r"(\s*(красавчик){1,}\s*)", # "красавчик"
97
- r"([ё,ј,ѕ,Ѕ,л,€,д,ь]+)", # мусорные символы
98
  ]
99
-
100
  def matches_garbage(text):
101
  t = str(text).lower()
102
- if len(t.split()) < 15: # Удаляем слишком короткие
103
  return True
104
  return any(re.search(p, t) for p in garbage_patterns)
105
-
106
- # Применяем фильтр к описаниям
107
  df = df[~df["description"].apply(matches_garbage)]
108
-
109
- # Удаляем часто повторяющиеся описания (>=3)
110
  try:
111
  to_drop_exact = df["description"].value_counts()[lambda x: x >= 3].index
112
  df = df[~df["description"].isin(to_drop_exact)]
113
  except Exception:
114
  pass
115
-
116
  df = df[~df["description"].str.lower().apply(lambda text: any(phrase in text for phrase in BAD_PHRASE_PARTS))]
117
-
118
  cols_to_ignore = {
119
  'tvshow_title','year','genres','actors','rating','description',
120
  'image_url','url','language','country','directors','page_url','num_seasons'
@@ -165,27 +157,27 @@ def cached_load_embeddings_and_index():
165
  index = faiss.read_index(FAISS_PATH)
166
  return embeddings, index
167
 
 
168
  @st.cache_resource(ttl=3600)
169
  def init_groq_llm():
170
  """
171
- Инициализирует LLM от Groq, считывая API-ключ из Streamlit Secrets.
172
  """
173
  try:
174
- # Пытаемся получить ключ из st.secrets
175
- groq_api_key = st.secrets["GROQ_API_KEY"]
176
-
177
- # Устанавливаем ключ в переменные окружения
 
178
  os.environ["GROQ_API_KEY"] = groq_api_key
179
-
180
- # Инициализируем LLM
181
  return ChatGroq(model="deepseek-r1-distill-llama-70b", temperature=0, max_tokens=2000)
182
- except KeyError:
183
- st.error("Ошибка: API-ключ Groq не найден в secrets.toml. Пожалуйста, добавьте его.")
184
- return None
185
  except Exception as e:
186
  st.error(f"Ошибка инициализации Groq: {e}")
187
  return None
188
 
 
 
 
189
  # --- Автоматическое определение жанра из запроса ---
190
  def infer_genre_from_query(query):
191
  query_lower = query.lower()
 
77
  df["tvshow_title"] = df.get("tvshow_title", "").fillna("Неизвестно")
78
  df["description"] = df.get("description", "").fillna("Нет описания").astype(str).str.strip()
79
 
 
80
  garbage_patterns = [
81
  r"(всё в порядке[.!?~ ,]*){3,}",
82
  r"(я не знаю[^.!?]*){2,}",
 
87
  r"(\s*ё\s*){2,}",
88
  r"(\s*ј\s*){2,}",
89
  r"(\s*ѕј\s*){2,}",
90
+ r"(.)\1{3,}",
91
  r"(\s*[.,;!?'`~]{2,}\s*)",
92
  r"(\s*[0-9]{2,}\s*)",
93
+ r"([a-zA-Zа-яА-ЯёЁ]{1}\s*){10,}",
94
+ r"(\s*(хм){2,}\s*)",
95
+ r"(\s*(красавчик){1,}\s*)",
96
+ r"([ё,ј,ѕ,Ѕ,л,€,д,ь]+)",
97
  ]
 
98
  def matches_garbage(text):
99
  t = str(text).lower()
100
+ if len(t.split()) < 15:
101
  return True
102
  return any(re.search(p, t) for p in garbage_patterns)
 
 
103
  df = df[~df["description"].apply(matches_garbage)]
 
 
104
  try:
105
  to_drop_exact = df["description"].value_counts()[lambda x: x >= 3].index
106
  df = df[~df["description"].isin(to_drop_exact)]
107
  except Exception:
108
  pass
 
109
  df = df[~df["description"].str.lower().apply(lambda text: any(phrase in text for phrase in BAD_PHRASE_PARTS))]
 
110
  cols_to_ignore = {
111
  'tvshow_title','year','genres','actors','rating','description',
112
  'image_url','url','language','country','directors','page_url','num_seasons'
 
157
  index = faiss.read_index(FAISS_PATH)
158
  return embeddings, index
159
 
160
+ # --- ИСПРАВЛЕННАЯ ФУНКЦИЯ для Groq ---
161
  @st.cache_resource(ttl=3600)
162
  def init_groq_llm():
163
  """
164
+ Инициализирует LLM от Groq, считывая API-ключ из переменных окружения.
165
  """
166
  try:
167
+ groq_api_key = os.getenv("GROQ_API_KEY")
168
+ if not groq_api_key:
169
+ st.error("Ошибка: переменная окружения GROQ_API_KEY не найдена. Убедитесь, что ключ задан в Variables and Secrets Streamlit.")
170
+ return None
171
+
172
  os.environ["GROQ_API_KEY"] = groq_api_key
 
 
173
  return ChatGroq(model="deepseek-r1-distill-llama-70b", temperature=0, max_tokens=2000)
 
 
 
174
  except Exception as e:
175
  st.error(f"Ошибка инициализации Groq: {e}")
176
  return None
177
 
178
+ # ... остальной код без изменений ...
179
+
180
+
181
  # --- Автоматическое определение жанра из запроса ---
182
  def infer_genre_from_query(query):
183
  query_lower = query.lower()