scai / app.py
IAMTFRMZA's picture
app.py
fd85cd0 verified
raw
history blame
2.82 kB
import streamlit as st
from openai import OpenAI
import time
st.set_page_config(page_title="Basic Chatbot with Streamlit and OpenAI Assistant")
st.title("Basic Chatbot with Streamlit and OpenAI Assistant")
st.caption("Features text streaming using OpenAI Assistants API")
# Sidebar for API Key input and file uploads
with st.sidebar:
OPENAI_API_KEY = st.text_input("Enter your OpenAI API Key", type="password")
st.subheader("Minutes Uploads")
uploaded_files = st.file_uploader("Upload meeting minutes (PDF/DOCX)", type=["pdf", "docx"], accept_multiple_files=True)
if uploaded_files:
st.write("### Uploaded Files:")
for uploaded_file in uploaded_files:
st.write(f"- {uploaded_file.name}")
# Initialize OpenAI client
if OPENAI_API_KEY:
client = OpenAI(api_key=OPENAI_API_KEY)
else:
st.error("Please enter your OpenAI API key to continue.")
st.stop()
ASSISTANT_ID = "asst_rd9h8PfYuOmHbkvOF3RTmVfn"
# Session state for chat messages
if "messages" not in st.session_state:
st.session_state["messages"] = []
# Display all chat messages
for message in st.session_state.messages:
role, content = message["role"], message["content"]
if role == "assistant" and "|" in content: # Detect table formatting
st.chat_message(role).write(content, unsafe_allow_html=True)
else:
st.chat_message(role).write(content)
# User input
if prompt := st.chat_input():
st.session_state.messages.append({"role": "user", "content": prompt})
st.chat_message("user").write(prompt)
# Send message to OpenAI Assistant
try:
thread = client.beta.threads.create()
thread_id = thread.id
client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=prompt
)
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=ASSISTANT_ID
)
while True:
run_status = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if run_status.status == "completed":
break
time.sleep(1)
messages = client.beta.threads.messages.list(thread_id=thread_id)
assistant_message = messages.data[0].content[0].text.value
# Detect table format and use Markdown
if "|" in assistant_message and "---" in assistant_message:
formatted_message = f"```\n{assistant_message}\n```"
st.chat_message("assistant").write(formatted_message, unsafe_allow_html=True)
else:
st.chat_message("assistant").write(assistant_message)
st.session_state.messages.append({"role": "assistant", "content": assistant_message})
except Exception as e:
st.error(f"Error: {str(e)}")