File size: 4,830 Bytes
ee96e07
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import streamlit as st
from datetime import datetime
import json
import requests
import uuid
from datetime import date, datetime
import requests
from pydantic import BaseModel, Field
from typing import Optional

welcomeMessage = "Welcome to the Ford Car Selection AI Agent I am here to talk about your motoring needs, please start by giving me your key requirement"


placeHolderPersona1 = """# MISSION
You are a car sales chatbot focusing on gaining enough information to make a selection. Your mission is to ask questions to help a customer fully articulate their needs in a clear manner.
When they ask you a question or give you a need ask a suitable follow up question

# RULES
Ask only one question at a time.
Provide some context or clarification around the follow-up questions you ask.
Do not converse with the customer.
Be as concise as possible"""

placeHolderPersona2 = """# MISSION
You are a car selection expert you will be given a dialoge between a customer and a sales executive. Your job is to select the perfect car for the customer based on their conversation
# RULES
You will need to select 1 primary choice car and one secondary choice car
You will need to give some justification as to why you have chosen these cars
Do not converse with the customer.
Be as concise as possible"""



class ChatRequestClient(BaseModel):
    user_id: str
    user_input: str
    numberOfQuestions: int
    welcomeMessage: str
    llm1: str
    tokens1: int
    temperature1: float
    persona1SystemMessage: str
    persona2SystemMessage: str
    userMessage2: str
    llm2: str
    tokens2: int
    temperature2: float

def call_chat_api(data: ChatRequestClient):
    url = "http://localhost:8000/chat/"
    # Validate and convert the data to a dictionary
    validated_data = data.dict()
    
    # Make the POST request to the FastAPI server
    response = requests.post(url, json=validated_data)
    
    if response.status_code == 200:
        return response.json()  # Return the JSON response if successful
    else:
        return "An error occured"  # Return the raw response text if not successful

def genuuid ():
    return uuid.uuid4()
    
# Title of the application
# st.image('agentBuilderLogo.png')
st.title('LLM-Powered Agent Interaction')

# Sidebar for inputting personas
st.sidebar.image('agentBuilderLogo.png')
st.sidebar.header("Agent Personas Design")
st.sidebar.subheader("Welcome Message")
welcomeMessage = st.sidebar.text_area("Define Persona 1", value=welcomeMessage, height=150)
st.sidebar.subheader("Personas 1 Settings")
numberOfQuestions = st.sidebar.slider("Number of Questions", min_value=0, max_value=2, step=1, value=5, key='persona1_questions')
persona1SystemMessage = st.sidebar.text_area("Define Persona 1", value=placeHolderPersona1, height=150)
llm1 = st.sidebar.selectbox("Model Selection", ['GPT-4', 'GPT3.5'], key='persona1_size')
temp1 = st.sidebar.slider("Tempreature", min_value=0.0, max_value=1.0, step=0.1, value=0.6, key='persona1_temp')
tokens1 = st.sidebar.slider("Tokens", min_value=0, max_value=4000, step=100, value=500, key='persona1_tokens')

# Persona 2
st.sidebar.subheader("Personas 2 Settings")
persona2SystemMessage = st.sidebar.text_area("Define Persona 2", value=placeHolderPersona2, height=150)
llm2 = st.sidebar.selectbox("Model Selection", ['GPT-4', 'GPT3.5'], key='persona2_size')
temp2 = st.sidebar.slider("Tempreature", min_value=0.0, max_value=1.0, step=0.1, value=0.5, key='persona2_temp')
tokens2 = st.sidebar.slider("Tokens", min_value=0, max_value=4000, step=100, value=500, key='persona2_tokens')
userMessage2 = st.sidebar.text_area("Define User Message", value="This is the conversation todate, ", height=150)
st.sidebar.caption(f"Session ID: {genuuid()}")
# Main chat interface
st.header("Chat with the Agents")
user_id = st.text_input("User ID:", key="user_id")
user_input = st.text_input("Write your message here:", key="user_input")

if 'history' not in st.session_state:
    st.session_state.history = []

if st.button("Send"):
    # Placeholder for processing the input and generating a response
    data = ChatRequestClient(
        user_id=user_id,
        user_input=user_input,
        numberOfQuestions=numberOfQuestions,
        welcomeMessage=welcomeMessage,
        llm1=llm1,
        tokens1=tokens1,
        temperature1=temp1,
        persona1SystemMessage=persona1SystemMessage,
        persona2SystemMessage=persona2SystemMessage,
        userMessage2=userMessage2,
        llm2=llm2,
        tokens2=tokens2,
        temperature2=temp2
    )
    response = call_chat_api(data)
    st.session_state.history.append("You: " + user_input)
    st.session_state.history.append("Agent: " + response)  # Using 'response' after it's defined

# Display the chat history
for message in st.session_state.history:
    st.text(message)