WORKLOAD BENCHMARKING
Run the tests already in your repository against the same model across supported routers and direct providers. Compare completion, cost per completed task and latency before you move production traffic.
Runs on your machine · static HTML report · no CanaryOne account
Your repository
your-repo/
The same tests, every route
10 routes
120 sessions · 67m11s
What it cost to finish
| route | done | $ / done |
|---|---|---|
| Route A | 6/12 | $0.0472 |
| Route B | 9/12 | $0.0686 |
| Route C | 12/12 | $0.1852 |
MEASURED WITH CANARYONE
Buy the same model several different ways and it does not do the same work for the same money. Three routes out of one run below, on identical tasks and identical weights, with the measures a price list cannot show you.
The lowest-cost route completed only six of twelve attempts.
| On this workload | Route A | Route B | Route C |
|---|---|---|---|
| Attempts completed | 6 of 12 | 9 of 12 | 12 of 12 |
| Cost per completed task | $0.0472 | $0.0686 | $0.1852 |
| Judge score, out of 100 | 69 | 87 | 88 |
| Slowest step | 304s | 26s | 29s |
Run e860167a · 29 July 2026 ·
10 routes · 4 tasks ·
3 repeats each ·
open the full report →
The cheapest route that completed most of the work cost 46 per cent more.
This is one measured run, not a claim about any provider.
Across the three routes, the dearest cost per completed task is nearly four times as much as the cheapest, on identical work.
The judge score. A second model reads each session transcript and scores the work out of a hundred. A high cost beside a high score is a route doing the job thoroughly; a low score beside a pass is a test that succeeded on an answer the model narrated rather than grounded in what its tools returned.
The timeout. The runner stops a session after six minutes, and the slowest step in this run ran to five minutes. Some of what the lowest-cost route did not finish may be that timeout rather than the route.
Why the routes are lettered. One run of one tool against one repository on 29 July 2026 demonstrates what the measurement produces; it does not establish anything about a company. The size of a gap like this repeats from run to run and which route sits at either end does not, so the magnitude is the finding. The report names all ten.
Also measured · 14 August 2026 On the nightly sweep, the route with the cheaper advertised token price cost 40 per cent more per completed task, and both routes completed every task. Eleven routes of GLM 5.2. See the market page →
HOW IT WORKS
01
It runs against any repository whose tests or eval harness call an LLM, using the tests you already trust rather than a benchmark you have to adopt.
02
The same tests and the same model weights go through each router and direct provider you configure. Your test code does not change; only the route does.
03
One report carries completion, cost per completed task, latency and the task-by-task failures underneath them.
THE REPORT
Every run writes a self-contained report showing how each route performed across your actual tasks, so a decision comes with its own working.
Saved as <repo>/.c1/runs/<runId>/report/index.html — one
static file with no external requests, so it opens from disk and travels in a pull
request.
WHAT LEAVES
The runner, the per-route proxy, the SQLite database and the generated report all stay on your machine, and nothing sits in your request path.
Your machine
Your tests
the harness you already have
CanaryOne proxy
one per route, on localhost
SQLite + report
under <repo>/.c1
Leaves your machine
--disable-judge turns it off
Model traffic. Every LLM call your test makes is rewritten for the
route under test and forwarded to that provider's own endpoint. The full request
and response log is written to
<repo>/.c1/runs/<runId>/traffic.jsonl, so what was
sent is on disk and readable.
The judge. When judging is on, each finished session's transcript
is sent to a gateway to be scored out of a hundred by a second model.
--disable-judge turns it off, and the run then reports completion
and cost with no quality score.
The scan summariser. Working out which of your tests call an LLM sends those test files to the same gateway to be classified.
Your keys. They live in ~/.c1/.env at mode
0600 and go to each provider's own endpoint and nowhere else. An
OpenRouter key is required, because the judge and the model catalogue both run
through it.
COVERAGE
3 routing platforms · 14 direct APIs
Benchmark the same model through a gateway or straight against a provider's own endpoint, and measure both the same way.
Routing platforms · works with
OpenRouter
Vercel AI Gateway
AWS Bedrock
Direct providers · works with
Moonshot Intl
Moonshot CN
Nebius
Fireworks AI
Together AI
Groq
DeepSeek
Baseten
Cerebras
OpenAI
Anthropic
xAI
Z.ai
Google Gemini
Coverage note: Bedrock currently carries gpt-oss routes only, and direct-provider prices are maintained here rather than read from each provider's API. See the route registry →