agetech / app.py
vsouza
update text_input
0165aee
Raw
History Blame Contribute Delete
3.36 kB
import openai
import streamlit as st
import extra_streamlit_components as stx
import uuid
import time
openai.api_key = st.secrets["OPENAI_API_KEY"]
assistant_id = st.secrets["OPENAI_ASSISTANT_ID"]
client = openai
st.set_page_config(page_title="Assistant API Chat", page_icon=":speech_balloon:")
@st.cache_resource(experimental_allow_widgets=True)
def get_manager():
return stx.CookieManager()
cookie_manager = get_manager()
st.session_state.thread_id = cookie_manager.get('thread_id')
if "session_id" not in st.session_state:
st.session_state.session_id = str(uuid.uuid4())
if "messages" not in st.session_state:
st.session_state.messages = []
st.title(":speech_balloon: Assistant API Chat")
with st.sidebar:
st.caption(f"**Session ID**: \n {st.session_state.session_id}")
st.header("Configuration")
thread_id = st.text_input("Enter your Thread ID:",
placeholder="Leave empty to start a new thread")
c1, c2 = st.columns(2)
if c1.button("Start Chat", use_container_width=True):
if thread_id:
st.session_state.thread_id = thread_id
else:
thread = client.beta.threads.create(
metadata={
'session_id': st.session_state.session_id,
}
)
st.session_state.thread_id = thread.id
cookie_manager.set('thread_id', st.session_state.thread_id)
if c2.button("Clear Chat", use_container_width=True):
cookie_manager.delete('thread_id')
st.session_state.thread_id = None
#def process_citations(message):
# message_content = message.content[0].text
# annotations = message_content.annotations if hasattr(message_content, 'annotations') else []
# citations = []
# full_response = message_content.value + '\n\n' + '\n'.join(citations)
# return full_response
if st.session_state.thread_id:
st.session_state.messages = client.beta.threads.messages.list(
thread_id=st.session_state.thread_id
)
st.caption(f"**Thread ID**: {st.session_state.thread_id}")
for message in reversed(st.session_state.messages.data):
with st.chat_message(message.role):
st.markdown(message.content[0].text.value)
if prompt := st.chat_input():
with st.chat_message("user"):
st.markdown(prompt)
client.beta.threads.messages.create(
thread_id=st.session_state.thread_id,
role="user",
content=prompt
)
run = client.beta.threads.runs.create(
thread_id=st.session_state.thread_id,
assistant_id=assistant_id,
)
while run.status != 'completed':
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=st.session_state.thread_id,
run_id=run.id
)
st.session_state.messages = client.beta.threads.messages.list(
thread_id=st.session_state.thread_id
)
for message in reversed(st.session_state.messages.data):
if message.run_id == run.id and message.role == "assistant":
with st.chat_message("assistant"):
st.markdown(message.content[0].text.value)
else:
st.write("\n")
st.info("Click on 'Start Chat' to start/continue a thread.", icon='⚠')