Files
hunjing/backend/app/schemas/candidates.py
T
2026-08-21 16:00:13 +08:00

51 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""候选 API schema(api-spec §8)。"""
from pydantic import BaseModel, Field
class ProfileCandidateResponse(BaseModel):
id: str = Field(description="候选 ID,前缀 profile_candidate_。")
character_id: str = Field(description="所属人物 ID。")
import_job_id: str | None = Field(default=None, description="来源导入任务 ID。")
field: str = Field(description="档案字段名。")
value: str = Field(description="候选值。")
confidence: float = Field(description="置信度。")
evidence_ids: list[str] = Field(default_factory=list, description="证据 import_item ID。")
status: str = Field(description="审核状态,契约字典 §10.6。")
reason: str | None = Field(default=None)
reviewed_at: str | None = Field(default=None)
created_at: str = Field(description="创建时间,UTC ISO 8601 字符串。")
class MemoryCandidateResponse(BaseModel):
id: str = Field(description="候选 ID,前缀 memory_candidate_。")
character_id: str = Field(description="所属人物 ID。")
import_job_id: str | None = Field(default=None, description="来源导入任务 ID。")
cycle_id: str | None = Field(default=None, description="来源大周天循环 ID。")
type: str = Field(description="记忆类型。")
title: str = Field(description="记忆标题。")
content: str = Field(description="记忆内容。")
confidence: float = Field(description="置信度。")
importance: float = Field(description="重要度。")
sensitivity: str = Field(description="敏感等级。")
evidence_ids: list[str] = Field(default_factory=list, description="证据 import_item ID。")
status: str = Field(description="审核状态,契约字典 §10.6。")
reason: str | None = Field(default=None)
reviewed_at: str | None = Field(default=None)
created_at: str = Field(description="创建时间,UTC ISO 8601 字符串。")
class CandidateReviewDecision(BaseModel):
candidate_id: str = Field(description="候选 ID。")
decision: str = Field(description="审核决定:approve / reject。")
class BatchReviewRequest(BaseModel):
decisions: list[CandidateReviewDecision] = Field(min_length=1, description="批量审核决定。")
class BatchReviewResult(BaseModel):
applied: int = Field(description="已应用(approve)数量。")
rejected: int = Field(description="已驳回数量。")
skipped: int = Field(description="因状态非 pending 跳过的数量。")