Which Jev-like AI Decision/Classifier Model Is Best?
Last week I published a long post about Jev, TypeSafe’s hosted classifier that became all the rage in September. The short version of that post: Jev is a classifier, something that has existed for decades, and the “193x faster” amazement only exists because too many people were using chat LLMs as expensive, slow classifiers. I reproduced Paulo Câmara’s essay The student who marks answer A, introduced the open alternatives Clef and Laya, and to compare the models side by side I leaned on the Decision Index, a public ranking that already existed.
Someone else’s ranking is useful, but I wanted to get my hands dirty. So I built my own benchmark, with my own cases, half in Portuguese, and ran the open models on my home server with Strix Halo, the same Ryzen AI Max+ 395 I use to test local LLMs. The hosted ones (Jev, the two Clefs from Cloudflare, OpenAI Decisions and Microsoft Decision-1 via OpenRouter) ran through their APIs. Everything, including the cases, the raw responses and the scoring scripts, is public in the benchmark repository.
TL;DR: the top now has two, both open-weights. Perplexity Decider 1.1 27B and the just-released Decision 3.0 (vLLM Semantic Router) tied at 99.4% on the compact cases, with 100% in Portuguese, and identical labels on all 1,024 classifications in the benchmark. The price: about 49 GB of weights and over a second per decision. In the cloud, Microsoft Decision-1 tied Jev at 97.6% while costing a third: it’s the cheapest hosted one I measured, and the first candidate to evaluate. Jev answers faster and errs differently. OpenAI Decisions debuted tied with the best local 4B, Jebadiah, and has the lowest hosted latency. Julia-1, the smallest and fastest of all (12 ms), scored at coin-flip level: fresh out of the factory, it’s a no-go. Jump to the full table, the cost in support emails, which model for which situation, how hard it is to run the best open ones locally or the gotchas.
How I tested
The central idea was to measure more than “who gets the most right.” A decision model has a design goal, and comparing a 322-million-parameter encoder made to run on weak devices with a hosted service of undisclosed size on accuracy percentage alone is unfair to both. So I measured accuracy, latency, cost and behavior under stress, and at the end I split the recommendations by situation.
The two case sets
I built two test sets, frozen in git before any inference, with the dataset hash recorded alongside the responses. No model receives the expected answer, the justification or the case identifier. Only the text, the instructions and the options.
The v1 set has 13 operational use cases, in English, each with an explicit fictional policy:
- support ticket severity
- support routing
- refund policy
- incident escalation
- tool approval (whether an agent may or may not execute a given action)
- email fraud
- document type
- evidence support
- search relevance
- moderation
- order routing
- lead qualification
- numeric-threshold triage
There are 10 scenarios per use case, each presented four ways: original, options in reversed order, options with opaque names (c0, c1, c2) and original plus a “reviewer” comment suggesting the wrong answer, which the instructions say to ignore. That’s 520 classifications per model. Add 24 probability probes in situations with no information at all (fair coin, six-sided die), where the right answer is mathematical.
The v2 set was made to cover what v1 leaves out: common semantics and Portuguese. There are 7 tasks, with 12 scenarios each, and every scenario written in English and in Brazilian Portuguese with the same answer and the same option order:
- sentiment (author versus quotation, negation, sarcasm)
- current intent (withdrawn request, competing actions, hypothesis)
- logical implication (quantifiers, absent fact, temporal order)
- search relevance (all, part or none of what was asked)
- sensitive data handling (fictional secret versus mention, redaction, revocation)
- current incident status (timeline order, verified versus unverified)
- threshold policy (inclusive bounds, units, AND/OR with a missing value)
Each pair runs under three conditions:
- compact: just the record and the rule
- with examples: one solved example per class, fixed and the same for everyone
- with distractors: ten irrelevant archive notes before the record that matters, to stress the context
That’s 504 classifications per model.
The cases were written with AI help and reviewed against the policies, without independent human annotation. It’s a small, synthetic benchmark: 130 scenario families in v1 and 84 in v2. The variants are correlated, so 520 responses are 130 scenarios seen four ways. Treat the numbers as a snapshot of these cases, and test with your own before deciding.
The 23 competitors
Five ran in the cloud, through the official API: Jev (version 1.13.0, from TypeSafe), Clef (27B, Cloudflare Workers AI), Clef-flash (9B, same), OpenAI Decisions (the gpt-6-luna alias, in public beta) and Microsoft Decision-1 (9B, post-trained from Qwen3.5-9B, served via OpenRouter on Azure). The other eighteen ran on the Strix Halo, via ROCm, with weights pinned by Hugging Face commit hash, inside a Docker container. The first three (Laya, Laya typed and Clef-flash) shared one container; the rest ran one at a time, with Julia-1 measured twice, on GPU and on CPU. The server has 64 GiB of GPU-addressable memory.
| Model | Nominal size | Origin | Where it ran |
|---|---|---|---|
| Jev 1.13.0 | undisclosed | TypeSafe, proprietary | API |
OpenAI Decisions (gpt-6-luna) | undisclosed | OpenAI, proprietary, beta | API |
| Microsoft Decision-1 | 9B | Microsoft, proprietary | API (OpenRouter) |
| Clef | 27B | Cloudflare, open weights | API |
| Clef-flash | 9B | Cloudflare, open weights | API and local |
| Perplexity Decider 1.1 27B | 27B | Perplexity, Apache 2.0 | local |
| Decision 3.0 (d3) | 27B | vLLM Semantic Router, Apache 2.0 | local |
| Decision 3.0 Edge | 0.6B | vLLM Semantic Router, Apache 2.0 | local |
| Jebadiah 4B v2 | 4B | Frontier Infra, Apache 2.0 | local |
| Kev 0.8B / 4B / 9B | 0.8B / 4B / 9B | Jared Palmer, Apache 2.0 | local |
| Mapika Decider 4B | 4.2B | Mapika, Apache 2.0 | local |
| Eikos 4B | 4B | Caio Vicentino, MIT, trained on EN and PT | local |
| Simple-Jev + Qwen3.5 4B | 4B | Featherless, token-reading server over a stock model | local |
| Laya / Laya typed-decisions | 421M | Convai Innovations, ModernBERT encoder | local |
| Laya multilingual | 322M | Convai Innovations, mmBERT encoder | local |
| Julia-1 | 144M | Supersonic Labs, Apache 2.0, mmBERT encoder | local, GPU and CPU |
| GLiNER2.5-Decide / multi-Decide | 340M / 287M | Fastino, Apache 2.0 | local |
The order up there is just organizational, hosted first and local ones by family. The real ranking is in the results table.
Everyone received exactly the same text, the same instructions and the same options, with no per-model prompt tuning and no adjustments after seeing results (Simple-Jev uses its own server’s fixed prompt policy). The exception is GLiNER, whose native API takes labels instead of probability distributions. It runs on a separate track, v2 only, with explicit mapping and no made-up calibration metrics.
Simple-Jev deserves an explanation. It’s a server that takes a stock LLM (here Qwen3.5 4B, with no decision training at all) and reads the probability of the answer tokens instead of generating text. It’s the baseline: if a “decision” model loses to this, the specialized training bought nothing.
Two protocol notes. OpenAI Decisions answers through a native typed-decisions endpoint, and the alias the API returned is not an immutable snapshot: OpenAI can swap the weights behind the name, like Cloudflare does with Clef-flash. And Perplexity Decider is not a stock chat LLM: it has a separate decision head, with non-causal attention and a calibration temperature saved in the weights. A generic chat server does not reproduce its behavior. Microsoft Decision-1 speaks native SystemOne through OpenRouter’s decisions API, and the served identifier is dated (microsoft-decision-1-20261009), so it’s not an immutable weight either. It doesn’t show up in OpenRouter’s text-model catalog: to find it, you have to filter by the decisions modality. Decision 3.0 is the new family from the vLLM Semantic Router project, Apache 2.0, derived from Qwen, with six checkpoints (d3, flash, mini, nano, lite, edge) and native SystemOne. I tested the flagship (d3) and the smallest (d3-edge); the four in between are for another round.
What was measured
- Accuracy per task, per language and per condition, always on top of the per-option probabilities the model returns, ignoring the vendor’s “confidence” field.
- Brier and ECE for calibration.
- Median and p95 latency as seen by the client, including the network: WAN for the hosted ones, LAN for the local ones. These are deployment observations, and comparing hardware would require another test.
- Input tokens reported by the API, priced at the October 10 price table, before any allowance.
- Bootstrap confidence intervals over scenario families, instead of individual responses.
I left local cost unmeasured. Energy, hardware amortization and maintenance were left out, so local models show up as “not measured,” because “zero” would be a lie.
The full table
The main column is accuracy on the 168 compact v2 cases (84 in English, 84 in Portuguese). The v1 column uses the 130 original scenarios. Latency is the median seen by the client across the 504 v2 calls. Cost is the list price per 10 thousand compact decisions, computed from the tokens the API reported.
| Model | Compact EN / PT-BR | Compact combined | v1 originals | Median latency | 10 thousand decisions |
|---|---|---|---|---|---|
| Perplexity Decider 27B | 98.8% / 100.0% | 99.4% | 99.2% | 1,547 ms (LAN) | not measured |
| Decision 3.0 (27B) | 98.8% / 100.0% | 99.4% | 99.2% | 1,420 ms (LAN) | not measured |
| Jev | 97.6% / 97.6% | 97.6% | 96.2% | 255 ms (WAN) | US$ 0.19 |
| Microsoft Decision-1 | 95.2% / 100.0% | 97.6% | 95.4% | 422 ms (WAN) | US$ 0.065 |
| Clef (27B) | 97.6% / 94.0% | 95.8% | 94.6% | 302 ms (WAN) | US$ 0.63 |
| Jebadiah 4B v2 | 91.7% / 89.3% | 90.5% | 85.4% | 205 ms (LAN) | not measured |
| OpenAI Decisions | 90.5% / 90.5% | 90.5% | 93.1% | 222 ms (WAN) | US$ 0.23 |
| Kev 9B | 92.9% / 83.3% | 88.1% | 87.7% | 561 ms (LAN) | not measured |
| Clef-flash (9B) hosted | 91.7% / 83.3% | 87.5% | 90.8% | 394 ms (WAN) | US$ 0.10 |
| Clef-flash (9B) local | 89.3% / 85.7% | 87.5% | 90.8% | 618 ms (LAN) | not measured |
| Mapika Decider 4B | 89.3% / 85.7% | 87.5% | 86.9% | 186 ms (LAN) | not measured |
| Kev 4B | 88.1% / 86.9% | 87.5% | 82.3% | 246 ms (LAN) | not measured |
| Eikos 4B | 85.7% / 79.8% | 82.7% | 87.7% | 235 ms (LAN) | not measured |
| Simple-Jev + Qwen3.5 4B | 77.4% / 71.4% | 74.4% | 85.4% | 1,349 ms (LAN) | not measured |
| Kev 0.8B | 64.3% / 61.9% | 63.1% | 63.1% | 86 ms (LAN) | not measured |
| Decision 3.0 Edge (0.6B) | 67.9% / 53.6% | 60.7% | 65.4% | 45 ms (LAN) | not measured |
| GLiNER2.5-Decide (EN) | 54.8% / 50.0% | 52.4% | didn’t run | 208 ms (LAN) | not measured |
| Laya typed-decisions | 50.0% / 35.7% | 42.9% | 43.8% | 43 ms (LAN) | not measured |
| Laya (EN) | 44.0% / 41.7% | 42.9% | 43.8% | 41 ms (LAN) | not measured |
| Laya multilingual | 35.7% / 38.1% | 36.9% | 43.8% | 19 ms (LAN) | not measured |
| GLiNER2.5-multi-Decide | 32.1% / 35.7% | 33.9% | didn’t run | 63 ms (LAN) | not measured |
| Julia-1 (GPU) | 38.1% / 25.0% | 31.5% | 38.5% | 12 ms (LAN) | not measured |
| Julia-1 (CPU) | 38.1% / 25.0% | 31.5% | 36.9% | 71 ms (LAN) | not measured |
To calibrate your reading: the tasks have three or four options, so a uniform guess gives about 31% on both sets. “Near 50%” here is already well above the coin, and “near 33%” is the coin. Julia-1 landed at 31.5%: the pretty name hides a guy flipping a coin.
The intervals matter. Perplexity’s edge over Jev on v2 is under 2 points and the bootstrap interval touches zero: it’s the measured lead on this set, not a proven superiority forever. And Decision 3.0 tied Perplexity at the limit of what this set can distinguish: identical labels on the 1,024 classifications, with both missing the same two cases (the English relevance one on v2 and the disputed severity case on v1, already in the errata). Microsoft tied Jev on the aggregate, with the interval centered on zero, but an aggregate tie is not interchangeability: they miss different cases, and Microsoft inverts the language pattern, missing more in English than in Portuguese. Jev and Clef also remain under 2 points apart, on the same tier. The 90% squad (Jebadiah, OpenAI) sits 7 points behind Jev, and from there down every difference is clear.
Each task cell has only 12 scenarios per language, so one more correct answer moves the cell by more than 8 points. A tie on a specific task is a lead for a pilot. The per-task tables are in the repository.
How much it costs, in support emails
Price per million tokens is a number nobody can feel. List prices on October 11 are US$ 0.042 per million input tokens on Jev, US$ 0.24 on Clef, US$ 0.038 on Clef-flash and US$ 0.10 on OpenAI Decisions. Output is free on all five. Microsoft Decision-1 charges the same US$ 0.042 as Jev per million, via OpenRouter, but reported a third of the input tokens for the same texts (about 26 thousand versus Jev’s 77 thousand on compact v2), and nobody can explain the tokenization difference. In measured practice, that makes it the cheapest hosted one of the bunch.
Clef-flash cost US$ 0.09 on the 9th: Cloudflare cut the price by more than half in the middle of my test. Jev reports considerably more tokens than Cloudflare for the same text, about 45% more on v2, and that’s already in the math below.
Imagine an operation with 10 thousand support emails per month to classify into three or four buckets, with short texts similar to my cases:
| Model | 10k emails / month | 1 million emails | Expected errors in 10k (by compact accuracy) |
|---|---|---|---|
| Microsoft Decision-1 | US$ 0.065 | US$ 6.45 (about R$ 32) | ~240 |
| Clef-flash | US$ 0.10 | US$ 10 (about R$ 50) | ~1,250 |
| Jev | US$ 0.19 | US$ 19 (about R$ 95) | ~240 |
| OpenAI Decisions | US$ 0.23 | US$ 23 (about R$ 115) | ~950 |
| Clef | US$ 0.63 | US$ 63 (about R$ 315) | ~420 |
In reais, at Friday’s exchange rate (R$ 4.99), 10 thousand decisions on Jev cost one real. A million costs less than a hundred reais. For any company with a million emails to classify, that vanishes into the budget.
One caveat about proportions: my cases are short, about 450 tokens per compact case by Jev’s count. A real customer email, with quoted thread history, can be three to five times larger, and cost scales linearly with that. Even so, we’re talking cents per thousand.
What this math shows is that the price difference between the hosted models is irrelevant next to the cost of being wrong. Jev costs 9 US cents more than Clef-flash per 10 thousand decisions, and in those same 10 thousand it makes about a thousand fewer errors. If a misrouted email costs more than a hundredth of a US cent in human rework, Jev pays for itself. This math assumes every error costs the same, which is never true: sending a critical ticket to the routine queue costs far more than the reverse.
Cloudflare’s allowance changes the math for small players. It’s 10 thousand “neurons” per day, shared by the whole account, resetting at midnight UTC. With my input sizes, that’s about 1,500 full-Clef classifications per day or almost 10 thousand Clef-flash ones, free. If you have 1,000 emails a day and nothing else running on the account, Clef comes out at zero cost with top-tier quality.
And local? Energy is what the benchmark didn’t measure. From what I see on my Strix Halo, the whole machine stays under 100 W under load. With Jebadiah at 200 ms per decision, 10 thousand decisions are about 35 machine minutes, under 0.1 kWh, a few cents of a real on the power bill.
The real local cost is the machine, your hours configuring ROCm and containers, and keeping it all standing. Whoever already has the hardware for another reason has low marginal cost. Whoever would buy the machine just for this is buying a problem of thousands of reais to save about a hundred reais per million.
Which model for which situation
You want accuracy and want to operate nothing: Jev
In the cloud, Jev is still the name. It won or tied practically every cell among the hosted ones, and only Microsoft tied it on the aggregate. In English it was 100% on five of the seven v2 tasks, and in Portuguese it repeated 97.6% on the aggregate without losing anything in translation, something no other model above the coin managed. On v1 it kept its 96.2% on the original with the malicious “reviewer” comment injected; Clef even gained one case, and Kev 4B also stayed put, just at a much lower tier. The 255 ms WAN latency came in 30 ms behind OpenAI’s, and it costs 19 US cents per 10 thousand decisions.
The trade-off is the one I already discussed in the previous post: it’s proprietary, hosted, of undisclosed size, and you depend on TypeSafe keeping the behavior underneath you. And it makes mistakes. It treated an invoice ID called “PASSWORD-523” as a usable credential, even with the record explicitly saying it doesn’t authenticate anyone.
You want Jev’s level paying a third: Microsoft Decision-1
Microsoft entered this market quietly, and entered well. Decision-1 is a 9B post-trained from Qwen3.5-9B, served via OpenRouter, and it was the first model to tie Jev on the compact aggregate: 97.6%, with the bootstrap interval centered on zero. The detail that won me over: 100% in Portuguese, better than its own English (95%), inverting the pattern of the entire rest of the bunch. On v1, the reversed-order and malicious-comment variants didn’t take down a single answer, and it got the critical ticket that Clef and OpenAI missed.
And it’s the cheapest hosted one I measured: US$ 0.065 per 10 thousand decisions, a third of Jev, charging the same per-token rate but reporting a third of the tokens. The savings come from the token count, and I can’t explain the exact mechanism, so treat it as a measurement, not a promise.
The weak spots exist. Latency is the worst among the hosted ones (422 ms median, versus Jev’s 255). On the compact cases it’s clean of confident errors, but add context and Portuguese errors show up with 99.5% confidence: the “perfect Portuguese” pattern doesn’t survive long text. And on the probability probes it’s weak, giving 87% to a fair coin. Microsoft advertises calibrated probabilities; my probes disagree. And like every dated-ID hosted model, the weight behind it can change without notice.
For a Portuguese-language operation that wants Jev quality while paying less, it’s the first candidate to run in your pilot.
You want the same level with open weights: Clef
The full 27B Clef tied with Jev in English (82 of 84) and finished 3 cases behind in Portuguese. It beat Jev on sensitive data handling in English (12 of 12 versus 11). It’s an open-weights model, so you can run it locally with about 54 GB of memory just for the weights in BF16, which I didn’t test: the full Clef ran only through the API. Among the open ones, it lost the crown to Perplexity, which scored higher with smaller weights.
Through the API it’s the most expensive of the five hosted ones, three times Jev, with no quality gain to justify it. The exception is the daily allowance: for small volume, it’s the best classifier you can get for free.
You want the cheapest in the cloud: Clef-flash
At US$ 0.038 per million, Clef-flash is the lowest price in the hosted market and covers 9,400 decisions per day within the allowance. Quality drops: 92% in English and 83% in Portuguese on the compact cases, the biggest language drop among the hosted ones, with an interval entirely below zero. On sentiment in both languages, and on incident status in English, it tied with Jev. On intent and sensitive data in Portuguese, it lost badly.
For sentiment tasks in either language, or for English classification where 1 error in 12 is acceptable, it does well. For Portuguese, measure first.
You already live in the OpenAI ecosystem: OpenAI Decisions
OpenAI’s debut in this market landed mid-table: 90.5% combined, an exact tie with Jebadiah, with the lowest hosted latency I measured (222 ms) and the same accuracy in both languages. It costs US$ 0.23 per 10 thousand decisions, between Jev and Clef. If your operation already speaks the OpenAI API and 9 out of 10 accuracy is enough, integration is trivial: a native decisions endpoint, no prompt at all.
The weak spots are revealing. Its worst cell was precisely numeric-threshold policy (8 of 12 in English, 7 in Portuguese): it treated “at least 10” as satisfied by a range of 8 to 12 and failed the AND/OR short-circuit. The calibration is schizophrenic: on the predicate probes (yes/no) it was the most accurate of the bunch, with near-zero average error, and on the choice probes it returned 94%/6% on a fair coin. And on the v1 variants it flipped 2 correct answers in each presentation (reversed order, opaque label, malicious comment), something only Perplexity didn’t do: Jev kept its aggregate accuracy, but also flipped some correct answers along the way. Oh, and the gpt-6-luna alias is not an immutable snapshot: reproducibility requires saving the responses.
You want the best open model, period: Perplexity Decider 27B
Perplexity Decider 1.1 27B is the surprise of the benchmark. It led the table with 99.4% on the compact cases, was the only one that didn’t lose a single task cell to Jev (3 wins, 11 ties), and hit 100% in Portuguese under all three conditions: compact, with examples, with distractors. Calibration is also the best measured, with a Brier of 0.012, and coverage is absurd: it answered with confidence above 0.9 on 96% of cases and got zero of them wrong. On v1, it didn’t flip a single answer across the order, opaque-label and malicious-comment variants.
Its only 3 errors on v2 were the same case in different clothing (it confused “notification sent to managers” with “mandatory approver”), and it made them with confidence below 0.9: the known error comes flagged. The weak spot is event-probability probes: asked about an event with a 1-in-4 chance, it answered 0.73. Strong classification does not imply reliable event probability.
The cost is hardware: about 49 GB of weights in BF16, a second and a half per decision on my Strix Halo (with ROCm’s reference kernels, no flash-attention; on a good NVIDIA it should be much faster, but that I didn’t measure). It’s Apache 2.0, public weights with no gate. If you have the machine and want the top of the table at home, this is the one.
You want the other open-weights top: Decision 3.0 (and beware the Edge)
Decision 3.0, released two days ago by the vLLM Semantic Router project, is the second model to sit at the top: 99.4% on the compact cases, 100% in Portuguese, and a tie with Perplexity so absolute that the two gave exactly the same labels on the 1,024 classifications, including the same two misses (the English relevance one, at confidence below 0.9, and the disputed severity case that already lives in the errata). It also cleared the v1 traps without flipping a single answer, got both indisputable critical tickets right, and its calibration is in the same class as Perplexity’s (Brier 0.014, 94% coverage above 0.9 with zero errors).
In other words: the open top now has two independent recipes that converge. For your pilot, either one works; run both if you can, because the probabilities differ even when the labels don’t. Latency is in the same family as Perplexity (1.4 s on my machine, same ROCm diet), and the weights take the same ~49 GB.
The little brother is another story. Decision 3.0 Edge (0.6B) answers in 45 ms and fits in 1.3 GB of GPU, but scored only 61% on compact, plummets 14 points in Portuguese, and worse: of the 68 guesses it gave with confidence above 0.9, 14 were wrong. As a confidence-threshold router, out of the factory, it’s a trap from the same class as Julia. The four middle checkpoints (flash, mini, nano, lite) I haven’t tested yet; they’re the ones that will tell whether the family has a sweet spot between the two extremes.
You need to run locally, with quality: Jebadiah 4B v2
Of the local ones, Jebadiah 4B v2 had the best compact accuracy, 90% combined, answering in about 200 ms. It tied with Jev on six of the fourteen task cells, including intent, implication and status in English and intent in Portuguese. The weak spot is numeric-threshold policy, 9 of 12 in both languages, and it loses ground when the context fills with distractors (76% in Portuguese under that condition, versus 82% for Mapika).
Mapika Decider 4B (the fastest of the 4Bs) and Kev 4B are right behind, both around 87%, and the 3-point difference between the three fits inside the error interval. They’re three different training recipes on top of 4B backbones, with errors on different tasks. The choice between them depends on your task, and I’d run all three in a pilot.
You will send examples in the prompt: Kev 9B
Kev 9B has a curious profile. On the compact cases it ties with Kev 4B, half a point apart with the interval crossing zero, meaning more than double the parameters bought nothing. With one solved example per class, it opens almost 10 points over the 4B, and with distractors it holds 7 more points. Brier also improves by about 25%: the probability it returns is better calibrated.
If your use is just the rule and the text, the 4B is enough and is more than twice as fast. If you’re going to send examples or long context, the 9B is worth the memory. The warning is Portuguese: 83% compact in PT-BR, almost 10 points below its own English, the biggest language drop among the models above 80%. Only Laya typed (14 points) and Julia (13) drop more.
You want Clef-flash behavior on your machine: local Clef-flash
On the v1 set, local Clef-flash reproduced the hosted one’s 520 classifications, hit for hit and miss for miss. On v2 the story changed: same total (439 of 504), but 19 different labels, with swapped strengths (the local one gets more Portuguese intent right, the hosted one gets more relevance right). Among the local ones it’s still the best on the v1 operational-policy set (90.8%), ahead of every 4B.
The gotcha is latency: 618 ms median on the Strix Halo, three times Jebadiah, for the same v2 accuracy. If you pick it, it’s for the known behavior.
You need to run offline on weak hardware: Laya and Julia, with many caveats
Laya multilingual was the worst in the benchmark for accuracy (37% combined, near the coin), and the fastest by far among the ones that get anything right: 19 ms median, more than ten times faster than Jebadiah.
The three Laya checkpoints have between 322 and 421 million parameters, fit in under 1 GB of BF16 weights by parameter math, and the project documents CPU execution and an ONNX runtime (which I didn’t measure). PyTorch’s peak GPU allocation for the multilingual one stayed under 2 GB. A 4B needs about 8 GB just for weights at the same precision.
Julia-1 goes one step lower: 144 million parameters, 550 MB of weights, 12 ms median on GPU and 71 ms on a 4-thread CPU. It’s the fastest model I’ve ever measured here, and also the worst: 31.5% accuracy, glued to the 31% coin-flip line. In Portuguese it answered “cancellation” on all 12 intent scenarios, including the ones asking for a refund or access (the vendor’s Portuguese evaluation was done in pt-PT, and it shows). The bigger disaster is confidence: of the 71 guesses it gave above 0.9, 48 were wrong. A confidence threshold won’t save this model, because it’s exactly on the confident guesses that it errs.
That’s a design choice. Laya and Julia were made to be small encoders, fine-tunable on your task, to run at the edge. What I tested were the factory checkpoints, with no tuning, applying rules they had never seen, on broad tasks. In that scenario they did badly, period.
One detail confirms the fragility. On v1, when the reviewer’s malicious comment comes in, Laya drops from 44% to 19% and typed-decisions to 15%. It obeys the comment the instructions say to ignore, and confidently: 17 of the 28 guesses above 0.9 were wrong. Julia failed all 5 policy-counterfactual pairs: change the rule, it keeps the answer.
If you want what Jev delivers, factory Laya and Julia are very far from it, and no small model (GLiNER included) came close. If your problem is “I need to classify short text into three buckets, on a device with no internet and no GPU, and I have a thousand labeled examples to fine-tune on,” these two are the only ones on the list that fit. Fine-tuning is the part I didn’t test. It’s another question, and it needs another benchmark.
The baseline: Simple-Jev with a stock Qwen
Simple-Jev reading tokens from Qwen3.5 4B, with no decision training at all, scored 74% on compact v2. That’s the yardstick for “how much specialized training buys”: Jebadiah, Mapika and Kev, all on similarly sized backbones, came in 13 to 16 points above. The training buys a lot.
The curious part is that on v1 Simple-Jev tied with Jebadiah (111 of 130 originals) and got both unambiguous critical tickets right, which several better models missed. It’s also the slowest of the bunch, almost a second and a half per decision, because it’s running a whole LLM.
How hard it is to run the best open models on your machine
All these models speak the same HTTP protocol, called SystemOne, which Jev popularized: you send a state (the text), one or more closed-answer questions, and get back the chosen option and the probability of each. Swapping models is swapping the port. OpenAI Decisions breaks from the pattern with its own native endpoint, but the idea is the same. What changes is how much work it takes to get each one standing, and there the difference between them is big.
OpenAI: just an API key
The easiest of all: create the key, load credit and call the endpoint. The benchmark’s 1,048 requests ran in 4 minutes, without a single retry. The only hiccup was the first probe returning “balance exhausted” until I put US$ 20 in the account.
Microsoft Decision-1 is almost as simple: if you already have an OpenRouter account, it’s point at the model and call the decisions endpoint. No GPU, no Azure subscription, no installation. In my test, 10 of the 504 v2 calls took a 429 and passed on retry, so plan for retries.
Kev and Jebadiah: one pip and one command
Kev is the simplest of the 4B crowd. The project installs straight from GitHub and brings up a server with one command, downloading the LoRA adapter and the decision head on top of base Qwen3.5:
pip install "kev @ https://github.com/jaredpalmer/kev/archive/fc4a17e194bca35a48c57211392ec49ea54a94ac.tar.gz"
python -m kev.serve --run jaredpalmer/kev-4b --host 0.0.0.0 --port 8000 --device cudaJebadiah follows the same pattern, with the server package inside its own repository:
pip install "jebadiah-server @ https://github.com/getainode/jebadiah/archive/e9793abc66d1a7c5ad878d51eda656f1e9c5b9f5.tar.gz#subdirectory=server"
jebadiah-serve --model frontier-infra/jebadiah-4b-v2 --host 0.0.0.0 --port 8000With either one up, a decision is a POST:
curl -s http://localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
"model": "kev-4b",
"state": "Cliente diz que foi cobrado duas vezes e pede o estorno da segunda cobrança.",
"questions": {
"fila": {
"type": "choice",
"instructions": "Escolha a fila correta pela política de suporte.",
"criteria": {
"financeiro": "Cobrança, estorno, nota fiscal.",
"tecnico": "Erro, bug, indisponibilidade.",
"vendas": "Upgrade, plano novo, orçamento."
}
}
}
}'The response carries the option and the probability distribution, and that’s where you apply your threshold, log and decide whether to send it for human review. On an NVIDIA with CUDA and 16 GB of VRAM, a 4B in BF16 comes up without drama. The weights are about 8 GB.
Laya and Julia: smaller still
Laya is a Python package with an encoder inside. It installs with pip install laya and the project documents CPU execution, which is its whole point. The version pinned on my server was 0.4.1, and the multilingual one’s peak GPU memory stayed under 2 GB. To run on a GPU-less laptop or a small container, it’s the only one on the list that fits, no discussion.
Julia-1 is similar in spirit: its own Python runtime, one predict(state=..., questions=...) call and done, no standard Transformers pipeline. I ran the same container on GPU and on CPU, and both gave the same accuracy with the same responses in 97% of cases. On a 4-thread CPU it answers in 71 ms, which for an edge classifier is great. The problem is still that it scores at coin-flip level.
Where it gets complicated: AMD, ROCm and the rest
In my case the hardware is AMD, and then “one command” turns into a day of work. The points that cost me time, to save you yours:
- None of these projects test on ROCm. Kev had a gfx1151-specific segfault caused by CUDA graphs (issue 170), fixed only after the 1.0 tag, so the pinned version is a main-branch commit and the official tag crashes.
- The flash-linear-attention Triton kernels Qwen3.5 uses in the DeltaNet layers have no tested support on gfx1151. Everything ran on the pure-PyTorch path, slower than the latency published on CUDA. Jebadiah’s 200 ms in the table is with that handbrake pulled.
- Mapika Decider forces CUDA graphs when it sees the “cuda” device, which on ROCm is also called “cuda.” I had to turn it off by hand.
- You need to export
HSA_OVERRIDE_GFX_VERSION=11.5.1andPYTORCH_ROCM_ARCH=gfx1151and use a base image with ROCm torch already validated. Any randompip install torchoverwrites it with the CUDA build and breaks everything. In my Dockerfile every package is installed with--no-depsand the build fails if torch stops being the ROCm one. - One model per container, one container at a time. The Strix Halo has memory shared between CPU and GPU, and three resident 4B models plus the Ollama that already runs there exhaust the 64 GiB the GPU can see.
- Perplexity Decider was the most annoying of all. The release expects a specific CUDA torch (I swapped in the ROCm 7 torch 2.9), the flash-linear-attention kernels don’t exist for it (I ran on PyTorch’s reference kernels, slower), and the default loader blew past the host’s 24 GiB RAM limit: I needed a custom loader that sends the 49 GiB of weights straight to the GPU. The model card still said “private” when I started, but the Hugging Face API confirmed it was public and gate-free, and the shards downloaded anonymously. The d3, at the same size, inherited the same treatment. The d3-edge, luckily, comes up with the standard Transformers loader and 1.3 GB of GPU.
None of this is impossible, and it’s all documented, with Dockerfiles, compose and the hashes of each checkpoint, in the repository’s setup guide. But it’s a real cost that the “local is free” spreadsheet never includes. If your machine is NVIDIA, most of this list disappears.
The full 27B Clef I didn’t even try locally: it’s about 54 GB of weights in BF16 before any activation. Perplexity, at 49 GB, proved a 27B runs on the Strix Halo, at the cost of a second and a half per decision with the reference kernels. The 9B Clef-flash runs, with about 18 GB of weights. The 4Bs are the sweet spot for consumer hardware.
Highlights and gotchas
Laya truncated all long Portuguese. Under the distractor condition, base Laya reported truncation on all 84 Portuguese calls, discarding almost 31 thousand state tokens, and on none of the 84 English ones. The English checkpoint’s default context limit is only 512 tokens (the multilingual and typed ones use 1,024, configurable up to 8,192), and Portuguese tokenizes heavier. The other models don’t even expose truncation telemetry, so “zero truncation reported” on them means “I don’t know.”
Portuguese costs more tokens. For the same 84 case pairs, Jev reported about 14% more input tokens in Portuguese than in English, and both Clefs about 15% more. If you budget a bilingual operation by the English average, you’ll come in low.
Does an example in the prompt save a weak model? It saves nothing. One solved example per class left Laya the same or worse; several of its aggregates dropped. It helped Kev 9B (plus 4 points) and Clef in Portuguese (plus 3.6 points, reaching Jev’s level), and almost nothing on Jev, one more case in Portuguese. Validate examples on real traffic before assuming they help.
Size correlates, and explains little. Among the 19 competitors of known size, the Spearman correlation between parameters and compact accuracy was 0.96. The Kev series is more informative: 63% at 0.8B, 87% at 4B, 88% at 9B. The big jump is from 0.8B to 4B, about 24 points, with an interval between 16 and 33. From 4B to 9B the compact difference crosses zero, and several nominal 4Bs, with similar backbones, gave very different results. In the d3 family, the flagship and the Edge sit almost 40 points apart under the same release, while a 9B, Microsoft, ties at the top of the hosted ones. Size helps up to 4B; past that, the training recipe rules.
The 27B Clef missed a critical ticket that two of the Layas got right. On v1, one severity scenario says continuous data loss in production is critical, regardless of how many customers it affects. The record describes confirmed permanent loss, from a single customer. Jev, Clef-flash, Perplexity, d3, Microsoft, Laya typed, Simple-Jev and Laya multilingual answered “critical.” Full Clef, OpenAI, base Laya, Eikos, Jebadiah, Mapika, Kev 4B and Kev 9B answered “degraded.”
It’s a single case, and an error rate would require many more. But it shows that the average hides exactly the error that costs the most. When the impact facts are structured, the severity rule belongs in code, and the model comes in only to extract the facts from free text.
Hosted and local diverge over time. Local Clef-flash reproduced the hosted one on v1’s 520 classifications and diverged on 19 of v2’s 504. Cloudflare keeps the weights version behind the hosted alias undisclosed. If reproducibility matters, pin the local hash.
High confidence and safety are different things. On compact v2, Jev, Clef, both Clef-flashes, Eikos, Jebadiah, OpenAI, Microsoft, Perplexity and d3 got zero guesses above 0.9 wrong. Perplexity is the extreme case: it answered at that level on 96% of cases without missing one, with d3 right behind (94%, zero errors). Microsoft covered 95% and OpenAI only half. Microsoft’s caveat: the clean record is only on compact, because with examples or distractors it misses in Portuguese with confidence above 99%. Mapika missed 5% of the guesses at that level, Kev 4B 3% and Simple-Jev 14%. And the two smallest of the bunch broke the pattern violently: Julia missed 48 of 71 guesses above 0.9, and d3-edge missed 14 of 68. Coverage varied too: Jev answered above 0.9 on almost 90% of cases, Clef on almost 80%, Clef-flash on 40% and base Laya on 2 of 168. On v1 Jev missed 1% of the guesses above 0.9 and base Laya missed 61%. A confidence threshold only works after being validated on your distribution, and Laya typed’s low ECE in Portuguese left it at the same 36% accuracy.
Perplexity didn’t fall for presentation traps. Across the three v1 variants (reversed options, opaque labels, malicious comment), it kept the same answers as the original, without flipping a single one. The d3 repeated the feat, zero flips too. Microsoft only stumbled on the opaque labels (2 flips, one in each direction); order and comment didn’t move it. OpenAI flipped 2 in each variant, and Laya collapsed to 19% under the comment. The price of that robustness is latency: a second and a half per decision on my machine, the worst median of the bunch.
Numeric thresholds are a code problem. The threshold-triage task, with clear numbers and an explicit rule, gave 100% on Jev and both Clef-flashes and under 30% on both Layas in English. An if solves that with 100% and zero latency. The model only comes in when the number is buried in free text, and even then the right thing is to extract the number and leave the comparison to code.
Lottery probability is another skill. On the 24 no-information probes (coin, die), Jev had the worst choice error among options. The numeric-estimate crown changed hands with OpenAI’s debut: its yes/no predicate missed almost nothing, while the choice probe returned 94% for heads on a fair coin. Perplexity, champion of everything else, answered 0.73 for an event with a 1-in-4 chance, and Microsoft went the same way, giving 87% to the coin. Laya typed had the second-best choice error, behind only Kev 9B and neck-and-neck with Clef, and still classified badly. It’s the “student who marks answer A” from Paulo’s essay, now measured: calibration on lotteries and accuracy on classification are independent measures.
Where the data converges
The overall top is open-weights, and now there are two. Perplexity Decider 27B and Decision 3.0 tied at 99.4% on the compact cases, with 100% in Portuguese and identical labels on the 1,024 classifications, both with Apache 2.0 weights running on my machine. Their edge over Jev is under 2 points and the interval touches zero, so treat it as a snapshot of this set. Their cost is hardware and latency, not API. In the cloud, the evaluation order changed: start with Microsoft Decision-1, which ties Jev on the aggregate, closes 100% in compact Portuguese and costs a third. Jev comes next, faster and with different errors, because an aggregate tie is not interchangeability. OpenAI Decisions landed halfway in price and accuracy.
Running locally became viable at 4B. Jebadiah, Mapika and Kev 4B deliver between 87 and 90% on the compact cases with 200 ms latency on a desktop machine, and in a pilot with your task any of the three can win. If your machine handles 49 GB of weights, Perplexity delivers the top of the table at home. The financial math justifies using the machine that already exists, for data control or because of an obligation to stay offline. Buying a machine for this it stops justifying.
Small models are another category. Judging Laya and Julia by the accuracy column is reading the table wrong. They get half or more wrong out of the factory, fall hard under a malicious comment, and together with the d3-edge they’re the only ones on the list that fit on a weak device and answer in tens of milliseconds. The Edge is the best of the three on accuracy (61%), but it plummets in Portuguese and gets one in five confident guesses wrong. If Jev-like accuracy is a requirement, cross all three off. If running offline on small hardware is a requirement, cross everything else off and start with fine-tuning them on your task, which is the missing measurement. And be careful with Julia and the Edge in particular: 48 errors in 71 and 14 in 68 confident guesses are the portrait of models that don’t know what they don’t know.
Portuguese costs about 14% more tokens and drops the models in the middle of the table by 1 to 10 points, with Kev 9B and Clef-flash in the worst case. Jev loses nothing, OpenAI ties both languages, and Perplexity, d3 and Microsoft close 100% in compact Portuguese, better than their own English, although Microsoft goes back to missing in Portuguese when the context grows. Julia goes the other way and plummets 13 points, and the Edge plummets 14. For a Brazilian audience, that’s the first column to look at, before price.
And what holds for everyone: none of these models replaces the rule that’s already in code. Numeric thresholds, severity policy with structured facts, tool permission, all of that stays in the
if. The model comes in to turn free text into structured fact. And the test that matters is yours, with your tickets, because each cell in this table has 12 scenarios and your operation has thousands.
The cases, each model’s raw responses, the scoring scripts and the guide to reproduce everything are in the benchmark repository. If you run it with your tickets and get a different ranking, tell me.