File size: 7,021 Bytes
2a3cc9a
0441352
 
 
 
9dfc326
0441352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4186ad1
8601311
ed8a2ee
0441352
 
 
661fbe3
0441352
 
 
6c3103e
6e041fc
0441352
 
 
 
 
 
 
 
 
f710d56
0441352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f7079c
 
 
4846261
3f7079c
 
0441352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93952b1
661fbe3
0441352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
661fbe3
0441352
 
 
 
 
3f7079c
0441352
 
 
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import gradio as gr
import random
import time
import os
from sales_helper import SalesGPT
from analyzer import Summarizer,SentimentAnalyzer
from langchain_openai import AzureChatOpenAI
from openai import AzureOpenAI
llm = AzureChatOpenAI(temperature=0,deployment_name="GPT-3")
from time import sleep
sales_agent = SalesGPT.from_llm(llm, verbose=False)
# init sales agent
sales_agent.seed_agent()
stage = "\n"
bot_conversation = ""
customer_conversation = ""
convo_history = sales_agent.conversation_history
client = AzureOpenAI()
def user(user_message, history):
    if user_message:
        sales_agent.human_step(user_message)
    return "", history + [[user_message, None]]

def stages():
  global stage
  stage += "\n\n"+sales_agent.determine_conversation_stage()
  return stage

def download_report():
  global convo_history
  sales_evaluation_criteria = {
      "understanding": "Does the salesperson understand the customer pain points and challenges?",
      "opening_effectiveness": "Was the opening of the pitch effective?",
      "focus_on_benefits": "Was there sufficient focus and emphasis on customer benefits of the products/features pitched?",
      "trust_building": "Did the salesperson establish trust and credibility by sharing testimonials, case studies, references, success stories of other satisfied customers?",
      "urgency_creation": "Did the salesperson create urgency, such as through time-sensitive offers or consequences of not taking the decision?",
      "objection_handling": "Did the salesperson handle objections well and proactively address/prepared for the objections?",
      "engagement": "Was the conversation engaging?",
      "balance_of_talk_and_listen": "Was there a balance between the salesperson talking and listening to the customer?",
      "closing_strategy": "Was there a clear call to action, summarization, and reiteration of the value proposition in the close strategy?",
      "purposefulness": "Throughout the pitch/conversation, was the conversation purposeful, and did it end with clear next steps?"
  }
  client = AzureOpenAI()

  conversation = [
    {"role": "system", "content": f"You Are Context verification Reporter.using these condition {sales_evaluation_criteria} to verify following context to Give me a Report Form of the context Scoring and Reason for Scoring."},
    {"role": "user", "content": f""" this is the Context:{convo_history}.
      """}
      ]
  response = client.chat.completions.create(
      model="GPT-3",
      messages=conversation,
      temperature=0,
      max_tokens=1000
  )

  message = response.choices[0].message.content
    
  report_file_path = f"{os.getcwd()}/report.txt"
  print('CWD : ',os.getcwd())
  with open(report_file_path,"w") as file:
      file.write(message)  

  return message

def bot(history):
    bot_message = sales_agent._call({})
    history[-1][1] = bot_message
    return history
summarizer = Summarizer()
sentiment = SentimentAnalyzer()

def history_of_both(convo_history):
    # Initialize lists to store messages from customer and bot
    customer_messages = []
    bot_messages = []

    # Iterate through the input list
    for message in convo_history:
        if message.endswith('<END_OF_TURN>'):
            # Customer message
            if len(customer_messages) == len(bot_messages):
                customer_messages.append(message[:-13])
            else:
                bot_messages.append(message[:-13])
        else:
            # Bot message
            if len(customer_messages) == len(bot_messages):
                bot_messages.append(message)
            else:
                customer_messages.append(message)

    bot_conversation = " ".join(bot_messages)
    customer_conversation = " ".join(customer_messages)

    return bot_conversation, customer_conversation

def generate_convo_summary():
    global convo_history
    summary=summarizer.generate_summary(convo_history)
    return summary

def sentiment_analysis():
    global convo_history
    bot_conversation, customer_conversation = history_of_both(convo_history)
    customer_conversation_sentiment_scores = sentiment.analyze_sentiment(customer_conversation)
    bot_conversation_sentiment_scores = sentiment.analyze_sentiment(bot_conversation)
    return "Sentiment Scores for customer_conversation:\n"+customer_conversation_sentiment_scores+"\nSentiment Scores for sales_agent_conversation:\n"+bot_conversation_sentiment_scores

def emotion_analysis():
    global convo_history,bot_conversation,customer_conversation
    bot_conversation, customer_conversation = history_of_both(convo_history)
    customer_emotion=sentiment.emotion_analysis(customer_conversation)
    bot_emotion=sentiment.emotion_analysis(bot_conversation)
    return "Emotions for customer_conversation:\n"+customer_emotion+"\nEmotions for sales_agent_conversation:\n"+bot_emotion

def clear_stages():
    global stage
    stage = ""
    sales_agent.conversation_history = []
    return ""
    
with gr.Blocks(theme="Taithrah/Minimal") as demo:
    gr.HTML("""<center><h1>Sales Persona Chatbot</h1></center>""")
    
    with gr.Row():
        with gr.Column():
            chatbot = gr.Chatbot()
        with gr.Column():
            show_stages = gr.Textbox(label="Stages",lines=18,container=False)
    with gr.Row():
      with gr.Column(scale=0.70):
        msg = gr.Textbox(show_label=False,container=False)
      with gr.Column(scale=0.30):
        clear = gr.Button("Clear")
    with gr.Row():
      with gr.Column(scale=0.50):
        with gr.Row():
          gen_report_view = gr.Textbox(label="Generated Report",container=False)
        with gr.Row():
          gen_report_btn = gr.Button("Generate Report")

          report_down_btn = gr.DownloadButton(label="Download Report",value=f"{os.getcwd()}/report.txt")
      with gr.Column(scale=0.50):
        with gr.Row():
          summary_view = gr.Textbox(label="Summary",container=False)
        with gr.Row():
          summary_btn = gr.Button("Generate Summary")
    with gr.Row():
      with gr.Column(scale=0.50):
        with gr.Row():
          sentiment_view = gr.Textbox(label="Sentiment",container=False)
        with gr.Row():
          sentiment_btn = gr.Button("Sentiment")
      with gr.Column(scale=0.50):
        with gr.Row():
          emotion_view = gr.Textbox(label="Emotion",container=False)
        with gr.Row():
          emotion_btn = gr.Button("Emotion")


    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )
    msg.submit(stages,[],show_stages)
    gen_report_btn.click(download_report,[],gen_report_view,queue=False)
    summary_btn.click(generate_convo_summary,[],summary_view)
    sentiment_btn.click(sentiment_analysis,[],sentiment_view)
    emotion_btn.click(emotion_analysis,[],emotion_view)
    clear.click(lambda: None, None, chatbot, queue=False)
    clear.click(lambda: None, None, show_stages, queue=False)
    clear.click(clear_stages,[],show_stages)
    
demo.queue()
demo.launch()