from datetime import datetime from typing import Any from pydantic import BaseModel, ConfigDict, Field from app.modules.personalization.constants import PreferenceCategory, PreferenceSource class PreferenceCreate(BaseModel): category: PreferenceCategory value: str = Field(..., min_length=1, max_length=1000) source: PreferenceSource = PreferenceSource.EXPLICIT class PreferenceUpdate(BaseModel): category: PreferenceCategory | None = None value: str | None = Field(default=None, min_length=1, max_length=1000) class PreferenceRead(BaseModel): model_config = ConfigDict(from_attributes=True) code: str category: str value: str source: str created_at: datetime updated_at: datetime class ExtractedPreference(BaseModel): category: PreferenceCategory value: str = Field(..., min_length=1, max_length=1000) class PreferenceExtractionPayload(BaseModel): preferences: list[ExtractedPreference] = Field(default_factory=list, max_length=20) class ConversationMessageRead(BaseModel): model_config = ConfigDict(from_attributes=True) role: str content: str created_at: datetime class ConversationRead(BaseModel): model_config = ConfigDict(from_attributes=True) code: str chat_type: str chat_key: str messages: list[ConversationMessageRead] = Field(default_factory=list) class ErasureConfirmation(BaseModel): confirmation_code: str expires_at: datetime class ErasureResult(BaseModel): anonymous_id: str deleted: dict[str, int] = Field(default_factory=dict) extra: dict[str, Any] = Field(default_factory=dict)