parthpethia's picture
Add Email Triage OpenEnv environment - production-ready with 3 graded tasks and Flask API
fee8744
"""Pydantic models for Email Triage OpenEnv."""
from datetime import datetime
from enum import Enum
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field
class EmailCategory(str, Enum):
"""Email classification categories"""
SPAM = "spam"
NORMAL = "normal"
URGENT = "urgent"
BILLING = "billing"
class Team(str, Enum):
"""Teams to route emails to"""
SUPPORT = "support"
SALES = "sales"
BILLING = "billing"
NONE = "none"
class Email(BaseModel):
"""Represents an email message"""
email_id: str
subject: str
body: str
sender_domain: str
timestamp: datetime
is_vip_sender: bool = False
sla_hours: Optional[int] = None
class GroundTruth(BaseModel):
"""Ground truth labels for an email"""
email_id: str
category: EmailCategory
team: Team
priority: int = Field(ge=0, le=3) # 0=low, 3=high
class Observation(BaseModel):
"""Observation returned after each step"""
current_email: Email
inbox_state: Dict[str, int] = Field(
default_factory=lambda: {
"pending": 0,
"spam": 0,
"urgent": 0,
"processed": 0
}
)
step_count: int = 0
task_name: str = ""
info: Dict[str, Any] = Field(default_factory=dict)
class Action(BaseModel):
"""Action taken by the agent"""
classification: EmailCategory
team: Team = Team.NONE
priority: int = Field(ge=0, le=3, default=1)
class Reward(BaseModel):
"""Reward signal for an action"""
value: float = Field(ge=0.0, le=1.0)
breakdown: Dict[str, float] = Field(default_factory=dict)
class State(BaseModel):
"""Complete environment state"""
current_observation: Observation
current_reward: float
done: bool
info: Dict[str, Any] = Field(default_factory=dict)
history: List[Dict[str, Any]] = Field(default_factory=list)