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