Spaces:
Configuration error
Configuration error
import streamlit as st | |
import time | |
import requests | |
import voicetotext | |
from audio_recorder_streamlit import audio_recorder | |
import os | |
from openai import OpenAI | |
import base64 | |
import subprocess | |
# openai.api_key = os.getenv("OPENAI_API_KEY") | |
client = OpenAI(api_key="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") | |
# Create a container for the microphone and audio recording | |
# footer_container = st.container() | |
# with footer_container: | |
# audio_bytes = audio_recorder() | |
# Start Server.py as a background process | |
if "server_started" not in st.session_state: | |
st.session_state.server_started = True | |
subprocess.Popen(["python", "ServerV2.py"]) | |
def generate_response(message, value): | |
new_data = { | |
"Question": message, | |
"User_Name" : st.session_state.user_name, | |
"User_Phone" : st.session_state.user_phone, | |
"User_Email" : st.session_state.user_email, | |
"Pincode" : st.session_state.pincode, | |
"Language":st.session_state.language | |
} | |
if value == 0: | |
url_post = "http://localhost:8088/askquery" | |
post_response = requests.post(url_post, json=new_data) | |
response_json = post_response.json() | |
return response_json | |
else: | |
url_post = "http://localhost:8088/askvector" | |
post_response = requests.post(url_post, json=new_data) | |
response_json = post_response.json() | |
return response_json | |
def msendpin(pincode): | |
new_data={ | |
"Pincode":st.session_state.pincode | |
} | |
url_post = "http://localhost:8088/maps" | |
post_response = requests.post(url_post, json=new_data) | |
response_json = post_response.json() | |
return response_json | |
def senddetail(user_name,user_phone, user_email, pincode,language): | |
new_data = { | |
"User_Name" : user_name, | |
"User_Phone" : user_phone, | |
"User_Email" : user_email, | |
"Pincode" : pincode, | |
"Language":language | |
} | |
url_post = "http://localhost:8088/askd" | |
post_response = requests.post(url_post, json=new_data) | |
response_json = post_response.json() | |
return response_json | |
def getdetail(): | |
user_name = st.text_input("Enter your Name: ", type="default") | |
user_phone = st.text_input("Enter your phone number: ", type="default") | |
user_email = st.text_input("Enter your email: ", type="default") | |
pincode = st.text_input("Enter your pincode: ", type="default") | |
language = "English" | |
# language=st.selectbox("Select a language...",("English","Hindi","Kannada","tamil")) | |
if st.button("Submit"): | |
if (user_name and user_phone and user_email and pincode and language): | |
response = senddetail(user_name,user_phone, user_email, pincode,language) | |
print(response) | |
if (response['status']==1): | |
st.success("Successfully sent data") | |
else: | |
st.error("Error in sending data") | |
else: | |
st.error("Please enter all the details") | |
return user_name,user_phone,user_email,pincode,language | |
def createside(): | |
with st.sidebar: | |
v1 = st.checkbox("Search Trusted Sources") | |
if v1 not in st.session_state: | |
st.session_state.v1 = v1 | |
if(int(st.session_state.v1)==0): | |
st.session_state.img="./assets/red.png" | |
else: | |
st.session_state.img="./assets/blue.png" | |
# st.button("Flag Content",on_click=flag()) | |
pages = ["User info", "Chat","Services"] | |
page = st.radio("Select a page:", pages) | |
return page | |
def services_page(): | |
maps= st.button("Find nearest hospitals") | |
if maps: | |
hospital_info = msendpin(st.session_state.pincode) | |
st.markdown("<h3 style='text-align: left;'>Hospital 1 details </h3>", unsafe_allow_html=True) | |
st.markdown("Name: "+hospital_info['data']['hospital1'][0]) | |
st.markdown("Address: "+hospital_info['data']['hospital1'][1]+" Phone Number:"+hospital_info['data']['hospital1'][2]) | |
st.markdown("<h3 style='text-align: left;'>Hospital 2 details </h3>", unsafe_allow_html=True) | |
st.markdown("Name: "+hospital_info['data']['hospital2'][0]) | |
st.markdown("Address: "+hospital_info['data']['hospital2'][1]+" Phone Number:"+hospital_info['data']['hospital2'][2]) | |
st.markdown("<h3 style='text-align: left;'>Hospital 3 details </h3>", unsafe_allow_html=True) | |
st.markdown("Name: "+hospital_info['data']['hospital3'][0]) | |
st.markdown("Address: "+hospital_info['data']['hospital3'][1]+" Phone Number:"+hospital_info['data']['hospital3'][2]) | |
ssession= st.button("Book a session") | |
if ssession: | |
sendm() | |
#mailer.sendem("name","chathistory") | |
#mailer.sendem() | |
#if res==1: | |
st.success("Successfully booked a session, please check your email for further details") | |
def sendm(): | |
new_data={ | |
"User_name":st.session_state.user_name, | |
} | |
print("sendm called") | |
url_post = "http://localhost:8088/maill" | |
post_response = requests.post(url_post, json=new_data) | |
#response_json = post_response.json() | |
# return #response_json | |
def text_to_speech(input_text): | |
response = client.audio.speech.create( | |
model="tts-1", | |
voice="nova", | |
input=input_text | |
) | |
webm_file_path = "temp_audio_play.mp3" | |
with open(webm_file_path, "wb") as f: | |
response.stream_to_file(webm_file_path) | |
return webm_file_path | |
def autoplay_audio(file_path: str): | |
with open(file_path, "rb") as f: | |
data = f.read() | |
b64 = base64.b64encode(data).decode("utf-8") | |
md = f""" | |
<audio autoplay> | |
<source src="data:audio/mp3;base64,{b64}" type="audio/mp3"> | |
</audio> | |
""" | |
st.markdown(md, unsafe_allow_html=True) | |
def sendinput(question,avatar, audio_output=False): | |
with st.chat_message("user",avatar=st.session_state.userimg): | |
st.markdown(question) | |
st.session_state.messages.append({"role": "user", "content": question,"avatar":st.session_state.userimg}) | |
response = generate_response(question, int(st.session_state.v1)) | |
answer = response['data']['Answer'] | |
if audio_output == True: | |
audio_file = text_to_speech(answer) | |
autoplay_audio(audio_file) | |
os.remove(audio_file) | |
full_response = "" | |
with st.chat_message("assistant",avatar=avatar): | |
message_placeholder = st.empty() | |
for chunk in answer.split(): | |
full_response += chunk + " " | |
time.sleep(0.05) | |
message_placeholder.markdown(full_response + "▌") | |
message_placeholder.markdown(full_response) | |
if(response['data']['Source1']!=""): | |
st.info(response['data']['Source1']) | |
st.info(response['data']['Source2']) | |
follow = response['data']['Followup'] | |
#follow="Follow up question:"+follow | |
st.success("**Follow up question:**") | |
st.success(follow) | |
st.session_state.messages.append({"role": "assistant", "content": answer,"avatar":st.session_state.img}) | |
def chat_page(): | |
# Create messages list in sessionstate | |
if "messages" not in st.session_state: | |
st.session_state.messages = [] | |
if "help" not in st.session_state: | |
st.session_state.help = [] | |
## Print messages from chat history on rerun | |
for message in st.session_state.messages: | |
with st.chat_message(message["role"],avatar=message["avatar"]): | |
st.markdown(message["content"]) | |
if st.sidebar.button("Start Audio Input"): | |
audio_output = True | |
with st.spinner("Listening..."): | |
recognized_text = voicetotext.listen() | |
sendinput(recognized_text,st.session_state.img, audio_output) | |
var = "Ask a mental health question..." | |
if a := st.chat_input(var): | |
sendinput(a,st.session_state.img) | |
def main(): | |
st.title("MindEase") | |
if "user_name" not in st.session_state: | |
st.session_state.user_name = "" | |
if "user_phone" not in st.session_state: | |
st.session_state.user_phone = "" | |
if "user_email" not in st.session_state: | |
st.session_state.user_email = "" | |
if "pincode" not in st.session_state: | |
st.session_state.pincode = "" | |
if "userimg" not in st.session_state: | |
st.session_state.userimg="./assets/img.png" | |
if "language" not in st.session_state: | |
st.session_state.language="English" | |
page=createside() | |
# st.sidebar.button("Flag content") | |
if page == "User info": | |
user_detail = getdetail() | |
if (user_detail[0] and user_detail[1] and user_detail[2] and user_detail[3] and user_detail[4]): | |
st.session_state.user_name = user_detail[0] | |
st.session_state.user_phone = user_detail[1] | |
st.session_state.user_email = user_detail[2] | |
st.session_state.pincode = user_detail[3] | |
st.session_state.language=user_detail[4] | |
elif page == "Chat": | |
if (st.session_state.user_phone!=""): | |
chat_page() | |
else: | |
st.warning("Please enter your details first on the 'User info' page.") | |
elif page == "Services": # Add a new condition for "Help Services" | |
services_page() | |
if __name__ == "__main__": | |
main() | |