File size: 2,821 Bytes
78940a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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=[]
        )
    )