
Oct 22, 2026
October 14, 2026

At Parallel, we train a lot of our own classifiers. But for every classifier we train, there are use cases we can’t prioritize, because each classifier requires curating a labeled dataset, then iterating through rounds of training and evaluation. That's why we're excited about System One models: decision models that answer a yes/no or multiple-choice question about any input, with no training.
When we first evaluated Jev, [When we first evaluated Jev, ](/blog/testing-jev)TypeSafe’s decision model, its zero-shot performance impressed us. Since its release, we’ve seen an explosion of these Jev-like “decision” models, many claiming to meet or beat it on accuracy. We wanted to know whether open models have caught up, so we tested multiple trending decision models on real, human-labeled tasks from our production pipelines.
Here's what we found:
We tested three hosted models (Jev[Jev](https://typesafe.ai/blog/introducing-system-one-models-and-jev), OpenAI's Decisions API[OpenAI's Decisions API](https://developers.openai.com/api/docs/guides/decisions) and Liquid's d1[Liquid's d1](https://www.liquid.ai/blog/d1-decision-model)) and five open-weight models (pplx-decider-v1-27b[pplx-decider-v1-27b](https://huggingface.co/perplexity-ai/pplx-decider-v1-27b), Rune 26B-A4B[Rune 26B-A4B](https://huggingface.co/surogate/rune-26b-a4b-GGUF), Bespoke Nimble 9B[Bespoke Nimble 9B](https://ollama.com/library/nimble), Kev-4B[Kev-4B](https://huggingface.co/jaredpalmer/kev-4b) and GLiNER2.5-Decide[GLiNER2.5-Decide](https://fastino.ai/blog/gliner-2-5-decide-open-weight-decision-model)). Hosted models were called through their public APIs. Open-weight models used their public Hugging Face checkpoints, using each release's own inference code where one was provided. The exception is pplx-decider-v1-27b, which we called through Perplexity's API.
We used four decision tasks from our production pipelines:
The chart below shows how each model ranked on every one of the tasks. We also look closely at two specific tasks: reranking, where the models were most closely matched, and page change classification, where results diverged in favor of closed and larger open-source models.
Given a search query and a set of candidate results, a reranker orders the candidates so the most relevant results come first. To evaluate reranking, we asked each model a yes/no question per candidate result ("Is this **result** relevant to the **query**?"), sorted the candidates by each model’s probability of answering yes, and measured top-K overlap: the share of each model’s top K results that also appear in the human-labeled top K.
Most models land in a narrow band because our data set consists of representative ranking tasks, which often include obvious cases. The gaps, then, reflect truly “difficult” scenarios, where weaker models often fail. Jev (71.5), pplx-decider-v1 (70.7) and Liquid d1 (70.5) are effectively tied at the top. GLiNER, the smallest model of the bunch, trails far enough behind that it isn't competitive here. Our fine-tuned reranker scores 75.2, 3.8 percentage points above Jev, a gap well outside the margin of error.
That is why we still train specialized models for our most important decisions. This lets us achieve competitive results with smaller models, and, at high utilization, serve them at a fraction of Jev's cost. The cost is development: collecting labels, training, and serving dedicated models. For reranking, that investment is worth it for us. For the many use cases we haven't trained a model for, decision models let us test and ship new product features much faster.
When we re-crawl a page, we need to know whether its contents changed enough to warrant a full update of our index. This task is a magnet for edge cases: a job listing reordering two requirements may not qualify as a meaningful change, while a leaderboard shuffling its entries is extremely meaningful. Here we gave each model the old and new versions of a page, asked if the page changed in a meaningful way, and scored the answers with AUPRC, which measures how well the model's probability separates material changes from cosmetic ones across every threshold.
Unlike reranking, here we observe substantial divergence in model accuracy across models. Closed models and larger open source models perform better on this type of task. Before choosing a model on third-party benchmarks, consider testing it on a labeled sample of your own task.
Another benefit of decision models is that they can be flexibly prompted. A fine-tuned classifier is fixed by inference time. When it gets a category of question wrong, the only solution is more labels and another training run. A decision model, meanwhile, takes its instructions as input, so its behavior can be tuned.
We show here the impact of a simple prompt tuning experiment – a bare-bones version of the automatic prompt optimization that libraries like DSPy can perform, to demonstrate the benefits of this technique:
123456789101112prompt = starting_prompt
best = evaluate(model, prompt, calibration_set)
for _ in range(5):
misses = wrong_answers(model, prompt, calibration_set)
candidate = claude.rewrite(prompt, misses) # one new rule per kind of miss
score = evaluate(model, candidate, calibration_set)
if score > best:
prompt, best = candidate, score
final = evaluate(model, prompt, held_out_set) # scored once``` prompt = starting_promptbest = evaluate(model, prompt, calibration_set) for _ in range(5): misses = wrong_answers(model, prompt, calibration_set) candidate = claude.rewrite(prompt, misses) # one new rule per kind of miss score = evaluate(model, candidate, calibration_set) if score > best: prompt, best = candidate, score final = evaluate(model, prompt, held_out_set) # scored once ``` We tuned each model across 5 rounds on a small labeled calibration set (800 examples for page change), and scored the winning prompt once on a held-out set. Each rewrite turns a batch of mistakes into explicit rules, which works a little like adding few-shot examples to the prompt, compressed into instructions.
Prompt tuning improves these models cheaply: all that is required is a small labeled set and a few thousand model calls, and no training. The cost is a small increase in input token count. On page change, our hardest task, Nimble 9B, Rune 26B-A4B and OpenAI’s Decisions API each gained about 10 points.
It’s exciting that in a short time, we are seeing a thriving ecosystem of open and closed models in a category of models that did not exist as such until four weeks ago.
Accuracy isn’t everything, though, and we still find Jev a strong default for most use cases. Along with `pplx-decider-v1`, it was the most consistent model across all four production tasks when considering accuracy, and as a serverless API it avoids the complexity of self-hosting an open-weight model. Jev also had both the lowest and most consistent latency of the models we’ve tried, and with a generous rate limit and competitive cost, it’s hard to beat as a starting point. However, there are a number of use cases where we recommend considering other options:
Decision models are improving quickly, and we expect some of these results to change as new models are released. We’re excited about this category of model and will continue to follow new releases closely. If you have results from your own production tasks, let us know at @p0[@p0](https://x.com/p0?lang=en).
| Model | Checkpoint (pinned) | Inference code | Precision · GPU | Max tokens per question | Calibration |
|---|---|---|---|---|---|
| pplx-decider-v1-27b | Perplexity API | n/a (hosted) | n/a (hosted) | 8,192 | n/a |
| Rune 26B-A4B | michaelfeil/rune-26b-a4b @ d9507c3 (Baseten's mirror of Surogate's Rune v3 @ c6b360d) | Baseten's BEI engine (TensorRT-LLM), deployed by Baseten | BF16 · 2× H100 | Not set (supports up to 262k context) | Baseten default |
| Bespoke Nimble 9B | bespokelabs/Bespoke-Nimble-9B release v3-12026 (545864f; same weights as main @ bd792f4) | Release’s own inference.py | BF16 · 1× A10G | 8,192 | T=1 |
| Kev-4B | Kev 1.0 (v1.0) on Qwen/Qwen3.5-4B-Base (1001bb4), kev code @ 952ce9d | Kev’s own server, which batches concurrent requests | BF16 · 1× L4 | 8,192 | Checkpoint’s temperature (2.41) |
| GLiNER2.5-Decide | fastino/GLiNER2.5-Decide @ 5a7adf7 | gliner2 2.0.0 | FP32 · 1× A10G | 2,048 (middle of the input trimmed) | Softmax over labels, no temperature |

Oct 22, 2026

Oct 22, 2026

Oct 20, 2026

Oct 14, 2026

Oct 13, 2026

Sep 28, 2026

Sep 28, 2026

Sep 28, 2026

Sep 24, 2026

Sep 23, 2026

Sep 18, 2026

Sep 15, 2026

Sep 10, 2026

Aug 31, 2026

Aug 29, 2026

Aug 25, 2026

Aug 21, 2026

Aug 19, 2026

Aug 13, 2026

Jul 30, 2026

Jul 21, 2026

Jul 20, 2026

Jul 16, 2026

Jul 15, 2026

Jul 13, 2026

Jul 12, 2026

Jul 10, 2026

Jul 8, 2026

Jun 9, 2026

Jun 5, 2026

Jun 4, 2026

May 20, 2026

May 19, 2026

May 7, 2026

May 5, 2026

Apr 29, 2026

Apr 29, 2026

Apr 24, 2026

Apr 23, 2026

Apr 21, 2026

Apr 20, 2026

Apr 8, 2026

Apr 8, 2026

Apr 7, 2026

Mar 30, 2026

Mar 25, 2026

Mar 19, 2026

Mar 18, 2026

Mar 17, 2026

Mar 10, 2026

Mar 4, 2026

Mar 2, 2026

Feb 23, 2026

Feb 4, 2026

Jan 28, 2026

Jan 21, 2026

Jan 15, 2026

Jan 8, 2026

Dec 17, 2025

Dec 16, 2025

Dec 11, 2025

Dec 10, 2025

Nov 20, 2025

Nov 18, 2025

Nov 13, 2025

Nov 12, 2025

Nov 11, 2025

Nov 6, 2025

Nov 3, 2025

Oct 30, 2025

Oct 23, 2025

Oct 22, 2025

Oct 17, 2025

Oct 16, 2025

Oct 9, 2025

Oct 8, 2025

Oct 7, 2025

Oct 6, 2025

Sep 30, 2025

Sep 16, 2025

Sep 12, 2025

Sep 11, 2025

Sep 9, 2025

Sep 5, 2025

Aug 21, 2025

Aug 14, 2025

Aug 7, 2025

Aug 5, 2025

Aug 4, 2025

Jul 31, 2025

Jul 31, 2025

Jul 28, 2025

Jul 8, 2025

Jul 2, 2025

Jun 17, 2025

Jun 10, 2025

May 30, 2025

May 16, 2025

Apr 24, 2025