| from pydantic import BaseModel, ConfigDict, Field |
| from typing import List, Literal, Optional |
| import openenv.core.env_server.types as openenv_types |
|
|
| class Observation(openenv_types.Observation): |
| ticket_id: str = Field(default="", description="Unique ID of the ticket") |
| customer_message: str = Field(default="", description="The current message from the customer") |
| history: List[str] = Field(default_factory=list, description="Conversation history") |
| missing_info: List[str] = Field(default_factory=list, description="Fields required before routing") |
| status: str = Field(default="OPEN", description="Ticket status") |
| refund_processed: bool = Field(default=False, description="True if a refund was already executed") |
|
|
| class Action(openenv_types.Action): |
| action_type: Literal["ROUTE", "ASK_INFO", "REFUND", "CLOSE"] = Field(..., description="Type of action to take") |
| argument: str = Field(..., description="The category to route to, the question to ask, or the order ID to refund") |
|
|
| class State(openenv_types.State): |
| ticket_id: str = Field(default="", description="Unique ID of the ticket") |
| customer_message: str = Field(default="", description="The current message from the customer") |
| history: List[str] = Field(default_factory=list, description="Conversation history") |
| missing_info: List[str] = Field(default_factory=list, description="Fields required before routing") |
| status: str = Field(default="OPEN", description="Ticket status") |
| refund_processed: bool = Field(default=False, description="True if a refund was already executed") |
|
|
| class Reward(BaseModel): |
| value: float = Field(..., description="Numerical reward between -1.0 and 1.0") |
| feedback: str = Field(..., description="Incremental feedback for the agent") |