← TinyGPT · docs · devlog · roadmap · speedup
source: docs/prds/B23-agent-eval-protocol.md · view on GitHub ↗

PRD — Repeated-pass@1 + fixed resource budgets for agent evals

Status (2026-06-18): partial shipped. tinygpt eval-gate --passes K now preserves repeated-run uncertainty in gate-result.json: per-suite trial scores, n, stdev, stderr, and 95% CI are attached to the candidate result, and the console table renders mean±ci95_half_width. --budget evals/sample-budget.json now attaches the fixed eval budget under the report’s "protocol" block and exposes its path to suite commands as TINYGPT_EVAL_BUDGET. BFCL / tau / common Swift harness output rows now attach the same protocol block when --budget or TINYGPT_EVAL_BUDGET is present. tinygpt eval-compare now renders repeated-run uncertainty as mean±ci95_half_width either from row-level pass_stats or from repeated rows with the same task/model/metric. scripts/eval_pace_unhappy.py now supports --passes K plus budget/protocol metadata in its JSON output. Remaining B23 work: future SWE-mini / Terminal-mini rows and actual sandbox/resource enforcement.

Goal

Replace single-shot agent eval runs with the Poolside-class protocol: each task is run K times under fixed budget constraints, results are averaged with confidence intervals, and the exact resource envelope (max steps, sandbox CPU/RAM, sampling params, model temperature) is logged with every score. Applies to BFCL, τ-bench, the Pace unhappy- paths suite, and any future SWE-mini / Terminal-mini benchmarks.

The result the leaderboard reports stops being “the model got 47/60 on OOS this run” and becomes “the model gets 47.3 ± 2.1/60 on OOS under (max_steps=8, T=0, sandbox=1cpu+512mb)”.

Why now

Scope — in

Scope — out

Files to touch

FileChange
Sources/TinyGPTModel/EvalGate.swiftshipped partial — PassStats, AgentEvalBudget, AgentEvalProtocol for gate results
evals/sample-budget.jsonshipped partial — example fixed budget config
Sources/TinyGPT/EvalBFCL.swiftshipped partial — --budget row metadata wiring; K-pass repetition stays at eval-gate
Sources/TinyGPT/EvalTauBench.swiftshipped partial — same
scripts/eval_pace_unhappy.pyshipped partial — --passes K; aggregate per-trial via mean/stdev/ci95 and protocol budget
Sources/TinyGPT/EvalCompare.swiftshipped partial — renders mean±ci95 for repeated rows / row-level pass_stats
evals/sample-budget.jsonnew — fixture budget config
docs/research/mac_slm_leaderboard_v0.md”Protocol” subsection citing the budget format

Don’t touch

Acceptance criteria

Reference patterns

Open questions