66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
|
|
"""可追溯评测:Chapter/Story 证据闭包模型(strict / partial / fallback)。"""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from typing import Literal
|
|||
|
|
|
|||
|
|
from pydantic import BaseModel, Field
|
|||
|
|
|
|||
|
|
LineageTier = Literal["strict", "partial", "fallback"]
|
|||
|
|
|
|||
|
|
|
|||
|
|
class EvidenceFormatMeta(BaseModel):
|
|||
|
|
"""Prompt 裁剪与可审计元数据(formatter 产出)。"""
|
|||
|
|
|
|||
|
|
truncated: bool = False
|
|||
|
|
dropped_sections: list[str] = Field(default_factory=list)
|
|||
|
|
included_token_estimate: int = 0
|
|||
|
|
transcript_chars_included: int = 0
|
|||
|
|
structured_evidence_chars_included: int = 0
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ChapterEvidenceBundle(BaseModel):
|
|||
|
|
"""章节评测证据闭包(Phase A:source_segments 为主链,标记 partial)。"""
|
|||
|
|
|
|||
|
|
user_id: str
|
|||
|
|
chapter_id: str
|
|||
|
|
segment_ids: list[str] = Field(default_factory=list)
|
|||
|
|
conversation_ids: list[str] = Field(default_factory=list)
|
|||
|
|
memory_chunk_ids: list[str] = Field(default_factory=list)
|
|||
|
|
memory_fact_ids: list[str] = Field(default_factory=list)
|
|||
|
|
timeline_event_ids: list[str] = Field(default_factory=list)
|
|||
|
|
summary_ids: list[str] = Field(default_factory=list)
|
|||
|
|
lineage_tier: LineageTier
|
|||
|
|
notes: list[str] = Field(default_factory=list)
|
|||
|
|
augmented_with_chapter_context: bool = False
|
|||
|
|
# DialogueLineage.model_dump() — user/assistant message ids (multi-turn)
|
|||
|
|
dialogue_lineage: dict | None = None
|
|||
|
|
|
|||
|
|
|
|||
|
|
class StoryEvidenceBundle(BaseModel):
|
|||
|
|
"""故事评测证据闭包:StoryEvidenceLink 优先,缺失则回退 chapter source_segments。"""
|
|||
|
|
|
|||
|
|
user_id: str
|
|||
|
|
story_id: str
|
|||
|
|
segment_ids: list[str] = Field(default_factory=list)
|
|||
|
|
conversation_ids: list[str] = Field(default_factory=list)
|
|||
|
|
memory_chunk_ids: list[str] = Field(default_factory=list)
|
|||
|
|
memory_fact_ids: list[str] = Field(default_factory=list)
|
|||
|
|
timeline_event_ids: list[str] = Field(default_factory=list)
|
|||
|
|
summary_ids: list[str] = Field(default_factory=list)
|
|||
|
|
lineage_tier: LineageTier
|
|||
|
|
notes: list[str] = Field(default_factory=list)
|
|||
|
|
augmented_with_chapter_context: bool = False
|
|||
|
|
story_link_evidence_count: int = 0
|
|||
|
|
fallback_chapter_ids: list[str] = Field(default_factory=list)
|
|||
|
|
dialogue_lineage: dict | None = None
|
|||
|
|
|
|||
|
|
|
|||
|
|
class FormattedMemoirEvidence(BaseModel):
|
|||
|
|
"""供 `EvalJudgeService` 组 prompt 的格式化结果 + 汇总说明。"""
|
|||
|
|
|
|||
|
|
source_transcript: str = ""
|
|||
|
|
structured_evidence: str = ""
|
|||
|
|
format_meta: EvidenceFormatMeta = Field(default_factory=EvidenceFormatMeta)
|
|||
|
|
evidence_summary: str = ""
|