The Lab

The model that can't write a sentence


A decision model answers only the questions you write in advance, with odds attached, and cannot produce a word of prose. This is a working guide to one: the three kinds of question it takes, the jobs it fits, what to get right when you use it, and what a well-wired pipeline saves. Every point rests on a measured run on my own hardware — the runs are the evidence here, not the story.

005Build LogSep 19, 2026Independent research →

Instrument and questions: Rick Worthington
Analysis and prose: Agent

You don't talk to it. You hand it a form.

Every model most people have used writes text back. This one cannot. You send it the thing to look at and the questions you wrote yourself, and it returns an answer to each one with a probability attached.

The model is Jev, from a company called TypeSafe. The answer can only ever be one of the options you supplied, so it cannot invent a category that isn't in your list, wander off topic, or pad a reply. What comes back is a number your own code can act on: keep it, drop it, or send it to something smarter.

1,960 decisions in 4 seconds, for $0.0028A first run: 49 repositories, 40 questions each, one third of a cent. List price is $0.042 per million tokens read (a token is about three-quarters of a word), and the output is free. The frontier model it was measured against is costed here at $5 per million in and $25 out.

The right picture isn't a consultant, it's a smoke detector. It isn't clever and it won't tell you what's burning. It is cheap enough to put in every room and leave running forever, and that is the whole of its value. One decision from it is worth nothing and ten million are worth a lot — so if the job doesn't have volume, this is the wrong tool.

Three shapes of question, and only three

Everything built with this model is built from these. Which one to use is decided by the shape of the answer you need, never by habit.

Quoted guidance is the vendor's own wording. Every measured number is from a run on this page.Yes / noreturns one probabilityRECOMMENDED FOR“A clean yes/no where theprobability is the signal.”FOR EXAMPLE“Is this repositoryabout AI?”MEASURED HEREBuilt every gate and filter here.98.7% agreement on fresh data,against a frontier model's 95.9%.Pick onereturns the pick, odds, certaintyRECOMMENDED FOR“One of a known set: route aticket, classify a document.”FOR EXAMPLE“Which one of these 31labels fits best?”MEASURED HEREThe same tagging job, asked asone pick-one: 68% → 75%, at 40%of the price of 31 yes/nos.Rate itreturns a level, odds, certaintyRECOMMENDED FOR“A position on a describedspectrum: severity, frustration.”FOR EXAMPLE“How close is this to anattack tool, on five levels?”MEASURED HEREAdded to the filter as a seconddial: 42% fewer items left toread, and nothing missed.Its certainty was flat — don't route by itIts certainty sorts: 93% vs 32%Threshold it, never read a number off it
The type is chosen by the shape of the answer you need: a true yes/no, one from a known list, or a position on a described scale.

All three ride in the same request against the same item, and the item is read once. That makes one habit worth forming: ask the questions you might not need. Fourteen questions about one repository billed three hundredths of a cent — the same as two.

The test: could a careful person holding the written rule answer in a second?

Write the rule down first. If the answer is yes, the job is a candidate. If someone would have to read, weigh, and decide, it is not — however similar the two jobs look.

Every score is agreement with a blind reference, not accuracy — see Provenance.A GATE“Is this repositoryabout AI?”98.7%agreement, fresh sampleA frontier model: 95.9%A SCREEN“Is this paper aboutAI tooling?”95.8%agreement, fresh sampleThe keyword rule: 81.4%A FILTER“Could this be anattack tool?”212 / 212caught, none missed87% never read a second timeA TAGGER“Which one of 31labels fits best?”74.7%its best wiring of sixA cheap chat model: 87%One right answer, settled by a written ruleA judgment call under a 25-rule bookthousands of small, repeatable checksreading, weighing, deciding

The fourth card is the one to remember. Same model, same price, same corpus, same afternoon — and it lost to a chat model costing seven times more, because the question changed shape.

