|
|
|
|
|
def app_chat(): |
|
|
|
|
|
if "messages" not in st.session_state: |
|
st.session_state.messages = [] |
|
|
|
for message in st.session_state.messages: |
|
with st.chat_message(message["role"]): |
|
st.markdown(message["content"]) |
|
|
|
with st.chat_message("assistant"): |
|
st.markdown("Hello there! How can I assist you today?") |
|
|
|
if user_message := st.chat_input("Enter message"): |
|
st.chat_message("user").markdown(user_message) |
|
st.session_state.messages.append({"role": "user", "content": user_message}) |
|
|
|
selected_tools = [tool_loader.tools[idx] for idx, checkbox in enumerate(tool_checkboxes) if checkbox] |
|
|
|
response = handle_submission(user_message, selected_tools, url_endpoint) |
|
|
|
with st.chat_message("assistant"): |
|
if response is None: |
|
st.warning("The agent's response is None. Please try again. Generate an image of a flying horse.") |
|
elif isinstance(response, Image.Image): |
|
st.image(response) |
|
elif isinstance(response, AudioSegment): |
|
st.audio(response) |
|
elif isinstance(response, int): |
|
st.markdown(response) |
|
elif isinstance(response, str): |
|
if "emojified_text" in response: |
|
st.markdown(f"{response['emojified_text']}") |
|
else: |
|
st.markdown(response) |
|
elif isinstance(response, list): |
|
for item in response: |
|
st.markdown(item) |
|
elif isinstance(response, pd.DataFrame): |
|
st.dataframe(response) |
|
elif isinstance(response, pd.Series): |
|
st.table(response.iloc[0:10]) |
|
elif isinstance(response, dict): |
|
st.json(response) |
|
elif isinstance(response, st.graphics_altair.AltairChart): |
|
st.altair_chart(response) |
|
elif isinstance(response, st.graphics_bokeh.BokehChart): |
|
st.bokeh_chart(response) |
|
elif isinstance(response, st.graphics_graphviz.GraphvizChart): |
|
st.graphviz_chart(response) |
|
elif isinstance(response, st.graphics_plotly.PlotlyChart): |
|
st.plotly_chart(response) |
|
elif isinstance(response, st.graphics_pydeck.PydeckChart): |
|
st.pydeck_chart(response) |
|
elif isinstance(response, matplotlib.figure.Figure): |
|
st.pyplot(response) |
|
elif isinstance(response, streamlit.graphics_vega_lite.VegaLiteChart): |
|
st.vega_lite_chart(response) |
|
else: |
|
st.warning("Unrecognized response type. Please try again. e.g. Generate an image of a flying horse.") |
|
|
|
st.session_state.messages.append({"role": "assistant", "content": response}) |
|
|
|
|