Spaces:
Sleeping
Sleeping
| """ | |
| Task definitions for the Support Ticket Triage OpenEnv environment. | |
| Each task specifies: | |
| - name & description shown to the agent | |
| - which tickets belong to this task | |
| - max_steps allowed | |
| - grader function reference | |
| - expected difficulty | |
| """ | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import List | |
| class TaskSpec: | |
| name: str | |
| display_name: str | |
| description: str | |
| ticket_ids: List[str] | |
| max_steps: int | |
| difficulty: str # "easy" | "medium" | "hard" | |
| grader_name: str # matches key in graders.py GRADERS dict | |
| success_threshold: float # minimum score considered "solved" | |
| # --------------------------------------------------------------------------- | |
| # Task 1 — EASY: Route to the correct department | |
| # --------------------------------------------------------------------------- | |
| TASK_ROUTE = TaskSpec( | |
| name="route", | |
| display_name="Ticket Routing (Easy)", | |
| description=( | |
| "Read the support ticket and route it to the correct department by " | |
| "using the ROUTE action. You have one chance to route correctly. " | |
| "Available departments: billing, technical_support, sales, " | |
| "customer_success, legal. " | |
| "Score 1.0 for the correct department, 0.0 for wrong." | |
| ), | |
| ticket_ids=["TKT-001", "TKT-002", "TKT-003", "TKT-004", "TKT-005"], | |
| max_steps=3, | |
| difficulty="easy", | |
| grader_name="route_grader", | |
| success_threshold=1.0, | |
| ) | |
| # --------------------------------------------------------------------------- | |
| # Task 2 — MEDIUM: Route + Set Urgency + Tag + Respond | |
| # --------------------------------------------------------------------------- | |
| TASK_TRIAGE = TaskSpec( | |
| name="triage", | |
| display_name="Full Triage (Medium)", | |
| description=( | |
| "Fully triage the support ticket by completing ALL of the following: " | |
| "(1) ROUTE to the correct department, " | |
| "(2) SET_URGENCY to the appropriate level (low/medium/high/critical), " | |
| "(3) TAG with relevant classification labels, " | |
| "(4) RESPOND with a helpful initial reply to the customer. " | |
| "You must close the ticket with CLOSE after completing all steps. " | |
| "Partial credit is awarded for each sub-task completed correctly." | |
| ), | |
| ticket_ids=["TKT-006", "TKT-007", "TKT-001", "TKT-003"], | |
| max_steps=8, | |
| difficulty="medium", | |
| grader_name="triage_grader", | |
| success_threshold=0.7, | |
| ) | |
| # --------------------------------------------------------------------------- | |
| # Task 3 — HARD: Full resolution including follow-up and escalation | |
| # --------------------------------------------------------------------------- | |
| TASK_RESOLVE = TaskSpec( | |
| name="resolve", | |
| display_name="Full Resolution (Hard)", | |
| description=( | |
| "Fully resolve a complex support ticket over multiple steps. " | |
| "You must: (1) ROUTE correctly, (2) SET_URGENCY appropriately, " | |
| "(3) RESPOND with an empathetic and actionable initial reply, " | |
| "(4) ESCALATE with a clear reason if the ticket warrants it, " | |
| "(5) Handle a follow-up message from the customer with another RESPOND, " | |
| "(6) CLOSE the ticket with a resolution summary. " | |
| "All steps are required for full score. Graders check response quality, " | |
| "escalation decisions, and resolution completeness." | |
| ), | |
| ticket_ids=["TKT-008", "TKT-009"], | |
| max_steps=12, | |
| difficulty="hard", | |
| grader_name="resolve_grader", | |
| success_threshold=0.6, | |
| ) | |
| ALL_TASKS: List[TaskSpec] = [TASK_ROUTE, TASK_TRIAGE, TASK_RESOLVE] | |
| TASK_LOOKUP = {t.name: t for t in ALL_TASKS} | |