"""RAG 模型选型一致性门禁:T6/T11 整改(I6/OV2)的机器契约。 - T6(I6):v1 引入 rerank 精排 bge-reranker-v2-m3 - T11(OV2):embedding 默认切换多语言 bge-m3(实际语料为日文) 防文档漂移:代码默认值、fixture、当前设计文档四处必须一致; 当前设计文档不得残留 bge-small-zh-v1.5(历史评审记录/计划快照不改写,故不扫描)。 """ from __future__ import annotations from pathlib import Path import yaml from genesis.config import Settings ROOT = Path(__file__).resolve().parents[1] FIXTURES = Path(__file__).parent / "fixtures" # 当前设计文档(排除历史评审记录 docs/design-review.md、docs/*-review*.md、 # docs/superpowers/plans/* 等历史快照) _CURRENT_DOCS = [ "docs/rag-layer-design.md", "docs/config-design.md", "docs/design.md", "docs/implementation-plan.md", ] EMBEDDING_MODEL = "BAAI/bge-m3" RERANK_MODEL = "BAAI/bge-reranker-v2-m3" # 设计文档用短名(bge-m3);全名含短名子串,故 token 宽松匹配 _EMBEDDING_TOKEN = "bge-m3" _RERANK_TOKEN = "bge-reranker-v2-m3" def _doc_text(name: str) -> str: return (ROOT / name).read_text(encoding="utf-8") def _fixture_rag() -> dict: with (FIXTURES / "rag.yaml").open("r", encoding="utf-8") as f: return yaml.safe_load(f) or {} # ---------- 代码默认值(T11) ---------- def test_code_default_embedding_is_bge_m3(): s = Settings() assert s.rag.embedding.model == EMBEDDING_MODEL # ---------- 代码默认值(T6) ---------- def test_code_rerank_config_defaults(): s = Settings() assert s.rag.rerank.enabled is True assert s.rag.rerank.model == RERANK_MODEL # ---------- fixture 与代码一致 ---------- def test_fixture_synced_with_code_defaults(): rag = _fixture_rag() assert rag["embedding"]["model"] == EMBEDDING_MODEL assert rag["rerank"]["enabled"] is True assert rag["rerank"]["model"] == RERANK_MODEL # ---------- 文档与选型一致(T6/T11) ---------- def test_docs_use_bge_m3(): missing = [name for name in _CURRENT_DOCS if _EMBEDDING_TOKEN not in _doc_text(name)] assert not missing, f"以下当前设计文档缺失 {_EMBEDDING_TOKEN}:{missing}" def test_docs_use_rerank_model(): missing = [name for name in _CURRENT_DOCS if _RERANK_TOKEN not in _doc_text(name)] assert not missing, f"以下当前设计文档缺失 {_RERANK_TOKEN}:{missing}" def test_docs_no_legacy_bge_small_zh(): legacy = [name for name in _CURRENT_DOCS if "bge-small-zh-v1.5" in _doc_text(name)] assert not legacy, f"当前设计文档残留旧模型 bge-small-zh-v1.5(请同步为 bge-m3):{legacy}"