from pydantic import BaseModel, Field class CircumplexEmotionalState(BaseModel): """Russell's Circumplex Model of Affect""" valence: float = Field(default=0.0, ge=-1.0, le=1.0, description="Negative(-1) to Positive(+1)") arousal: float = Field(default=0.0, ge=-1.0, le=1.0, description="Calm(-1) to Excited(+1)") label: str = Field(default="neutral", description="Emotion label (e.g. anxious, happy, calm)") def summary(self) -> str: return f"{self.label} (valence={self.valence:.2f}, arousal={self.arousal:.2f})" class EmotionSnapshot(BaseModel): """Emotion record for a single turn""" turn: int emotion: CircumplexEmotionalState confidence_level: float = Field(default=0.5, ge=0.0, le=1.0)