A. 用例判定证据构建收敛到 case_verdict
强推荐evaluation/report.py
web/routers/runs.py
evaluation/case_verdict.py
Before — 重复的证据构建
flowchart LR
subgraph report_py["report.py"]
R1[generate_report] --> R2[构建 CaseEvidence]
R2 --> R3[resolve_case_verdicts]
end
subgraph runs_py["runs.py"]
U1[get_run_logs] --> U2[构建 CaseEvidence]
U2 --> U3[resolve_case_verdicts]
end
style R2 fill:#fecaca,stroke:#dc2626
style U2 fill:#fecaca,stroke:#dc2626
两处各 ~25 行,turns → evidence dict → CaseEvidence → verdicts
After — 单一落点
flowchart LR
subgraph case_verdict["case_verdict.py"]
CV[build_evidence_and_verdicts]
CV --> CV2[resolve_case_verdicts]
end
subgraph callers["调用方"]
R[report.py] --> CV
U[runs.py] --> CV
end
style CV fill:#0f172a,stroke:#0f172a,color:#fff
一处构建,两处调用;locality 回归
问题:CaseEvidence 构建 + resolve_case_verdicts 调用链在 report.py 和 runs.py 各写一遍(各 ~25 行),turns/results → evidence dict 的映射逻辑漂移风险高。
方案:在 case_verdict.py 新增 build_evidence_and_verdicts(turns, results, summary),report.py 和 runs.py 各一行调用。
- locality:证据构建逻辑改一处,全局生效
- depth:case_verdict 从纯函数变深——接口不变,实现吸收编排
- 测试面:一处可测,不用在两处重复覆盖