parvezalmuqtadir commited on
Commit
16da659
1 Parent(s): e7d819e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -27
app.py CHANGED
@@ -1,18 +1,24 @@
1
  import os
 
2
  import streamlit as st
3
  from streamlit_chat import message
4
- from pdfquery import PDFQuery
5
  from dotenv import load_dotenv
6
  from gtts import gTTS
7
- import io
8
-
 
 
 
 
 
 
9
  # Load environment variables from .env file
10
  load_dotenv()
11
 
12
  st.set_page_config(page_title="Wise Chat Labs")
13
 
14
  def display_messages():
15
- st.subheader("Chat with your pdf")
16
  for i, (msg, is_user) in enumerate(st.session_state["messages"]):
17
  message(msg, is_user=is_user, key=str(i))
18
  st.session_state["thinking_spinner"] = st.empty()
@@ -25,45 +31,61 @@ def generate_tts_audio(text):
25
  return audio_bytes
26
 
27
  def play_audio(audio_bytes):
28
- audio_bytes.seek(0) # Ensure the pointer is at the beginning of the IO stream
29
  st.audio(audio_bytes, format='audio/mp3', start_time=0)
30
 
31
- def process_input():
32
- if st.session_state["user_input"] and len(st.session_state["user_input"].strip()) > 0:
33
- user_text = st.session_state["user_input"].strip()
34
- with st.session_state["thinking_spinner"], st.spinner("Thinking..."):
35
- query_text = st.session_state["pdfquery"].ask(user_text)
36
-
37
- audio_response = generate_tts_audio(query_text)
38
- play_audio(audio_response)
39
-
40
- st.session_state["messages"].append((user_text, True))
41
- st.session_state["messages"].append((query_text, False))
42
 
43
  def load_and_ingest_document():
44
- file_path = 'osha.pdf' # PDF file is assumed to be in the same directory as this script
45
  if os.path.exists(file_path):
46
  st.session_state["pdfquery"].ingest(file_path)
47
  else:
48
- st.error("PDF file not found. Please ensure 'data.pdf' is in the root directory.")
49
 
50
  def is_openai_api_key_set() -> bool:
51
- return len(st.session_state["OPENAI_API_KEY"]) > 0
 
 
 
 
 
52
 
53
  def main():
54
- if len(st.session_state) == 0:
55
- st.session_state["messages"] = []
56
- st.session_state["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY", "")
 
 
 
 
 
57
  if is_openai_api_key_set():
58
- st.session_state["pdfquery"] = PDFQuery(st.session_state["OPENAI_API_KEY"])
59
  load_and_ingest_document()
60
  else:
61
- st.session_state["pdfquery"] = None
 
62
 
63
- st.header("Wise Chat Labs - Your Ultimate Chatbot")
 
 
64
 
65
- display_messages()
66
- st.text_input("Message", key="user_input", disabled=not is_openai_api_key_set(), on_change=process_input)
 
 
 
 
 
67
 
68
  if __name__ == "__main__":
69
  main()
 
1
  import os
2
+ import io
3
  import streamlit as st
4
  from streamlit_chat import message
 
5
  from dotenv import load_dotenv
6
  from gtts import gTTS
7
+ from audiorecorder import audiorecorder
8
+ from pdfquery import PDFQuery
9
+ import whisper
10
+ import urllib.request
11
+ from urllib.request import urlopen
12
+ import ssl
13
+ import json
14
+ ssl._create_default_https_context = ssl._create_unverified_context
15
  # Load environment variables from .env file
16
  load_dotenv()
17
 
18
  st.set_page_config(page_title="Wise Chat Labs")
19
 
20
  def display_messages():
21
+ st.subheader("Chat with your PDF")
22
  for i, (msg, is_user) in enumerate(st.session_state["messages"]):
23
  message(msg, is_user=is_user, key=str(i))
24
  st.session_state["thinking_spinner"] = st.empty()
 
31
  return audio_bytes
32
 
33
  def play_audio(audio_bytes):
34
+ audio_bytes.seek(0)
35
  st.audio(audio_bytes, format='audio/mp3', start_time=0)
36
 
37
+ def process_input(user_text):
38
+ with st.session_state["thinking_spinner"], st.spinner("Thinking..."):
39
+ query_text = st.session_state["pdfquery"].ask(user_text)
40
+
41
+ audio_response = generate_tts_audio(query_text)
42
+ play_audio(audio_response)
43
+
44
+ st.session_state["messages"].append((user_text, True))
45
+ st.session_state["messages"].append((query_text, False))
 
 
46
 
47
  def load_and_ingest_document():
48
+ file_path = 'osha.pdf'
49
  if os.path.exists(file_path):
50
  st.session_state["pdfquery"].ingest(file_path)
51
  else:
52
+ st.error("PDF file not found. Please ensure 'osha.pdf' is in the root directory.")
53
 
54
  def is_openai_api_key_set() -> bool:
55
+ return len(st.session_state.get("OPENAI_API_KEY", "")) > 0
56
+
57
+ def transcribe_audio_to_text(audio_file_path):
58
+ model = whisper.load_model("base")
59
+ result = model.transcribe(audio_file_path)
60
+ return result["text"]
61
 
62
  def main():
63
+ if 'messages' not in st.session_state:
64
+ st.session_state['messages'] = []
65
+
66
+ st.header("Wise Chat Labs - Your Ultimate Chatbot")
67
+ display_messages()
68
+
69
+ if 'OPENAI_API_KEY' not in st.session_state:
70
+ st.session_state['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY", "")
71
  if is_openai_api_key_set():
72
+ st.session_state['pdfquery'] = PDFQuery(st.session_state["OPENAI_API_KEY"])
73
  load_and_ingest_document()
74
  else:
75
+ st.session_state['pdfquery'] = None
76
+ st.error("OpenAI API key is not set. Please check your .env file.")
77
 
78
+ user_input = st.text_input("Type your message here...", key="user_input")
79
+ if user_input:
80
+ process_input(user_input)
81
 
82
+ st.title("Or speak your message...")
83
+ audio = audiorecorder("Start Talking", "Click to stop", key="audio_recorder")
84
+ if audio is not None and hasattr(audio, 'export'):
85
+ audio_file_path = "user_audio_input.wav"
86
+ audio.export(audio_file_path, format="wav")
87
+ user_text = transcribe_audio_to_text(audio_file_path)
88
+ process_input(user_text)
89
 
90
  if __name__ == "__main__":
91
  main()