TokenPolice
Docs
Dashboard

Dry-run and Routing

What your watching rules would have done, how confident that estimate is, and every model swap your reroute rules made.

Two tabs about rules that aren't (yet) stopping anything, and rules that change a call instead of refusing it.

Dry-run

"Rules running in Dry-run — see projected impact before promoting to Enforce." Every new Block or Reroute rule starts here.

PanelColumns
Dry-run rules inventoryRule (with a Dry-run badge and its detector, or Budget) · Action · Days in dry-run · Matches, and how many unique entities · Projected saved · Confidence
Dry-run decision feedTime · Effect · Rule · Entity · Model · Threshold · Mode — the would-have actions themselves, 50 to a page

Confidence

A rating on how much you should trust the projection, using two thresholds only:

RatingMeans
Ready7 or more days in dry-run and 100 or more matches.
Some data3 or more days and 30 or more matches.
Insufficient dataAnything less.

The page's own explanation: "Dry-run runs a rule against your live traffic but never acts on it — nothing is blocked or rerouted. It just records what the rule would have done, so you can judge its impact safely before turning it on."

Routing

"REROUTE rules and the calls they swap to cheaper models — enforced and shadow."

PanelContent
KPI pairCalls rerouted (sent to a cheaper model) and Would have rerouted (dry-run rules, no swap made).
Routing rulesRule · Mode · Target model and provider · Firings, with the shadow count · Last fired.
Routing decisionsTime · Mode · Rule · User · Swap (original to target) · Action, filterable by All / Enforce / Dry-run.

Reroute does not switch the model on some frameworks — including LangChain, LangGraph, LlamaIndex, Pydantic AI, and the Vercel AI SDK. Those calls still run on the original model. Confirm a swap actually happens in your app before you enforce this in production.

When a call matched a reroute rule but ran on the original model, the trace and workflow views explain why — an unsupported framework, a target on a different provider (swaps are same-provider only), or a custom base URL that couldn't be verified.

What to look for

  • A rule sitting at Ready with real projected savings — promote it. That's what the tab is for.
  • A rule at Insufficient data after weeks — its filter is too narrow, or its traffic doesn't exist. Check the match on Filter vs apply-to.
  • Would have rerouted is high and Calls rerouted is zero — the rule is still in Dry-run, or your SDK is.
  • Firings recorded but no swap in Routing decisions — a rejected reroute. Check the framework caveat above first.

Next