yrobel-lima commited on
Commit
4320b9c
β€’
1 Parent(s): 561f679

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +150 -150
app.py CHANGED
@@ -1,150 +1,150 @@
1
- import logging
2
- from typing import Optional
3
-
4
- import openai
5
- import streamlit as st
6
- from langchain_core.messages import AIMessage, HumanMessage
7
-
8
- from rag.runnable_and_memory import get_runnable_and_memory
9
- from utils.error_message_template import ERROR_MESSAGE
10
-
11
- logging.basicConfig(level=logging.ERROR)
12
-
13
-
14
- # Streamlit page configuration
15
- st.set_page_config(
16
- page_title="ELLA AI Assistant",
17
- page_icon="πŸ’¬",
18
- layout="centered",
19
- initial_sidebar_state="collapsed",
20
- )
21
-
22
- # Streamlit CSS configuration
23
- with open("styles/styles.css") as css:
24
- st.markdown(f"<style>{css.read()}</style>", unsafe_allow_html=True)
25
-
26
-
27
- def initialize_session_state():
28
- # Initialize the runnable and memory
29
- if "runnable" not in st.session_state:
30
- try:
31
- st.session_state["runnable"], st.session_state["memory"] = (
32
- get_runnable_and_memory(model="gpt-4o", temperature=0)
33
- )
34
- # Clear the memory
35
- st.session_state["memory"].clear()
36
- except Exception:
37
- handle_errors()
38
-
39
- # Other session state variables
40
- if "chat_history" not in st.session_state:
41
- st.session_state["chat_history"] = []
42
-
43
- if "selected_location" not in st.session_state:
44
- st.session_state["selected_location"] = None
45
-
46
- if "disable_chat_input" not in st.session_state:
47
- st.session_state["disable_chat_input"] = True
48
-
49
-
50
- @st.cache_resource
51
- def load_avatars():
52
- return {
53
- "Human": "images/user.png",
54
- "AI": "images/tall-tree-logo.png",
55
- }
56
-
57
-
58
- # Disable chat input if no location is selected
59
- def on_change_location():
60
- st.session_state["disable_chat_input"] = (
61
- False if st.session_state["selected_location"] else True
62
- )
63
-
64
-
65
- def app_layout():
66
- with st.container():
67
- # Welcome message
68
- st.markdown(
69
- "Hello there! πŸ‘‹ Need help finding the right service or practitioner? Let our AI assistant give you a hand.\n\n"
70
- "To get started, please select your preferred location and share details about your symptoms or needs. "
71
- )
72
-
73
- # Selectbox for location preferences
74
- st.radio(
75
- "**Our Locations**:",
76
- (
77
- "Cordova Bay - Victoria",
78
- "James Bay - Victoria",
79
- "Commercial Drive - Vancouver",
80
- ),
81
- index=None,
82
- label_visibility="visible",
83
- key="selected_location",
84
- on_change=on_change_location,
85
- )
86
- st.markdown("<br>", unsafe_allow_html=True)
87
-
88
-
89
- def handle_errors(error: Optional[Exception] = None):
90
- st.warning(error if error else ERROR_MESSAGE, icon="πŸ™")
91
- st.stop()
92
-
93
-
94
- # Chat app logic
95
- if __name__ == "__main__":
96
- initialize_session_state()
97
- app_layout()
98
-
99
- # Render conversation
100
- avatars = load_avatars()
101
- for message in st.session_state["chat_history"]:
102
- if isinstance(message, AIMessage):
103
- with st.chat_message("AI", avatar=avatars["AI"]):
104
- st.write(message.content)
105
- elif isinstance(message, HumanMessage):
106
- with st.chat_message("Human", avatar=avatars["Human"]):
107
- st.write(message.content)
108
-
109
- # Get user input only if a location is selected
110
- user_input = st.chat_input(
111
- "Ask ELLA...", disabled=st.session_state["disable_chat_input"]
112
- )
113
-
114
- # Chat interface
115
- if user_input and user_input.strip():
116
- st.session_state["chat_history"].append(HumanMessage(content=user_input))
117
-
118
- # Append the location to the user input (important!)
119
- user_query_location = (
120
- f"{user_input}\nLocation: {st.session_state.selected_location}."
121
- )
122
-
123
- # Render the user input
124
- with st.chat_message("Human", avatar=avatars["Human"]):
125
- st.write(user_input)
126
-
127
- # Render the AI response
128
- with st.chat_message("AI", avatar=avatars["AI"]):
129
- try:
130
- with st.spinner(" "):
131
- response = st.write_stream(
132
- st.session_state["runnable"].stream(
133
- {"user_query": user_query_location}
134
- )
135
- )
136
- except openai.BadRequestError:
137
- handle_errors()
138
- except Exception:
139
- handle_errors()
140
-
141
- # Add AI response to the message history
142
- st.session_state["chat_history"].append(AIMessage(content=response))
143
-
144
- # Update runnable memory
145
- st.session_state["memory"].chat_memory.add_user_message(
146
- HumanMessage(content=user_query_location)
147
- )
148
- st.session_state["memory"].chat_memory.add_ai_message(
149
- AIMessage(content=response)
150
- )
 
