from pydantic import BaseModel, field_validator from typing import List, Optional class TurnUpdate(BaseModel): affinity_delta: int = 0 new_memories: List[str] = [] tone_delta: int = 0 cruel_quote: Optional[str] = None chosen_name: Optional[str] = None @field_validator("affinity_delta") @classmethod def clamp_delta(cls, v): return max(-8, min(8, v)) @field_validator("tone_delta") @classmethod def clamp_tone(cls, v): return max(-10, min(10, v)) @field_validator("cruel_quote") @classmethod def clean_quote(cls, v): if v is None: return None v = v.strip()[:120] return v or None