"""上下文装配:StructuredSource + 模板 + 规则 → 有序 GenerationContext 列表(Phase 5)。""" from __future__ import annotations from genesis.data_models import StructuredSource from genesis.services.rag_service import CannedRagService from genesis.writer.models import ChapterSpec, GenerationContext from genesis.writer.template_mapper import map_template def build_contexts( structured_source: StructuredSource, samples_dir: str = "sample", output_language: str = "auto", ) -> list[GenerationContext]: specs: list[ChapterSpec] = map_template(structured_source.template) rag = CannedRagService(samples_dir=samples_dir) out: list[GenerationContext] = [] for spec in specs: # RagService 方法为同步(P5-T3 裁定) write_rules = rag.retrieve_write_rules(spec.chapter_id) design_rules = rag.retrieve_design_rules(spec.chapter_id) used = (structured_source.template.styles or {}).get("used", []) out.append( GenerationContext( chapter_id=spec.chapter_id, title=spec.title, template_marker=spec, structured_source=structured_source, write_rules=write_rules, design_rules=design_rules, template_styles=set(used), impact_report=getattr(structured_source, "impact_report", None), output_language=output_language, ) ) return out