Two kinds of run, and only one counts
This distinction is what makes the whole feature trustworthy, so it is worth getting straight before anything else
Case kinds
A suite is a list of cases. Each carries akind that decides how it is graded, and the choice matters because two of the three cost nothing to grade
Walkthrough
1
Author a suite
In the dashboard, Model Evaluations -> Suites -> New suite. Over the API:
2
Make it canonical
Until you designate one, every model reports
not evaluated. That is the correct answer, not an error: an organization that has not chosen a canonical suite has not measured anything3
Run it
4
Read the report
Reading a report properly
Every score is an interval
At any temperature above zero the same prompt gives different answers, so a single sample is an anecdote. Each case runssamples_per_case times (three by default) and the score carries a mean and a spread. Comparisons are made between intervals, and where they overlap the run says so instead of ranking
The interval uses the small-sample t multiplier rather than the normal 1.96. At three samples that is the difference between an honest interval and one narrow enough to declare a winner nobody earned
The five states
inconclusive is a result, not a failure to produce one. It says this suite cannot separate these models
What is deliberately not scored
An ungradable sample is never scored zero. A judge that timed out, a guardrail refusal, and a model that answered badly are three different facts, and averaging the first two in would blame the candidate for the run’s own behaviour Latency comes only from calls that were answered. A failed call records the time it took to fail and a blocked one the time it took to refuse, and neither says anything about how fast the model answers Without ap95_latency_budget_ms the run reports latency and gives no verdict on it. A number with nothing to compare it to is not a verdict
The judge
Freeform cases need a model to read the answer, and that is the run’s main recurring expense. Set it on the control plane:Scores and the badge
Once a canonical run exists, every model carries a badge:Staleness is reported ahead of the verdict. Providers change models under a stable name, so a pass from six months ago is not evidence about today’s model, and showing
passed with the age tucked elsewhere is how a gate stays satisfied forever on one old measurementEnforcement, and how to turn it on safely
Evaluating without spending
Passive profiles read the spend logs and call no model, so they cost nothing and need no suite. They describe every model already carrying traffic: latency percentiles, time to first token, cost per 1k tokens, failure rate and cache hit rateEndpoints
All require a proxy admin role. A run bills to your own key and can only reach models your key can already route to, so running an evaluation grants nobody any new access
A run stores scores and verdicts, and never the prompts sent or the completions returned. Persisting model output would make every evaluation a new prompt-retention surface, and a verdict carries no payload
Troubleshooting
Every model says 'not evaluated'
Every model says 'not evaluated'
No canonical suite is designated, or no run has been made against it. Designate one under Suites, then start a run against it
A run returned 'failed' with gateway HTTP 401
A run returned 'failed' with gateway HTTP 401
The run reaches candidates through the gateway on your own key. Check the key is valid and can route to every candidate
The report says candidates could not be separated
The report says candidates could not be separated
The suite cannot tell these models apart at this sample count. Add harder cases, or raise
samples_per_case to narrow the intervalsPerformance is inconclusive with 'no budget configured'
Performance is inconclusive with 'no budget configured'
Pass
p95_latency_budget_ms to get a verdict rather than a bare numberA freeform suite is refused before it starts
A freeform suite is refused before it starts
Either no judge is configured, or the judge is also one of the candidates. Set
FORCEAI_EVALUATOR_JUDGE_MODEL to a model outside the candidate setA run id from the scores table returns 404
A run id from the scores table returns 404
The table shows only the first segment of the uuid. Click it to open its report, or use the copy button beside it to get the whole value