Spaces:
Build error
Build error
| """ | |
| 📚 KitapYurdu Yorum Asistanı Chatbot | |
| - Hugging Face Spaces veya Lokal ortamda çalışacak | |
| """ | |
| import os | |
| import streamlit as st | |
| from datasets import load_dataset | |
| import chromadb | |
| from chromadb.config import Settings | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from langchain.vectorstores import Chroma | |
| from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings | |
| from langchain.chains import RetrievalQA | |
| from dotenv import load_dotenv | |
| # --- 1. Ortam Değişkenleri | |
| # Lokal için .env yükle | |
| if os.path.exists(".env"): | |
| load_dotenv() | |
| GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY") | |
| HF_TOKEN = os.environ.get("HF_TOKEN") | |
| # --- 2. Streamlit Başlığı | |
| st.set_page_config(page_title="📖 KitapYurdu Chatbot") | |
| st.title("📖 KitapYurdu Yorum Asistanı (Gemini 2.0 Flash)") | |
| # --- 3. Veri Seti Yükleme | |
| def load_kitapyurdu_dataset(): | |
| dataset = load_dataset("alibayram/kitapyurdu_yorumlar", split="train", token=HF_TOKEN) | |
| return dataset | |
| st.write("📡 Veri seti yükleniyor...") | |
| dataset = load_kitapyurdu_dataset() | |
| st.success("✅ Veri seti yüklendi!") | |
| # --- 4. Metinleri Bölme | |
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) | |
| texts = text_splitter.split_text(" ".join(dataset["yorum"][:500])) # İlk 500 yorum örnek | |
| # --- 5. ChromaDB | |
| PERSIST_DIR = "chroma_db" | |
| os.makedirs(PERSIST_DIR, exist_ok=True) | |
| embeddings = GoogleGenerativeAIEmbeddings( | |
| model="models/embedding-001", | |
| google_api_key=GEMINI_API_KEY | |
| ) | |
| vectorstore = Chroma.from_texts( | |
| texts, | |
| embeddings, | |
| persist_directory=PERSIST_DIR | |
| ) | |
| # --- 6. RAG Pipeline | |
| retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) | |
| llm = ChatGoogleGenerativeAI( | |
| model="gemini-2.0-flash", | |
| google_api_key=GEMINI_API_KEY, | |
| temperature=0.2 | |
| ) | |
| qa_chain = RetrievalQA.from_chain_type( | |
| llm=llm, | |
| chain_type="stuff", | |
| retriever=retriever, | |
| ) | |
| # --- 7. Kullanıcı Arayüzü | |
| st.markdown("### 💬 Kitaplar hakkında soru sor:") | |
| user_query = st.text_input("Örnek: 'En çok beğenilen kitap hangisi?'", "") | |
| if user_query: | |
| with st.spinner("Yanıt hazırlanıyor..."): | |
| response = qa_chain.run(user_query) | |
| st.markdown("### 🧠 Yanıt:") | |
| st.write(response) | |