1
+ import logging
2
+ from typing import Optional
3
+
4
+ import openai
5
+ import streamlit as st
6
+ from langchain_core.messages import AIMessage, HumanMessage
7
+
8
+ from rag.runnable_and_memory import get_runnable_and_memory
9
+ from utils.error_message_template import ERROR_MESSAGE
10
+
11
+ logging.basicConfig(level=logging.ERROR)
12
+
13
+
14
+ # Streamlit page configuration
15
+ st.set_page_config(
16
+ page_title="ELLA AI Assistant",
17
+ page_icon="πŸ’¬",
18
+ layout="centered",
19
+ initial_sidebar_state="collapsed",
20
+ )
21
+
22
+ # CSS
23
+ with open("styles/styles.css") as css:
24
+ st.markdown(f"<style>{css.read()}</style>", unsafe_allow_html=True)
25
+
26
+
27
+ def initialize_session_state():
28
+ # Initialize the runnable and memory
29
+ if "runnable" not in st.session_state:
30
+ try:
31
+ st.session_state["runnable"], st.session_state["memory"] = (
32
+ get_runnable_and_memory(model="gpt-4o", temperature=0)
33
+ )
34
+ # Clear the memory
35
+ st.session_state["memory"].clear()
36
+ except Exception:
37
+ handle_errors()
38
+
39
+ # Other session state variables
40
+ if "chat_history" not in st.session_state:
41
+ st.session_state["chat_history"] = []
42
+
43
+ if "selected_location" not in st.session_state:
44
+ st.session_state["selected_location"] = None
45
+
46
+ if "disable_chat_input" not in st.session_state:
47
+ st.session_state["disable_chat_input"] = True
48
+
49
+
50
+ @st.cache_resource
51
+ def load_avatars():
52
+ return {
53
+ "Human": "images/user.png",
54
+ "AI": "images/tall-tree-logo.png",
55
+ }
56
+
57
+
58
+ # Disable chat input if no location is selected
59
+ def on_change_location():
60
+ st.session_state["disable_chat_input"] = (
61
+ False if st.session_state["selected_location"] else True
62
+ )
63
+
64
+
65
+ def app_layout():
66
+ with st.container():
67
+ # Welcome message
68
+ st.markdown(
69
+ "Hello there! πŸ‘‹ Need help finding the right service or practitioner? Let our AI assistant give you a hand.\n\n"
70
+ "To get started, please select your preferred location and share details about your symptoms or needs. "
71
+ )
72
+
73
+ # Selectbox for location preferences
74
+ st.radio(
75
+ "**Our Locations**:",
76
+ (
77
+ "Cordova Bay - Victoria",
78
+ "James Bay - Victoria",
79
+ "Commercial Drive - Vancouver",
80
+ ),
81
+ index=None,
82
+ label_visibility="visible",
83
+ key="selected_location",
84
+ on_change=on_change_location,
85
+ )
86
+ st.markdown("<br>", unsafe_allow_html=True)
87
+
88
+
89
+ def handle_errors(error: Optional[Exception] = None):
90
+ st.warning(error if error else ERROR_MESSAGE, icon="πŸ™")
91
+ st.stop()
92
+
93
+
94
+ # Chat app logic
95
+ if __name__ == "__main__":
96
+ initialize_session_state()
97
+ app_layout()
98
+
99
+ # Render conversation
100
+ avatars = load_avatars()
101
+ for message in st.session_state["chat_history"]:
102
+ if isinstance(message, AIMessage):
103
+ with st.chat_message("AI", avatar=avatars["AI"]):
104
+ st.write(message.content)
105
+ elif isinstance(message, HumanMessage):
106
+ with st.chat_message("Human", avatar=avatars["Human"]):
107
+ st.write(message.content)
108
+
109
+ # Get user input only if a location is selected
110
+ user_input = st.chat_input(
111
+ "Ask ELLA...", disabled=st.session_state["disable_chat_input"]
112
+ )
113
+
114
+ # Chat interface
115
+ if user_input and user_input.strip():
116
+ st.session_state["chat_history"].append(HumanMessage(content=user_input))
117
+
118
+ # Append the location to the user input (important!)
119
+ user_query_location = (
120
+ f"{user_input}\nLocation: {st.session_state.selected_location}."
121
+ )
122
+
123
+ # Render the user input
124
+ with st.chat_message("Human", avatar=avatars["Human"]):
125
+ st.write(user_input)
126
+
127
+ # Render the AI response
128
+ with st.chat_message("AI", avatar=avatars["AI"]):
129
+ try:
130
+ with st.spinner(" "):
131
+ response = st.write_stream(
132
+ st.session_state["runnable"].stream(
133
+ {"user_query": user_query_location}
134
+ )
135
+ )
136
+ except openai.BadRequestError:
137
+ handle_errors()
138
+ except Exception:
139
+ handle_errors()
140
+
141
+ # Add AI response to the message history
142
+ st.session_state["chat_history"].append(AIMessage(content=response))
143
+
144
+ # Update runnable memory
145
+ st.session_state["memory"].chat_memory.add_user_message(
146
+ HumanMessage(content=user_query_location)
147
+ )
148
+ st.session_state["memory"].chat_memory.add_ai_message(
149
+ AIMessage(content=response)
150
+ )