Four jobs that actually ran, on thousands of real items, each scored against a reference that never saw the model's answers.

All four jobs read the same short repository descriptions, so difficulty and subject matter are not what separates them. The first three ask a question a written rule can settle. The fourth needs judgment.

It fits whenThere is one right answer under a written rule. Volume is high and each item is small — a description, an abstract, a ticket, a log line. And the answer feeds something else: a gate, a filter, a flag, a router
It doesn't whenThe answer is the deliverable. The job needs knowledge the text doesn't carry. The question is asked a few hundred times a month. Or the input is private, or written by a stranger who might want to steer it

Under other names the winning shape is everywhere — screening documents against inclusion criteria, routing a ticket to a queue, checking that a quoted passage supports the claim citing it, catching a prompt-injection attempt before an expensive model reads it.

Coverage, agreement, steadiness, savings — in the order they matter

$0.29to read all 10,714 repositories once. Screening all 290,240 research abstracts prices, off a measured sample, at about $17. At that price a check runs on everything, not on a sample
98.7%agreement on the 'is this about AI?' gate, on fresh data, where Claude Opus 5 reached 95.9%. On research abstracts, 95.8% against 81.4% for the keyword rule it would replace
8 of 10,714answers changed when the whole corpus was run a second time. The chat model doing the same job returned 99, 102, 103, 106 and 108 hits for identical input
73% lessfor a full sweep when it filters ahead of an expensive reader — with the same 212 of 212 real hits caught. The diagram is under Wiring it up

Being slightly better than a frontier model on one gate is a curiosity. Being affordable at full coverage changes what you can build. Three cautions decide whether any of it reaches you.

FINDING 1Strong · list price plus measured runs

Cheap only matters at volume

Recommendation: believe the price, then check how often the question is asked.

On a job asked a few hundred times a month, saving 90% of a small number is a rounding error, and the pipeline costs more to build than it will ever save.

FINDING 2Moderate · one job, n=154, six wirings tried

It replaces a filter, not a decision

Recommendation: budget for the expensive model to stay in the design.

On the tagging job it lost every way it was wired — six attempts, the best at 75%, against a cheap chat model's 87% under the identical rulebook. What rescued that job was a pipeline in which this model narrows the work and something else decides it.

FINDING 3Moderate · one day, one operator, every win traced

It is not a drop-in

Recommendation: budget for the pipeline, not the license.

Nothing here was won by swapping a model. Every number came from writing rules, writing questions, and building a way to score the result. The model was the cheapest part of the work.

Don't ask a cheap model to be right. Ask it to be wrong in one direction only.

If you keep one sentence, keep that one. It decides where the cut-off goes, what sits behind the model, and what the model is for.
1

Choose the question type before you write the question. A yes/no, a pick-one and a rate-it are different tools, and the default is rarely the right one.

Rests on: the same tagging job scoring six points higher, at 40% of the price, once it was asked as a pick-one instead of 31 yes/nos.

2

Put it at the front of the pipeline, not at the end. Tuned to throw away 87% of a corpus it has not dropped a real hit in any measured run. Tuned to decide for itself it missed 24 of 212. Same model, one setting apart.

Rests on: the four jobs on the shape chart, and six failed attempts to make the fourth one work.

3

Spend the budget on the written rules and on scoring, not on the model. When a classification job looks subjective, it is usually under-specified.

Rests on: the best achievable score moving 80.0% → 95.8% → 98.7% across three rewrites of the rules, against a 1.9-point spread between the best and second-best model.

4

Before you believe an accuracy number, ask who wrote the answer key and how each model was called. This is the question to put to any team bringing you a benchmark.

Rests on: two numbers in one evening that flattered the model producing them — 96.3% becoming 81.5%, and a 99.4% agreement figure that was a model agreeing with itself.

The thread

A cheap decision model pays when it gets a narrow, explicit job inside a larger system — not when it is asked to imitate a general-purpose model. This tab is about the first half: making the job narrow and explicit. You can skim the numbers; the headings carry the advice.

