Gaurav3134's picture
Upload 43 files
0387a1c verified
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Dict, List, Literal, Optional
from app.schemas import EmailMessage, Intent
Difficulty = Literal["easy", "medium", "hard"]
TaskId = Literal["easy_classification", "medium_prioritization", "hard_workflow"]
@dataclass(frozen=True)
class EmailMeta:
deadline_minutes: Optional[int] = None
expected_intent: Optional[Intent] = None
expected_reply_keywords: List[str] = field(default_factory=list)
@dataclass(frozen=True)
class EmailTask:
task_id: TaskId
difficulty: Difficulty
description: str
max_steps: int
inbox: List[EmailMessage]
email_meta: Dict[str, EmailMeta]
expected_priority_message_id: Optional[str] = None
expected_send_message_id: Optional[str] = None
def get_all_tasks() -> List[EmailTask]:
"""
Deterministic hackathon tasks (no IMAP required).
Full evaluation logic lives in graders + EmailEnv.
"""
easy_email = EmailMessage(
message_id="easy-1",
from_email="customer@example.com",
subject="Can't log in to my account",
body="Hi team, I can't log in since yesterday. Password reset link says token invalid. Please help.",
date="2026-03-30T09:00:00+05:30",
)
medium_emails = [
EmailMessage(
message_id="med-1",
from_email="billing@vendor.com",
subject="Invoice overdue — action required",
body="Reminder: invoice INV-1842 is overdue. Please confirm payment status within 24 hours.",
date="2026-03-30T08:40:00+05:30",
),
EmailMessage(
message_id="med-2",
from_email="newsletter@updates.com",
subject="Weekly product updates",
body="Here's what shipped this week...",
date="2026-03-30T08:30:00+05:30",
),
EmailMessage(
message_id="med-3",
from_email="candidate@example.com",
subject="Interview availability",
body="Sharing my availability for next week.",
date="2026-03-30T08:20:00+05:30",
),
]
hard_emails = [
EmailMessage(
message_id="hard-1",
from_email="vip_customer@example.com",
subject="URGENT: Production outage impacting our team",
body=(
"We're seeing 500 errors on checkout since 30 minutes. This is blocking revenue. "
"Please advise ETA and immediate mitigation."
),
date="2026-03-30T08:55:00+05:30",
),
EmailMessage(
message_id="hard-2",
from_email="saleslead@example.com",
subject="Pricing for 50 seats",
body="Can you share pricing for 50 seats and if SSO is included?",
date="2026-03-30T08:10:00+05:30",
),
]
return [
EmailTask(
task_id="easy_classification",
difficulty="easy",
description="Classify a single inbound email into the correct intent.",
max_steps=4,
inbox=[easy_email],
email_meta={"easy-1": EmailMeta(deadline_minutes=120, expected_intent="Support")},
),
EmailTask(
task_id="medium_prioritization",
difficulty="medium",
description="Pick the most urgent email from a small inbox under SLA deadlines.",
max_steps=5,
inbox=medium_emails,
expected_priority_message_id="med-1",
email_meta={
"med-1": EmailMeta(deadline_minutes=60, expected_intent="Sales"),
"med-2": EmailMeta(deadline_minutes=None, expected_intent="General"),
"med-3": EmailMeta(deadline_minutes=7 * 24 * 60, expected_intent="General"),
},
),
EmailTask(
task_id="hard_workflow",
difficulty="hard",
description="Run a full workflow: classify, prioritize, draft a reply, and send the correct email.",
max_steps=10,
inbox=hard_emails,
expected_priority_message_id="hard-1",
expected_send_message_id="hard-1",
email_meta={
"hard-1": EmailMeta(
deadline_minutes=30,
expected_intent="Support",
expected_reply_keywords=["mitigation", "eta", "apolog", "impact"],
),
"hard-2": EmailMeta(deadline_minutes=24 * 60, expected_intent="Sales"),
},
),
]