- Writer: 表格表头行/Table Grid 边框、列表 List Bullet/Number 样式、行内字符格式不再塌缩(外视 #6 反转) - Writer: 打通章间引用(WriterState 摘要 → 后章 prompt prior_summaries) - Writer: 删除 _chunk_source 死代码,章节数据经 DataGate 控 token 预算 - Writer: 章节结果落盘快照,命中即跳过 LLM(录制重拍可续跑,损坏快照自动忽略) - Parser: 按 body 顺序遍历正文+单元格(含嵌套表、合并单元格去重),修复表格内锚点漏检导致的静默丢章 - Parser/服务层: .xls 显式拒绝(可操作提示),上传即校验扩展名,rules 对齐 docx-only - 测试: 全量 680 通过,覆盖率 99.37%(红线 99%)
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
"""上下文装配: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
|