The cheapest improvement available is reading the manual

The three types are easy to tell apart on paper and easy to ignore in practice. An audit of the first day's work counted every call: all sixteen used the yes/no form, including two jobs that were not yes/no questions.

Tagging a repository with one of 31 labels — the same job, asked four ways. Share matching either of two blind reference passes
31 separate yes/no questions $0.29 per 1,000
68.2%
One pick-one question $0.12 per 1,000
73.4%
Pick-one, with the rulebook in it $0.12 per 1,000
74.7%
A cheap chat model, same rulebook $0.90 per 1,000
87.0%

Asked as 31 separate yes/nos, the options never compete against each other inside the model — they only get compared afterwards, in your code. Asked as one pick-one, they do. The rate-it type paid the same way on a filtering job: a described five-level ladder, added beside nine yes/nos, left 42% fewer items for the expensive reader with nothing missed.

Don't tame a long option list with a hierarchy. Fix the options.

The obvious move with 31 labels is to split them into 6 families, ask which family first, then which label inside it. The vendor publishes a cookbook for exactly this.

One flat list against a two-step hierarchy, same 154 items
One flat list of 31 options
73.4%
Family first, then label
63.0%
Hierarchy plus five extra factor questions
59.1%

A hierarchy can never beat its own first step, and the first step is an abstraction. Asked for the family directly, the model did thirteen points worse than when the flat answer's own probabilities were simply added up into families. The leaf options carry concrete, tested conditions; the families were abstractions invented to group them — and a good abstraction is much harder to write than a good condition.

One snap judgment per questionIf a person would need to think, split it. One big 'is this about AI?' question scored best on the sample it was tuned on, then fell three points on fresh data. Seven small questions combined in code held
It reads you literallyA bare label like 'agent-harness' makes it guess what you meant. 'Runs, orchestrates or supervises AI agents' does not. When a wrong answer makes you explain what you really meant, that explanation was the missing half of the instruction
Give it the vocabulary it lacksIts confident misses were product names it had never heard of. Passing a short glossary as structured reference data fixed a whole category of error that no rewording would have touched
Ask the negative tooA question like 'is the AI angle only incidental marketing?' gives your code something to subtract. It cut false positives on the gate more than any positive question added
Don't ask it to countIt is unreliable at arithmetic, at counting, and at ordering dates. Extract the facts with the model; do the sums in code, where they are exact and free

One piece of standing advice backfires if read loosely: "combine in code" means combining independent factors, not re-applying rules the options already state. Doing both cost four to five points every time.

The biggest improvement available involves no model at all

Before scoring anything, find the ceiling: have a careful reader label a sample, then have an equally careful reader label it again, blind. Nothing can score above how often those two agree with each other.

60%70%80%90%100%80.0%Rulebook v17 rules95.8%Rulebook v223 rules98.7%Rulebook v325 rules“this task is just subjective”Rewriting the rules alone: +18.7 pointsBest model swap available: +1.9 pointsbest model tried · 87.0%worst tried · 68.2%four models,same rulesTHE CEILING — how often one careful reader agrees with a second, blind, on the same rules

A low ceiling is a bug in the rules, not a hard problem — and rewriting them is free.

The gray bracket is every model tried on the same job under the final rules. The whole field sits below the ceiling, and the best of them beat the next best by under two points.

The first rulebook had 7 rules and a low ceiling, which invites a comfortable conclusion — this task is just subjective. It was wrong. The rules were vague, and rewriting them twice took the ceiling nearly to the top. Same task, same data, same readers, 18.7 points, and not one model changed.

The rulebook change that went the other way

Five explicit exceptions were added to a rubric — carve-outs naming things to treat as out of scope. The judging model went hunting for reasons to call things out of scope, wrongly cleared about 33 items it should have cut, and on a dozen wrote a reason that contradicted its own verdict. One exception it applied had never been written down by anyone. A list of exceptions teaches a model to look for exceptions.

