BenchFlow

What's in 0.10.0rc3

0.10.0rc3 is a release candidate, on PyPI as a pre-release. Its new commands and flags may still change before 0.10.0; use 0.9.2 for results you'll publish unless you need one of these.

Install the prerelease

Shell
uv tool install --python 3.12 'benchflow==0.10.0rc3' \
  --constraints https://raw.githubusercontent.com/benchflow-ai/benchflow/v0.10.0rc3/constraints.txt
bench --version
Output
benchflow 0.10.0rc3

Without the version, uv and pip install 0.9.2 (Install). To go back, install 'benchflow==0.9.2' the same way. 0.10.0rc1 was built and tested but never published; 0.10.0rc2 has all of it, and 0.9.2's five grading-integrity fixes. 0.10.0rc3 is 0.10.0rc2 with the rows marked (rc3) below and the fixes in the Changelog.

What's new

FeatureWhat it doesPage
Run cardBefore every run, a summary of the settings that change a score, with warnings; --dry-run prints it and stops; saved as run-card.jsonBefore you run an eval
Run checksEach trial's ending and model calls are checked against the card; a run whose trials were cut at the output cap, or whose calls carried other settings than it asked for, failsBefore you run an eval
One scoring rulebenchflow.score.v1: every finished trial counts, and only a scored pass counts 1; each score has a 95% interval over tasksRead the results
Per-trial budgets--token-budget and --turn-budget cap each trial's tokens and model calls while it runsConcurrency and budgets
Reference setupA task set's run-reference.toml declares the setup its numbers used; a strict one refuses runs that differ unless you give --accept-deviationsPublish a benchmark
Report fileEach job writes report.md, its settings and results in one fileReport a result
Utilization linesDuring a run, how many trial slots are busy and how much of the agents' time a model request is in flight, with a warning when the run is underusedConcurrency and budgets
Keep and attach--keep-sandbox on-failure keeps a failed trial's sandbox; bench sandbox attach opens a shell in it, bench sandbox release deletes itWhen a trial fails
Multi-step tasks[[steps]] in task.toml: each step checked before the nextMulti-step tasks
Human preferencesbench preferences pairs, import and rank: blind pairs, votes from any rating tool, Bradley-Terry ratings with rater checksHuman preferences
Outside outputs and the vote site (rc3)pairs --items pairs a golden or a remix made in another tool beside the trials; import reads the Frontier Design Benchmark vote site's export; rank rates people apart from guests and model judges, measures each judge against people, and resamples raters and tasksHuman preferences
Whole training groups (rc3)bench train stream --group-size N passes a group on whole or not at allConnect a trainer
Assessmentsbench assess: one blind pair at a time for an external collectorHuman preferences
Terminal-Bench 4.1terminal-bench@4.1 in the registry, its 66 tasks pinned by digest, and the separate-verifier fixes that let its tasks be gradedBring what you have
OpenTelemetryEach trial writes its trace as OTLP/JSON to trajectory/otel-spans.json, and sends it to the collector OTEL_EXPORTER_OTLP_ENDPOINT namesUsage and telemetry
Trainer formatsbench train convert --format also writes verl-sft, skyrl-sft and openenv-episodes, and keeps a Claude Code trial's tool callsExport training data
Regrade from saved outputsbench regrade scores a trial that ran with a separate verifier again, and reruns its rubric review with --reviewResume, retries and regrade
Reviewer resources--reviewer-memory-mb, --reviewer-storage-mb, --reviewer-setup-timeout and --reviewer-evidence-timeout for rubric reviewsCommands

Smaller changes: bench run --help lists --trials, --integrity, --max-cost-usd and --max-tokens, which 0.9.2 shows only under --help-all; --dry-run counts every trial of a --trials run, where 0.9.2 counts one pass; --trials repeats a task named by its address, which 0.9.2 refuses; Claude Code is 2.1.316, its default model claude-haiku-5-5, and it can use a model id its adapter doesn't list on a provider's own endpoint; BenchFlow carries vendors' own prices for 18 current models, MiMo V2.6 and DeepSeek V4 among them (Usage and telemetry); an agent gets BenchFlow's variables as RUNTIME_* (Run your own agent); and embodied tasks also run on Daytona (Embodied tasks). The full list is in the Changelog.

Changes that can move a score or stop a task

These change what a 0.9.2 task scores or whether it runs, so a score from one version isn't comparable with the other's on the tasks they touch. From the Changelog:

Change0.9.20.10.0rc3What to do
A repository's own conftest.pyremoved before grading, so a correct answer whose tests need its fixtures scores 0 (SWE-bench Verified's Sphinx, Flask, pytest and seaborn tasks)kept when it is byte for byte the pre-agent copy's and the agent ran as a user other than root; a separate verifier sandbox still removes itrerun such tasks on 0.10.0rc3 before comparing (Known pitfalls)
Terminal-Bench 4.1not scored: none of the five tasks we ran got a scoregraded: interleaved-vigenere's reference solution scores 1report it from 0.10.0rc2 or later only, after the oracle on each task you use
A task.toml task whose separate verifier is built from tests/Dockerfile and declares artifactsthe verifier's workspace is emptied and gets the agent's whole workspacekeeps the files its image put there, and gets only the declared artifactsdeclare every file the verifier reads from the agent's workspace
Claude Code with --sandbox-user none, or on a task that declares MCP serversnot refusedrefused: claude.ai connectors and MCP servers are turned off, and it needs a sandbox userrun Claude Code as the sandbox user, and such a task with Codex or OpenCode
Codex asked for an effort the model doesn't offerruns at mediumrefused before the agent starts, with the efforts it offerspass an effort the model offers
A named job (--job) whose settings or tasks changedits finished trials are set aside and run againrefused, unless you pass --restart-changedstart a new job, or restart on purpose
The idle limit when the run sets none10 minutes30 minutes at effort xhigh or max, 10 otherwiseset --agent-idle-timeout when you compare across versions
An allowlist task's Compose servicesmay sit on any networkmust sit on an internal: true network that main joins, or the trial stops before the agent startsmove the services to an internal network
An allowlist task with a compose file on daytonanot refusedrefused before any sandbox startsrun it on docker or remote-docker
network_mode: allowlist with no allowed_hostsrefused when the task loadsadmits only the agent's model endpointnothing; such a task now runs

What may still change

Commands and flags new in this release candidate can change name or shape before 0.10.0. What doesn't work yet in it: multi-step tasks can't use a separate verifier or per-step artifacts, and its open known issues are in the Changelog.

View as Markdown