mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 10:31:59 +00:00
62b9361d88
- preview_joint 以前先把每一项的全部组合列成列表才和 JOINT_LIMIT 比,二十个指标落到同一项上就是几十亿种,在服务进程里(asyncio.to_thread)能把整个服务拖死;现在先按 ∏(1+k)−1−Σk 算出个数(超过上限即停),超了整项跳过、不列。上限也改成每一项各算各的:以前几项共用一份额度,前一项用掉以后,后面没超上限的项也被悄悄跳过,和文档说的「超过的那一项不预告」对不上。补两条测试:二十个指标落到同一项上时一个组合都不多列,两项各 72 种都预告 - review.py 认得核查 agent(双盲复算、反方审稿共用)发的两条:verify_unpriced 同 judge_unpriced 只是配置提醒,不再叫复核模型、给答案加降级说明;verify_limit 记成它自己的 kind(步数上限只有它说),不再落成笼统的 warn - 反方审稿测试补上「未能反查的句数不多于无法判断」的断言(审批卡上的两个数靠这个约定对得上),模块说明改写准:触顶没给出结论的可能查过几次,原因里也有报告未引用数据库查询 - 双盲复算夹具加一种组合 time_rejected:业务日期被驳回过的那一列由退款率采纳(被挡下,带着写到哪),销售额采纳另一列;服务端先归拢、说法不同一项都不写(夹具测试按 record_choices 真写核对),审批卡没有合并预告时的推断按它检查
43 lines
2.4 KiB
Python
43 lines
2.4 KiB
Python
"""跑完之后的复核层认得双盲复算、反方审稿的 warn 日志代码(engine/review.py 的 WARN_CODES)。
|
||
|
||
没登记的代码一律按 degraded、kind 记成笼统的 warn:时间线复核和问数据页说不清是哪一种缺口,模型相同这种只关乎独立性、
|
||
不影响结论的提醒也会被当成缺口去叫一次复核模型。这里守住两类:
|
||
- 模型相同(dual_check_same_model、challenge_same_model)同 judge_same_model,核查模型不在价格目录中(verify_unpriced)
|
||
同 judge_unpriced,是配置上的提醒,不进信号;
|
||
- 触顶、不一致、无法复算、被推翻、未能反查、只查了部分数据源是缺口,按各自的 kind 记成 degraded。核查 agent 自己触顶
|
||
(verify_limit,双盲复算、反方审稿都会发)也是:步数上限只有它说。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import pytest
|
||
|
||
from app.core.events import EventType
|
||
from app.engine import review as rv
|
||
|
||
OK_OUTPUT = {"结论": "本周订单 120 单。"}
|
||
|
||
|
||
def warn(message: str, code: str) -> dict:
|
||
return {"type": str(EventType.LOG), "node_id": "gate", "data": {"level": "warn", "message": message, "code": code}}
|
||
|
||
|
||
@pytest.mark.parametrize("code", ["dual_check_same_model", "challenge_same_model", "verify_unpriced"])
|
||
def test_configuration_reminders_do_not_trigger_review(code):
|
||
"""和 judge_same_model、judge_unpriced 一样:配置上的提醒,答案本身没受影响,不值得为它叫一次复核模型、
|
||
在答案上多一句降级说明"""
|
||
assert rv.WARN_CODES[code] == (code, rv.BENIGN)
|
||
assert rv.scan([warn("核查模型与原流程相同(「mx-1」)", code)], OK_OUTPUT) == []
|
||
|
||
|
||
@pytest.mark.parametrize("code", [
|
||
"dual_check_limit", "dual_check_disagreed", "dual_check_unchecked",
|
||
"challenge_limit", "challenge_refuted", "challenge_unreviewed", "challenge_sources_lost", "verify_limit",
|
||
])
|
||
def test_verify_gaps_are_degraded_signals_of_their_own_kind(code):
|
||
"""核查没做完、没通过:答案能用,但有缺口要说清是哪一种(kind 是代码本身,不是笼统的 warn)"""
|
||
assert rv.WARN_CODES[code] == (code, rv.DEGRADED)
|
||
[signal] = rv.scan([warn("核查的一条提醒", code)], OK_OUTPUT)
|
||
assert (signal.kind, signal.severity, signal.detail) == (code, rv.DEGRADED, "核查的一条提醒")
|
||
# 缺口不是断裂:不触发「重跑一次大概率能好」
|
||
assert not rv.should_retry([signal])
|