""" 📚 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 @st.cache_data 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)