way2mhemanth commited on
Commit
1e29e93
·
1 Parent(s): 2749b3c
Files changed (1) hide show
  1. app.py +30 -27
app.py CHANGED
@@ -4,9 +4,19 @@ import io
4
  from gemini_kit import get_llm
5
  from langchain_core.messages import HumanMessage
6
 
 
 
 
 
 
 
 
 
7
  def upload_pdf():
 
 
8
  uploaded_file = st.file_uploader("Choose a PDF file", type="pdf")
9
- if uploaded_file is not None:
10
  st.write("Waiting for pdf to be extracted ...")
11
 
12
  pdf_reader = PdfReader(io.BytesIO(uploaded_file.read()))
@@ -14,58 +24,51 @@ def upload_pdf():
14
  for page_num in range(len(pdf_reader.pages)):
15
  page = pdf_reader.pages[page_num]
16
  text += page.extract_text()
17
- return text
18
- return None
19
- def chatbot_ui(knowledge):
20
- if "messages" not in st.session_state:
21
- st.session_state.messages = []
22
-
 
 
23
  user_input = st.text_input("You: ", "")
24
  if user_input:
25
  st.session_state.messages.append({"user": user_input})
26
- # Here you can add your own logic to generate the response
27
- if knowledge:
28
- response = generate_response(knowledge,user_input)
29
  else:
30
  response = "Please upload a PDF to get started."
31
- # print(response)
32
  st.session_state.messages.append({"Assistant": response})
33
- chat = st.button("clear chat")
 
34
  if chat:
35
  st.session_state.messages = []
36
- st.session_state.chat = []
37
  for message in st.session_state.messages:
38
  if "user" in message:
39
  st.markdown(f"**You:** {message['user']}")
40
  else:
41
  st.markdown(f"**Assistant:** {message['Assistant']}")
42
 
43
- def generate_response(knowledge,user_input):
44
- # Placeholder for response generation logic
45
- message = f"This is the text extracted from the pdf: {knowledge}. The user query is {user_input}."
46
- # print(message)
47
  llm = get_llm()
48
-
49
  try:
50
  response = llm.invoke(message).content
51
  except Exception as e:
52
- response ="Error occurred. This might due to exhaustion of LLM quota. or your pdf might be much bigger. The exact error: "+str(e)
53
- print(response)
54
  return response
55
 
56
  def main():
57
  st.title("NCERT PDF Based AI Assistant")
58
 
59
- # PDF Upload Section
60
  st.header("Upload a PDF")
61
- knowledge = upload_pdf()
62
- if knowledge:
63
- st.write("PDF Text Extracted. you can chat now!!")
64
- # st.write(pdf_text)
65
 
66
- # Chatbot Section
67
  st.header("Chatbot")
68
- chatbot_ui(knowledge)
69
 
70
  if __name__ == "__main__":
71
  main()
 
4
  from gemini_kit import get_llm
5
  from langchain_core.messages import HumanMessage
6
 
7
+ # Initialize session state for the PDF text and messages
8
+ if 'pdf' not in st.session_state:
9
+ st.session_state.pdf = ""
10
+
11
+ if 'messages' not in st.session_state:
12
+ st.session_state.messages = []
13
+ if 'extract' not in st.session_state:
14
+ st.session_state.extract = True
15
  def upload_pdf():
16
+ print(st.session_state.extract)
17
+ print(st.session_state.pdf[:10])
18
  uploaded_file = st.file_uploader("Choose a PDF file", type="pdf")
19
+ if (uploaded_file is not None) & st.session_state.extract:
20
  st.write("Waiting for pdf to be extracted ...")
21
 
22
  pdf_reader = PdfReader(io.BytesIO(uploaded_file.read()))
 
24
  for page_num in range(len(pdf_reader.pages)):
25
  page = pdf_reader.pages[page_num]
26
  text += page.extract_text()
27
+
28
+ # Store the extracted text in session state
29
+ st.session_state.pdf = text
30
+ st.session_state.extract = False
31
+ st.write("PDF Text Extracted. You can chat now!!")
32
+ if uploaded_file is None:
33
+ st.session_state.extract = True
34
+ def chatbot_ui():
35
  user_input = st.text_input("You: ", "")
36
  if user_input:
37
  st.session_state.messages.append({"user": user_input})
38
+ if st.session_state.pdf:
39
+ response = generate_response(st.session_state.pdf, user_input)
 
40
  else:
41
  response = "Please upload a PDF to get started."
 
42
  st.session_state.messages.append({"Assistant": response})
43
+
44
+ chat = st.button("Clear Chat")
45
  if chat:
46
  st.session_state.messages = []
47
+
48
  for message in st.session_state.messages:
49
  if "user" in message:
50
  st.markdown(f"**You:** {message['user']}")
51
  else:
52
  st.markdown(f"**Assistant:** {message['Assistant']}")
53
 
54
+ def generate_response(pdf, user_input):
55
+ message = f"This is the text extracted from the pdf: {pdf}. The user query is {user_input}."
 
 
56
  llm = get_llm()
 
57
  try:
58
  response = llm.invoke(message).content
59
  except Exception as e:
60
+ response = "Error occurred. This might be due to exhaustion of LLM quota or your PDF might be much bigger. The exact error: " + str(e)
 
61
  return response
62
 
63
  def main():
64
  st.title("NCERT PDF Based AI Assistant")
65
 
 
66
  st.header("Upload a PDF")
67
+ # Call upload_pdf() only when the file uploader is interacted with
68
+ upload_pdf()
 
 
69
 
 
70
  st.header("Chatbot")
71
+ chatbot_ui()
72
 
73
  if __name__ == "__main__":
74
  main()