Spaces:
Runtime error
Runtime error
Download chat.py from WladlenVK/evolution-prometheus: direct link, hf CLI and curl.
- Browser
- Download file 2.48 kB
-
https://huggingface.co/spaces/WladlenVK/evolution-prometheus/resolve/main/chat.py
- Command line
-
hf download hf://spaces/WladlenVK/evolution-prometheus/chat.py
-
curl -L -o chat.py https://huggingface.co/spaces/WladlenVK/evolution-prometheus/resolve/main/chat.py
2.48 kB
| import os | |
| import sys | |
| import google.generativeai as genai | |
| from langchain_google_genai import ChatGoogleGenerativeAI | |
| from langchain_community.vectorstores import SupabaseVectorStore | |
| from langchain.chains import RetrievalQA | |
| from supabase.client import create_client | |
| # Обертка для эмбеддингов (аналогично загрузчику) | |
| class SimpleEmbeddings: | |
| def __init__(self, api_key): | |
| genai.configure(api_key=api_key) | |
| def embed_documents(self, texts): | |
| res = genai.embed_content(model="models/gemini-embedding-001", content=texts, task_type="retrieval_document") | |
| return res['embedding'] | |
| def embed_query(self, text): | |
| res = genai.embed_content(model="models/gemini-embedding-001", content=text, task_type="retrieval_query") | |
| return res['embedding'] | |
| def ask_question(question): | |
| supabase_url = os.environ.get("SUPABASE_URL") | |
| supabase_key = os.environ.get("SUPABASE_SERVICE_ROLE_KEY") | |
| gemini_api_key = os.environ.get("GEMINI_API_KEY") | |
| if not all([supabase_url, supabase_key, gemini_api_key]): | |
| print("ОШИБКА: Проверьте секреты GitHub!") | |
| return | |
| # 1. Инициализация поиска | |
| supabase = create_client(supabase_url, supabase_key) | |
| embeddings = SimpleEmbeddings(gemini_api_key) | |
| vector_store = SupabaseVectorStore( | |
| client=supabase, | |
| embedding=embeddings, | |
| table_name="documents", | |
| query_name="match_documents", | |
| ) | |
| # 2. Настройка модели ответов (Gemini 1.5 Flash - быстрая и умная) | |
| llm = ChatGoogleGenerativeAI( | |
| model="gemini-1.5-flash", | |
| google_api_key=gemini_api_key, | |
| temperature=0.2 # Низкая температура для точных ответов по фактам | |
| ) | |
| # 3. Создание цепочки вопрос-ответ | |
| qa_chain = RetrievalQA.from_chain_type( | |
| llm=llm, | |
| chain_type="stuff", | |
| retriever=vector_store.as_retriever(search_kwargs={'k': 5}) # Берем 5 самых похожих отрывков | |
| ) | |
| print(f"\nВопрос: {question}") | |
| print("Ответ:", qa_chain.run(question)) | |
| if __name__ == "__main__": | |
| if len(sys.argv) > 1: | |
| user_query = " ".join(sys.argv[1:]) | |
| ask_question(user_query) | |
| else: | |
| print("Пожалуйста, введите вопрос. Пример: python chat.py 'О чем эта книга?'") | |