File size: 2,628 Bytes
020020a
82cc7fb
a759596
 
 
 
 
020020a
a759596
020020a
 
 
 
 
a759596
 
 
 
020020a
a759596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f735fcc
a759596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
020020a
 
 
 
 
 
 
 
 
 
a759596
 
 
 
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
from dotenv import load_dotenv
import streamlit as st
from receptionist_agent import get_agent_response
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage, messages_to_dict
import json
from datetime import datetime
import time
from download import format_conversation_for_download

#import langsmith

load_dotenv()

#langsmith.debug = True

st.set_page_config(layout="wide")

if "conversation" not in st.session_state:
    st.session_state.conversation = [AIMessage(content="Thanks for calling, this is Receptionist Agent! Can I help you schedule a service or would you like help with something else?")]
    start_time = datetime.now().strftime("%y%m%d-%H%M%S")
    st.session_state.conversation_file = f"conversations/conversation_{start_time}.json"

def save_conversation():
    with open(st.session_state.conversation_file, "w") as f:
        json.dump(messages_to_dict(st.session_state.conversation), f, indent=4)

def submit_message():
    message = st.session_state.message
    st.session_state.conversation.append(HumanMessage(content=message))
    
    start = time.time()
    new_messages = get_agent_response(st.session_state.conversation)
    end = time.time()
    st.session_state.response_time = f"{end - start:.2f}"
    
    st.session_state.conversation.extend(new_messages)
    # save_conversation()

st.subheader("Receptionist Agent")

for message in st.session_state.conversation:
    if isinstance(message, HumanMessage):
        with st.chat_message("user"):
            st.write(message.content)
    elif isinstance(message, AIMessage):
        with st.chat_message("assistant"):
            if message.content:
                st.write(message.content)
            if message.tool_calls:
                for tool_call in message.tool_calls:
                    st.write(f"Calling tool: `{tool_call['name']}` with args `{tool_call['args']}`")
    elif isinstance(message, ToolMessage):
        with st.chat_message("tool"):
            st.write(f"Tool `{message.tool_call_id}` output: `{message.content}`")

if len(st.session_state.conversation) > 1:
    _, col2 = st.columns([0.75, 0.25])
    with col2:
        st.download_button(
            label="Download Conversation",
            data=format_conversation_for_download(st.session_state.conversation),
            file_name=st.session_state.conversation_file.replace(".json", "_formatted.json"),
            mime="application/json",
        )

if "response_time" in st.session_state:
    st.caption(f"Response time: {st.session_state.response_time}s")

st.chat_input("Type message here", on_submit=submit_message, key="message")