Skip to content

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

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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions