joao-vectara commited on
Commit
fbb4f0f
Β·
verified Β·
1 Parent(s): 48f8fc0

Create st_app.py

Browse files
Files changed (1) hide show
  1. st_app.py +105 -0
st_app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ import re
3
+
4
+ import streamlit as st
5
+
6
+ from vectara_agentic.agent import AgentStatusType
7
+ from agent import initialize_agent
8
+ from config import get_agent_config
9
+
10
+ initial_prompt = "How can I help you today?"
11
+
12
+
13
+ def format_log_msg(log_msg: str):
14
+ max_log_msg_size = 500
15
+ return log_msg if len(log_msg) <= max_log_msg_size else log_msg[:max_log_msg_size]+'...'
16
+
17
+ def agent_progress_callback(status_type: AgentStatusType, msg: str):
18
+ output = f'<span style="color:blue;">{status_type.value}</span>: {msg}'
19
+ st.session_state.log_messages.append(output)
20
+ if 'status' in st.session_state:
21
+ latest_message = ''
22
+ if status_type == AgentStatusType.TOOL_CALL:
23
+ match = re.search(r"'([^']*)'", msg)
24
+ tool_name = match.group(1) if match else "Unknown tool"
25
+ latest_message = f"Calling tool {tool_name}..."
26
+ elif status_type == AgentStatusType.TOOL_OUTPUT:
27
+ latest_message = "Analyzing tool output..."
28
+ else:
29
+ return
30
+
31
+ st.session_state.status.update(label=latest_message)
32
+
33
+ with st.session_state.status:
34
+ for log_msg in st.session_state.log_messages:
35
+ st.markdown(format_log_msg(log_msg), unsafe_allow_html=True)
36
+
37
+ @st.dialog(title="Agent logs", width='large')
38
+ def show_modal():
39
+ for log_msg in st.session_state.log_messages:
40
+ st.markdown(format_log_msg(log_msg), unsafe_allow_html=True)
41
+
42
+ async def launch_bot():
43
+ def reset():
44
+ st.session_state.messages = [{"role": "assistant", "content": initial_prompt, "avatar": "πŸ¦–"}]
45
+ st.session_state.log_messages = []
46
+ st.session_state.prompt = None
47
+ st.session_state.ex_prompt = None
48
+ st.session_state.first_turn = True
49
+ st.session_state.show_logs = False
50
+ if 'agent' not in st.session_state:
51
+ st.session_state.agent = initialize_agent(cfg, agent_progress_callback=agent_progress_callback)
52
+ else:
53
+ st.session_state.agent.clear_memory()
54
+
55
+ if 'cfg' not in st.session_state:
56
+ cfg = get_agent_config()
57
+ st.session_state.cfg = cfg
58
+ st.session_state.ex_prompt = None
59
+ reset()
60
+
61
+ cfg = st.session_state.cfg
62
+ print(f'Configuration: {cfg}')
63
+
64
+ # left side content
65
+
66
+ # Display chat messages
67
+ for message in st.session_state.messages:
68
+ print(f'Message: {message}')
69
+ with st.chat_message(message["role"], avatar=message["avatar"]):
70
+ st.write(message["content"])
71
+
72
+
73
+ # User-provided prompt
74
+ if st.session_state.ex_prompt:
75
+ prompt = st.session_state.ex_prompt
76
+ else:
77
+ prompt = st.chat_input()
78
+ if prompt:
79
+ st.session_state.messages.append({"role": "user", "content": prompt, "avatar": 'πŸ§‘β€πŸ’»'})
80
+ st.session_state.prompt = prompt
81
+ st.session_state.log_messages = []
82
+ st.session_state.show_logs = False
83
+ with st.chat_message("user", avatar='πŸ§‘β€πŸ’»'):
84
+ print(f"Starting new question: {prompt}\n")
85
+ st.write(prompt)
86
+ st.session_state.ex_prompt = None
87
+
88
+ # Generate a new response if last message is not from assistant
89
+ if st.session_state.prompt:
90
+ with st.chat_message("assistant", avatar='πŸ€–'):
91
+ st.session_state.status = st.status('Processing...', expanded=False)
92
+ res = st.session_state.agent.chat(st.session_state.prompt)
93
+ #res = escape_dollars_outside_latex(res)
94
+ res = str(res)
95
+ message = {"role": "assistant", "content": res, "avatar": 'πŸ€–'}
96
+ st.session_state.messages.append(message)
97
+ st.markdown(res)
98
+
99
+
100
+ st.session_state.ex_prompt = None
101
+ st.session_state.prompt = None
102
+ st.session_state.first_turn = False
103
+ st.rerun()
104
+
105
+ sys.stdout.flush()