HayriTalha commited on
Commit
112c4c0
·
verified ·
1 Parent(s): 60c7d9b

gerekli dosyalar eklendi

Browse files
.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