Spaces:
Sleeping
Sleeping
File size: 7,623 Bytes
0e9ef68 |
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 |
import asyncio
import chainlit as cl
from langchain_openai import ChatOpenAI
from utils_actions import offer_actions
from utils_data import get_company_data, get_opportunities
from utils_prompt import get_chat_prompt
from utils_objections import create_objections
async def prep_start(session_state):
get_company_data(session_state)
chat_prompt = get_chat_prompt()
chat_model = ChatOpenAI(model=session_state.llm_model)
simple_chain = chat_prompt | chat_model
cl.user_session.set("chain", simple_chain)
welcome_message = f"**Welcome to {session_state.company.name} SalesBuddy**\n*Home of {session_state.company.product}*"
await cl.Message(content=welcome_message).send()
await cl.Message(content=session_state.company.product_summary).send()
opportunities = get_opportunities()
cl.user_session.set("opportunities", opportunities)
async def prep_opportunities(session_state):
research_title = "**Upcoming Opportunities**"
await cl.Message(content=research_title).send()
opportunities = cl.user_session.get("opportunities", None)
if opportunities is None:
await cl.Message(content="No scenarios found.").send()
return
opportunity_actions = []
for idx, row in opportunities.iterrows():
if row['Opportunity Description'] != "":
customer_name = row['Customer Name']
opportunity_name = row['Opportunity Name']
opportunity_stage = row['Opportunity Stage']
name = f"{customer_name}: {opportunity_name} ({opportunity_stage})"
opportunity_action = cl.Action(
name=name,
value=f"{idx}", # Send the row index as value
description=f"{row['Customer Name']}: {row['Opportunity Name']} ({row['Opportunity Stage']}) "
f"Value: {row['Opportunity Value']}. Meeting with {row['Customer Contact']} "
f"({row['Customer Contact Role']})"
)
opportunity_actions.append(opportunity_action)
await cl.Message(content="Select an opportunity (hover for details):", actions=opportunity_actions).send()
async def prep_opportunity_analysis():
session_state = cl.user_session.get("session_state", None)
opportunity_analysis_message = "Retrieving and Reviewing HSBC Opportunitiy - please wait..."
await cl.Message(content=opportunity_analysis_message).send()
if session_state.do_opportunity_analysis:
pass
else:
agent_1_message = "*Retrieving data from SalesForce CRM ...*"
await cl.Message(content=agent_1_message).send()
await asyncio.sleep(2)
if session_state.add_objections_to_analysis:
agent_3_message = "*Evaluating opportunity and identifying risks ...*"
await cl.Message(content=agent_3_message).send()
session_state.objections = await create_objections(session_state)
else:
agent_2_message = "*Evaluating opportunity ...*"
await cl.Message(content=agent_2_message).send()
await asyncio.sleep(1.5)
agent_3_message = "*Determining next steps ...*"
await cl.Message(content=agent_3_message).send()
await asyncio.sleep(1)
output_message = "**Analysis Results**"
await cl.Message(content=output_message).send()
output_messages = get_opportunity_analysis()
for output_message in output_messages:
await cl.Message(content=output_message).send()
await cl.Message(content="").send()
if session_state.add_objections_to_analysis:
output_message = "**Risks**"
await cl.Message(content=output_message).send()
for obj in session_state.objections:
await cl.Message(content=obj).send()
output_message = "**Next Steps**"
await cl.Message(content=output_message).send()
output_messages = get_next_steps()
for output_message in output_messages:
await cl.Message(content=output_message).send()
await cl.Message(content="").send()
await offer_actions()
async def prep_research(session_state):
research_title = "**Customer Research**"
await cl.Message(content=research_title).send()
research_message = "Enter customer name to research"
await cl.Message(content=research_message).send()
def get_opportunity_analysis():
output_1 = "**Summary:** The HSBC opportunity involves replacing the existing analytics engine for their loan origination system, valued at $250,000. The current system is slow and lacks flexibility, creating urgency due to an impending renewal with the existing vendor. Multiple meetings have been conducted, culminating in a proposal review. The decision process is progressing, with a meeting scheduled to discuss the next steps on October 18, 2024."
output_2 = "**Score: 75**"
output_3 = "**MEDDIC Evaluation:**"
output_4 = "**Metrics: 70** - The proposal discussed expected performance improvements and ROI, but specific quantitative metrics driving the decision were not detailed."
output_5 = "**Economic Buyer: 65** - There is no direct mention of engagement with the ultimate economic buyer, although the CFO's involvement in the proposal review suggests some level of engagement."
output_6 = "**Decision Criteria: 75** - The decision criteria seem to be partially understood, as there has been discussion about ROI, performance improvements, and contract terms, but further clarity is needed."
output_7 = "**Decision Process: 80** - The decision process appears to be well-understood, with clear next steps and urgency due to the vendor renewal timeline."
output_8 = "**Identify Pain: 85** - The pain points related to the existing system's performance and flexibility are clearly identified, driving the opportunity forward."
output_9 = "**Champion: 75** - John Smith, the VP of IT, appears to be a potential champion, as he is involved in every meeting, but his level of influence and commitment is not fully confirmed."
outputs = [output_1, output_2, output_3, output_4, output_5, output_6, output_7, output_8, output_9]
return outputs
def get_next_steps():
output_10 = "Engage with the CFO and other key stakeholders to refine the understanding of the decision criteria and ensure alignment with their expectations. Confirm John Smith's role as a champion and clarify his influence on the decision-making process."
output_11 = "**Talking Points:**"
output_12 = " 1. Discuss specific quantitative metrics and performance benchmarks that demonstrate the expected improvements and ROI to solidify the business case"
output_13 = " 2. Address the decision criteria with more clarity, ensuring that all stakeholders, including the CFO, have a shared understanding of what is needed to move forward"
output_14 = " 3. Highlight the urgency of the situation due to the impending vendor renewal and how your solution can address the identified pain points in a timely manner"
outputs = [output_10, output_11, output_12, output_13, output_14]
return outputs
async def prep_latest_news():
latest_news_message = "Retrieving latest news on this customer - please wait..."
await cl.Message(content=latest_news_message).send()
await asyncio.sleep(2)
agent_1_message = "Agent 1: Processing data..."
await cl.Message(content=agent_1_message).send()
await asyncio.sleep(1)
agent_2_message = "Agent 2: Evaluating opportunity..."
await cl.Message(content=agent_2_message).send() |