HarunDemircioglu11 commited on
Commit
96743d1
·
verified ·
1 Parent(s): adbd74a

Upload 3 files

Browse files
pdf-rag-bot/.env ADDED
@@ -0,0 +1 @@
 
 
1
+ OPENAI_API_KEY = "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"
pdf-rag-bot/app.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os
3
+ import tempfile
4
+ from dotenv import load_dotenv
5
+
6
+ from langchain_community.vectorstores import FAISS
7
+ from langchain_community.document_loaders import PyPDFLoader
8
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
9
+ from langchain_community.chat_models import ChatOpenAI
10
+ from langchain_community.embeddings import OpenAIEmbeddings
11
+ from langchain.chains import ConversationalRetrievalChain
12
+ from langchain.memory import ConversationBufferMemory
13
+
14
+ load_dotenv()
15
+ os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
16
+
17
+ st.set_page_config(page_title="PDF Destek Botu", page_icon="📄")
18
+ st.title("📄 PDF Destek Botu (RAG + Memory)")
19
+ st.write("Bir PDF yükleyin, içeriğine dair sorular sorun. Türkçe desteklidir.")
20
+
21
+ uploaded_file = st.file_uploader("📎 PDF Dosyanızı yükleyin", type="pdf", key="pdf_uploader")
22
+
23
+ if uploaded_file is not None:
24
+ if "last_uploaded_name" not in st.session_state or uploaded_file.name != st.session_state.last_uploaded_name:
25
+ with st.spinner("📚 PDF işleniyor..."):
26
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp:
27
+ tmp.write(uploaded_file.read())
28
+ tmp_path = tmp.name
29
+
30
+ loader = PyPDFLoader(tmp_path)
31
+ documents = loader.load()
32
+
33
+ splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
34
+ docs = splitter.split_documents(documents)
35
+
36
+ embedding = OpenAIEmbeddings(model="text-embedding-3-large")
37
+ vectordb = FAISS.from_documents(docs, embedding)
38
+
39
+ memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
40
+ llm = ChatOpenAI(model_name="gpt-4", temperature=0)
41
+
42
+ qa_chain = ConversationalRetrievalChain.from_llm(
43
+ llm=llm,
44
+ retriever=vectordb.as_retriever(search_kwargs={"k": 3}),
45
+ memory=memory
46
+ )
47
+
48
+ st.session_state.qa_chain = qa_chain
49
+ st.session_state.chat_history = []
50
+ st.session_state.last_uploaded_name = uploaded_file.name
51
+
52
+ st.success("✅ PDF başarıyla işlendi!")
53
+
54
+ if "qa_chain" in st.session_state:
55
+ user_input = st.text_input("🧠 Sorunuzu yazın:")
56
+
57
+ if user_input:
58
+ with st.spinner("✍️ Yanıt hazırlanıyor..."):
59
+ response = st.session_state.qa_chain.run(user_input)
60
+ st.session_state.chat_history.append(("🧑‍💼 Siz", user_input))
61
+ st.session_state.chat_history.append(("🤖 Bot", response))
62
+
63
+ if st.session_state.chat_history:
64
+ st.markdown("---")
65
+ st.subheader("💬 Sohbet Geçmişi")
66
+ for sender, message in st.session_state.chat_history:
67
+ st.markdown(f"**{sender}:** {message}")
pdf-rag-bot/requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ streamlit
2
+ langchain
3
+ langchain-community
4
+ openai
5
+ faiss-cpu
6
+ pypdf
7
+ python-dotenv