from typing import Any, Literal from pydantic import BaseModel, Field class Observation(BaseModel): ticket_id: str ticket_status: Literal["open", "in_progress", "resolved"] attempts_used: int = Field(ge=0) attempts_remaining: int = Field(ge=0) severity: Literal["low", "medium", "high"] summary: str embedding: list[float] | None = None class Action(BaseModel): action_type: Literal["triage", "respond", "resolve", "escalate"] note: str = "" class RewardSignal(BaseModel): value: float reason: str class StepResult(BaseModel): observation: Observation reward: RewardSignal done: bool info: dict[str, Any] = Field(default_factory=dict)