File size: 6,621 Bytes
7781557
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
class SessionState:
    session_stage = ""
    do_evaluation = False
    do_opportunity_analysis = False
    do_customer_research = False
    do_objections = False
    add_objections_to_analysis = True   
    ask_objections = True
    use_objection_cache = True
    do_ragas_evaluation = False
    customer_research_report_md = "HSBC Quarterly Report 2024-10-19.md"
    customer_research_report_pdf = "HSBC Quarterly Report 2024-10-19.pdf"
    bettetech_value_proposition_pdf = "BetterTech Lending Analytics Solution.pdf"
    do_voice = True
    status = "active"
    scenario = None
    qa_mode = "single"
    questions = []
    start_time = None
    end_time = None
    duration_minutes = None
    attitude = "Happy"
    mood_score = 5
    num_questions = 2
    current_question_index = 0
    previous_answer = None
    question = ""
    ground_truth = ""
    rep_answer = ""
    responses = []
    queries = []
    llm_responses = []
    command = ""
    scores = []
    llm_next_steps = ""
    opportunity_review_results = None
    opportunity_review_report = None
    def __init__(self):
        self.company = None
        self.customer = None
        self.opportunity = None
        self.scenario = None
        self.session_stage = "research"
        self.do_evaluation = False
        self.do_opportunity_analysis = False
        self.do_customer_research = False
        self.do_objections = False
        self.add_objections_to_analysis = True
        self.ask_objections = True
        self.use_objection_cache = True
        self.do_ragas_evaluation = False
        self.customer_research_report_md = "HSBC Quarterly Report 2024-10-19.md"
        self.customer_research_report_pdf = "HSBC Quarterly Report 2024-10-19.pdf"
        self.bettetech_value_proposition_pdf = "BetterTech Lending Analytics Solution.pdf"
        self.do_voice = True
        self.status = "active"
        self.scenario = None
        self.qa_mode = "single"
        self.questions = []
        self.start_time = None
        self.end_time = None
        self.duration_minutes = None
        self.attitude = "Happy"
        self.mood_score = 5
        self.num_questions = 2
        self.current_question_index = 0
        self.previous_answer = None
        self.question = ""
        self.ground_truth = ""
        self.rep_answer = ""
        self.responses = []
        self.queries = []
        self.llm_responses = []
        self.command = ""
        self.scores = []
        self.llm_next_steps = ""
        self.company = None
        self.customer = None
        self.opportunity = None
        self.scenario = None
        self.opportunity_review_results = None
        self.opportunity_review_report = None
    class Company:
        def __init__(self, name, description, product, product_summary, product_description):
            self.name = name
            self.description = description
            self.product = product
            self.product_summary = product_summary
            self.product_description = product_description

    class Customer:
        def __init__(self, name, contact_name, contact_role):
            self.name = name
            self.contact_name = contact_name
            self.contact_role = contact_role
            self.background = None


    class Opportunity:
        def __init__(self, id, name, stage, description, value, close_date, activity, next_steps):
            self.id = id
            self.name = name
            self.stage = stage
            self.description = description
            self.value = value
            self.close_date = close_date
            self.activity = activity
            self.next_steps = next_steps
            


    def add_company_info(self, name, description, product, product_summary, product_description):
        self.company = self.Company(name, description, product, product_summary, product_description)

    def add_customer_info(self, name, contact_name, contact_role):
        self.customer = self.Customer(name, contact_name, contact_role)

    def add_opportunity_info(self, id, name, stage, description, value, close_date, activity, next_steps):
        self.opportunity = self.Opportunity(id, name, stage, description, value, close_date, activity, next_steps) 

    def add_scenario_info(self, scenario_data):
        self.scenario = scenario_data
        self.add_opportunity_info(
            id=scenario_data['Opportunity ID'],
            name=scenario_data['Opportunity Name'],
            stage=scenario_data['Opportunity Stage'],
            description=scenario_data['Opportunity Description'],
            value=scenario_data['Opportunity Value'],
            close_date=scenario_data['Close Date'],
            activity=scenario_data['Activity'],
            next_steps=scenario_data['Next Steps']  
        )
        self.add_customer_info(
            name=scenario_data['Customer Name'],
            contact_name=scenario_data['Customer Contact'],
            contact_role=scenario_data['Customer Contact Role']
        )

    def get_opening(self):
        output_lines = [
            "**Simulation Scenario**",
            f"**Customer:** {self.customer.name if self.customer else 'Unknown'}",
            f"**Opportunity:** {self.opportunity.name if self.opportunity else 'Unknown'}",
            f"**Value:** {self.opportunity.value if self.opportunity and hasattr(self.opportunity, 'value') else 'Unknown'}",
            f"**Stage:** {self.opportunity.stage if self.opportunity else 'N/A'}",
            f"**Target Close Date:** {self.opportunity.close_date if self.opportunity and hasattr(self.opportunity, 'close_date') else 'Unknown'}",
            f"**Opportunity Description:** {self.opportunity.description if self.opportunity else 'Unknown'}",
            f"**Meeting with:** {self.customer.contact_name} ({self.customer.contact_role})",
            f"**Activity:** {self.opportunity.activity if self.opportunity and hasattr(self.opportunity, 'activity') else 'Unknown'}",
            f"**Current Meeting:** {self.opportunity.next_steps if self.opportunity and hasattr(self.opportunity, 'next_steps') else 'Unknown'}"
        ]
        output = "\n".join(output_lines)
        return output
    
    def __str__(self):
        company_info = f"{self.company.name} - " if self.company else ""
        customer_info = f"for {self.customer.name}" if self.customer else "No Customer"
        opportunity_info = f"{self.opportunity.name} ({self.opportunity.stage})" if self.opportunity else "No opportunity set"
        return f"{company_info}SessionState: {customer_info} {opportunity_info}".strip()