Coverage for src\genesis\writer\context_builder.py: 100%
15 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
1"""上下文装配:StructuredSource + 模板 + 规则 → 有序 GenerationContext 列表(Phase 5)。"""
2from __future__ import annotations
4from genesis.data_models import StructuredSource
5from genesis.services.rag_service import CannedRagService
6from genesis.writer.models import ChapterSpec, GenerationContext
7from genesis.writer.template_mapper import map_template
10def build_contexts(
11 structured_source: StructuredSource,
12 samples_dir: str = "sample",
13 output_language: str = "auto",
14) -> list[GenerationContext]:
15 specs: list[ChapterSpec] = map_template(structured_source.template)
16 rag = CannedRagService(samples_dir=samples_dir)
17 out: list[GenerationContext] = []
18 for spec in specs:
19 # RagService 方法为同步(P5-T3 裁定)
20 write_rules = rag.retrieve_write_rules(spec.chapter_id)
21 design_rules = rag.retrieve_design_rules(spec.chapter_id)
22 used = (structured_source.template.styles or {}).get("used", [])
23 out.append(
24 GenerationContext(
25 chapter_id=spec.chapter_id,
26 title=spec.title,
27 template_marker=spec,
28 structured_source=structured_source,
29 write_rules=write_rules,
30 design_rules=design_rules,
31 template_styles=set(used),
32 prior_state=None,
33 impact_report=getattr(structured_source, "impact_report", None),
34 output_language=output_language,
35 )
36 )
37 return out