Run a model evaluation
Pick a benchmark and a model, check the quote, and start the run from your terminal.
The flow has five steps:
- Choose a benchmark and a model.
- Review the quote's maximum charge.
- Accept the quote. EvalRouter reserves that credit.
- Wait while the tasks run and EvalRouter grades them.
- Read the results and exports.
A model provider you connect may bill inference separately.
Install and sign in#
-
Install uv, then the CLI:
Terminaluv tool install evalrouterIf your shell can't find the command, run
uv tool update-shelland restart the terminal. Upgrade later withevalrouter upgrade. -
Sign in through your browser. The CLI picks a workspace after sign-in.
Terminalevalrouter login evalrouter whoamiFor remote terminals and CI, see CLI sign-in.
Run in one step#
evalrouter run gpqa-diamond --model gpt-4o-mini --sample 25The CLI quotes the run, shows its maximum charge, asks you to confirm, then follows it to the results. Add --max-cost USD to start only if the quote fits under that cap.
Quote, then start#
-
Find benchmark profile and model IDs:
Terminalevalrouter benchmarks list --json evalrouter models list --json -
Save a quote request as
quote.jsonwith your IDs. To cap the run, addmax_charge_microusdin micro-USD (2,000,000 is $2). Without it, workspace credit bounds the run.JSON{ "model": {"kind": "managed", "route_id": "MODEL_ROUTE_ID"}, "selection": {"profile_ids": ["BENCHMARK_PROFILE_ID"]}, "coverage": {"mode": "sample", "sample_count": 3, "seed": 42} } -
Review the quote, start it and read the result:
Terminalevalrouter quotes create --body quote.json --json evalrouter runs create --quote QUOTE_ID --yes --wait --json evalrouter runs results RUN_ID evalrouter runs export RUN_ID --file-format html,json
A quote checks compatibility, coverage and the maximum charge without calling a model. Starting the same quote again returns the same run, so a retry never starts a second one. CLI commands lists every command and exit status.
Use HTTP#
Create a workspace API key with the eval:read and eval:write scopes, then:
-
Send the same body to the quotes endpoint.
-
Start the quote with
POST/v1, restating its cap./runs -
Follow the run with
GET/v1, then read its results./runs /{run_id}
The API schema lists every field.