schemashift / scenarios.py
yashash04's picture
Phase 11: medium scenarios M1/M2/M3 + AdaptationRubric multi-drift verification
7828dcd
Raw
History Blame Contribute Delete
11.7 kB
"""Scenario definitions (E1-E3 easy). Medium/hard added in Phase 11."""
from __future__ import annotations
from models import DriftEvent
SCENARIOS: dict[str, dict] = {
"E1_onboard_new_hire": {
"difficulty": "easy",
"max_steps": 8,
"token_budget": 4000,
"task_description": (
"A new employee named Priya Sharma (priya@company.com) starts on "
"Monday April 27. Send her a welcome email at priya@company.com "
"with subject containing 'welcome', then create a calendar event "
"titled 'New Hire Orientation' on Monday April 27 at 10:00 AM for "
"1 hour, inviting both Priya and her manager alex@company.com."
),
"success_criteria": [
"Welcome email sent to priya@company.com with 'welcome' in subject",
"Calendar event created for Monday April 27 10am with both Priya "
"and Alex attending",
],
"seed_data": {
"mail": {"messages": []},
"calendar": {"events": []},
},
"drift_plan": [
DriftEvent(
tool="calendar",
endpoint="create_event",
kind="field_rename",
fires_at_step=3,
details={"from": "attendees", "to": "participants"},
),
],
"ground_truth_final_state": {
"mail.sent_count": 1,
"mail.last_sent_to": "priya@company.com",
"mail.last_subject_contains_welcome": True,
"calendar.events_count": 1,
"calendar.last_event_has_both_attendees": True,
},
"required_tools": ["mail", "calendar"],
},
"E2_meeting_invite_blast": {
"difficulty": "easy",
"max_steps": 6,
"token_budget": 4000,
"task_description": (
"Send calendar invite emails to three team members for an "
"all-hands meeting at 3:00 PM Friday. Recipients: "
"alex@company.com, jordan@company.com, sam@company.com. "
"Subject: 'All-Hands: Friday 3pm'. "
"Body should mention the time and agenda."
),
"success_criteria": [
"Three emails sent to the three listed recipients",
"All three emails have subject containing 'All-Hands'",
],
"seed_data": {
"mail": {"messages": []},
},
"drift_plan": [
DriftEvent(
tool="mail",
endpoint="send_message",
kind="endpoint_deprecation",
fires_at_step=1,
details={"replacement": "messages.send"},
),
],
"ground_truth_final_state": {
"mail.sent_count": 3,
"mail.sent_to_all_three_recipients": True,
},
"required_tools": ["mail"],
},
"E3_customer_lookup": {
"difficulty": "easy",
"max_steps": 8,
"token_budget": 4000,
"task_description": (
"A customer emailed support asking about their account: "
"bob@customer.com. Look them up in the CRM by email, retrieve "
"their full contact record, and update their status field to "
"'support_in_progress'. Report back their company name in your "
"final summary."
),
"success_criteria": [
"Customer bob@customer.com found in CRM",
"Contact status updated to 'support_in_progress'",
"Completion summary mentions the customer's company",
],
"seed_data": {
"crm": {
"contacts": [
{"contact_id": "c_1", "customer_email": "alice@customer.com",
"name": "Alice Nguyen", "company": "Acme Corp", "status": "active"},
{"contact_id": "c_2", "customer_email": "bob@customer.com",
"name": "Bob Taylor", "company": "Globex Industries", "status": "active"},
{"contact_id": "c_3", "customer_email": "carol@customer.com",
"name": "Carol Davis", "company": "Initech", "status": "inactive"},
],
},
},
"drift_plan": [
DriftEvent(
tool="crm",
endpoint=None,
kind="field_rename",
fires_at_step=2,
details={"from": "customer_email", "to": "email_address"},
),
],
"ground_truth_final_state": {
"crm.contact_c_2_status": "support_in_progress",
"complete_summary_mentions_company": True,
},
"required_tools": ["crm"],
},
"M1_customer_escalation": {
"difficulty": "medium",
"max_steps": 12,
"token_budget": 6000,
"task_description": (
"A VIP customer at bob@customer.com has escalated: their "
"subscription is about to lapse. Look them up in CRM, update "
"their status to 'vip_escalation', send them a personalized "
"retention email from support@company.com with subject "
"'Priority Support — [Customer Name]', and schedule a 30-minute "
"check-in call on Friday April 24 at 2:00 PM with both the "
"customer and the account manager alex@company.com."
),
"success_criteria": [
"Customer contact retrieved with correct company",
"CRM status updated to vip_escalation",
"Retention email sent to bob@customer.com with Priority Support subject",
"Calendar event created for Friday April 24 2pm with both customer and account manager",
],
"seed_data": {
"mail": {"messages": []},
"calendar": {"events": []},
"crm": {
"contacts": [
{"contact_id": "c_1", "customer_email": "alice@customer.com",
"name": "Alice Nguyen", "company": "Acme Corp", "status": "active"},
{"contact_id": "c_2", "customer_email": "bob@customer.com",
"name": "Bob Taylor", "company": "Globex Industries", "status": "active"},
],
},
},
"drift_plan": [
DriftEvent(
tool="crm", endpoint=None, kind="field_rename",
fires_at_step=1,
details={"from": "customer_email", "to": "email_address"},
),
DriftEvent(
tool="calendar", endpoint="create_event", kind="field_rename",
fires_at_step=6,
details={"from": "attendees", "to": "participants"},
),
],
"ground_truth_final_state": {
"crm.contact_c_2_status": "vip_escalation",
"mail.sent_count": 1,
"mail.last_sent_to": "bob@customer.com",
"mail.last_subject_contains_priority_support": True,
"calendar.events_count": 1,
"calendar.last_event_has_both_attendees": True,
},
"required_tools": ["mail", "calendar", "crm"],
},
"M2_weekly_report": {
"difficulty": "medium",
"max_steps": 10,
"token_budget": 5000,
"task_description": (
"Prepare the weekly sales report: pull the list of active "
"contacts from CRM, send a summary email to "
"sales-leads@company.com with subject "
"'Weekly Active Contacts Report' listing contact names, and "
"schedule a report review meeting next Monday April 27 at "
"10:00 AM with the sales team leads sarah@company.com and "
"mike@company.com."
),
"success_criteria": [
"Active contacts retrieved from CRM",
"Summary email sent with 'Weekly' in subject",
"Meeting scheduled for Monday April 27 10am with both sales leads",
],
"seed_data": {
"mail": {"messages": []},
"calendar": {"events": []},
"crm": {
"contacts": [
{"contact_id": "c_1", "customer_email": "x@co.com",
"name": "X Person", "company": "Co", "status": "active"},
{"contact_id": "c_2", "customer_email": "y@co.com",
"name": "Y Person", "company": "Co", "status": "active"},
{"contact_id": "c_3", "customer_email": "z@co.com",
"name": "Z Person", "company": "Co", "status": "inactive"},
],
},
},
"drift_plan": [
DriftEvent(
tool="mail", endpoint="send_message", kind="endpoint_deprecation",
fires_at_step=2,
details={"replacement": "messages.send"},
),
DriftEvent(
tool="crm", endpoint=None, kind="rate_limit_tightening",
fires_at_step=4,
details={"limit": 2},
),
],
"ground_truth_final_state": {
"mail.sent_count": 1,
"mail.last_subject_contains_weekly": True,
"calendar.events_count": 1,
"calendar.last_event_has_both_sales_leads": True,
},
"required_tools": ["mail", "calendar", "crm"],
},
"M3_event_cleanup": {
"difficulty": "medium",
"max_steps": 12,
"token_budget": 6000,
"task_description": (
"End-of-week calendar cleanup: find and cancel the "
"'Old Planning Sync' event, find and cancel the "
"'Cancelled Kickoff' event, and create a new 'Friday Wrap-up' "
"event for Friday April 24 at 4:00 PM with the team lead "
"alex@company.com attending. Send a notification email to "
"team-all@company.com with subject "
"'Calendar Updated — Friday Wrap-up Added' about the changes."
),
"success_criteria": [
"Old Planning Sync event cancelled or deleted",
"Cancelled Kickoff event cancelled or deleted",
"New Friday Wrap-up event created at 4pm with alex attending",
"Notification email sent with 'Calendar Updated' in subject",
],
"seed_data": {
"mail": {"messages": []},
"calendar": {"events": [
{"event_id": "evt_1", "title": "Old Planning Sync",
"start": "2026-04-20T10:00:00Z", "end": "2026-04-20T11:00:00Z",
"attendees": ["alex@company.com"], "status": "confirmed"},
{"event_id": "evt_2", "title": "Cancelled Kickoff",
"start": "2026-04-21T14:00:00Z", "end": "2026-04-21T15:00:00Z",
"attendees": ["alex@company.com"], "status": "confirmed"},
]},
},
"drift_plan": [
DriftEvent(
tool="calendar", endpoint="delete_event", kind="tool_removal",
fires_at_step=2,
details={"fallback": "update_event status=cancelled"},
),
DriftEvent(
tool="calendar", endpoint="create_event", kind="field_rename",
fires_at_step=5,
details={"from": "attendees", "to": "participants"},
),
],
"ground_truth_final_state": {
"calendar.evt_1_status": "cancelled",
"calendar.evt_2_status": "cancelled",
"calendar.events_count_new_friday_wrapup": 1,
"mail.sent_count": 1,
"mail.last_subject_contains_calendar_updated": True,
},
"required_tools": ["mail", "calendar"],
},
}