Running evals
Measuring Meted against your own prompts.
meted eval
Every prompt is run twice, once straight at the provider and once through Meted, back to back, so provider load and model version are as close to identical as they can be.
Output below is illustrative, showing the shape of the report rather than a recorded run:
Meted Eval
Prompts 76
NATURAL METED
Output tokens 27,940 18,610
Median output 287 183
Median latency 1.4s 1.1s
Optimizer overhead - 0
Estimated net reduction 33.4%
Sufficiency 97.4%
Under-allocation 2.6%
This costs money. The built-in suite is 76 prompts and each one is sent twice, so a full run is 152 provider requests.
The built-in suite
76 prompts across facts, definitions, explanations, how-to, coding, debugging, summarisation, translation, rewriting, classification, extraction, comparison, recommendations, research, analysis, creative work, explicit long-form requests and complex multi-part requests.
It is weighted towards the cases where Meted could do damage: long-form, multi-part asks, code with tests.
The suite is at evals/builtin.json in the repository. Copy it and edit it.
Your own suite
meted eval ./evals.json
Prompts sampled from your own product measure your own workload. See Eval format.
Starting small
meted eval --limit 12
Comparing modes
meted eval --mode conservative --limit 30 --out conservative.json
meted eval --mode balanced --limit 30 --out balanced.json
meted eval --mode aggressive --limit 30 --out aggressive.json
Each report gives output tokens, sufficiency, under-allocation and median latency for that mode. Compare them against the ceiling each mode applies, which is listed under Policies.
Where it went wrong
meted eval --verbose
Under-allocations
code-rate-limiter (coding) target=1500 applied=1920: stopped at the token ceiling
res-llm-caching (research) target=800 applied=1024: failed: at least 300 words
In CI
meted eval --json --limit 40 > report.json
node -e '
const r = require("./report.json");
if (r.underAllocation > 0.05) {
console.error("under-allocation regressed:", r.underAllocation);
process.exit(1);
}
'
Run it on a schedule rather than per commit. Provider models change underneath you, and a regression there shows up the same way.
Isolation
Eval traffic runs through a gateway constructed for the run and discarded when
it ends. It does not read or modify meted.config.json, and --mode applies to
the run only.
The run writes no files unless you pass --out <path>, which saves the full
JSON report there.