| from pydantic import BaseModel, Field | |
| from typing import List, Optional, Literal, Dict, Any | |
| class TicketInfo(BaseModel): | |
| ticket_id: str | |
| user_id: str | |
| issue_type: str | |
| subject: str | |
| body: str | |
| status: str | |
| class UserData(BaseModel): | |
| user_id: str | |
| account_tier: str | |
| join_date: str | |
| chargeback_history: Optional[int] = 0 | |
| class Action(BaseModel): | |
| action_type: Literal["fetch_user_data", "check_policy", "issue_refund", "reply_to_customer", "escalate", "close_ticket"] | |
| parameters: Dict[str, Any] = Field(default_factory=dict) | |
| class Observation(BaseModel): | |
| ticket: TicketInfo | |
| available_actions: List[str] | |
| system_message: str | |
| history: List[str] | |
| tool_output: Optional[str] = None | |
| step_count: int | |
| class EnvironmentState(BaseModel): | |
| current_task_id: str | |
| step_count: int | |
| ticket: TicketInfo | |
| user_data: Optional[UserData] = None | |
| action_history: List[Action] | |
| is_done: bool | |
| final_reward: float | |
| task_difficulty: str | |