import gradio as gr import random import time import os from sales_helper import SalesGPT 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"report.txt" with open(report_file_path,"w") as file: file.write(message) return message def bot(history): bot_message = sales_agent._call({}) history[-1][1] = "" for character in bot_message: history[-1][1] += character time.sleep(0.05) yield 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 input_list: if message.endswith(''): # 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 with gr.Blocks(theme="Taithrah/Minimal") as demo: gr.HTML("""

Sales Persona Chatbot

""") 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="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) demo.queue() demo.launch()