AbenzaFran's picture
trace any
7c11bd6
raw
history blame
2.75 kB
import os
import re
import streamlit as st
from dotenv import load_dotenv
import openai
from langsmith import traceable
# Load environment variables
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
openai.api_key = api_key
# Helper function to remove citations
def remove_citation(text: str) -> str:
pattern = r"【\d+†\w+】"
return re.sub(pattern, "πŸ“š", text)
# Initialize session state for messages and thread_id
if "messages" not in st.session_state:
st.session_state["messages"] = []
if "thread_id" not in st.session_state:
st.session_state["thread_id"] = None
st.title("Solution Specifier A")
# Traceable function for predict logic
@traceable
def get_response(user_input: str, thread_id: str = None):
"""
This function calls OpenAI API to get a response.
If thread_id is provided, it continues the conversation.
Otherwise, it starts a new conversation.
"""
messages = [{"role": "user", "content": user_input}]
if thread_id:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
user=thread_id
)
else:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
return response["choices"][0]["message"]["content"], response["id"]
# Streamlit app logic
def predict(user_input: str) -> str:
if st.session_state["thread_id"] is None:
response_text, thread_id = get_response(user_input)
st.session_state["thread_id"] = thread_id
else:
response_text, _ = get_response(user_input, thread_id=st.session_state["thread_id"])
return remove_citation(response_text)
# Display any existing messages (from a previous run or refresh)
for msg in st.session_state["messages"]:
if msg["role"] == "user":
with st.chat_message("user"):
st.write(msg["content"])
else:
with st.chat_message("assistant"):
st.write(msg["content"])
# Create the chat input widget at the bottom of the page
user_input = st.chat_input("Type your message here...")
# When the user hits ENTER on st.chat_input
if user_input:
# Add the user message to session state
st.session_state["messages"].append({"role": "user", "content": user_input})
# Display the user's message
with st.chat_message("user"):
st.write(user_input)
# Get the assistant's response
response_text = predict(user_input)
# Add the assistant response to session state
st.session_state["messages"].append({"role": "assistant", "content": response_text})
# Display the assistant's reply
with st.chat_message("assistant"):
st.write(response_text)