Model triage: which models earn a live-pool slot¶
Every week a model is released, and every few weeks an incumbent is deprecated or repriced. A pool has to react to that churn with something better than taste. This page is the membership rule: a model earns a slot in the router's live pool when it clears one of two evidence bars, and is dropped when it clears neither. The rule is recomputed mechanically from committed data, so the pool is a consequence of the measurement, not a decision someone made once.
The two strata, and why the frontier is per-stratum¶
The pool serves two different jobs, and a model should be judged on the job it actually does. The two strata have their own quality measure and their own frontier:
- Routine stratum — the tasks the cheap model would take. Quality is the marginal verified pass rate (a Wilson 95% CI) on the model's default reasoning arm.
- Escalation stratum — the tasks the cheap base,
deepseek-v4-flash, failed. Quality is the change in resolve rate against that base on the paired overlap, with the exact paired-test p from the ladder evidence.
A single marginal-rate bar would get the pool wrong, and glm-5.2 is the
working example. On the routine stratum it is dominated: 57.1% at $5.80/Mtok sits
well below the frontier. A marginal-only rule drops it. But as an escalation rung it
is a different model — it resolves +0.1548 of the tasks the base failed, a net-helpful
pair that clears the test. It is in the pool because of the escalation stratum alone,
and the rule is built so a model that is only an escalation rung can still earn its
slot.
The routine frontier and the Wilson-CI band¶
The reference for the routine stratum is the cost–performance frontier of the
incumbent live pool, taken per stratum. At any price p, the envelope env(p)
is the best marginal rate among live models priced at or below p. A model keeps
its slot when its CI upper bound reaches that envelope at its own price — overlap
with the frontier means it is inside the noise band. A model cheaper than every live
model defines the envelope's low end and keeps by construction. Below the band — too
slow, too expensive, or both — is a drop.
The frontier of what is already live is the reference for a reason. "The cheapest model" is a tautology, not a standard: it says nothing about whether the pool's second slot is earning its price. "The single most cost-effective model" is almost as bad — it crowns one point and treats every other slot as failure, which is how a pool loses a frontier rung the moment a cheaper model arrives. The live-pool frontier is non-circular — the incumbent set is fixed before the new model is measured — and it adapts on its own as the market improves, so the bar moves without a human re-deciding it.
The escalation bar¶
The escalation bar is a paired verdict, not a rate. A candidate rung is scored only on the challenges where both it and the base have a default-arm outcome, and the paired difference is tested with the exact paired-exchangeability test from the ladder evidence. The model keeps its slot only when the verdict is NET-HELPFUL (p < 0.05 on the helpful side). NET-HARMFUL and INDISTINGUISHABLE clear nothing, so a flat rung — one that neither helps nor measurably hurts — still drops.
The current table¶
| model | price $/Mtok | n | marginal rate | 95% CI | routine | esc Δ resolve | esc verdict | verdict |
|---|---|---|---|---|---|---|---|---|
| deepseek-v4-flash | 0.42 | 190 | 68.9% | 62.1–75.1 | KEEP | — | — | KEEP |
| deepseek-v4-pro | 1.30 | 200 | 85.0% | 79.4–89.3 | KEEP | +0.1526 | NET-HELPFUL | KEEP |
| glm-5.2 | 5.80 | 84 | 57.1% | 46.5–67.2 | DROP | +0.1548 | NET-HELPFUL | KEEP |
| gemini-3.1-pro | 14.00 | 0 | — | — | — | — | — | UNMEASURED-EXCEPTION |
| kimi-k3 | 18.00 | 110 | 84.5% | 76.6–90.1 | KEEP | +0.2364 | NET-HELPFUL | KEEP |
| claude-opus-4-8 | 30.00 | 0 | — | — | — | — | — | UNMEASURED-EXCEPTION |
| gpt-5.6-sol | 17.50 | 0 | — | — | — | — | — | UNMEASURED-EXCEPTION |
| claude-fable-5 | 60.00 | 0 | — | — | — | — | — | UNMEASURED-EXCEPTION |
| qwen3.7-plus | 1.60 | 87 | 43.7% | 33.7–54.2 | DROP | +0.0345 | INDISTINGUISHABLE | DROP |
| gpt-5-mini | 2.25 | 200 | 54.5% | 47.6–61.3 | DROP | −0.1684 | NET-HARMFUL | DROP |
| kimi-k2.5 | 3.60 | 121 | 49.6% | 40.8–58.4 | DROP | −0.0165 | INDISTINGUISHABLE | DROP |
n is the routine default-arm cell count — the basis of the marginal rate and the
routine verdict. The escalation columns rest on a different n: the paired overlap
with the base, which is not the same number (gpt-5-mini shows n=200 here but n=190
on the escalation ladder). Read each column against its own
basis.
This table is the regenerable report at benchmark/routing/reports/triage_summary.csv,
itself derived from the committed results.csv, the shipped registry in
src/shunt/config/models.yaml, and the ladder evidence. Recompute it with:
The CSV is gitignored: it is a build artifact, not a source. The per-model pass rates behind the marginal column are in Results, and the per-rung escalation numbers behind the esc columns are in the ladder-rungs figure.
This committed pool is also the rule's positive control. The rule must reproduce
deepseek-v4-flash / deepseek-v4-pro / glm-5.2 / kimi-k3 = KEEP and
qwen3.7-plus / gpt-5-mini / kimi-k2.5 = DROP — and it does, on every run.
glm-5.2 is the load-bearing case: dominated on the routine stratum, saved only
by the escalation one. deepseek-v4-pro is the opposite case and the only model in
the table that clears both strata — it is the one row where the two halves of the
rule agree, which is why it enters the ladder directly above the cheap base.
The rule is deliberately blind to one thing: redundancy between two KEEP rungs.
Each candidate is scored against the cheap base alone, so a rung can keep its slot on
its own escalation evidence while a cheaper, stronger rung already rescues nearly
everything it would. That is now the glm-5.2 situation — on the 49
deepseek-v4-flash failures where both ran, it rescues only 4 that deepseek-v4-pro
misses, at 3.3× the cost per rescue. It keeps its slot because redundancy is not the
test, and changing that is a rule change, not a table edit.
Statuses and exceptions¶
Every verdict is one of five:
- KEEP — clears the routine band, or is a net-helpful escalation rung.
- DROP — clears neither.
- INSUFFICIENT-DATA — fewer than
K = 20default-arm cells. No verdict, no slot decision either way. - UNMEASURED-EXCEPTION — a benchmark-disabled model: a policy slot the committed corpus cannot measure, such as the research-estimated frontier tail. It is exempt by design, never a violation.
- EXCEPTION — a measured-DROP model kept under a named exception recorded in
benchmark/routing/triage_exceptions.yaml. Advisory, surfaced by the gate, never a violation and never silent.
Named exceptions are allowed — a model may be kept for availability, or for a
capability the pool lacks. What is never allowed is a silent exception: it has to be
recorded in the triage report, visible next to the verdict, or it does not count.
The four UNMEASURED-EXCEPTION rows above are NOT named exceptions: that status is
automatic, because the committed corpus cannot measure a benchmark-disabled model.
A named exception is a separate, manual mechanism — it promotes a measured DROP to
verdict EXCEPTION via benchmark/routing/triage_exceptions.yaml, which holds no
entries today.
Enforced mechanically¶
The rule is not advisory. The SH015 pre-commit gate reruns the triage on every
commit and fails when a live-pool model — one listed in router.yaml's models: —
verdicts as DROP, naming the model and its evidence so the fix is to remove it from
the pool or to collect evidence that clears a bar. A model measured DROP is not
deleted from the benchmark; it stays in the measured set and keeps being measured, so
a verdict is always revisable the day the evidence changes. A dropped model that
recovers can re-earn its slot; a dropped model that quietly stays dropped is what the
gate exists to prevent.
Limits¶
Read the table with these in hand.
- Marginal rates are over each model's own adaptive coverage, and are not cross-comparable at face value. Each rate is over the tasks that model actually ran; coverage differs per model. Results carries the common-74 check — the 74 tasks every model ran — and the ordering barely survives it (Results). The triage rule leans on the CIs precisely because of this, but the band is still computed on those marginal rates.
- A KEEP is per-stratum. The escalation bar is the paired ladder verdict on the
committed corpus, so a model can earn a KEEP on the stratum it serves while being
dominated elsewhere — that is the
glm-5.2case. KEEP means earns one of the two slots, not wins both. - A green SH015 exit is a relative statement, not an attestation of quality.
When
results.csvis absent or empty, every model isINSUFFICIENT-DATAand the gate is green by construction — so a passing run means no measured live model is dominated relative to the frontier, never that the pool is good. Four of the seven live slots (the research-estimated frontier tail) are benchmark-disabled and exempt by design; only the three measured models are ever actually judged. - Benchmark-disabled frontier models are unmeasured by policy. Their prices are
research estimates, not live listings, and the corpus does not run them. That is
why they are
UNMEASURED-EXCEPTIONrather than KEEP or DROP — the rule refuses to grade what it cannot measure, and the exception note says so.
To add a model to the registry — and therefore into triage's candidate set — see Configuration → Add a model; the pool those models fill is described in Architecture.