undefined-ui / gate-check
Find the decisions in a pipeline that do not need the expensive model and propose the gate for each: a rule, a classic classifier, or a small model, with fail-closed routing. Use when the user asks to cut model costs or latency, says the big model handles everything, or wants a triage / routing / filter layer in front of an agent. Analysis plus an optional baseline scaffold. Do NOT use for auditing context layout (context-audit) or for building eval suites (evals-bootstrap).
Find the gates
Theory: Cheap decisions
and Gate practice.
An agent does two kinds of work: it writes, which needs a big model, and it
decides — is this spam, which queue, does this need a person — which is a
bounded question the answer to which comes from a set you already know.
A gate is a cheap decision layer that sorts the stream so the expensive
model only sees the items that actually need judgement.
Workflow
Map the decisions. Read the pipeline's entry points and prompts and
list every decision made before or during a model call: classification,
routing, filtering, yes/no triage, priority, language, "is this even for
us". Ignore the writing — only bounded decisions with a known label set.Count what each costs today. For each decision currently made by the
big model: calls per day if known, tokens per call, and what a wrong
answer costs. A decision worth one bit that burns a frontier call is the
headline finding.Propose the cheapest gate that can hold it, in rising order of cost:
a rule — regex, allowlist, header check: free, instant, blind to
anything unanticipated; always the first layer, never the lasta classic classifier — logistic regression or similar over simple
features, trained on a few hundred labelled examples: milliseconds,
fractions of a cent, and the baseline every fancier option must beata small / System One model — when the input is too varied for
features but the output is still a label with a confidence score
Route fail-closed. Every gate needs a confidence threshold, and doubt
goes down the safe path: unsure means escalate to the big model (or a
person), never means guess. Say explicitly what each gate's unsure route is.Offer the baseline scaffold. If the user wants to proceed, generate
the module's thirty-minute exercise for their data: alabel.pythat
samples ~200 real examples for hand-labelling, and abaseline.pythat
trains the classic classifier and prints accuracy against a held-out
split. Every vendor claim and small-model option must beat this number
on their data before it earns a place in the pipeline.
Output format
Gate check — <pipeline>
decisions found: <n>, currently on the big model: <n>
1. <decision> — <where in the code>
today: <who decides, est. cost> label set: <the labels>
gate: <rule | classifier | small model> — <why this tier>
unsure -> <escalation path>
saves: <est. calls/tokens diverted>
...Rank by savings. If a decision genuinely needs the big model — open-ended,
no stable label set, wrong answers are cheap to fix — say so and leave it
alone; a gate that guesses is worse than no gate.