Search

↑↓ to move↵ to openesc to closetop 6 documentation results

Book a demoTry TokenTriage

In development · Explore the product preview. Join the launch list or book a walkthrough.

Browse docs

The honesty model

How TokenTriage separates missing prices from zero cost, measured savings from estimates, and routing wins from results it cannot judge.

ExplanationLast updated

On this page

A cost total is useful only if you know what it leaves out. A routing result is useful only if it was compared with a meaningful baseline.

TokenTriage keeps those limits attached to the number. Missing prices remain unpriced instead of becoming $0. Savings say whether they were measured or estimated. Routing gets a win only when both choices were scored on the same requests.

How TokenTriage works follows a request end to end. If ledger, shadow, and route are new to you, read the trust ladder first.

The invariants

Two rules explain the rest of this page:

  1. Unknown stays visible. A missing price does not become zero, and missing evidence does not become a claim.
  2. The evidence limits the conclusion. A forecast remains an estimate. A routing win requires a comparison that can show the router made a better choice.

Those rules also shape how TokenTriage behaves outside cost and routing.

Where these rules show up elsewhere
  • Costing, analytics, and the dashboard run off the request path, so bookkeeping does not delay your traffic.
  • On an internal error, the proxy falls back to verbatim passthrough, including streaming.
  • Request attribution comes from the x-tt-* headers your client sends. TokenTriage does not infer ownership from timing or prompt text.
  • The JSONL decision ledger is the record. The SQLite index and dashboard views can be rebuilt from it.
  • A guard that could not run records why in suspended[]; it does not look like a clean row.

Security and administrative guarantees live in security and governance.

Provenance & UNPRICED

A cost figure needs enough context to tell you whether it is complete. TokenTriage keeps three facts beside each amount:

  • which price-list version was used;
  • whether token counts were measured or estimated; and
  • whether TokenTriage found a price for the model.

An estimated figure carries an EST flag. A model with no matching price follows a different rule.

That $41.20 is the known spend for priced rows, not a complete total. The 116 excluded rows are not treated as free.

A model you declared free, such as a local endpoint, is different. It gets an explicit $0, unpriced: false, and the price-list version that supplied the zero rate. This keeps “we spent nothing” separate from “we do not know what we spent.”

The same rule applies during reconciliation. If the provider invoice and ledger do not match, the remaining amount is shown as unexplained instead of being changed to zero. See provider-bill reconciliation.

The ledger fields behind a cost figure

A cost is an amount in USD plus the estimated and unpriced flags. Its ledger record also carries pricing_snapshot, which identifies the price list used for the calculation. Ledger fields defines each field.

The savings verdicts

A savings figure also tells you what kind of claim it makes. TokenTriage uses three labels:

Verdict Plain meaning Typical example
PROVEN measured from events that have already happened savings measured after a change, or avoided spend measured by replay
ESTIMATED calculated from recorded usage and stated assumptions a recommendation about future traffic
UNPROVABLE the available evidence cannot support a dollar figure a slice with missing or insufficient evidence

These labels describe the source of the figure, not how confident the UI feels about it. An UNPROVABLE result renders no dollar and names the missing evidence.

Only two method IDs can produce a PROVEN figure. The cost figure reference lists them and the evidence each one requires.

Two verdict vocabularies — don’t conflate them

Savings and routing use different verdicts because they answer different questions.

Savings / impact verdict Routing verdict
Question Is this dollar figure measured, estimated, or unavailable? Did routing beat a blind model mix at the same cost?
Values PROVEN · ESTIMATED · UNPROVABLE BEAT · NOT_BEAT · ON_FRONTIER · CANNOT_MEASURE
Where it appears recommendations, measured savings, and reconciliation the routing evidence panel and eval output
Missing evidence UNPROVABLE; no dollar is shown CANNOT_MEASURE; no routing judgment is made

The verdicts can differ without contradicting each other. A recommendation may have strong quality evidence and still show ESTIMATED savings because future traffic has not happened. When you quote a verdict, say whether it describes savings or routing.

Quality labels and evidence bases are a separate vocabulary. They are collected in Calibration & evals vocabularies.

