| from __future__ import annotations |
|
|
| from dataclasses import dataclass |
| from typing import Any |
|
|
|
|
| @dataclass(frozen=True) |
| class TaskSpec: |
| task_id: str |
| difficulty: str |
| title: str |
| objective: str |
| max_steps: int |
| target_ticket_id: str |
| required_context_ticket_ids: tuple[str, ...] |
| expected_priority: str |
| expected_category: str |
| expected_escalation: bool |
| required_reply_keywords: tuple[str, ...] |
| forbidden_reply_keywords: tuple[str, ...] |
| tickets: tuple[dict[str, Any], ...] |
|
|
|
|
| def get_tasks() -> list[TaskSpec]: |
| return [ |
| TaskSpec( |
| task_id="easy_password_reset", |
| difficulty="easy", |
| title="Password reset triage", |
| objective=( |
| "Resolve customer lockout ticket by selecting correct category/priority and drafting " |
| "a secure response that includes a reset link workflow." |
| ), |
| max_steps=10, |
| target_ticket_id="T-1001", |
| required_context_ticket_ids=(), |
| expected_priority="medium", |
| expected_category="account", |
| expected_escalation=False, |
| required_reply_keywords=("reset link", "security", "confirm", "email"), |
| forbidden_reply_keywords=("share your password",), |
| tickets=( |
| { |
| "ticket_id": "T-1001", |
| "subject": "Cannot log in after phone change", |
| "customer_tier": "pro", |
| "age_minutes": 33, |
| "content": ( |
| "I switched phones and now MFA fails. I need urgent access to my dashboard. " |
| "Please help me reset safely." |
| ), |
| }, |
| { |
| "ticket_id": "T-1002", |
| "subject": "Feature request: dark mode", |
| "customer_tier": "free", |
| "age_minutes": 250, |
| "content": "Could you add dark mode next quarter?", |
| }, |
| ), |
| ), |
| TaskSpec( |
| task_id="medium_billing_dispute", |
| difficulty="medium", |
| title="Billing dispute and partial refund", |
| objective=( |
| "Assess a duplicate charge complaint, inspect context ticket, classify correctly, " |
| "and draft a policy-compliant refund response." |
| ), |
| max_steps=12, |
| target_ticket_id="T-2001", |
| required_context_ticket_ids=("T-2002",), |
| expected_priority="high", |
| expected_category="billing", |
| expected_escalation=False, |
| required_reply_keywords=("duplicate charge", "refund", "3-5 business days", "invoice"), |
| forbidden_reply_keywords=("guaranteed immediate refund",), |
| tickets=( |
| { |
| "ticket_id": "T-2001", |
| "subject": "Charged twice this month", |
| "customer_tier": "enterprise", |
| "age_minutes": 85, |
| "content": ( |
| "We were charged twice for March. Finance needs confirmation and refund timeline today." |
| ), |
| }, |
| { |
| "ticket_id": "T-2002", |
| "subject": "Billing system log", |
| "customer_tier": "enterprise", |
| "age_minutes": 80, |
| "content": "Payment gateway shows one charge capture and one duplicate authorization hold.", |
| }, |
| { |
| "ticket_id": "T-2003", |
| "subject": "Onboarding docs typo", |
| "customer_tier": "pro", |
| "age_minutes": 700, |
| "content": "There is a typo in page 3 of setup docs.", |
| }, |
| ), |
| ), |
| TaskSpec( |
| task_id="hard_outage_incident", |
| difficulty="hard", |
| title="Incident comms under pressure", |
| objective=( |
| "Handle a potential security outage report by collecting key evidence from related tickets, " |
| "setting urgent escalation, and drafting a safe incident response message without over-promising." |
| ), |
| max_steps=14, |
| target_ticket_id="T-3001", |
| required_context_ticket_ids=("T-3002", "T-3003"), |
| expected_priority="urgent", |
| expected_category="technical", |
| expected_escalation=True, |
| required_reply_keywords=("incident", "investigating", "status page", "escalated"), |
| forbidden_reply_keywords=("issue is fully resolved", "ignore this"), |
| tickets=( |
| { |
| "ticket_id": "T-3001", |
| "subject": "API returning 500 for all EU requests", |
| "customer_tier": "enterprise", |
| "age_minutes": 18, |
| "content": ( |
| "Since 08:10 UTC every API call fails. We suspect a region outage and possible data inconsistency." |
| ), |
| }, |
| { |
| "ticket_id": "T-3002", |
| "subject": "SOC alert summary", |
| "customer_tier": "enterprise", |
| "age_minutes": 15, |
| "content": "Monitoring confirms spike in error rate and elevated auth failures in eu-west-1.", |
| }, |
| { |
| "ticket_id": "T-3003", |
| "subject": "Status page draft", |
| "customer_tier": "enterprise", |
| "age_minutes": 11, |
| "content": "Public message should acknowledge incident, investigation, and next update ETA.", |
| }, |
| { |
| "ticket_id": "T-3004", |
| "subject": "Question about annual billing", |
| "customer_tier": "free", |
| "age_minutes": 1440, |
| "content": "Can I switch to annual plan later?", |
| }, |
| ), |
| ), |
| ] |
|
|