"""LLM JSON 边界契约(Memoir agents)。""" from __future__ import annotations from pydantic import AliasChoices, BaseModel, ConfigDict, Field class ClassificationOutput(BaseModel): category: str = "" class MemoirTitleOutput(BaseModel): title: str = "" class FidelityOutput(BaseModel): model_config = ConfigDict(populate_by_name=True) pass_: bool = Field(default=True, alias="pass") reason: str | None = None class StateExtractionOutput(BaseModel): detected_stage: str = "" slots: dict[str, str] = Field(default_factory=dict) emotion: str | None = None is_new_chapter: bool | None = None class BatchPhase1SegmentRowOut(BaseModel): id: str detected_stage: str = "" slots: dict[str, str] = Field(default_factory=dict) chapter_category: str = Field( default="", validation_alias=AliasChoices("chapter_category", "category"), ) model_config = ConfigDict(extra="ignore", populate_by_name=True) class BatchPhase1LLMOutput(BaseModel): segments: list[BatchPhase1SegmentRowOut] __all__ = [ "BatchPhase1LLMOutput", "BatchPhase1SegmentRowOut", "ClassificationOutput", "FidelityOutput", "MemoirTitleOutput", "StateExtractionOutput", ]