from __future__ import annotations from agent import get_preset from script_build_host.agents.presets import register_script_presets from script_build_host.agents.prompts import ( COMPARISON_WORKER_PROMPT, COMPOSE_WORKER_PROMPT, DIRECTION_WORKER_PROMPT, ELEMENT_SET_WORKER_PROMPT, EVIDENCE_RETRIEVAL_WORKER_PROMPT, PARAGRAPH_WORKER_PROMPT, PLANNER_PROMPT, ROOT_VALIDATOR_PROMPT, SCRIPT_CANDIDATE_VALIDATOR_PROMPT, STRUCTURE_WORKER_PROMPT, script_build_prompt_manifest, ) def test_logical_retrieval_prompt_keeps_provider_choice_host_owned() -> None: manifest = {str(item["preset"]): item for item in script_build_prompt_manifest()} frozen = manifest["script_evidence_retrieval_worker"] assert frozen["source_id"] == "evidence_retrieval_worker.md" assert frozen["content"] == EVIDENCE_RETRIEVAL_WORKER_PROMPT assert "RetrievalPipeline" in EVIDENCE_RETRIEVAL_WORKER_PROMPT assert "不由模型选择" in EVIDENCE_RETRIEVAL_WORKER_PROMPT register_script_presets() assert ( get_preset("script_evidence_retrieval_worker").system_prompt == EVIDENCE_RETRIEVAL_WORKER_PROMPT ) def test_creative_prompts_preserve_quality_and_convergence_contracts() -> None: assert "前期可探索不同的真实路径" in PLANNER_PROMPT assert "只处理最主要的缺陷簇" in PLANNER_PROMPT assert "受众可感知结果" in DIRECTION_WORKER_PROMPT assert "不预写 Phase 2" in DIRECTION_WORKER_PROMPT assert "段落方案" in DIRECTION_WORKER_PROMPT assert "不是完成的正文" in STRUCTURE_WORKER_PROMPT assert "不可随意互换" in STRUCTURE_WORKER_PROMPT assert "受众最终能直接看到" in PARAGRAPH_WORKER_PROMPT assert "不是提纲、创作说明" in PARAGRAPH_WORKER_PROMPT assert "只是抽象评价" in ELEMENT_SET_WORKER_PROMPT assert "先按完全相同的 criteria 独立评价" in COMPARISON_WORKER_PROMPT assert "不在 Compose 阶段补写或润色" in COMPOSE_WORKER_PROMPT def test_validator_prompts_require_audience_visible_semantic_evidence() -> None: dimensions = ( "D1 Goal 实现", "D2 具体可执行", "D3 结构叙事", "D4 元素一致", "D5 主题与 persona", "D6 信息与事实", ) for dimension in dimensions: assert dimension in SCRIPT_CANDIDATE_VALIDATOR_PROMPT assert "标签、自述和 Artifact URI 本身都不能证明内容质量" in ( SCRIPT_CANDIDATE_VALIDATOR_PROMPT ) assert "真实受众的阅读顺序" in ROOT_VALIDATOR_PROMPT assert "空 evidence、空正文、零独立 Element 或零 Link" in ROOT_VALIDATOR_PROMPT