|
| 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