import asyncio import chainlit as cl from datetime import datetime from .utils_data import get_company_data, get_opportunities, get_questions, get_customer_background from .utils_output import display_evaluation_results, display_llm_responses from .utils_objections import create_objections # async def callback_show_scenarios(): # scenarios = get_opportunities() # cl.user_session.set("scenarios", scenarios) # scenarios = cl.user_session.get("scenarios", None) # if scenarios is None: # await cl.Message(content="No scenarios found.").send() # return # scenario_actions = [] # for idx, row in scenarios.iterrows(): # if row['Opportunity Description'] != "": # scenario_action = cl.Action( # name="Scenario", # 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']})" # ) # scenario_actions.append(scenario_action) # await cl.Message(content="Select a scenario (hover for details):", actions=scenario_actions).send() async def callback_run_scenario(action): await cl.Message(content="*Preparing simulation - please wait ...*").send() index = 0 opportunities = cl.user_session.get("opportunities", None) if opportunities is None: await cl.Message(content="No scenarios found.").send() return await cl.Message(content="*Gathering opportunity information ...*").send() await asyncio.sleep(1) await cl.Message(content="*Customizing questions for this opportunity ...*").send() await asyncio.sleep(1) selected_opportunity = opportunities.iloc[index] session_state = cl.user_session.get("session_state", None) session_state.add_scenario_info(selected_opportunity) get_customer_background(session_state, selected_opportunity['Customer Name']) if session_state.ask_objections: print("creating objections") session_state.objections = await create_objections(session_state) questions = [] for obj in session_state.objections: print(obj) q = {"stage": session_state.opportunity.stage, "question": obj[3:], "ground_truth": ""} questions.append(q) session_state.questions = questions else: print("questions created") session_state.questions = get_questions(session_state.opportunity.stage, session_state.num_questions) for q in session_state.questions: print(q) opening_message = session_state.get_opening() await cl.Message(content=opening_message).send() start_actions = [ cl.Action(name="Start Simulation", value="start_simulation", description="Start Simulation"), ] await cl.Message(content="Click to start simulation", actions=start_actions).send() async def callback_start_scenario(): print("callback_start_scenario()") session_state = cl.user_session.get("session_state", None) await cl.Message(content="3...").send() await asyncio.sleep(1) await cl.Message(content="2...").send() await asyncio.sleep(1) await cl.Message(content="1...").send() await asyncio.sleep(1) await cl.Message(content="**Simulation Starting**").send() await cl.Message(content="\n\n").send() start_time = datetime.now() print("setting start time") session_state.start_time = start_time output = f"{session_state.customer.contact_name} joins the zoom call" print(output) await cl.Message(content=output).send() await cl.Message(content="\n\n").send() async def callback_evaluate_performance(): session_state = cl.user_session.get("session_state", None) if session_state is None: await cl.Message(content="No session found.").send() return await display_evaluation_results(cl, session_state) async def callback_display_queries_responses(): session_state = cl.user_session.get("session_state", None) if session_state is None: await cl.Message(content="No session found.").send() return await display_llm_responses(cl, session_state)