| from typing import List, Optional | |
| from openenv.core.env_server import Action, Observation, State | |
| from pydantic import BaseModel | |
| class EmailAction(Action): | |
| category_id: int # 0: Support, 1: Sales, 2: Feedback, 3: Internal | |
| priority: int # 1: High, 2: Medium, 3: Low | |
| extracted_info: str = "" # Required for Hard task | |
| reasoning: str # Logic behind the decision | |
| class EmailObservation(Observation): | |
| task_id: int # 1: Easy, 2: Medium, 3: Hard | |
| subject: str | |
| body: str | |
| current_step: int | |
| total_steps: int | |
| reward: float = 0.0 | |
| done: bool = False | |
| message: str = "" | |
| class EmailItem(BaseModel): | |
| subject: str | |
| body: str | |
| true_category: int | |
| true_priority: int | |
| required_info: str = "" # Entity to extract for Hard task | |
| class EmailState(State): | |
| emails: List[EmailItem] = [] | |
| current_step: int = 0 | |
| max_steps: int = 5 | |
| task_id: int = 1 | |
| score: float = 0.0 | |