SaileshSivan's picture
Update app.py
d906520
import streamlit as st
import time
from langchain.schema import HumanMessage, SystemMessage, AIMessage
from langchain.chat_models import ChatOpenAI
import openai
from IPython.display import Audio
import base64
def get_chatmodel_response(question):
# Retry logic
max_retries = 3
retries = 0
while retries < max_retries:
try:
st.session_state['flowmessages'].append(HumanMessage(content=question))
answer = chat(st.session_state['flowmessages'])
st.session_state['flowmessages'].append(AIMessage(content=answer.content))
return answer.content
except Exception as e:
print(f"Error: {e}")
if "Rate limit" in str(e):
print(f"Rate limit exceeded. Waiting and retrying...")
time.sleep(5) # Adjust the waiting time as needed
retries += 1
else:
print("Unhandled exception. Please try again later.")
break
print("Exceeded the maximum number of retries. Please try again later.")
return None
# Streamlit app setup
st.set_page_config(page_title="Sisi Chatbot")
st.snow()
st.balloons()
st.header("Hey, I'm Sisi!")
from dotenv import load_dotenv
load_dotenv()
import os
# ChatOpenAI class
chat = ChatOpenAI(temperature=0.5)
if 'flowmessages' not in st.session_state:
st.session_state['flowmessages'] = [
SystemMessage(content="You are an AI Friend, your name is Sisi and you was developed by Sailesh on December 5 2023. First get the name of the user and become his friend. then, You have to be a nice friend and an AI assistant to the users and help them with what information they need. It should be short and sharp")
]
# Streamlit UI
with st.form(key='my_form',clear_on_submit=True):
st.markdown(
"""
<style>
.stTextInput {
border-radius: 15px;
padding: 12px;
margin-top: 10px;
margin-bottom: 10px;
box-shadow: 2px 2px 5px #888888;
border: 1px solid #dddddd;
font-size: 16px;
width: 100%; /* Make the input box full width */
height: 100px; /* Set the height of the input box */
}
</style>
""",
unsafe_allow_html=True
)
input_question = st.text_input("Type here.", key="input")
submit = st.form_submit_button("Submit")
# If the "Submit" button is clicked
if submit:
# Display loading message while processing
with st.spinner("Analyzing..."):
st.header(":blue[You]", divider=True)
st.caption(input_question)
st.header("Sisi", divider=True)
response = get_chatmodel_response(input_question)
if response is not None:
st.write(response)
# Text-to-speech
audio_response = openai.audio.speech.create(
model="tts-1",
voice="nova",
input=response,
response_format="mp3",
speed=1.0
)
# Embed audio in the webpage without saving it
st.header(':blue[Listen] :loud_sound:')
st.audio(audio_response.content,format="audio/wav",start_time=0)
else:
st.subheader("Error: Unable to get response. Please try again later.")