Why “routing beat the baseline” is hard to show

Suppose you use a cheap model for 70% of requests and an expensive model for 30%, without looking at the request first. That blind mix has an average cost and quality. Change the mix and you trace a line between the two models.

TokenTriage calls the best line available from blind mixes the zero-router frontier. A router must land above that line to show it chose well for individual requests. Landing on the line is no better than choosing the same proportions at random.

Routing must beat a blind model mix at the same costA cheap model and an expensive model define the quality available from blind mixes of the two. Changing their proportions traces the zero-router frontier. A router result on or below that line does not show that routing helped. A result above the line has better quality at the same cost, but TokenTriage reports BEAT only when both model choices were graded on the same requests.lower costhigher costquality increaseszero-router frontierthe best blind mix at each costcheap modelexpensive modelblind 70 / 30 mixquality gainrouter resultbetter quality at the same costAbove the line + both choices graded: routing can produce BEATOn or below the line: the result does not show routing skill

The line in the diagram is what a blind mix can achieve. A result above it has better quality at the same cost. A point on or below it does not show routing skill.

Your normal logs record the model the router chose and how that answer scored. They do not record how another model would have answered the same request. With only those served-model labels, a good choice and a lucky mix look the same.

Judged shadow duplication supplies the missing comparison. It sends the same request to both models and grades both answers, while your application still receives the primary response. The second graded answer is the counterfactual: what would have happened under the other choice.

This page does not cover how a model grader becomes trusted measurement. That process is explained in How a judge reaches a measured basis and Why your number is reported, not measured.

The honesty verdict for routing

eval turns the available routing evidence into one of four verdicts. The CLI, API, and dashboard use the same names.

Verdict What it means What to do next
BEAT both choices were graded on the same requests, enough labels were available, and routing cleared the improvement threshold if the evidence is fresh and matches the current policy, promote it to route
NOT_BEAT the paired comparison ran with enough labels, but routing did not clear the threshold keep shadow mode and adjust the policy
ON_FRONTIER only served-model labels were available, so the result cannot show routing skill enable judged shadow duplication
CANNOT_MEASURE too few rows were labeled, or the filter matched no rows collect labels; use judged shadow duplication if you need a routing-skill verdict

Despite its name, ON_FRONTIER also covers a point below the frontier. Served-model labels can place the result on or below the line, but they cannot show that per-request choices caused either position.

The CLI output for each routing verdict

With served-model labels and a point on the frontier:

verdict: routing sits ON the observed-model frontier (Δ +0.0000) — served-model labels
(quality source 'oracle') score only the tier that served each row, so routing cannot be
shown to beat a blind model mix. Enable shadow duplication (shadow.duplicate) for a
counterfactual routing-skill verdict; use calibrate to sweep thresholds.

The same wire verdict prints BELOW when the point falls under the line:

verdict: routing sits BELOW the observed-model frontier (Δ -0.0300) — served-model labels
(quality source 'oracle') score only the tier that served each row, so routing cannot be
shown to beat a blind model mix. Enable shadow duplication (shadow.duplicate) for a
counterfactual routing-skill verdict; use calibrate to sweep thresholds.

With a judged shadow comparison that cleared the threshold:

verdict: routing BEATS zero-router by 0.2500 (counterfactual: judged shadow duplication)

With a judged shadow comparison that did not clear it:

verdict: routing does NOT beat zero-router (Δ +0.0000) — keep shadow mode

With too few labels:

verdict: insufficient labels to judge routing — enable oracle sampling (classifier.oracle)
or shadow duplication (shadow.duplicate)

A filter that matches zero rows also produces CANNOT_MEASURE; the evidence API reports matched_rows: 0 beside it. Promotion checks two more conditions after BEAT: the labels must be fresh enough, and the policy fingerprint must match the policy being promoted. The fingerprint identifies the policy version under which the evidence was collected.

What this page doesn’t cover

Ledger fields defines the stored records. The trust ladder explains ledger, shadow, and route. Cache accounting explains why provider prompt-cache discounts and TokenTriage response-cache savings remain separate.