amoghsuman commited on
Commit
3ca4730
·
verified ·
1 Parent(s): bac1fe7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -37
app.py CHANGED
@@ -1,62 +1,61 @@
1
  import gradio as gr
2
- import fitz # PyMuPDF
3
  from langchain.chains.question_answering import load_qa_chain
4
  from langchain_openai import ChatOpenAI
5
-
6
  from langchain.vectorstores import FAISS
7
  from langchain.document_loaders import PyPDFLoader
8
-
9
  from langchain.text_splitter import RecursiveCharacterTextSplitter
10
  from langchain.embeddings.openai import OpenAIEmbeddings
11
- import tempfile
12
  import os
13
-
14
  from dotenv import load_dotenv
 
15
  load_dotenv()
16
- # Set your OpenAI key
17
  os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
18
 
19
  llm = ChatOpenAI(model_name="gpt-4", temperature=0)
20
  embedding = OpenAIEmbeddings()
21
- chain = None
 
22
  db = None
23
 
24
- def process_pdf(file):
25
  global db
26
- tmp_path = file.name # directly use the file path
27
-
28
- loader = PyPDFLoader(tmp_path)
29
  documents = loader.load()
30
  splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
31
  docs = splitter.split_documents(documents)
32
  db = FAISS.from_documents(docs, embedding)
33
- return "PDF processed successfully! You can now start asking questions."
34
-
35
 
36
- def ask_question(question):
37
  global db
38
  if not db:
39
- return "Please upload and process a PDF first."
40
  retriever = db.as_retriever()
41
- qa_chain = load_qa_chain(llm, chain_type="stuff")
42
- docs = retriever.get_relevant_documents(question)
43
- return qa_chain.run(input_documents=docs, question=question)
44
-
45
- upload_interface = gr.Interface(
46
- fn=process_pdf,
47
- inputs=gr.File(file_types=[".pdf"]),
48
- outputs="text",
49
- title="Interactive PDF Uploader",
50
- description="Upload a PDF to interact with."
51
- )
52
-
53
- chat_interface = gr.Interface(
54
- fn=ask_question,
55
- inputs=gr.Textbox(lines=2, placeholder="Ask a question..."),
56
- outputs="text",
57
- title="PDF Chat Interface",
58
- description="Ask questions based on the uploaded PDF."
59
- )
60
-
61
- demo = gr.TabbedInterface([upload_interface, chat_interface], ["Upload PDF", "Chat with PDF"])
62
- demo.launch()
 
 
 
 
 
 
1
  import gradio as gr
 
2
  from langchain.chains.question_answering import load_qa_chain
3
  from langchain_openai import ChatOpenAI
 
4
  from langchain.vectorstores import FAISS
5
  from langchain.document_loaders import PyPDFLoader
 
6
  from langchain.text_splitter import RecursiveCharacterTextSplitter
7
  from langchain.embeddings.openai import OpenAIEmbeddings
 
8
  import os
 
9
  from dotenv import load_dotenv
10
+
11
  load_dotenv()
 
12
  os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
13
 
14
  llm = ChatOpenAI(model_name="gpt-4", temperature=0)
15
  embedding = OpenAIEmbeddings()
16
+
17
+ # Global vector DB
18
  db = None
19
 
20
+ def upload_pdf(file):
21
  global db
22
+ pdf_path = file.name
23
+ loader = PyPDFLoader(pdf_path)
 
24
  documents = loader.load()
25
  splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
26
  docs = splitter.split_documents(documents)
27
  db = FAISS.from_documents(docs, embedding)
28
+ return "PDF processed. You can start chatting with it!"
 
29
 
30
+ def chat_with_pdf(message, history):
31
  global db
32
  if not db:
33
+ return "Please upload and process a PDF first."
34
  retriever = db.as_retriever()
35
+ chain = load_qa_chain(llm, chain_type="stuff")
36
+ docs = retriever.get_relevant_documents(message)
37
+ response = chain.run(input_documents=docs, question=message)
38
+ return response
39
+
40
+ with gr.Blocks(title="📄 PDF Chatbot") as demo:
41
+ gr.Markdown("## 📄 Interactive PDF Reader + Chatbot\nUpload a PDF and chat with it using GPT-4.")
42
+
43
+ with gr.Row():
44
+ pdf_file = gr.File(label="Upload PDF", file_types=[".pdf"])
45
+ upload_btn = gr.Button("Process PDF")
46
+
47
+ status = gr.Textbox(label="Status", interactive=False)
48
+
49
+ chatbot = gr.ChatInterface(
50
+ fn=chat_with_pdf,
51
+ chatbot=gr.Chatbot(height=400),
52
+ textbox=gr.Textbox(placeholder="Ask anything from the PDF...", lines=2),
53
+ title="Talk with your PDF",
54
+ theme="compact",
55
+ examples=["Summarize this document.", "What are the key points?", "Is there a deadline mentioned?"],
56
+ cache_examples=False
57
+ )
58
+
59
+ upload_btn.click(fn=upload_pdf, inputs=pdf_file, outputs=status)
60
+
61
+ demo.launch(share=True)