"""记忆 API schema。""" from pydantic import BaseModel, ConfigDict, Field class MemoryCreateRequest(BaseModel): model_config = ConfigDict( json_schema_extra={ "examples": [ { "type": "user", "title": "回答偏好", "content": "用户喜欢简洁、直接、带验证结果的中文回答。", "source": "user_explicit", "confidence": 1.0, "importance": 0.8, "sensitivity": "low", "evidence_ids": ["message_462927da6f0e4af780dd28fd58f73314"], "character_id": "character_ec83d55746c54e47ab6f98d683032626", } ] } ) type: str = Field( default="user", max_length=60, description="记忆类型,取值见契约字典 memory.type。" ) title: str = Field(max_length=200, description="记忆标题。") content: str = Field(min_length=1, description="记忆正文。") source: str = Field( default="user_explicit", description="记忆来源,取值见契约字典 memory.source。" ) confidence: float = Field(default=1.0, ge=0.0, le=1.0, description="置信度,范围 0.0–1.0。") importance: float = Field(default=0.5, ge=0.0, le=1.0, description="重要性,范围 0.0–1.0。") sensitivity: str = Field(default="low", description="敏感等级:none / low / medium / high。") evidence_ids: list[str] = Field(default_factory=list, description="证据 ID 列表。") character_id: str | None = Field(default=None, description="人物 ID;为空时使用当前激活人物。") class MemoryUpdateRequest(BaseModel): model_config = ConfigDict( json_schema_extra={ "examples": [ { "title": "回答偏好(已确认)", "importance": 0.9, "status": "active", "evidence_ids": ["message_462927da6f0e4af780dd28fd58f73314"], } ] } ) type: str | None = Field(default=None, max_length=60, description="记忆类型。") title: str | None = Field(default=None, max_length=200, description="记忆标题。") content: str | None = Field(default=None, description="记忆正文。") confidence: float | None = Field( default=None, ge=0.0, le=1.0, description="置信度,范围 0.0–1.0。" ) importance: float | None = Field( default=None, ge=0.0, le=1.0, description="重要性,范围 0.0–1.0。" ) sensitivity: str | None = Field(default=None, description="敏感等级。") status: str | None = Field( default=None, description="记忆状态:active / archived / deleted / superseded。" ) evidence_ids: list[str] | None = Field(default=None, description="证据 ID 列表。") class MemoryResponse(BaseModel): model_config = ConfigDict( json_schema_extra={ "examples": [ { "id": "memory_4d9c6e3b18bb4ef5a6b8ed2e902d1f1a", "character_id": "character_ec83d55746c54e47ab6f98d683032626", "type": "user", "title": "回答偏好", "content": "用户喜欢简洁、直接、带验证结果的中文回答。", "source": "user_explicit", "confidence": 1.0, "importance": 0.8, "sensitivity": "low", "evidence_ids": ["message_462927da6f0e4af780dd28fd58f73314"], "status": "active", "created_at": "2026-06-19T09:12:00.000000Z", "updated_at": "2026-06-19T09:12:00.000000Z", "deleted_at": None, "expires_at": None, } ] } ) id: str = Field(description="记忆 ID,前缀为 memory_。") character_id: str = Field(description="所属人物 ID。") type: str = Field(description="记忆类型。") title: str = Field(description="记忆标题。") content: str = Field(description="记忆正文。") source: str = Field(description="记忆来源。") confidence: float = Field(description="置信度。") importance: float = Field(description="重要性。") sensitivity: str = Field(description="敏感等级。") evidence_ids: list[str] = Field(description="证据 ID 列表。") status: str = Field(description="记忆状态。") created_at: str = Field(description="创建时间,UTC ISO 8601 字符串。") updated_at: str = Field(description="更新时间,UTC ISO 8601 字符串。") deleted_at: str | None = Field(description="删除时间;未删除时为空。") expires_at: str | None = Field(description="过期时间;永不过期时为空。")