File size: 6,643 Bytes
273c375
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32a4065
273c375
32a4065
 
273c375
32a4065
b8b0b89
273c375
 
 
 
 
 
 
 
 
b8b0b89
273c375
72b06f2
 
 
3896508
273c375
72b06f2
 
 
273c375
72b06f2
 
a601250
273c375
2fae0bb
273c375
9d4e149
7330cbd
9d4e149
72b06f2
 
273c375
 
72b06f2
b7d0dc8
273c375
 
72b06f2
 
b7d0dc8
273c375
 
72b06f2
b7d0dc8
273c375
 
72b06f2
 
b7d0dc8
273c375
 
72b06f2
 
273c375
 
72b06f2
 
273c375
72b06f2
 
273c375
72b06f2
273c375
 
72b06f2
 
273c375
 
72b06f2
 
273c375
 
72b06f2
a7a5d1a
 
 
273c375
a7a5d1a
273c375
a7a5d1a
b8b0b89
 
72b06f2
 
b8b0b89
 
72b06f2
 
b8b0b89
 
72b06f2
 
b8b0b89
 
72b06f2
 
b8b0b89
 
72b06f2
 
b8b0b89
 
72b06f2
b8b0b89
 
 
4fe10de
a7a5d1a
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
Module: app_chat

This module defines the app_chat function for managing user interactions in the chat interface.

Dependencies:
- streamlit: The Streamlit library for building web applications.
- pandas: Library for data manipulation and analysis.
- PIL: Python Imaging Library for image processing.
- pydub: Library for audio manipulation.
- controller: Module providing the Controller class for handling user submissions and managing conversations.

Functions:
- app_chat: Function for managing user interactions in the chat interface.
"""

import streamlit as st
import pandas as pd
from PIL import Image
from pydub import AudioSegment
from controller import Controller

def app_chat(controller):
    """
    Function for managing user interactions in the chat interface.

    Args:
    - controller (Controller): An instance of the Controller class for handling user submissions and managing conversations.

    Returns:
    - None
    """
    agent_config = controller.agent_config

    # Chat code (user input, agent responses, etc.)
    if "messages" not in st.session_state:
        st.session_state.messages = []
        st.markdown("Hello there! How can I assist you today?")

    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    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, "avatar": "πŸ€—"})

        response = ""
        chat_response = ""
        with st.spinner('Please stand by ...'):
            response = controller.handle_submission(user_message)

        with st.chat_message("assistant"):
            if response is None:
                chat_response = controller.handle_submission_chat(user_message, response)
                st.write(chat_response)
            elif isinstance(response, Image.Image):
                agent_config.image = response
                chat_response = controller.handle_submission_chat(user_message, "No context. Created an image.")
                st.write(chat_response)
                st.image(response)
            elif isinstance(response, AudioSegment):
                agent_config.audio = response
                chat_response = controller.handle_submission_chat(user_message, "Agent Tool created audio file.")
                st.write(chat_response)
                st.audio(response)
            elif isinstance(response, int): 
                chat_response = controller.handle_submission_chat(user_message, response)
                st.write(chat_response)
                st.markdown(response)
            elif isinstance(response, str):
                if "emojified_text" in response: 
                    chat_response = controller.handle_submission_chat(user_message, "Agent Tool created the text with emojis.")
                    st.write(chat_response)
                    st.markdown(f"{response['emojified_text']}")
                else:
                    chat_response = controller.handle_submission_chat(user_message, response)
                    st.write(chat_response)
                    st.markdown(response)
            elif isinstance(response, list):
                chat_response = controller.handle_submission_chat(user_message, "Agent Tool produced a list")
                for item in response:
                    st.markdown(item)  # Assuming the list contains strings
                st.write(chat_response)
            elif isinstance(response, pd.DataFrame):
                chat_response = controller.handle_submission_chat(user_message, "Agent Tool produced a pd.DataFrame")
                st.write(chat_response) 
                st.dataframe(response)
            elif isinstance(response, pd.Series):
                chat_response = controller.handle_submission_chat(user_message, "Agent Tool produced a pd.Series")
                st.write(chat_response) 
                st.table(response.iloc[0:10])
            elif isinstance(response, dict):
                chat_response = controller.handle_submission_chat(user_message, "Agent Tool produced a dict")
                st.write(chat_response) 
                st.json(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": chat_response, "avatar": "πŸ¦–"})
        st.session_state.messages.append({"role": "assistant", "content": response, "avatar": "πŸ€–"})
              
"""          elif isinstance(response, st.graphics_altair.AltairChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a st.graphics_altair.AltairChart")
                st.write(chat_respone) 
                st.altair_chart(response)
            elif isinstance(response, st.graphics_bokeh.BokehChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a st.graphics_bokeh.BokehChart")
                st.write(chat_respone) 
                st.bokeh_chart(response)
            elif isinstance(response, st.graphics_graphviz.GraphvizChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a st.graphics_graphviz.GraphvizChart")
                st.write(chat_respone) 
                st.graphviz_chart(response)
            elif isinstance(response, st.graphics_plotly.PlotlyChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a st.graphics_plotly.PlotlyChart")
                st.write(chat_respone) 
                st.plotly_chart(response)
            elif isinstance(response, st.graphics_pydeck.PydeckChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a  st.graphics_pydeck.PydeckChart")
                st.write(chat_respone) 
                st.pydeck_chart(response)
            elif isinstance(response, matplotlib.figure.Figure):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a matplotlib.figure.Figure")
                st.write(chat_respone) 
                st.pyplot(response)
            elif isinstance(response, st.graphics_vega_lite.VegaLiteChart):
                chat_respone = controller.handle_submission_chat(user_message, "Agent Tool produced a VegaLiteChart")
                st.write(chat_respone) 
                st.vega_lite_chart(response)  """