Skip to content

Commit 8fcdcb6

Browse files
committed
Benchmarks: document the normalized configuration
1 parent 82619fe commit 8fcdcb6

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Benchmark configuration
2+
3+
Every benchmark compiles from its `*/baseline/build.yaml`, which is the source
4+
of truth. This page records the normalized settings shared across the suite,
5+
the per-benchmark values, and the conventions behind them, so a change to one
6+
benchmark can be checked against the others at a glance.
7+
8+
## Shared settings (all benchmarks)
9+
10+
- **Objective**: maximize `score`; downstream task accuracy is the only input
11+
to selection and reward. Cost and latency are reported as evaluation metrics
12+
(`inference_*_tokens`, `wall_seconds`, `mean/max_case_wall_seconds`) and in
13+
`finalize.json`'s `reward_metrics`, but never scored.
14+
- **Partitions**: development (full disclosure, task resources exposed),
15+
validation (aggregate-only, `min_aggregate_cases: 5`), test (held out;
16+
single target, `reward_key: reward`, `failure_value: 0`, `max_attempts: 1`).
17+
- **Selection**: `reward_mode: submit` — the agent nominates its candidate;
18+
auto-best over validation and then last-candidate are fallbacks only.
19+
`baseline_floor: false` (a floor would gate on validation while the reward
20+
is on test; opt-in only). `score_baseline: true`, `rescore_top_k: 3`,
21+
`rescore_attempts: 1`.
22+
- **Budgets**: 100 runs and 4 full passes of case budget on each agent
23+
partition (development and validation).
24+
- **Budget disclosure**: `disclose_budget: true` (the default; no benchmark
25+
overrides it) — the agent sees remaining runs/cases and inference-scope
26+
usage through `evals status` and `plan.json`, plus per-evaluation
27+
`inference_*` token metrics. Setting `disclose_budget: false` is the
28+
budget-blind ablation: enforcement is unchanged but all budget signal is
29+
hidden from the agent, including a redaction of `inference_*` metrics from
30+
agent-facing receipts and context (latency metrics stay visible).
31+
- **Target model**: `openai/gpt-5.4-mini-2026-03-17`, fixed by the gateway's
32+
evaluation scope (15k requests, 100M tokens, concurrency 64). The optimizer
33+
uses a producer scope bound to `${optimizer_model:-gpt-5.4}`.
34+
- **Execution**: `harbor[modal]==0.20.0`, python 3.12, `n_attempts: 1`,
35+
`max_retries: 1`, 3 infrastructure attempts at 5s, `aggregate_attempts:
36+
best`, `max_concurrency: 8`, `error_rate_threshold: 0.1`,
37+
`feedback_transcripts: true` with `feedback_max_bytes: 16000`,
38+
`environment_name: ${inner_env:-modal}` (pass `--param inner_env=docker`
39+
for local shakedowns).
40+
- **Telemetry**: W&B project `vero-<benchmark>` with trace uploads; inner
41+
sandboxes grouped under the dedicated `harness-engineering-bench` Modal app
42+
with a 1h idle timeout; the gateway records a per-request log.
43+
44+
## Per-benchmark values
45+
46+
| | gaia | officeqa | swe-atlas-qna | tau3 |
47+
|---|---|---|---|---|
48+
| split dev/val/test | 33/66/66 | 49/98/99 | 25/49/50 | 75/150/150 |
49+
| dev budget (runs / cases) | 100 / 132 | 100 / 196 | 100 / 100 | 100 / 300 |
50+
| val budget (runs / cases) | 100 / 264 | 100 / 392 | 100 / 196 | 100 / 600 |
51+
| timeout_seconds (per eval) | 3600 | 7200 | 14400 | 14400 |
52+
| case_timeout_seconds (enforced) | 180 | 300 | 1800 † | 900 † |
53+
| task_agent_timeout_seconds (declared) | 600 | 1800 | 10800 | 3600 |
54+
| verifier_timeout_seconds | 7200 | 14400 | 28800 | 28800 |
55+
| harness_user | harness | harness | null ‡ | null ‡ |
56+
| task_services_use_upstream | false | false | true (rubric judge) | true (user-sim + grader) |
57+
| task-specific extras || `--no-force-build` (prebuilt corpus image) || `TAU2_*` model pins |
58+
59+
## Conventions
60+
61+
- **Timeouts**: `task_agent_timeout_seconds` mirrors the agent timeout the
62+
dataset's task packages declare; `case_timeout_seconds` is the per-case
63+
budget VeRO actually enforces (compiled to Harbor's agent-timeout
64+
multiplier). Set both explicitly — omitting them silently applies the
65+
180/600 defaults regardless of what the tasks declare.
66+
- **Verifier timeout** is 2× `timeout_seconds`: finalization runs the
67+
candidate and the baseline test evaluations.
68+
- **Case budgets** are 4× the partition size, i.e. four full passes.
69+
70+
† Provisional. These enforced budgets were set without empirical data;
71+
revisit them against the `wall_seconds` / `mean_case_wall_seconds` metrics
72+
once runs have produced distributions.
73+
74+
‡ Exception to the harness-isolation default: these tasks run LLM services
75+
(rubric judge, user-simulator/grader) inside their task containers, which
76+
cannot reach the compose-internal gateway, so the build hands the real
77+
upstream credential to the task environment via `task_services_use_upstream`.
78+
That credential path is incompatible with `harness_user` isolation (the key
79+
would sit in the isolated harness's environment), so these two benchmarks run
80+
unisolated under a non-adversarial-optimizer assumption, with a post-run
81+
leakage audit. Restore isolation once task-service credentials are delivered
82+
off the harness env (scoped judge key or per-role egress isolation).

0 commit comments

Comments
 (0)