shahed125238 commited on
Commit
5c8670c
·
verified ·
1 Parent(s): 746712d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -85
app.py CHANGED
@@ -1,106 +1,53 @@
1
  import streamlit as st
2
  from PyPDF2 import PdfReader
3
- from langchain.text_splitter import RecursiveCharacterTextSplitter
4
  import os
5
- from langchain_google_genai import GoogleGenerativeAIEmbeddings
6
- import google.generativeai as genai
7
- from langchain.vectorstores import FAISS
8
- from langchain_google_genai import ChatGoogleGenerativeAI
9
- from langchain.chains.question_answering import load_qa_chain
10
- from langchain.prompts import PromptTemplate
11
  from dotenv import load_dotenv
12
 
 
13
  load_dotenv()
14
- os.getenv("GOOGLE_API_KEY")
15
- genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
16
-
17
-
18
-
19
-
20
 
 
 
 
 
 
 
21
 
22
  def get_pdf_text(pdf_docs):
23
- text=""
24
  for pdf in pdf_docs:
25
- pdf_reader= PdfReader(pdf)
26
  for page in pdf_reader.pages:
27
- text+= page.extract_text()
28
- return text
29
-
30
-
31
-
32
- def get_text_chunks(text):
33
- text_splitter = RecursiveCharacterTextSplitter(chunk_size=10000, chunk_overlap=1000)
34
- chunks = text_splitter.split_text(text)
35
- return chunks
36
-
37
-
38
- def get_vector_store(text_chunks):
39
- embeddings = GoogleGenerativeAIEmbeddings(model = "models/embedding-001")
40
- vector_store = FAISS.from_texts(text_chunks, embedding=embeddings)
41
- vector_store.save_local("faiss_index")
42
-
43
-
44
- def get_conversational_chain():
45
-
46
- prompt_template = """
47
- Answer the question as detailed as possible from the provided context, make sure to provide all the details, if the answer is not in
48
- provided context just say, "answer is not available in the context", don't provide the wrong answer\n\n
49
- Context:\n {context}?\n
50
- Question: \n{question}\n
51
-
52
- Answer:
53
- """
54
-
55
- model = ChatGoogleGenerativeAI(model="gemini-pro",
56
- temperature=0.3)
57
-
58
- prompt = PromptTemplate(template = prompt_template, input_variables = ["context", "question"])
59
- chain = load_qa_chain(model, chain_type="stuff", prompt=prompt)
60
-
61
- return chain
62
-
63
-
64
-
65
- def user_input(user_question):
66
- embeddings = GoogleGenerativeAIEmbeddings(model = "models/embedding-001")
67
-
68
- new_db = FAISS.load_local("faiss_index", embeddings)
69
- docs = new_db.similarity_search(user_question)
70
-
71
- chain = get_conversational_chain()
72
-
73
-
74
- response = chain(
75
- {"input_documents":docs, "question": user_question}
76
- , return_only_outputs=True)
77
-
78
- print(response)
79
- st.write("Reply: ", response["output_text"])
80
-
81
-
82
-
83
 
84
  def main():
85
- st.set_page_config("Chat PDF")
86
- st.header("Chat with PDF using Gemini💁")
87
-
88
- user_question = st.text_input("Ask a Question from the PDF Files")
89
 
90
- if user_question:
91
- user_input(user_question)
92
 
93
- with st.sidebar:
94
- st.title("Menu:")
95
- pdf_docs = st.file_uploader("Upload your PDF Files and Click on the Submit & Process Button", accept_multiple_files=True)
96
- if st.button("Submit & Process"):
97
  with st.spinner("Processing..."):
98
  raw_text = get_pdf_text(pdf_docs)
99
- text_chunks = get_text_chunks(raw_text)
100
- get_vector_store(text_chunks)
101
- st.success("Done")
 
102
 
 
 
 
103
 
 
 
 
 
 
104
 
105
  if __name__ == "__main__":
106
- main()
 
1
  import streamlit as st
2
  from PyPDF2 import PdfReader
3
+ from transformers import pipeline
4
  import os
 
 
 
 
 
 
5
  from dotenv import load_dotenv
6
 
7
+ # Load environment variables
8
  load_dotenv()
9
+ os.getenv("HUGGINGFACE_TOKEN")
 
 
 
 
 
10
 
11
+ # Initialize the Hugging Face pipeline for question-answering
12
+ qa_pipeline = pipeline(
13
+ "question-answering",
14
+ model="deepset/roberta-base-squad2",
15
+ tokenizer="deepset/roberta-base-squad2",
16
+ )
17
 
18
  def get_pdf_text(pdf_docs):
19
+ text = ""
20
  for pdf in pdf_docs:
21
+ pdf_reader = PdfReader(pdf)
22
  for page in pdf_reader.pages:
23
+ text += page.extract_text() + "\n"
24
+ return text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  def main():
27
+ st.set_page_config(page_title="Chat with PDF", page_icon="📄")
28
+ st.header("Chat with PDF using Hugging Face 🤖")
 
 
29
 
30
+ # Upload PDF files
31
+ pdf_docs = st.file_uploader("Upload your PDF Files", accept_multiple_files=True)
32
 
33
+ if st.button("Submit & Process"):
34
+ if pdf_docs:
 
 
35
  with st.spinner("Processing..."):
36
  raw_text = get_pdf_text(pdf_docs)
37
+ st.session_state.raw_text = raw_text # Store raw text in session state
38
+ st.success("PDF processed successfully!")
39
+ else:
40
+ st.warning("Please upload at least one PDF file.")
41
 
42
+ # User input for questions
43
+ if 'raw_text' in st.session_state:
44
+ user_question = st.text_input("Ask a Question from the PDF Files")
45
 
46
+ if user_question:
47
+ response = qa_pipeline(question=user_question, context=st.session_state.raw_text)
48
+ st.write("Answer:", response['answer'])
49
+ else:
50
+ st.info("Please upload PDF files to start chatting.")
51
 
52
  if __name__ == "__main__":
53
+ main()