整份 dataset 一次跑完
一次跑完 dataset 里所有 task;可 Always-k 与 pass@k。
省略 --task 时,ageval run 把 dataset 里每一个 task 都跑一遍,各自独立 lock / 执行 / 评测:
ageval run examples/datasets/minimal-demo
ageval run examples/datasets/minimal-demo --max-concurrent-tasks 2两轴别混
| 轴 | 干什么 | 不干什么 |
|---|---|---|
并发 --max-concurrent-tasks | 少等一会儿:多开几路压总耗时 | 不改 k,也不改 PASS/FAIL |
Always-k --n-attempts / -k | 每题固定跑满 k 次独立运行,给 pass@k / pass^k 攒样本 | 不是「失败再试」的条件 retry;不进 task.yaml / fingerprint |
# 整份 dataset,每题 k=5(只写在 CLI / job 上)
ageval run examples/datasets/minimal-demo -k 5 --max-concurrent-tasks 2
# 只对一题 Always-k
ageval run examples/datasets/minimal-demo --task terminal-jsonl-agg -k 5
# 继续已有 suite:尚未写出 result.json 的槽位原地继续,已以 PASS / FAIL / ERROR 结束的跳过
ageval run examples/datasets/minimal-demo --resume-suite <suite_run_id> --task terminal-jsonl-agg -k 5
# 指定要换的成员(PASS / FAIL / ERROR):新的一次运行,同一个 `suite_run_id`
ageval run examples/datasets/minimal-demo --resume-suite <suite_run_id> --task terminal-jsonl-agg --replace-slot
# Always-k:只换一格 (task_id, attempt_index)
# ageval run examples/datasets/minimal-demo --resume-suite <id> --task terminal-jsonl-agg --replace-slot --attempt-index 1
# 重跑本次过滤里已完成的 ERROR(PASS / FAIL 仍跳过)
ageval run examples/datasets/minimal-demo --resume-suite <suite_run_id> --retry-errors
# 用已收获的 task-artifacts 再评分:新的一次运行,不跑 agent
ageval results regrade examples/datasets/minimal-demo --run <attempt_id>规则:
n_attempts禁止写进task.yaml;也不进config_fingerprint- 不加
--replace-slot、也不加--retry-errors时,已以 PASS / FAIL / ERROR 结束的槽位跳过。activity.jsonl头与本次 suite、task、attempt index 及锁定摘要一致、且尚未写出result.json的槽位原地继续。没有匹配的活动日志,或摘要对不上,则新开一次 Attempt。缺失的 Always-k index 仍会补上 --retry-errors配合--resume-suite:重跑本次过滤里的 ERROR 格,不必逐个--replace-slot。PASS / FAIL 仍跳过。每一格是新的一次运行,旧行进previous[]--replace-slot写新的一次运行;旧行留在盘上并进入previous[];指标只按现行指针重算ageval results regrade铸造新的一次运行,把该次的task-artifacts/拷进打分环境,只跑评分。评分材料与evaluator.py来自当前 dataset。来源result.json保持原样。harvest 不够就是 ERROR。轨迹文本不是裁决。task.yaml里没有开关字段- 默认瘦身之后
task-artifacts/仍在。清掉活的工作目录不会删掉这份快照 - Hub / Viewer 历史列表是
patch N+ 该次运行开始时间(不是补跑时刻,也不展示run_id) - 因 cancel 未真正跑过 的占位会在 resume 时重跑(避免 pass@k 永久偏低)
- 进度和取消写在下面;Hub Leaderboard 在有
metrics.pass_at_k时展示 pass@k / pass^k / n_attempts;本地 summary 始终可写 metrics - 系统默认
suite_run_id为 8 位 hex(无suite_前缀)
汇总指标
写在 .ageval/suite-runs/<suite_run_id>/summary.json 的 metrics:
| 字段 | 含义 |
|---|---|
pass_rate / mean_score | 本 job 各题 mean |
pass_at_k | pass@k(Harbor 无偏估计);整份汇总分 = 各 task 上该指标的 mean |
pass_power_k | pass^k(k 次都成功的估计);同样按 task 取 mean |
n_attempts | 本次 job 的 k 预算 |
样本数不够的 task 不进该 k 的分母。
同目录还有 progress.json(多 unit 进度);一次运行的 result.json 可含 phase_timing(environment / run / evaluate / record / cleanup)。
进度与取消
ageval status <suite_run_id> --dataset examples/datasets/minimal-demo
ageval cancel <suite_run_id> --dataset examples/datasets/minimal-demo- status:ControlStore 记录 + 可读 progress
- cancel:写
cancel.requested,不再开新 unit;有 pid 则 SIGTERM
整份 dataset 一次跑完是 task 轴(多题);campaign 是 同一题扫参数。Always-k 不是 campaign 矩阵轴。
结果写在 dataset 下的 .ageval/suite-runs/。用本地查看器打开这份 dataset,可以看到 Timing 条。Kind 选整份运行时,这些结果也可以换成 Waffle,一格是一次试验。

上传到 Hub(Leaderboard / Jobs)
Hub 的 Dataset → Leaderboard 和 Task → Jobs 读的是 Registry 里整份 dataset 跑完的结果,不是零散的单次上传。
| 步骤 | 命令 |
|---|---|
| 1. 整份跑完 | ageval run <dataset>(不要加 --task;可用 --profiles) |
| 2. 记下 id | 输出 / summary.json 里的 suite_run_id(默认 8 位 hex) |
| 3. 上传整份结果 | ageval results upload-suite <dataset> --suite-run <id> --public(也可 id@version) |
| 4. 需要点开轨迹时 | 加上 --with-attempts |
ageval run examples/datasets/minimal-demo --profiles examples/datasets/minimal-demo/profiles.yaml
# suite_run_id 例:d3e5fba6
ageval results upload-suite examples/datasets/minimal-demo \
--suite-run d3e5fba6 --public --with-attempts \
--agent acp-pi --model zai-coding-cn/glm-5.2常见误解: 只跑 ageval run … --task X 再 ageval results upload --run …。那一次运行可能已经进 Registry,但 Leaderboard 通常仍没有一行。要上榜必须先整份跑完,再 upload-suite。
公开榜还有两道门:整份运行必须 完备(绑定版本的每题都有一条 result;题上 FAIL / ERROR 也算),且绑定 release。缺题或绑定 draft 的行只出现在 Task Jobs。先 ageval publish --draft、owner 再 ageval release,或直接 ageval publish 发 release。