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)