The threshold is a free dial. Because the answer is a probability saved to a file, trying forty cut-offs is arithmetic on numbers you already have. Asking a chat model to "be stricter" costs a full re-run every time.

Check the confidence before you route by it. Sending the unsure items to a person or a bigger model is the right pattern, but only where the confidence actually sorts right from wrong. On the pick-one type it did: right 93% of the time at high certainty, 32% at low. On the yes/no type, same job, it was flat — about as right when unsure as when certain — and routing by it would have sent the wrong items to the expensive reviewer.

Score once, on a fresh sample nobody has seen. The best-scoring design on the tuning sample was the single big question above. A team that stopped there would have shipped the worse design and had a better-looking number to show for it.

The thread

Narrow, explicit jobs were the first half. This tab is the second: the larger system around the model, where something that can actually read makes the final call.

The most valuable setting is a number almost nobody would pick

Set the cut-off by what you can afford to miss, hand the survivors to something that can actually read, and keep those two numbers as separate settings in your code.

The worked example: this site publishes rankings of public code repositories and by policy does not name offensive-security tools. Ten thousand of them, refreshed constantly, and a judgment call on each one. The model returns a probability, and the obvious cut-off is the middle: above 0.5, call it an attack tool. That setting is the model deciding.

24 → 0 real hits missed, one setting apartAt a 0.05 cut it passes 2,349 of 10,713 repositories to the expensive reader and misses none of the 212 real hits. At 0.50 it passes only 205 and misses 24. Model, questions and corpus were identical in both rows — the intuitive cut-off is the wrong cut-off.

The bug that setting caused, which no test caught

Those two numbers — the one that filters and the one that decides — were the same variable in the shipped script. A repository can only survive the filter by scoring above it, so almost every survivor read as a disagreement with the second model: 1,854 disagreements sent for expensive adjudication instead of about 70. Found by watching a live log during a production rehearsal, not by any test.

Nothing here is one model doing a job

Three models from three companies, each one seeing only what the one before it could not settle.

One full pass over 10,714 repositories, Sep 19, 2026. The hourly run only touches what is new.10,714 reposthe whole watchlistThe cheap net9 yes/nos + one ladder · $0.291,371 left87% dropped, 0 missedThe reader modelreads only these · $0.38Both say “attack tool”177 · cut, no human neededThe two disagree69 · a third model judges blindBoth say nopublished · 0 missedWHAT A FULL SWEEP COSTSThis wiring$0.81Reader reads everything$2.98

Same catch, 73% less money. Both wirings find all 212 attack tools in 10,714 repositories. The difference is how many of them the expensive model had to read.

The cheap model never decides anything. It only refuses to pass things along, tuned so wide it has not dropped a real hit in any measured run — and the expensive reader only ever sees the survivors. That is where the money is saved.

The same shape rescued the tagging job. The decision model filters out the non-AI half, a cheap chat model tags what's left, the decision model tags it again independently and flags every disagreement, and only the flagged items reach a careful third model. That lands at 89.6% for about $2.55 per thousand — against Claude Opus 5 working alone at 85.1% for roughly $5.77. Better and cheaper than the frontier model, and not because the cheap model is good at the job. It's good at narrowing it.

One honest note on the saving in the chart: that is a full sweep, and the hourly run only looks at what's new, where the saving is under a cent. The better argument for wiring it this way is headroom, not money.

The flag is the part worth copying

When two models built on different principles disagree about an item, that item deserves a closer look. When two similar models agree, it proves much less.

The chat model made 20 errors in 154 items. Flagging every item where it and the decision model disagree flags 35% of the work and catches 15 of those 20. A second chat model as the checker caught 6, at eight times the price, because chat models share their mistakes — ten items fooled all three tried, identically. A model built on a different principle fails somewhere else, and that is the only property that makes a second opinion worth buying.

