Spaces:
Runtime error
Runtime error
gerekli dosyalar eklendi
Browse files- .gitattributes +2 -0
- app.py +72 -0
- chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/data_level0.bin +3 -0
- chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/header.bin +3 -0
- chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/index_metadata.pickle +3 -0
- chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/length.bin +3 -0
- chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/link_lists.bin +3 -0
- chroma_db/chroma.sqlite3 +3 -0
- data/Kitap_aciklamalari.txt +3 -0
- data/TurkishBookDataSet.csv +3 -0
- src/__init__.py +0 -0
- src/chatbot.py +60 -0
.gitattributes
CHANGED
|
@@ -34,3 +34,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 34 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 36 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 34 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 36 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
data/Kitap_aciklamalari.txt filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
data/TurkishBookDataSet.csv filter=lfs diff=lfs merge=lfs -text
|
app.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import nest_asyncio
|
| 3 |
+
from src.chatbot import create_rag_chain
|
| 4 |
+
|
| 5 |
+
nest_asyncio.apply()
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# --- ARAYÜZ TASARIMI ---
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
st.set_page_config(page_title="Sahaf.AI",layout="centered")
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
# Ana başlık
|
| 17 |
+
st.markdown("<h1 style='text-align: center;'>SAHAF.AI</h1>", unsafe_allow_html=True)
|
| 18 |
+
|
| 19 |
+
# --- CHATBOT MANTIĞI ---
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
chain = create_rag_chain()
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
if "messages" not in st.session_state:
|
| 26 |
+
st.session_state.messages = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
chat_container = st.container(height=500, border=True)
|
| 30 |
+
|
| 31 |
+
with chat_container:
|
| 32 |
+
|
| 33 |
+
if not st.session_state.messages:
|
| 34 |
+
st.markdown("### Merhaba, Ben Sahaf.AI! 👋")
|
| 35 |
+
st.info(
|
| 36 |
+
"Kitaplar, yazarları ve eserleri hakkında merak ettiklerini "
|
| 37 |
+
"bana sorabilirsin. Sana yardımcı olmaktan mutluluk duyarım."
|
| 38 |
+
)
|
| 39 |
+
st.markdown("##### Örnek Sorular:")
|
| 40 |
+
st.markdown("- *Ahmet Ümit'in İstanbul Hatırası romanının konusu nedir?*")
|
| 41 |
+
st.markdown("- *Bana polisiye türünde 3 tane roman önerebilir misin?*")
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
else:
|
| 45 |
+
for message in st.session_state.messages:
|
| 46 |
+
with st.chat_message(message["role"]):
|
| 47 |
+
st.markdown(message["content"])
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
if prompt := st.chat_input("Bir yazar veya kitap hakkında soru sorun..."):
|
| 51 |
+
|
| 52 |
+
st.session_state.messages.append({"role": "user", "content": prompt})
|
| 53 |
+
|
| 54 |
+
# Chatbot'un cevabını oluştur
|
| 55 |
+
with st.spinner("Düşünüyorum..."):
|
| 56 |
+
|
| 57 |
+
try:
|
| 58 |
+
|
| 59 |
+
result = chain.invoke({"query": prompt})
|
| 60 |
+
response = result["result"]
|
| 61 |
+
|
| 62 |
+
except Exception as e:
|
| 63 |
+
|
| 64 |
+
response = "Üzgünüm, bir sorunla karşılaştım. Lütfen birkaç saniye sonra tekrar deneyin."
|
| 65 |
+
print(f"HATA OLUŞTU: {e}")
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
st.session_state.messages.append({"role": "assistant", "content": response})
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
st.rerun()
|
chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/data_level0.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d5884dd93bd61f73e23c0a7ba3da58251bad5c9479affd8e5202897ec8007fd0
|
| 3 |
+
size 21180000
|
chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/header.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d660bb5c6ceb0612586aef27a2d52441a98ebe881e88915768e08f952f349e65
|
| 3 |
+
size 100
|
chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/index_metadata.pickle
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:725459bc433d612a6255cd3f94ef02b8d914a6054f2979d7cc1aec1268eb9896
|
| 3 |
+
size 288012
|
chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/length.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1d403911ad17feb91a3d050e0f712a33f483aa8e51fae04ecaac6e39d7f70b50
|
| 3 |
+
size 20000
|
chroma_db/bc19a8c4-5da8-4b1a-8420-5da147e0d3bb/link_lists.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ad70886bef732577e2e97d7f51316ee566414fc3e2f0df8592b4e930d981d6fb
|
| 3 |
+
size 43052
|
chroma_db/chroma.sqlite3
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:677a6cf4f04730c1e8106a61b3e2a8497fa12edd7f84e47cd3006061a92019f2
|
| 3 |
+
size 65011712
|
data/Kitap_aciklamalari.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0640d454c00efc58696c12fec562886b9c18d0e3465876be019bd8be71e55b93
|
| 3 |
+
size 18524553
|
data/TurkishBookDataSet.csv
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b07624248aa1fbda4211f43665f3cdd480b40c20113a4d1b0bfb2fce7fcc9331
|
| 3 |
+
size 24369172
|
src/__init__.py
ADDED
|
File without changes
|
src/chatbot.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
import os
|
| 3 |
+
from dotenv import load_dotenv
|
| 4 |
+
import streamlit as st
|
| 5 |
+
|
| 6 |
+
# Gerekli LangChain bileşenleri
|
| 7 |
+
from langchain_chroma import Chroma
|
| 8 |
+
from langchain_huggingface import HuggingFaceEmbeddings
|
| 9 |
+
from langchain_google_genai import ChatGoogleGenerativeAI
|
| 10 |
+
from langchain.prompts import PromptTemplate
|
| 11 |
+
from langchain.chains import RetrievalQA
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
@st.cache_resource
|
| 17 |
+
def create_rag_chain():
|
| 18 |
+
|
| 19 |
+
load_dotenv()
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
print("Bileşenler ilk defa yükleniyor ve önbelleğe alınıyor...")
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
embedding_model_name = "BAAI/bge-m3"
|
| 26 |
+
db_directory = "./chroma_db"
|
| 27 |
+
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)
|
| 28 |
+
db = Chroma(persist_directory=db_directory, embedding_function=embeddings)
|
| 29 |
+
print("Veritabanı başarıyla yüklendi.")
|
| 30 |
+
|
| 31 |
+
# 2. SOHBET BEYNİ (LLM): Cevap üretimi için Gemini modelini başlatıyoruz
|
| 32 |
+
llm = ChatGoogleGenerativeAI(model="gemma-3-27b-it") # Model adını güncelledim
|
| 33 |
+
print("Gemini LLM başarıyla yüklendi.")
|
| 34 |
+
|
| 35 |
+
# 3. PROMPT ve RAG ZİNCİRİ
|
| 36 |
+
prompt_template = """Senin adın Sahaf ve kitaplar hakkında bilgi veren yardımcı bir yapay zeka asistanısın.
|
| 37 |
+
|
| 38 |
+
Sana bir soru sorulduğunda şu kurallara göre cevap ver:
|
| 39 |
+
1. **Kendinle İlgili Sorular:** Eğer soru senin kim olduğun, ne olduğun veya ne işe yaradığınla ilgiliyse (örneğin: 'sen kimsin?', 'nesin?', 'ne yaparsın?'), BAĞLAMI dikkate alma. Kendini Sahaf olarak tanıt ve kitaplar hakkında bilgi vermek için tasarlandığını söyle.
|
| 40 |
+
2. **Kitaplarla İlgili Sorular:** Diğer tüm sorularda, cevabını mutlaka sana verilen BAĞLAM'a dayandır. Bağlamdaki bilgileri kullanarak soruyu cevapla.
|
| 41 |
+
3. **Bilgi Olmadığında:** Eğer bağlamda cevap yoksa, "Üzgünüm, veri setimde bu soruyla ilgili net bir bilgi bulamadım. Başka bir yazar veya kitap hakkında bilgi almak ister misiniz?" de.
|
| 42 |
+
4. **Dürüstlük:** Asla bilgi uydurma.
|
| 43 |
+
|
| 44 |
+
Bağlam: {context}
|
| 45 |
+
|
| 46 |
+
Soru: {question}
|
| 47 |
+
|
| 48 |
+
Cevap:"""
|
| 49 |
+
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
|
| 50 |
+
|
| 51 |
+
qa_chain = RetrievalQA.from_chain_type(
|
| 52 |
+
llm=llm,
|
| 53 |
+
chain_type="stuff",
|
| 54 |
+
retriever=db.as_retriever(),
|
| 55 |
+
return_source_documents=False,
|
| 56 |
+
chain_type_kwargs={"prompt": PROMPT}
|
| 57 |
+
)
|
| 58 |
+
print("RAG Zinciri başarıyla kuruldu ve önbelleğe alındı.")
|
| 59 |
+
|
| 60 |
+
return qa_chain
|