import streamlit as st from qdrant_client import QdrantClient from sentence_transformers import SentenceTransformer from groq import Groq import os class MediaSearchApp: def __init__(self): # Указываем абсолютный путь к базе данных base_dir = os.path.dirname(os.path.abspath(__file__)) qdrant_path = os.path.join(base_dir, "src", "tv", "qdrant_db", "collection") # Проверка существования базы данных и прав доступа try: if not os.path.exists(qdrant_path): st.error(f"База данных не найдена по пути: {qdrant_path}") st.info("Убедитесь, что структура папок соответствует: src/tv/qdrant_db/collection") st.stop() # Проверка прав доступа test_file = os.path.join(qdrant_path, "meta.json") if not os.access(test_file, os.R_OK): st.error(f"Нет прав доступа к файлу {test_file}") st.info("Проверьте права доступа к файлам базы данных") st.stop() # Инициализация клиента self.client = QdrantClient( path=qdrant_path, prefer_grpc=False, force_disable_check_same_thread=True ) # Проверка существования коллекции collections = self.client.get_collections() if not any(col.name == "movies_books_collection" for col in collections.collections): st.error("Коллекция 'movies_books_collection' не найдена в базе данных") st.stop() except Exception as e: st.error(f"Ошибка при инициализации Qdrant: {str(e)}") st.stop() # Модель для эмбеддингов try: self.embedding_model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") except Exception as e: st.error(f"Ошибка при загрузке модели: {str(e)}") st.stop() # Инициализация Groq self.groq_api_key = "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" try: self.groq_client = Groq(api_key=self.groq_api_key) # Тестовый запрос self.groq_client.models.list() except Exception as e: st.error(f"Ошибка при инициализации Groq: {str(e)}") st.warning("Функция генерации описаний будет недоступна") self.groq_client = None # ... остальные методы без изменений ... def main(): st.set_page_config(page_title="Поиск фильмов и сериалов", layout="wide") app = MediaSearchApp() app.search_media() if __name__ == "__main__": main()