Skip to content

Scoring-critical logic bugs affecting leaderboard validity (anti-cheat/finish/resume/GT/run_eval) #1

@HeMuling

Description

@HeMuling

Summary

main 分支存在 5 个 Scoring-Critical 逻辑问题,会直接影响最终跑分可信度(错误计分、误结束、误续跑、错误 GT、结果收集失败)。


Impact Statement

这些问题会导致以下后果(任一项都足以影响 leaderboard):

  1. 可疑(anti-cheat fail)结果仍可能进入最终分数。
  2. finish 参数解析失败时会被当作成功 finish,导致会话提前结束。
  3. 已完成会话仍可被 --resume 继续执行,污染最终成绩。
  4. ground_truth 断点续跑会错误复用旧 top_k chunk,扭曲 recall 与是否过阈值。
  5. 结果收集阶段 python3 -c 存在字符串拼接问题,特殊模型名会直接导致收集失败。

A) anti-cheat 被忽略,疑似作弊结果仍可上分

代码证据链

  • benchmark 明确输出 anti-cheat 结果:
    • benchmark/src/main.rs anti_cheat::detect_hardcoded_results(...)
    • JSON stdout 同时包含 benchmarkanti_cheat
  • 评分侧只看 recall_passed + qps
    • scripts/run_eval.sh 选择逻辑仅判断 recall_passed / qps
    • scripts/rebuild_leaderboard.py 同样只按 recall_passed / qps

复现示例(逻辑层)

如果 benchmark 输出为:

{
  "benchmark": {"qps": 5000, "recall": 0.99, "recall_passed": true},
  "anti_cheat": {"passed": false, "message": "SUSPICIOUS"}
}

当前打分链路仍可能把该条作为有效高分候选(因为收分脚本不看 anti_cheat)。

影响

可疑结果进入 leaderboard,导致排名失真。


B) finish 解析失败仍触发会话结束

代码证据(main 上)

  • 工具解析失败走 error 分支(返回 ToolResult::Error
  • 结束判定却只看原始 tool_name == "finish"

触发条件

LLM 发送 finish 但参数 JSON 不合法(例如缺字段、字段类型错误)。

实际后果

尽管 finish 未成功解析,主循环仍进入结束分支,可能跳过真实最终 benchmark,直接影响最终分数。


C) --resume 仅按次数判断,已结束会话可被误续跑

代码证据(main 上)

恢复条件是 tool_calls_used < tool_calls_total,未判断会话是否已通过 finish 正常结束。

触发条件

  • 上一轮会话已调用 finish
  • tool_calls_used 尚未达到上限(常见)
  • 使用同一 WORK_DIR + --resume 再启动

实际后果

旧会话被继续执行并产生额外 benchmark/tool log,污染最终成绩。


D) ground_truth 断点续跑错误复用旧 top_k chunk

代码证据(main 上)

chunk 跳过条件只校验 len(existing),不校验 top_k / query_id 连续性。

可复现命令(已记录)

先跑 top_k=2,再构造已有 chunk 后改跑 top_k=1,输出仍沿用旧长度:

neighbors_lengths [2, 2]
top_k1_expected_all_1 False

影响

GT 与当前评测参数不一致,recall 被系统性扭曲,进而影响 QPS 是否计分与最终排名。


E) run_eval.sh 结果收集阶段字符串拼接导致失败

代码证据(main 上)

python3 -c "... '${MODEL_NAME}' ..." 直接将变量内联到 Python 源码字符串。

可复现命令(已记录)

MODEL_NAME="bad'name"
python3 -c "model_name='${MODEL_NAME}'; print(model_name)"

输出:

SyntaxError: invalid syntax

影响

Step 7 收集/落盘失败,导致本次跑分结果无法正确更新 leaderboard。


Expected Behavior

  1. anti-cheat fail 必须阻断得分(至少 QPS 归零且不进入候选)。
  2. 仅“成功解析为 Finish call”时才结束会话。
  3. --resume 必须识别“已 finish”的会话并拒绝续跑。
  4. chunk 复用需校验 top_kquery_id 连续性。
  5. run_eval.sh 需改为安全传参(heredoc + argv/env),避免内联拼接 Python 源码。

Severity

Scoring-Critical(直接影响 benchmark 最终分数与 leaderboard 可信度)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions