Kapex13 commited on
Commit
199db6d
·
verified ·
1 Parent(s): 46aecf6

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +20 -10
src/streamlit_app.py CHANGED
@@ -167,14 +167,13 @@ def cached_load_embeddings_and_index():
167
 
168
  @st.cache_resource(ttl=3600)
169
  def init_groq_llm():
170
- # Проверка на наличие ключа Groq
171
- if "GROQ_API_KEY" not in st.secrets:
172
- st.error("Ошибка: API-ключ Groq не найден в secrets.toml.")
173
- return None
174
-
175
- os.environ["GROQ_API_KEY"] = st.secrets["GROQ_API_KEY"]
176
  try:
 
 
177
  return ChatGroq(model="deepseek-r1-distill-llama-70b", temperature=0, max_tokens=2000)
 
 
 
178
  except Exception as e:
179
  st.error(f"Ошибка инициализации Groq: {e}")
180
  return None
@@ -239,7 +238,7 @@ def semantic_search(query, embedder, index, df, genre=None, year=None, country=N
239
  if keyword_pattern:
240
  res['has_keyword'] = res.apply(
241
  lambda row: bool(re.search(keyword_pattern, str(row['tvshow_title']).lower())) or
242
- bool(re.search(keyword_pattern, str(row['description']).lower())),
243
  axis=1
244
  )
245
  else:
@@ -307,6 +306,12 @@ def main():
307
  st.set_page_config(page_title="Поиск фильмов и сериалов + Groq AI", layout="wide")
308
  st.title("📽️ Семантический поиск фильмов и сериалов с AI")
309
 
 
 
 
 
 
 
310
  if "df" not in st.session_state:
311
  st.session_state.df = cached_load_data(CSV_PATH)
312
  if "embedder" not in st.session_state:
@@ -314,8 +319,11 @@ def main():
314
  if "embeddings_index" not in st.session_state:
315
  with st.spinner("Загрузка эмбеддингов и индекса..."):
316
  st.session_state.embeddings, st.session_state.index = cached_load_embeddings_and_index()
317
- if "llm" not in st.session_state:
318
  st.session_state.llm = init_groq_llm()
 
 
 
319
 
320
  if 'last_query' not in st.session_state: st.session_state.last_query = ""
321
  if 'results' not in st.session_state: st.session_state.results = pd.DataFrame()
@@ -437,13 +445,15 @@ def main():
437
  if st.session_state.llm and not st.session_state.results.empty:
438
  if st.button("AI: почему эти сериалы подходят и что ещё посмотреть", key="ai_button"):
439
  st.session_state.ai_clicked = True
 
 
440
 
441
  with ai_response_container:
442
- if st.session_state.get("ai_clicked") and st.session_state.get("last_query"):
443
  st.markdown("### Рекомендации AI:")
444
  with st.spinner("Генерация ответа AI..."):
445
  rag = generate_rag_response(st.session_state.last_query, st.session_state.results, llm)
446
- st.write(rag)
447
 
448
  st.sidebar.markdown("---")
449
  st.sidebar.markdown("## Информация")
 
167
 
168
  @st.cache_resource(ttl=3600)
169
  def init_groq_llm():
 
 
 
 
 
 
170
  try:
171
+ groq_api_key = st.secrets["GROQ_API_KEY"]
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 KeyError:
175
+ st.error("Ошибка: API-ключ Groq не найден в secrets.toml. Пожалуйста, добавьте его.")
176
+ return None
177
  except Exception as e:
178
  st.error(f"Ошибка инициализации Groq: {e}")
179
  return None
 
238
  if keyword_pattern:
239
  res['has_keyword'] = res.apply(
240
  lambda row: bool(re.search(keyword_pattern, str(row['tvshow_title']).lower())) or
241
+ bool(re.search(keyword_pattern, str(row['description']).lower())),
242
  axis=1
243
  )
244
  else:
 
306
  st.set_page_config(page_title="Поиск фильмов и сериалов + Groq AI", layout="wide")
307
  st.title("📽️ Семантический поиск фильмов и сериалов с AI")
308
 
309
+ # Убедимся, что st.secrets доступен перед инициализацией LLM
310
+ try:
311
+ groq_api_key_exists = "GROQ_API_KEY" in st.secrets
312
+ except Exception:
313
+ groq_api_key_exists = False
314
+
315
  if "df" not in st.session_state:
316
  st.session_state.df = cached_load_data(CSV_PATH)
317
  if "embedder" not in st.session_state:
 
319
  if "embeddings_index" not in st.session_state:
320
  with st.spinner("Загрузка эмбеддингов и индекса..."):
321
  st.session_state.embeddings, st.session_state.index = cached_load_embeddings_and_index()
322
+ if "llm" not in st.session_state and groq_api_key_exists:
323
  st.session_state.llm = init_groq_llm()
324
+ elif "llm" not in st.session_state:
325
+ st.session_state.llm = None
326
+ st.error("API-ключ Groq не настроен. Функции AI будут отключены.")
327
 
328
  if 'last_query' not in st.session_state: st.session_state.last_query = ""
329
  if 'results' not in st.session_state: st.session_state.results = pd.DataFrame()
 
445
  if st.session_state.llm and not st.session_state.results.empty:
446
  if st.button("AI: почему эти сериалы подходят и что ещё посмотреть", key="ai_button"):
447
  st.session_state.ai_clicked = True
448
+ elif not st.session_state.llm and not st.session_state.results.empty:
449
+ st.warning("Чтобы получить рекомендации от AI, необходимо настроить API-ключ Groq.")
450
 
451
  with ai_response_container:
452
+ if st.session_state.get("ai_clicked") and st.session_state.get("last_query") and st.session_state.llm:
453
  st.markdown("### Рекомендации AI:")
454
  with st.spinner("Генерация ответа AI..."):
455
  rag = generate_rag_response(st.session_state.last_query, st.session_state.results, llm)
456
+ st.write(rag)
457
 
458
  st.sidebar.markdown("---")
459
  st.sidebar.markdown("## Информация")