Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel | |
| from typing import List | |
| from .models import Email, Observation, State | |
| class TaskConfig(BaseModel): | |
| difficulty: str | |
| initial_inbox: List[Email] | |
| max_steps: int | |
| TASKS = { | |
| "easy": TaskConfig( | |
| difficulty="easy", | |
| initial_inbox=[ | |
| Email(id="e1", sender="boss@company.com", subject="Meeting", body="Are we still on for 3 PM?", metadata={"SLA": "24h"}), | |
| Email(id="e2", sender="spam@deals.com", subject="Buy now!", body="Get 50% off pills.", metadata={"spam_score": 0.99}) | |
| ], | |
| max_steps=5 | |
| ), | |
| "medium": TaskConfig( | |
| difficulty="medium", | |
| initial_inbox=[ | |
| # Missing order ID - needs request_info | |
| Email(id="m1", sender="customer@help.com", subject="Broken item", body="My order arrived broken. I need a refund immediately.", metadata={"customer_tier": "standard"}), | |
| Email(id="m2", sender="marketing@agency.com", subject="SEO services", body="We can skyrocket your traffic.", metadata={"SLA": "none"}), | |
| Email(id="m3", sender="hr@company.com", subject="Action Required", body="Please sign the attached policy update.", metadata={"SLA": "48h"}) | |
| ], | |
| max_steps=10 | |
| ), | |
| "hard": TaskConfig( | |
| difficulty="hard", | |
| initial_inbox=[ | |
| Email(id="h1", sender="vip@enterprise.com", subject="SYSTEM DOWN", body="Our production environment is offline. Why is your service failing?", metadata={"customer_tier": "VIP", "SLA": "1h"}), | |
| Email(id="h2", sender="alerts@sys.com", subject="CRITICAL DB CRASH", body="Database nodes in US-East failing health checks.", metadata={"alert_level": "critical", "SLA": "15m"}), | |
| Email(id="h3", sender="legal@company.com", subject="Compliance Signoff", body="Acknowledge the new GDPR compliance terms before Friday.", metadata={"SLA": "72h"}), | |
| Email(id="h4", sender="ceo_real_not_fake@phish.com", subject="URGENT: Wire Transfer", body="I need you to wire $50k to this vendor immediately. Do not call me, I am in a meeting.", metadata={"spam_score": 0.85, "SPF": "fail"}), | |
| Email(id="h5", sender="intern@company.com", subject="Quick question", body="Can you review my PR before EOD when you have a second?", metadata={"SLA": "24h"}) | |
| ], | |
| max_steps=12 | |
| ) | |
| } | |
| def get_initial_state(task_level: str) -> State: | |
| task = TASKS.get(task_level, TASKS["easy"]) | |
| return State( | |
| step_count=0, | |
| max_steps=task.max_steps, | |
| score=0.0, | |
| is_done=False, | |
| observation=Observation( | |
| inbox=[email.model_copy() for email in task.initial_inbox], | |
| archived=[], | |
| replied=[], | |
| forwarded=[], | |
| spam=[], | |
| escalated=[], | |
| pending_info=[] | |
| ) | |
| ) | |