Two results that will save someone a week

Asking it properly made it a worse checker. Switching to the correct pick-one question type made it agree with the chat model more often, so it caught 11 of 20 errors instead of 15. Where a component's job is to disagree, the clumsier wiring is the deliberate choice — optimizing every part for its own score can make the system worse.



And the expensive judge is not worth its premium. Twelve model-and-calling-style combinations were tried for the final step. Claude Sonnet 5 at $3.87 per thousand got 43 of 54 right; Claude Fable 5.1 at $15.93 got 44. One item, at four times the price — which at this sample size is a tie, not a ranking.

Personal time, personal hardware, public data

Two dozen numbered experiments against public code repositories and public research abstracts, each with its sample size, its random seed, its cost, and the file holding every individual answer.

The rule went into a file before any data was drawn. A frontier model labeled a randomly drawn sample blind, with no other model's answers in view. Thresholds were swept offline against saved probabilities. Then the design was frozen and scored once on a fresh sample the tuning had never seen — and that last figure is the one reported, except where a tuning-sample number is named as one.

Sample sizes118 to 154 items for every scored comparison, plus two full passes over all 10,714 repositories. At this size a 2–3 point gap is noise, and no claim here rests on one
The referenceClaude Fable 5.1, labeling blind, twice per sample — the second pass gives the ceiling. Nine blind passes across the day, roughly 1.1 million tokens
Total spendAbout $4 across every model: 25 cents on the decision model, 78 cents on Gemini Flash, $1.13 on Muse Spark, about $1.68 on Opus 5. One run estimated at under a dollar came to about $2, because one vendor bills its hidden reasoning
What the day cost that wasn't moneyA morning. The first conclusion of the day was that the model wasn't available — 447 models listed in the catalog and none of them was this one. It was live the whole time, just unlisted

The same mistake, twice in one evening, in two unrelated experiments

Both times a headline figure was a model measured against something it had produced itself. Both times the number flattered it. Neither was caught by review.

96.3% → 81.5% same model, same rules, same 54 itemsThe first version was that model working as a careful in-session reader with the rulebook open and unlimited time. The second is the same model through a normal API call, alongside every other contender. Fifteen of its twenty-four-point lead was how it was asked, not which model answered.

The deeper problem was underneath it. The answer key for that job had been written by the same model working the same careful way, so 96.3% was never scored against an independent standard — it was scored against its own house style. That is self-consistency, not skill. The identical error had happened four hours earlier on the other job, where the answer key equaled the cheap model's own verdict on 99.4% of rows.

The two rules this leaves behind

A contestant's output must never be the ruler. If the answer key and one of the models share an author, that model's score is not comparable to anyone else's.



A model's measured quality is a property of the call, not the model. A number taken from a careful hand-run pass cannot be compared to one from a production API call, even for the same model on the same day.

One day, one corpus, one operator

These are agreement figures, not accuracy. Every score is how often the model matched a reference that is itself a model.

The samples are small. A 2–3 point gap is noise: the same question asked twice on the same 154 items scored 73.4% and 72.7%, which is one item.

One corpus, one domain, one day. Whether any of it holds on insurance claims, support tickets or medical records is exactly what one day of work cannot say.

Speed for a live product is unmeasured. Everything ran in batches, so the number that decides whether this can sit inside something a person is waiting on was never taken.

It does not treat its input as hostile. Text written to steer a classifier can steer it, which matters the moment it reads anything a stranger wrote.

And it is not private. An external service, so anything sent to it leaves your machine — which ruled out several of the most attractive uses here before they were tested.

Direction

If you're evaluating this class of model: write your rule down, have two careful readers label 150 of your own items blind, and look at how often they agree with each other. That number tells you whether you have a model problem or a rulebook problem, and it costs nothing but an afternoon. Do it before the pilot, not after.