Real human-labeled data, reformatted into System One questions — with human label distributions wherever they exist.
22 configs · 166,054 rows · 22,773 test records · 4 calibration-gold configs · 46 models scored · v0.1.1
Code & engine · Findings · Leaderboard · Published models · Source rationale · Jev's API, verified · Other Jev evaluations

Every model on the same 22,773 test records. Down and to the right is better; the stars are open models fine-tuned on their own decision readout with a coherence penalty.
| What it measures | Typed decisions — choice, score, noul — returned as probabilities, scored against hard labels and against how humans actually split |
| Jev 1.13.0 (TypeSafe API) | 0.733 accuracy, ECE 0.113 — calibrated on crisp questions, over-confident where people disagree |
| Best open model | Qwen-AgentWorld-35B-A3B (3B active), readout fine-tuned + coherence: 0.770 accuracy, ECE 0.055, TVD to human labels 0.305, sure loss 0.030, one seed (Jev 0.733 / 0.113 / 0.432 / 0.081). Best at 9B: Qwen3.5-9B, 0.763 / 0.056 / 0.301 |
| Where Jev still leads | the six held-out sources (0.835, against 0.828 for our best open model and 0.840 for Perplexity's hosted pplx-decider-v1-27b), and applying a rule stated in the question (0.924 vs 0.80) |
Contents — Quick start · The data · Why coherence · Leaderboard · Highlights · Published models · Jev 1.13.0 baseline · Behavioral probes · Vision · Latency · What is in this repo · Label audit and changelog
A System One model (TypeSafe's Jev, or any open model Jevified by the engine) does not write
text. It reads a state, answers typed questions, and returns probability distributions your code can branch on. The
product claim is calibration: an answer given 0.8 should be right about 80% of the time. Most benchmarks can only check the
argmax; jev-bench checks the distribution — four configs carry the human vote shares behind each label (go_emotions,
measuring_hate_speech, civil_comments, chaosnli).
| primitive | the question | what comes back | example config |
|---|---|---|---|
choice | which of these K options? | probabilities over options + confidence | clinc150 (151 intents incl. out-of-scope) |
score | where on these K ordered levels? | probabilities over levels, expected score, confidence | helpsteer2_helpfulness (0–4 Likert) |
noul | is this true? | a single P(yes) | civil_comments (toxic? with annotator share) |
Every row is one (state, question, label) triple in exactly the wire format a System One model consumes — send
state and question to POST /v1/systemone as-is.
from datasets import load_dataset
import json
ds = load_dataset("Praveenrajus/jev-bench", "chaosnli", split="test")
row = ds[0]
state, question = json.loads(row["state"]), json.loads(row["question"])
label, human = row["label"], json.loads(row["soft_label"]) # human = {"entailment": 0.63, "neutral": 0.37, ...}
state, question and soft_label are JSON strings so every config shares one stable schema; label is a string
(option key for choice, level index for score, "0"/"1" for noul). The jevify
package gives you BenchRecord.from_row, the metrics (ECE, Brier, RPS, selective accuracy, TVD to human), the API
runner and the figures.
Natural label distributions everywhere (uniform random samples, seed 20260920); a calibration benchmark must not
shift base rates. Splits: test ≤ 1,000 per config (2,000 for civil_comments, all of ChaosNLI), validation ≤ 500,
train ≤ 8,000 so Tier 1/2 recipes and temperature scaling have in-distribution data without touching test.
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
banking77 | 77 | customer-support | Route a customer's banking message to one of 77 intents. | 1,000 / 500 / 8,000 | cc-by-4.0 (PolyAI; mirror: mit) | |
clinc150 | 151 | virtual-assistant | Classify an assistant query into one of 150 intents or 'oos' (out of scope). | 1,000 / 500 / 8,000 | cc-by-3.0 | |
massive | 60 | virtual-assistant | Classify a smart-assistant utterance into one of 60 intents. | 1,000 / 500 / 8,000 | cc-by-4.0 (Amazon; mirror: apache-2.0) | |
ledgar | 100 | legal | Classify a contract clause into one of 100 provision categories. | 1,000 / 500 / 8,000 | cc-by-4.0 | |
go_emotions | 28 | social | Which emotion does a Reddit comment primarily express (27 emotions + neutral)? soft_label = rater vote shares. | 1,000 / 500 / 8,000 | yes | apache-2.0 |
mmlu | 4 | knowledge | Answer a multiple-choice exam question (A/B/C/D) across 57 academic subjects. | 1,000 / 500 / 285 | mit | |
arc_challenge | variable | knowledge | Answer a science exam question from its lettered options. | 1,000 / 299 / 1,119 | cc-by-sa-4.0 | |
mnli | 3 | nli | Does the hypothesis follow from, contradict, or remain undetermined by the premise? | 1,000 / 500 / 8,000 | other (GLUE/MultiNLI, research use) | |
chaosnli | 3 | nli | MNLI items re-annotated by 100 crowdworkers each; soft_label = human vote shares (calibration gold). | 1,599 / 0 / 0 | yes | cc-by-sa-4.0 (ChaosNLI; Hub mirror of the MNLI portion) |
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
sst5 | 5 | reviews | Rate the sentiment of a movie-review sentence on five levels. | 1,000 / 500 / 8,000 | unspecified (Stanford Sentiment Treebank) | |
yelp5 | 5 | reviews | Predict the star rating (1–5) a Yelp reviewer gave from the review text. | 1,000 / 500 / 8,000 | other (Yelp Dataset License, research use) | |
helpsteer2_helpfulness | 5 | llm-judging | Rate how helpful an assistant response is to the user's prompt (HelpSteer2 helpfulness, 0–4). | 1,000 / 500 / 8,000 | cc-by-4.0 | |
helpsteer2_verbosity | 5 | llm-judging | Rate the length of an assistant response relative to what the prompt asked for (HelpSteer2 verbosity, 0 succinct – 4 verbose). | 1,000 / 500 / 8,000 | cc-by-4.0 | |
stsb | 6 | nli | Rate how similar in meaning two sentences are on the 0–5 STS scale. | 1,000 / 500 / 5,749 | cc-by-sa-4.0 (STS Benchmark) | |
measuring_hate_speech | 3 | safety | Does the comment contain hate speech? Three levels with annotator distributions as soft labels. | 1,000 / 500 / 8,000 | yes | cc-by-4.0 |
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
boolq | variable | reading-comprehension | Given a Wikipedia passage, is the answer to the question yes? | 1,000 / 472 / 8,000 | cc-by-sa-3.0 | |
fever_evidence | variable | fact-checking | Given gold Wikipedia evidence sentences, is the claim supported (yes) or refuted (no)? | 1,000 / 500 / 8,000 | cc-by-sa-3.0 | |
paws | variable | nli | Do two sentences with high lexical overlap actually mean the same thing? | 1,000 / 500 / 8,000 | other (Google PAWS, free for research and commercial use) | |
civil_comments | variable | safety | Is this online comment toxic? Soft label = share of annotators who said yes. | 2,000 / 500 / 8,000 | yes | cc0-1.0 |
sms_spam | variable | messaging | Is this SMS message spam? | 800 / 237 / 4,000 | unknown (UCI SMS Spam Collection, public) | |
strategyqa_closed | variable | knowledge | Answer an implicit multi-hop yes/no question from world knowledge alone. | 687 / 160 / 1,400 | mit | |
strategyqa_grounded | variable | knowledge | Same questions with the supporting facts supplied in the state. | 687 / 160 / 1,400 | mit |
Licenses are those of the upstream datasets; this repackaging adds no restrictions. Per-source provenance is in
manifest.json.
A decision model answers many questions about the same thing, and its answers should fit together. If a model gives a support message 60% for "billing" in a three-way routing question but 45% when asked "is it billing?", it has contradicted itself: no single belief about the world produces both answers. Such answers are incoherent, and there is a classical result (de Finetti) that incoherent probabilities are never better: a coherent set of answers always exists that scores at least as well whichever answer turns out to be right. Accuracy and calibration cannot see this: a model can be accurate and well calibrated on each question alone and still contradict itself across related ones.
We measure it with the sure loss d². For each family of related questions (a choice question plus a yes/no question for each option; a yes/no question plus its negation; a rating plus "at least level k" thresholds; 4,749 families built automatically from the test items) we find the nearest set of answers that could all be true together and take the squared distance. Zero is perfectly coherent. For scale: Jev 0.081; untuned open models 0.14 to 0.43; plain supervised readout fine-tuning 0.27 to 0.37; with the coherence penalty 0.02 to 0.04; Perplexity's hosted decider 0.219.
It matters because software that acts on a probability often asks several related questions about one input (route it? is it billing? is it urgent?). If the answers disagree, no single number can be trusted. Coherence is what lets you ask once and rely on the answer. Limits: it is measured only on the relations our generator builds, and a model can be perfectly coherent and wrong. Details and the training penalty: FINDINGS 18.
Jev and the best of every tier (all 46 rows below). Tier 0 is zero training: prompt, logit readout, and a recipe fitted on validation splits only. Tier 1 adds decision heads trained with proper scoring rules; Tier 2 adds LoRA under those heads. Readout FT trains the model on its own decision distribution, optionally with a coherence penalty (FINDINGS 18). External is another team's model. Six sources are held out of every training run.
| model | tier | macro acc | macro ECE | macro Brier | sel@90 | choice acc | score acc | noul acc | TVD→human | GPU | test cost |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Jev 1.13.0 (TypeSafe API) | API | 0.733 | 0.113 | 0.349 | 0.760 | 0.770 | 0.503 | 0.881 | 0.432 | ||
| Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence) | Readout FT | 0.770 | 0.055 | 0.292 | 0.799 | 0.792 | 0.566 | 0.917 | 0.305 | ||
| Qwen/Qwen3.5-9B (readout LoRA + coherence) | Readout FT | 0.763 | 0.056 | 0.299 | 0.791 | 0.791 | 0.554 | 0.906 | 0.301 | ||
| Qwen/Qwen3.5-4B (readout LoRA + coherence) | Readout FT | 0.751 | 0.058 | 0.316 | 0.779 | 0.771 | 0.555 | 0.893 | 0.303 | ||
| perplexity-ai/pplx-decider-v1-27b (hosted API, as served) | External | 0.748 | 0.080 | 0.318 | 0.774 | 0.775 | 0.519 | 0.911 | 0.378 | $0.33 | |
| google/gemma-4-E4B-it (readout LoRA + coherence) | Readout FT | 0.742 | 0.053 | 0.322 | 0.772 | 0.759 | 0.546 | 0.889 | 0.297 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.734 | 0.096 | 0.342 | 0.762 | 0.761 | 0.518 | 0.884 | 0.337 | A40 | |
| google/gemma-4-12B-it | Tier 0 | 0.716 | 0.086 | 0.359 | 0.740 | 0.749 | 0.507 | 0.855 | 0.405 | A40 | |
| Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds) | Tier 1 residual | 0.714 | 0.071 | 0.362 | 0.740 | 0.725 | 0.507 | 0.878 | 0.376 | A40 | |
| togethercomputer/Tev1-4B-experimental (Tev1 prompt) | External | 0.703 | 0.086 | 0.361 | 0.732 | 0.717 | 0.512 | 0.850 | 0.394 | A40 | |
| Qwen/Qwen3.5-9B | Tier 0 | 0.689 | 0.092 | 0.379 | 0.717 | 0.716 | 0.503 | 0.815 | 0.423 | A40 |
| model | tier | macro acc | macro ECE | macro Brier | sel@90 | choice acc | score acc | noul acc | TVD→human | GPU | test cost |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Jev 1.13.0 (TypeSafe API) | API | 0.733 | 0.113 | 0.349 | 0.760 | 0.770 | 0.503 | 0.881 | 0.432 | ||
| Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence) | Readout FT | 0.770 | 0.055 | 0.292 | 0.799 | 0.792 | 0.566 | 0.917 | 0.305 | ||
| Qwen/Qwen3.5-9B (readout LoRA + coherence) | Readout FT | 0.763 | 0.056 | 0.299 | 0.791 | 0.791 | 0.554 | 0.906 | 0.301 | ||
| Qwen/Qwen3.5-9B (readout LoRA) | Readout FT | 0.759 | 0.052 | 0.302 | 0.787 | 0.790 | 0.541 | 0.905 | 0.314 | ||
| Qwen/Qwen3.5-4B (readout LoRA + coherence) | Readout FT | 0.751 | 0.058 | 0.316 | 0.779 | 0.771 | 0.555 | 0.893 | 0.303 | ||
| perplexity-ai/pplx-decider-v1-27b (hosted API, as served) | External | 0.748 | 0.080 | 0.318 | 0.774 | 0.775 | 0.519 | 0.911 | 0.378 | $0.33 | |
| Qwen/Qwen3.5-4B-Base (readout LoRA + coherence) | Readout FT | 0.747 | 0.058 | 0.318 | 0.777 | 0.771 | 0.535 | 0.897 | 0.314 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual) | Tier 2 residual | 0.747 | 0.110 | 0.342 | 0.774 | 0.770 | 0.529 | 0.903 | 0.347 | A40 | |
| Qwen/Qwen3.5-4B (readout LoRA) | Readout FT | 0.743 | 0.059 | 0.321 | 0.772 | 0.766 | 0.530 | 0.896 | 0.326 | ||
| google/gemma-4-E4B-it (readout LoRA + coherence) | Readout FT | 0.742 | 0.053 | 0.322 | 0.772 | 0.759 | 0.546 | 0.889 | 0.297 | ||
| Qwen/Qwen3.5-4B-Base (readout LoRA) | Readout FT | 0.741 | 0.064 | 0.324 | 0.770 | 0.768 | 0.522 | 0.893 | 0.324 | ||
| google/gemma-4-E4B-it (readout LoRA) | Readout FT | 0.737 | 0.057 | 0.330 | 0.766 | 0.754 | 0.531 | 0.892 | 0.316 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.734 | 0.096 | 0.342 | 0.762 | 0.761 | 0.518 | 0.884 | 0.337 | A40 | |
| google/gemma-4-12B-it | Tier 0 | 0.716 | 0.086 | 0.359 | 0.740 | 0.749 | 0.507 | 0.855 | 0.405 | A40 | |
| Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds) | Tier 1 residual | 0.714 | 0.071 | 0.362 | 0.740 | 0.725 | 0.507 | 0.878 | 0.376 | A40 | |
| Qwen/Qwen-AgentWorld-35B-A3B | Tier 0 | 0.709 | 0.077 | 0.350 | 0.735 | 0.754 | 0.473 | 0.852 | 0.408 | L40S | |
| google/gemma-4-E4B (readout LoRA) | Readout FT | 0.708 | 0.061 | 0.359 | 0.736 | 0.717 | 0.502 | 0.874 | 0.335 | ||
| Qwen/Qwen3.5-2B (readout full fine-tune + coherence) | Readout FT | 0.704 | 0.056 | 0.358 | 0.735 | 0.718 | 0.510 | 0.853 | 0.307 | ||
| togethercomputer/Tev1-4B-experimental (Tev1 prompt) | External | 0.703 | 0.086 | 0.361 | 0.732 | 0.717 | 0.512 | 0.850 | 0.394 | A40 | |
| Qwen/Qwen3.5-2B (readout full fine-tune) | Readout FT | 0.703 | 0.056 | 0.358 | 0.734 | 0.715 | 0.509 | 0.855 | 0.315 | ||
| Qwen/Qwen3.5-2B-Base (readout LoRA + coherence) | Readout FT | 0.702 | 0.051 | 0.365 | 0.731 | 0.714 | 0.509 | 0.852 | 0.320 | ||
| Qwen/Qwen3.5-2B (readout LoRA + coherence) | Readout FT | 0.702 | 0.054 | 0.364 | 0.729 | 0.718 | 0.496 | 0.858 | 0.315 | ||
| Qwen/Qwen3.5-2B (readout LoRA) | Readout FT | 0.701 | 0.051 | 0.362 | 0.730 | 0.713 | 0.508 | 0.849 | 0.324 | ||
| Qwen/Qwen3.5-4B (Tier 1 residual) | Tier 1 residual | 0.698 | 0.089 | 0.378 | 0.729 | 0.699 | 0.507 | 0.862 | 0.360 | A100-80GB | $1.28 |
| Qwen/Qwen3.5-2B-Base (readout LoRA) | Readout FT | 0.696 | 0.053 | 0.365 | 0.725 | 0.714 | 0.487 | 0.852 | 0.342 | ||
| Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05, soft labels) | Tier 2 residual | 0.694 | 0.105 | 0.390 | 0.724 | 0.697 | 0.497 | 0.859 | 0.364 | A40 | |
| togethercomputer/Tev1-4B-experimental (Jevify prompt) | External | 0.690 | 0.088 | 0.369 | 0.718 | 0.714 | 0.487 | 0.834 | 0.408 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.690 | 0.103 | 0.389 | 0.720 | 0.693 | 0.510 | 0.840 | 0.332 | A40 | |
| Qwen/Qwen3.5-9B | Tier 0 | 0.689 | 0.092 | 0.379 | 0.717 | 0.716 | 0.503 | 0.815 | 0.423 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual) | Tier 2 residual | 0.685 | 0.116 | 0.410 | 0.713 | 0.671 | 0.508 | 0.854 | 0.370 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual, soft labels) | Tier 2 residual | 0.674 | 0.116 | 0.412 | 0.703 | 0.682 | 0.471 | 0.837 | 0.433 | A40 | |
| Qwen/Qwen3.5-4B (Tev1 prompt) | Tier 0 | 0.673 | 0.104 | 0.402 | 0.702 | 0.687 | 0.499 | 0.805 | 0.421 | A40 | |
| Qwen/Qwen3.5-4B | Tier 0 | 0.662 | 0.090 | 0.401 | 0.689 | 0.687 | 0.468 | 0.796 | 0.438 | A100-80GB | $0.96 |
| google/gemma-4-E4B-it | Tier 0 | 0.658 | 0.092 | 0.398 | 0.682 | 0.700 | 0.432 | 0.798 | 0.434 | A100-80GB | $1.00 |
| Qwen/Qwen3.5-2B (Tier 1 residual) | Tier 1 residual | 0.632 | 0.069 | 0.445 | 0.657 | 0.596 | 0.449 | 0.835 | 0.374 | A100-80GB | $0.67 |
| Qwen/Qwen3.5-2B (Tier 1 residual, 6-epoch cap, mean of 5 seeds) | Tier 1 residual | 0.631 | 0.078 | 0.450 | 0.655 | 0.603 | 0.445 | 0.827 | 0.373 | A40 | |
| IFM/K2-Horizon-7B | Tier 0 | 0.623 | 0.093 | 0.436 | 0.647 | 0.617 | 0.409 | 0.813 | 0.434 | A40 | |
| Qwen/Qwen3.5-2B (Tier 1 replace) | Tier 1 replace | 0.599 | 0.083 | 0.475 | 0.621 | 0.567 | 0.378 | 0.828 | 0.416 | A100-80GB | $0.62 |
| google/gemma-4-E2B-it | Tier 0 | 0.591 | 0.123 | 0.484 | 0.612 | 0.594 | 0.440 | 0.716 | 0.492 | L4 | $0.75 |
| Qwen/Qwen3.5-2B | Tier 0 | 0.577 | 0.089 | 0.485 | 0.599 | 0.545 | 0.424 | 0.750 | 0.458 | A100-80GB | $0.66 |
| HuggingFaceTB/SmolLM3-3B | Tier 0 | 0.552 | 0.111 | 0.519 | 0.570 | 0.504 | 0.401 | 0.744 | 0.460 | A100-80GB | $0.64 |
| Qwen/Qwen3.5-0.8B | Tier 0 | 0.526 | 0.112 | 0.542 | 0.544 | 0.436 | 0.388 | 0.759 | 0.440 | L4 | $0.55 |
| Qwen/Qwen3.5-0.8B-Base | Tier 0 | 0.466 | 0.105 | 0.582 | 0.478 | 0.326 | 0.412 | 0.692 | 0.452 | L4 | $0.50 |
| IFM/K2-Horizon-0.9B | Tier 0 | 0.448 | 0.119 | 0.589 | 0.461 | 0.344 | 0.343 | 0.670 | 0.479 | L4 | $0.35 |
| google/gemma-4-E2B | Tier 0 | 0.396 | 0.115 | 0.609 | 0.404 | 0.247 | 0.382 | 0.600 | 0.496 | L4 | $0.69 |
| CLM-v0.1-8B (Contrastive-LM, self-hosted) | External | 0.340 | 0.338 | 0.814 | 0.349 | 0.213 | 0.234 | 0.593 | 0.669 |


Jev, measured
Open models, no training (Tier 0)
Training on the decision itself (post-training study, FINDINGS 18)
What post-training does to a decision readout (FINDINGS 17)
Beyond jev-bench
results/post-training/; FINDINGS 17). Five families scored at every published stage with one battery: base checkpoints range from under- to over-confident (fitted temperature 0.6–1.7), SFT leaves the readout close to calibrated where its checkpoint is published, and preference optimisation (Tülu DPO, SmolLM3 APO — two labs, two algorithms) then makes it over-confident at flat accuracy (temperatures up 1.3–2.4×). The first post-training step makes decisions more invariant in all eight base → post-trained pairs; Gemma-4's instruct models score below their bases without their chat template.jevify-qwen3.5-4b-readout-coh and nine siblings (2B/4B/9B, Gemma-4-E4B, base starts), each with a reproduction check.results/b/): 885 human-written LegalBench fact patterns with the rule written into the question, "none of the above" with the right option removed, and instructions planted inside the input. Jev applies a stated rule at 0.924; every open model tested (untrained, Tev1, Jevify Tier 2) at 0.62–0.70. Fine-tuning made the 4Bs notice a missing answer (0.48 → 0.66–0.70) and resist planted instructions (hijack rate 0.40 → 0.14–0.16).results/c/). The phishing collapse is a moved threshold: one log-odds shift fitted on sixteen labelled emails takes Tev1 from 0.51 to 0.76 and the Jevify 4B Tier 2 from 0.56 to 0.70 on the emails it never saw (results/phishing-recalibration/).results/community/.results/tev1-comparison/.results/clm-8b/.results/pplx-decider-v1-27b/.Praveenrajus/jevify-qwen3.5-4b-t2-lowlr.results/recipe-k/.results/qwen35-2b-t1r-s0 … -s4, results/qwen35-2b-t1r-e6-s0 … -s4, results/qwen35-4b-t1r-s1 … -s4.results/qwen35-2b-t2{,-s1,-s2}, results/qwen35-2b-t2-lowlr{,-s1,-s2}.

Full catalogue with evidence and caveats: docs/FINDINGS.md.
Load any of them with load_jevified("<repo>") from the engine; each serves as a drop-in for the TypeSafe SDK
(jevify-serve --model <repo>).
| family | repos |
|---|---|
| Readout fine-tuned + coherence | qwen3.5-9b (supervised; + coherence to follow) · qwen3.5-4b-coh · qwen3.5-2b-coh · gemma-4-e4b-it-coh |
| Readout fine-tuned, supervised | qwen3.5-4b · qwen3.5-2b · gemma-4-e4b-it |
| From base checkpoints | qwen3.5-4b-base / -coh · qwen3.5-2b-base / -coh · gemma-4-e4b |
| Full fine-tunes (weights in repo) | qwen3.5-2b-full · qwen3.5-2b-full-coh — other learning rates as branches |
| Readout fine-tuned + coherence, mixture-of-experts | qwen-agentworld-35b-a3b (LoRA; served with vLLM, see its card; load_jevified is not tested on it) |
| Tier 2 (LoRA + heads) | qwen3.5-4b-t2-lowlr · qwen3.5-4b-t2 |
| Tier 1 (decision heads, backbone frozen) | qwen3.5-4b · qwen3.5-2b |
| Vision | qwen3-vl-2b (Tier 0) · qwen3-vl-2b-t2 (decoder LoRA) |

jev-1.13.0 on every test record: crisp, grounded decisions land in the accurate-and-calibrated corner; ordinal ratings and anything humans disagree about do not.
Every test record, one request each, scored by jevify-run. Predictions, full metrics with reliability bins, and figures live under results/<model>/. Columns: accuracy, top-label ECE, Brier, NLL, selective accuracy at 90% / 50% coverage, AURC, RPS and MAE (ordinal), AUROC (noul), total variation distance to the human label distribution. NLL is inflated on high-K configs because the API rounds probabilities to 0.01; read Brier and ECE as the proper scores.
| source | prim | n | acc | ECE | Brier | NLL | sel@90 | sel@50 | AURC | RPS | MAE | AUROC | TVD→human |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
arc_challenge | choice | 1000 | 0.979 | 0.010 | 0.037 | 0.19 | 0.993 | 0.996 | 0.005 | ||||
banking77 | choice | 1000 | 0.796 | 0.095 | 0.317 | 2.10 | 0.839 | 0.964 | 0.072 | ||||
boolq | noul | 1000 | 0.917 | 0.021 | 0.061 | 0.21 | 0.953 | 0.990 | 0.017 | 0.978 | |||
chaosnli | choice | 1599 | 0.615 | 0.222 | 0.583 | 1.71 | 0.629 | 0.691 | 0.279 | 0.332 | |||
civil_comments | noul | 2000 | 0.729 | 0.045 | 0.183 | 0.55 | 0.752 | 0.837 | 0.153 | 0.829 | 0.289 | ||
clinc150 | choice | 1000 | 0.893 | 0.033 | 0.159 | 0.82 | 0.941 | 0.986 | 0.024 | ||||
fever_evidence | noul | 1000 | 0.972 | 0.028 | 0.025 | 0.11 | 0.986 | 0.996 | 0.006 | 0.991 | |||
go_emotions | choice | 1000 | 0.282 | 0.384 | 1.040 | 9.89 | 0.294 | 0.370 | 0.590 | 0.677 | |||
helpsteer2_helpfulness | score | 1000 | 0.363 | 0.232 | 0.812 | 3.25 | 0.373 | 0.432 | 0.537 | 0.173 | 0.96 | ||
helpsteer2_verbosity | score | 1000 | 0.341 | 0.231 | 0.793 | 1.86 | 0.368 | 0.424 | 0.594 | 0.132 | 0.72 | ||
ledgar | choice | 1000 | 0.751 | 0.117 | 0.374 | 2.29 | 0.794 | 0.942 | 0.095 | ||||
massive | choice | 1000 | 0.808 | 0.090 | 0.295 | 1.92 | 0.859 | 0.968 | 0.056 | ||||
measuring_hate_speech | score | 1000 | 0.527 | 0.237 | 0.669 | 2.75 | 0.538 | 0.720 | 0.289 | 0.267 | 0.71 | 0.428 | |
mmlu | choice | 1000 | 0.923 | 0.027 | 0.124 | 0.46 | 0.960 | 0.986 | 0.021 | ||||
mnli | choice | 1000 | 0.883 | 0.032 | 0.176 | 0.50 | 0.917 | 0.982 | 0.035 | ||||
paws | noul | 1000 | 0.846 | 0.040 | 0.109 | 0.34 | 0.878 | 0.976 | 0.048 | 0.932 | |||
sms_spam | noul | 800 | 0.965 | 0.068 | 0.035 | 0.15 | 0.985 | 0.993 | 0.010 | 0.976 | |||
sst5 | score | 1000 | 0.565 | 0.190 | 0.618 | 1.90 | 0.586 | 0.664 | 0.327 | 0.089 | 0.50 | ||
strategyqa_closed | noul | 687 | 0.785 | 0.042 | 0.144 | 0.45 | 0.820 | 0.910 | 0.091 | 0.885 | |||
strategyqa_grounded | noul | 687 | 0.956 | 0.059 | 0.038 | 0.15 | 0.984 | 1.000 | 0.004 | 0.994 | |||
stsb | score | 1000 | 0.538 | 0.119 | 0.594 | 1.31 | 0.554 | 0.626 | 0.333 | 0.072 | 0.55 | ||
yelp5 | score | 1000 | 0.685 | 0.174 | 0.483 | 1.85 | 0.707 | 0.792 | 0.202 | 0.064 | 0.35 |
Reliability diagrams — stated confidence vs observed accuracy per config. Flat lines mean the confidence carries no information.

Model vs human probability on the calibration-gold configs — the axis that separates a decision model from a classifier.

Does its confidence know when humans disagree? On ChaosNLI (100 annotators per item) Jev's confidence is flat — 0.81 / 0.84 / 0.83 / 0.88 as human agreement goes from split (< 50%, n = 191) through contested (50–70%, n = 828) and clear (70–90%, n = 523) to consensus (≥ 90%, n = 57); Pearson r = 0.046 — while its accuracy on the same bands runs 0.47 / 0.55 / 0.73 / 0.96. It is more confident than the human majority on 80% of items.

Risk–coverage — the error rate a confidence-gated router actually gets at each coverage.

Performance vs decision-set size (cross-dataset, so difficulty is confounded — a hypothesis view).

Within-item experiments: the same state and gold answer, one factor changed. 200 items per source. Full write-up in results/jev-1.13.0/probes/README.md.

The same three primitives, asked about an image. Records are built in memory from POPE (object hallucination, Noul),
A-OKVQA (knowledge VQA, Choice K=4) and AI2D (science diagrams, Choice); the model is a vision-language checkpoint with
no training, scored the same way as everything above, then given the Tier 0 recipe (a temperature per primitive and a
Noul bias, fitted on validation splits only — POPE's is carved from its single split). Predictions and a text-only
records manifest are in results/qwen3vl-2b/; the model is published as
Praveenrajus/jevify-qwen3-vl-2b.
| model | source | primitive | n | acc | ECE raw | ECE fitted | Brier | AUROC |
|---|---|---|---|---|---|---|---|---|
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | pope | noul | 2,000 | 0.891 | 0.086 | 0.046 | 0.079 | 0.958 |
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | aokvqa | choice | 744 | 0.793 | 0.124 | 0.037 | 0.299 | — |
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | ai2d | choice | 1,500 | 0.652 | 0.175 | 0.059 | 0.454 | — |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | pope | noul | 2,000 | 0.889 | 0.096 | 0.025 | 0.081 | 0.955 |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | aokvqa | choice | 744 | 0.868 | 0.094 | 0.032 | 0.202 | — |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | ai2d | choice | 1,500 | 0.767 | 0.137 | 0.038 | 0.315 | — |
| Qwen/Qwen3.5-9B (Tier 0) | pope | noul | 2,000 | 0.895 | 0.044 | 0.030 | 0.077 | 0.959 |
| Qwen/Qwen3.5-9B (Tier 0) | aokvqa | choice | 744 | 0.876 | 0.030 | 0.028 | 0.186 | — |
| Qwen/Qwen3.5-9B (Tier 0) | ai2d | choice | 1,500 | 0.750 | 0.059 | 0.060 | 0.318 | — |
| google/gemma-4-12B-it (Tier 0) | pope | noul | 2,000 | 0.868 | 0.120 | 0.035 | 0.095 | 0.944 |
| google/gemma-4-12B-it (Tier 0) | aokvqa | choice | 744 | 0.825 | 0.120 | 0.049 | 0.261 | — |
| google/gemma-4-12B-it (Tier 0) | ai2d | choice | 1,500 | 0.746 | 0.137 | 0.055 | 0.361 | — |
The raw readout shows the text ordering (Noul better calibrated than Choice); the recipe erases it. After a per-primitive temperature the three sources sit within 0.02 ECE of each other. The raw gap measured how much a scalar could fix, not which primitive is easier.
A starved vision encoder degrades safely. Holding records, prompt and decoder fixed and moving only the pixel
budget: from 42 to 187 median image tokens, accuracy rises 0.048 and ECE falls 0.037. Losing accuracy while
keeping confidence — confident hallucination — never appears at any budget tested. The budget also saturates
silently (512 and 1024 patches both give 280 tokens), which only the measured token count reveals.
Sweep data: results/vision-budget/.
Served, an image question takes 68–79 ms on one A40 (~350 input tokens, ~85% of them image), four questions
about one image 221 ms in one batched forward, 12.6 records/s batched — under Jev's 180–220 ms text round trip.
results/latency/latency_vision.md.
The vision tower is the wrong half to adapt. Three rank-16 LoRAs trained on the readout over 2,000 A-OKVQA records,
confined to the tower, the decoder, or both, then recipe-fitted: the decoder adapter transfers to AI2D, a source it never
saw (0.652 → 0.707, ECE 0.059 → 0.041; macro ECE 0.047 → 0.035), the tower adapter barely (0.669), and both together
is not additive (0.697). After the decoder LoRA the fitted Choice temperature is 1.001: a proper scoring rule on the readout
made the recipe redundant on the trained primitive. One seed per arm.
results/qwen3vl-2b-t2-{vision,decoder,both}/, published as
Praveenrajus/jevify-qwen3-vl-2b-t2.


Jev's round trip barely moves with the number of options. Probes against the API with the server's own clock
(x-envoy-upstream-service-time) explain it as ~75 ms fixed + ~5.5 µs per input token, linear to 27,000 tokens,
with option tokens costing exactly what state tokens cost — no cache, no fixed window, no batching wait — and an
answer template filled in one pass rather than decoded (2,570 "output" tokens in 128 ms at K=255). Data and figure:
results/jev-latency-probe/.
A Jevified model measured the same way on one A40: the research path pays ~120 µs per token; the same model through
vLLM pays ~48 µs, halves the fixed floor and runs 4–5× more records per second — the same shape as Jev's curve, from
throughput rather than from any option-specific mechanism. results/latency/.

At 8–12B. Qwen3-VL-8B answers an image question in 120 ms on one A40, Gemma-4-12B in 175 ms, Qwen3.5-9B in 170 ms
(its hybrid layers run on reference kernels here) — all under Jev's text round trip. Qwen3.5-9B text through vLLM: 56–70 ms
for K ≤ 27, 321 ms at K=151 (Jev 219). And on the same model and prompt, the readout costs the prefill while decoding the
answer costs 52–106 ms per token on top: an eight-token answer is 4–7× the readout, a 32-token one 13–27×.
results/latency/latency_8b*.md, latency_vision_*.md,
latency_generate_*.md.

| path | contents |
|---|---|
data/<config>/{train,validation,test}.jsonl | the benchmark (the configs above; the dataset viewer reads these) |
manifest.json | per-source provenance, sampling seed, split sizes, licences |
results/<model>/ | per model: predictions, test_metrics.json (with reliability bins), the fitted recipe, figures |
results/leaderboard/ | the table and figures above |
results/post-training/ | every training stage of five model families and every readout fine-tune, one battery (README) |
results/jev-1.13.0/ | the Jev baseline, its figures and the probe suite |
results/b/, results/community/ | the three new tests; three Jev benchmarks written by other people |
results/c/, results/phishing-recalibration/ | retraining the 4B the Tev1 way; the phishing threshold |
results/README.md | the full index, one row per folder |
Every weak result was checked by reading samples of the model's errors. Verdicts, examples and the two v0.1.1 fixes that
came out of it are in results/jev-1.13.0/README.md.
helpsteer2_verbosity levels replaced with NVIDIA's verbatim length scale (v0.1 misdescribed them);
go_emotions rebuilt from raw per-rater votes with soft labels; other configs unchanged.Data v0.1.1, built with jevify-bench on 2026-09-20; results updated as they are measured.
Real human-labeled data, reformatted into System One questions — with human label distributions wherever they exist.
22 configs · 166,054 rows · 22,773 test records · 4 calibration-gold configs · 46 models scored · v0.1.1
Code & engine · Findings · Leaderboard · Published models · Source rationale · Jev's API, verified · Other Jev evaluations

Every model on the same 22,773 test records. Down and to the right is better; the stars are open models fine-tuned on their own decision readout with a coherence penalty.
| What it measures | Typed decisions — choice, score, noul — returned as probabilities, scored against hard labels and against how humans actually split |
| Jev 1.13.0 (TypeSafe API) | 0.733 accuracy, ECE 0.113 — calibrated on crisp questions, over-confident where people disagree |
| Best open model | Qwen-AgentWorld-35B-A3B (3B active), readout fine-tuned + coherence: 0.770 accuracy, ECE 0.055, TVD to human labels 0.305, sure loss 0.030, one seed (Jev 0.733 / 0.113 / 0.432 / 0.081). Best at 9B: Qwen3.5-9B, 0.763 / 0.056 / 0.301 |
| Where Jev still leads | the six held-out sources (0.835, against 0.828 for our best open model and 0.840 for Perplexity's hosted pplx-decider-v1-27b), and applying a rule stated in the question (0.924 vs 0.80) |
Contents — Quick start · The data · Why coherence · Leaderboard · Highlights · Published models · Jev 1.13.0 baseline · Behavioral probes · Vision · Latency · What is in this repo · Label audit and changelog
A System One model (TypeSafe's Jev, or any open model Jevified by the engine) does not write
text. It reads a state, answers typed questions, and returns probability distributions your code can branch on. The
product claim is calibration: an answer given 0.8 should be right about 80% of the time. Most benchmarks can only check the
argmax; jev-bench checks the distribution — four configs carry the human vote shares behind each label (go_emotions,
measuring_hate_speech, civil_comments, chaosnli).
| primitive | the question | what comes back | example config |
|---|---|---|---|
choice | which of these K options? | probabilities over options + confidence | clinc150 (151 intents incl. out-of-scope) |
score | where on these K ordered levels? | probabilities over levels, expected score, confidence | helpsteer2_helpfulness (0–4 Likert) |
noul | is this true? | a single P(yes) | civil_comments (toxic? with annotator share) |
Every row is one (state, question, label) triple in exactly the wire format a System One model consumes — send
state and question to POST /v1/systemone as-is.
from datasets import load_dataset
import json
ds = load_dataset("Praveenrajus/jev-bench", "chaosnli", split="test")
row = ds[0]
state, question = json.loads(row["state"]), json.loads(row["question"])
label, human = row["label"], json.loads(row["soft_label"]) # human = {"entailment": 0.63, "neutral": 0.37, ...}
state, question and soft_label are JSON strings so every config shares one stable schema; label is a string
(option key for choice, level index for score, "0"/"1" for noul). The jevify
package gives you BenchRecord.from_row, the metrics (ECE, Brier, RPS, selective accuracy, TVD to human), the API
runner and the figures.
Natural label distributions everywhere (uniform random samples, seed 20260920); a calibration benchmark must not
shift base rates. Splits: test ≤ 1,000 per config (2,000 for civil_comments, all of ChaosNLI), validation ≤ 500,
train ≤ 8,000 so Tier 1/2 recipes and temperature scaling have in-distribution data without touching test.
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
banking77 | 77 | customer-support | Route a customer's banking message to one of 77 intents. | 1,000 / 500 / 8,000 | cc-by-4.0 (PolyAI; mirror: mit) | |
clinc150 | 151 | virtual-assistant | Classify an assistant query into one of 150 intents or 'oos' (out of scope). | 1,000 / 500 / 8,000 | cc-by-3.0 | |
massive | 60 | virtual-assistant | Classify a smart-assistant utterance into one of 60 intents. | 1,000 / 500 / 8,000 | cc-by-4.0 (Amazon; mirror: apache-2.0) | |
ledgar | 100 | legal | Classify a contract clause into one of 100 provision categories. | 1,000 / 500 / 8,000 | cc-by-4.0 | |
go_emotions | 28 | social | Which emotion does a Reddit comment primarily express (27 emotions + neutral)? soft_label = rater vote shares. | 1,000 / 500 / 8,000 | yes | apache-2.0 |
mmlu | 4 | knowledge | Answer a multiple-choice exam question (A/B/C/D) across 57 academic subjects. | 1,000 / 500 / 285 | mit | |
arc_challenge | variable | knowledge | Answer a science exam question from its lettered options. | 1,000 / 299 / 1,119 | cc-by-sa-4.0 | |
mnli | 3 | nli | Does the hypothesis follow from, contradict, or remain undetermined by the premise? | 1,000 / 500 / 8,000 | other (GLUE/MultiNLI, research use) | |
chaosnli | 3 | nli | MNLI items re-annotated by 100 crowdworkers each; soft_label = human vote shares (calibration gold). | 1,599 / 0 / 0 | yes | cc-by-sa-4.0 (ChaosNLI; Hub mirror of the MNLI portion) |
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
sst5 | 5 | reviews | Rate the sentiment of a movie-review sentence on five levels. | 1,000 / 500 / 8,000 | unspecified (Stanford Sentiment Treebank) | |
yelp5 | 5 | reviews | Predict the star rating (1–5) a Yelp reviewer gave from the review text. | 1,000 / 500 / 8,000 | other (Yelp Dataset License, research use) | |
helpsteer2_helpfulness | 5 | llm-judging | Rate how helpful an assistant response is to the user's prompt (HelpSteer2 helpfulness, 0–4). | 1,000 / 500 / 8,000 | cc-by-4.0 | |
helpsteer2_verbosity | 5 | llm-judging | Rate the length of an assistant response relative to what the prompt asked for (HelpSteer2 verbosity, 0 succinct – 4 verbose). | 1,000 / 500 / 8,000 | cc-by-4.0 | |
stsb | 6 | nli | Rate how similar in meaning two sentences are on the 0–5 STS scale. | 1,000 / 500 / 5,749 | cc-by-sa-4.0 (STS Benchmark) | |
measuring_hate_speech | 3 | safety | Does the comment contain hate speech? Three levels with annotator distributions as soft labels. | 1,000 / 500 / 8,000 | yes | cc-by-4.0 |
| config | K | domain | question | test / val / train | human distribution | license |
|---|---|---|---|---|---|---|
boolq | variable | reading-comprehension | Given a Wikipedia passage, is the answer to the question yes? | 1,000 / 472 / 8,000 | cc-by-sa-3.0 | |
fever_evidence | variable | fact-checking | Given gold Wikipedia evidence sentences, is the claim supported (yes) or refuted (no)? | 1,000 / 500 / 8,000 | cc-by-sa-3.0 | |
paws | variable | nli | Do two sentences with high lexical overlap actually mean the same thing? | 1,000 / 500 / 8,000 | other (Google PAWS, free for research and commercial use) | |
civil_comments | variable | safety | Is this online comment toxic? Soft label = share of annotators who said yes. | 2,000 / 500 / 8,000 | yes | cc0-1.0 |
sms_spam | variable | messaging | Is this SMS message spam? | 800 / 237 / 4,000 | unknown (UCI SMS Spam Collection, public) | |
strategyqa_closed | variable | knowledge | Answer an implicit multi-hop yes/no question from world knowledge alone. | 687 / 160 / 1,400 | mit | |
strategyqa_grounded | variable | knowledge | Same questions with the supporting facts supplied in the state. | 687 / 160 / 1,400 | mit |
Licenses are those of the upstream datasets; this repackaging adds no restrictions. Per-source provenance is in
manifest.json.
A decision model answers many questions about the same thing, and its answers should fit together. If a model gives a support message 60% for "billing" in a three-way routing question but 45% when asked "is it billing?", it has contradicted itself: no single belief about the world produces both answers. Such answers are incoherent, and there is a classical result (de Finetti) that incoherent probabilities are never better: a coherent set of answers always exists that scores at least as well whichever answer turns out to be right. Accuracy and calibration cannot see this: a model can be accurate and well calibrated on each question alone and still contradict itself across related ones.
We measure it with the sure loss d². For each family of related questions (a choice question plus a yes/no question for each option; a yes/no question plus its negation; a rating plus "at least level k" thresholds; 4,749 families built automatically from the test items) we find the nearest set of answers that could all be true together and take the squared distance. Zero is perfectly coherent. For scale: Jev 0.081; untuned open models 0.14 to 0.43; plain supervised readout fine-tuning 0.27 to 0.37; with the coherence penalty 0.02 to 0.04; Perplexity's hosted decider 0.219.
It matters because software that acts on a probability often asks several related questions about one input (route it? is it billing? is it urgent?). If the answers disagree, no single number can be trusted. Coherence is what lets you ask once and rely on the answer. Limits: it is measured only on the relations our generator builds, and a model can be perfectly coherent and wrong. Details and the training penalty: FINDINGS 18.
Jev and the best of every tier (all 46 rows below). Tier 0 is zero training: prompt, logit readout, and a recipe fitted on validation splits only. Tier 1 adds decision heads trained with proper scoring rules; Tier 2 adds LoRA under those heads. Readout FT trains the model on its own decision distribution, optionally with a coherence penalty (FINDINGS 18). External is another team's model. Six sources are held out of every training run.
| model | tier | macro acc | macro ECE | macro Brier | sel@90 | choice acc | score acc | noul acc | TVD→human | GPU | test cost |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Jev 1.13.0 (TypeSafe API) | API | 0.733 | 0.113 | 0.349 | 0.760 | 0.770 | 0.503 | 0.881 | 0.432 | ||
| Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence) | Readout FT | 0.770 | 0.055 | 0.292 | 0.799 | 0.792 | 0.566 | 0.917 | 0.305 | ||
| Qwen/Qwen3.5-9B (readout LoRA + coherence) | Readout FT | 0.763 | 0.056 | 0.299 | 0.791 | 0.791 | 0.554 | 0.906 | 0.301 | ||
| Qwen/Qwen3.5-4B (readout LoRA + coherence) | Readout FT | 0.751 | 0.058 | 0.316 | 0.779 | 0.771 | 0.555 | 0.893 | 0.303 | ||
| perplexity-ai/pplx-decider-v1-27b (hosted API, as served) | External | 0.748 | 0.080 | 0.318 | 0.774 | 0.775 | 0.519 | 0.911 | 0.378 | $0.33 | |
| google/gemma-4-E4B-it (readout LoRA + coherence) | Readout FT | 0.742 | 0.053 | 0.322 | 0.772 | 0.759 | 0.546 | 0.889 | 0.297 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.734 | 0.096 | 0.342 | 0.762 | 0.761 | 0.518 | 0.884 | 0.337 | A40 | |
| google/gemma-4-12B-it | Tier 0 | 0.716 | 0.086 | 0.359 | 0.740 | 0.749 | 0.507 | 0.855 | 0.405 | A40 | |
| Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds) | Tier 1 residual | 0.714 | 0.071 | 0.362 | 0.740 | 0.725 | 0.507 | 0.878 | 0.376 | A40 | |
| togethercomputer/Tev1-4B-experimental (Tev1 prompt) | External | 0.703 | 0.086 | 0.361 | 0.732 | 0.717 | 0.512 | 0.850 | 0.394 | A40 | |
| Qwen/Qwen3.5-9B | Tier 0 | 0.689 | 0.092 | 0.379 | 0.717 | 0.716 | 0.503 | 0.815 | 0.423 | A40 |
| model | tier | macro acc | macro ECE | macro Brier | sel@90 | choice acc | score acc | noul acc | TVD→human | GPU | test cost |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Jev 1.13.0 (TypeSafe API) | API | 0.733 | 0.113 | 0.349 | 0.760 | 0.770 | 0.503 | 0.881 | 0.432 | ||
| Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence) | Readout FT | 0.770 | 0.055 | 0.292 | 0.799 | 0.792 | 0.566 | 0.917 | 0.305 | ||
| Qwen/Qwen3.5-9B (readout LoRA + coherence) | Readout FT | 0.763 | 0.056 | 0.299 | 0.791 | 0.791 | 0.554 | 0.906 | 0.301 | ||
| Qwen/Qwen3.5-9B (readout LoRA) | Readout FT | 0.759 | 0.052 | 0.302 | 0.787 | 0.790 | 0.541 | 0.905 | 0.314 | ||
| Qwen/Qwen3.5-4B (readout LoRA + coherence) | Readout FT | 0.751 | 0.058 | 0.316 | 0.779 | 0.771 | 0.555 | 0.893 | 0.303 | ||
| perplexity-ai/pplx-decider-v1-27b (hosted API, as served) | External | 0.748 | 0.080 | 0.318 | 0.774 | 0.775 | 0.519 | 0.911 | 0.378 | $0.33 | |
| Qwen/Qwen3.5-4B-Base (readout LoRA + coherence) | Readout FT | 0.747 | 0.058 | 0.318 | 0.777 | 0.771 | 0.535 | 0.897 | 0.314 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual) | Tier 2 residual | 0.747 | 0.110 | 0.342 | 0.774 | 0.770 | 0.529 | 0.903 | 0.347 | A40 | |
| Qwen/Qwen3.5-4B (readout LoRA) | Readout FT | 0.743 | 0.059 | 0.321 | 0.772 | 0.766 | 0.530 | 0.896 | 0.326 | ||
| google/gemma-4-E4B-it (readout LoRA + coherence) | Readout FT | 0.742 | 0.053 | 0.322 | 0.772 | 0.759 | 0.546 | 0.889 | 0.297 | ||
| Qwen/Qwen3.5-4B-Base (readout LoRA) | Readout FT | 0.741 | 0.064 | 0.324 | 0.770 | 0.768 | 0.522 | 0.893 | 0.324 | ||
| google/gemma-4-E4B-it (readout LoRA) | Readout FT | 0.737 | 0.057 | 0.330 | 0.766 | 0.754 | 0.531 | 0.892 | 0.316 | ||
| Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.734 | 0.096 | 0.342 | 0.762 | 0.761 | 0.518 | 0.884 | 0.337 | A40 | |
| google/gemma-4-12B-it | Tier 0 | 0.716 | 0.086 | 0.359 | 0.740 | 0.749 | 0.507 | 0.855 | 0.405 | A40 | |
| Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds) | Tier 1 residual | 0.714 | 0.071 | 0.362 | 0.740 | 0.725 | 0.507 | 0.878 | 0.376 | A40 | |
| Qwen/Qwen-AgentWorld-35B-A3B | Tier 0 | 0.709 | 0.077 | 0.350 | 0.735 | 0.754 | 0.473 | 0.852 | 0.408 | L40S | |
| google/gemma-4-E4B (readout LoRA) | Readout FT | 0.708 | 0.061 | 0.359 | 0.736 | 0.717 | 0.502 | 0.874 | 0.335 | ||
| Qwen/Qwen3.5-2B (readout full fine-tune + coherence) | Readout FT | 0.704 | 0.056 | 0.358 | 0.735 | 0.718 | 0.510 | 0.853 | 0.307 | ||
| togethercomputer/Tev1-4B-experimental (Tev1 prompt) | External | 0.703 | 0.086 | 0.361 | 0.732 | 0.717 | 0.512 | 0.850 | 0.394 | A40 | |
| Qwen/Qwen3.5-2B (readout full fine-tune) | Readout FT | 0.703 | 0.056 | 0.358 | 0.734 | 0.715 | 0.509 | 0.855 | 0.315 | ||
| Qwen/Qwen3.5-2B-Base (readout LoRA + coherence) | Readout FT | 0.702 | 0.051 | 0.365 | 0.731 | 0.714 | 0.509 | 0.852 | 0.320 | ||
| Qwen/Qwen3.5-2B (readout LoRA + coherence) | Readout FT | 0.702 | 0.054 | 0.364 | 0.729 | 0.718 | 0.496 | 0.858 | 0.315 | ||
| Qwen/Qwen3.5-2B (readout LoRA) | Readout FT | 0.701 | 0.051 | 0.362 | 0.730 | 0.713 | 0.508 | 0.849 | 0.324 | ||
| Qwen/Qwen3.5-4B (Tier 1 residual) | Tier 1 residual | 0.698 | 0.089 | 0.378 | 0.729 | 0.699 | 0.507 | 0.862 | 0.360 | A100-80GB | $1.28 |
| Qwen/Qwen3.5-2B-Base (readout LoRA) | Readout FT | 0.696 | 0.053 | 0.365 | 0.725 | 0.714 | 0.487 | 0.852 | 0.342 | ||
| Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05, soft labels) | Tier 2 residual | 0.694 | 0.105 | 0.390 | 0.724 | 0.697 | 0.497 | 0.859 | 0.364 | A40 | |
| togethercomputer/Tev1-4B-experimental (Jevify prompt) | External | 0.690 | 0.088 | 0.369 | 0.718 | 0.714 | 0.487 | 0.834 | 0.408 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05) | Tier 2 residual | 0.690 | 0.103 | 0.389 | 0.720 | 0.693 | 0.510 | 0.840 | 0.332 | A40 | |
| Qwen/Qwen3.5-9B | Tier 0 | 0.689 | 0.092 | 0.379 | 0.717 | 0.716 | 0.503 | 0.815 | 0.423 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual) | Tier 2 residual | 0.685 | 0.116 | 0.410 | 0.713 | 0.671 | 0.508 | 0.854 | 0.370 | A40 | |
| Qwen/Qwen3.5-2B (Tier 2 residual, soft labels) | Tier 2 residual | 0.674 | 0.116 | 0.412 | 0.703 | 0.682 | 0.471 | 0.837 | 0.433 | A40 | |
| Qwen/Qwen3.5-4B (Tev1 prompt) | Tier 0 | 0.673 | 0.104 | 0.402 | 0.702 | 0.687 | 0.499 | 0.805 | 0.421 | A40 | |
| Qwen/Qwen3.5-4B | Tier 0 | 0.662 | 0.090 | 0.401 | 0.689 | 0.687 | 0.468 | 0.796 | 0.438 | A100-80GB | $0.96 |
| google/gemma-4-E4B-it | Tier 0 | 0.658 | 0.092 | 0.398 | 0.682 | 0.700 | 0.432 | 0.798 | 0.434 | A100-80GB | $1.00 |
| Qwen/Qwen3.5-2B (Tier 1 residual) | Tier 1 residual | 0.632 | 0.069 | 0.445 | 0.657 | 0.596 | 0.449 | 0.835 | 0.374 | A100-80GB | $0.67 |
| Qwen/Qwen3.5-2B (Tier 1 residual, 6-epoch cap, mean of 5 seeds) | Tier 1 residual | 0.631 | 0.078 | 0.450 | 0.655 | 0.603 | 0.445 | 0.827 | 0.373 | A40 | |
| IFM/K2-Horizon-7B | Tier 0 | 0.623 | 0.093 | 0.436 | 0.647 | 0.617 | 0.409 | 0.813 | 0.434 | A40 | |
| Qwen/Qwen3.5-2B (Tier 1 replace) | Tier 1 replace | 0.599 | 0.083 | 0.475 | 0.621 | 0.567 | 0.378 | 0.828 | 0.416 | A100-80GB | $0.62 |
| google/gemma-4-E2B-it | Tier 0 | 0.591 | 0.123 | 0.484 | 0.612 | 0.594 | 0.440 | 0.716 | 0.492 | L4 | $0.75 |
| Qwen/Qwen3.5-2B | Tier 0 | 0.577 | 0.089 | 0.485 | 0.599 | 0.545 | 0.424 | 0.750 | 0.458 | A100-80GB | $0.66 |
| HuggingFaceTB/SmolLM3-3B | Tier 0 | 0.552 | 0.111 | 0.519 | 0.570 | 0.504 | 0.401 | 0.744 | 0.460 | A100-80GB | $0.64 |
| Qwen/Qwen3.5-0.8B | Tier 0 | 0.526 | 0.112 | 0.542 | 0.544 | 0.436 | 0.388 | 0.759 | 0.440 | L4 | $0.55 |
| Qwen/Qwen3.5-0.8B-Base | Tier 0 | 0.466 | 0.105 | 0.582 | 0.478 | 0.326 | 0.412 | 0.692 | 0.452 | L4 | $0.50 |
| IFM/K2-Horizon-0.9B | Tier 0 | 0.448 | 0.119 | 0.589 | 0.461 | 0.344 | 0.343 | 0.670 | 0.479 | L4 | $0.35 |
| google/gemma-4-E2B | Tier 0 | 0.396 | 0.115 | 0.609 | 0.404 | 0.247 | 0.382 | 0.600 | 0.496 | L4 | $0.69 |
| CLM-v0.1-8B (Contrastive-LM, self-hosted) | External | 0.340 | 0.338 | 0.814 | 0.349 | 0.213 | 0.234 | 0.593 | 0.669 |


Jev, measured
Open models, no training (Tier 0)
Training on the decision itself (post-training study, FINDINGS 18)
What post-training does to a decision readout (FINDINGS 17)
Beyond jev-bench
results/post-training/; FINDINGS 17). Five families scored at every published stage with one battery: base checkpoints range from under- to over-confident (fitted temperature 0.6–1.7), SFT leaves the readout close to calibrated where its checkpoint is published, and preference optimisation (Tülu DPO, SmolLM3 APO — two labs, two algorithms) then makes it over-confident at flat accuracy (temperatures up 1.3–2.4×). The first post-training step makes decisions more invariant in all eight base → post-trained pairs; Gemma-4's instruct models score below their bases without their chat template.jevify-qwen3.5-4b-readout-coh and nine siblings (2B/4B/9B, Gemma-4-E4B, base starts), each with a reproduction check.results/b/): 885 human-written LegalBench fact patterns with the rule written into the question, "none of the above" with the right option removed, and instructions planted inside the input. Jev applies a stated rule at 0.924; every open model tested (untrained, Tev1, Jevify Tier 2) at 0.62–0.70. Fine-tuning made the 4Bs notice a missing answer (0.48 → 0.66–0.70) and resist planted instructions (hijack rate 0.40 → 0.14–0.16).results/c/). The phishing collapse is a moved threshold: one log-odds shift fitted on sixteen labelled emails takes Tev1 from 0.51 to 0.76 and the Jevify 4B Tier 2 from 0.56 to 0.70 on the emails it never saw (results/phishing-recalibration/).results/community/.results/tev1-comparison/.results/clm-8b/.results/pplx-decider-v1-27b/.Praveenrajus/jevify-qwen3.5-4b-t2-lowlr.results/recipe-k/.results/qwen35-2b-t1r-s0 … -s4, results/qwen35-2b-t1r-e6-s0 … -s4, results/qwen35-4b-t1r-s1 … -s4.results/qwen35-2b-t2{,-s1,-s2}, results/qwen35-2b-t2-lowlr{,-s1,-s2}.

Full catalogue with evidence and caveats: docs/FINDINGS.md.
Load any of them with load_jevified("<repo>") from the engine; each serves as a drop-in for the TypeSafe SDK
(jevify-serve --model <repo>).
| family | repos |
|---|---|
| Readout fine-tuned + coherence | qwen3.5-9b (supervised; + coherence to follow) · qwen3.5-4b-coh · qwen3.5-2b-coh · gemma-4-e4b-it-coh |
| Readout fine-tuned, supervised | qwen3.5-4b · qwen3.5-2b · gemma-4-e4b-it |
| From base checkpoints | qwen3.5-4b-base / -coh · qwen3.5-2b-base / -coh · gemma-4-e4b |
| Full fine-tunes (weights in repo) | qwen3.5-2b-full · qwen3.5-2b-full-coh — other learning rates as branches |
| Readout fine-tuned + coherence, mixture-of-experts | qwen-agentworld-35b-a3b (LoRA; served with vLLM, see its card; load_jevified is not tested on it) |
| Tier 2 (LoRA + heads) | qwen3.5-4b-t2-lowlr · qwen3.5-4b-t2 |
| Tier 1 (decision heads, backbone frozen) | qwen3.5-4b · qwen3.5-2b |
| Vision | qwen3-vl-2b (Tier 0) · qwen3-vl-2b-t2 (decoder LoRA) |

jev-1.13.0 on every test record: crisp, grounded decisions land in the accurate-and-calibrated corner; ordinal ratings and anything humans disagree about do not.
Every test record, one request each, scored by jevify-run. Predictions, full metrics with reliability bins, and figures live under results/<model>/. Columns: accuracy, top-label ECE, Brier, NLL, selective accuracy at 90% / 50% coverage, AURC, RPS and MAE (ordinal), AUROC (noul), total variation distance to the human label distribution. NLL is inflated on high-K configs because the API rounds probabilities to 0.01; read Brier and ECE as the proper scores.
| source | prim | n | acc | ECE | Brier | NLL | sel@90 | sel@50 | AURC | RPS | MAE | AUROC | TVD→human |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
arc_challenge | choice | 1000 | 0.979 | 0.010 | 0.037 | 0.19 | 0.993 | 0.996 | 0.005 | ||||
banking77 | choice | 1000 | 0.796 | 0.095 | 0.317 | 2.10 | 0.839 | 0.964 | 0.072 | ||||
boolq | noul | 1000 | 0.917 | 0.021 | 0.061 | 0.21 | 0.953 | 0.990 | 0.017 | 0.978 | |||
chaosnli | choice | 1599 | 0.615 | 0.222 | 0.583 | 1.71 | 0.629 | 0.691 | 0.279 | 0.332 | |||
civil_comments | noul | 2000 | 0.729 | 0.045 | 0.183 | 0.55 | 0.752 | 0.837 | 0.153 | 0.829 | 0.289 | ||
clinc150 | choice | 1000 | 0.893 | 0.033 | 0.159 | 0.82 | 0.941 | 0.986 | 0.024 | ||||
fever_evidence | noul | 1000 | 0.972 | 0.028 | 0.025 | 0.11 | 0.986 | 0.996 | 0.006 | 0.991 | |||
go_emotions | choice | 1000 | 0.282 | 0.384 | 1.040 | 9.89 | 0.294 | 0.370 | 0.590 | 0.677 | |||
helpsteer2_helpfulness | score | 1000 | 0.363 | 0.232 | 0.812 | 3.25 | 0.373 | 0.432 | 0.537 | 0.173 | 0.96 | ||
helpsteer2_verbosity | score | 1000 | 0.341 | 0.231 | 0.793 | 1.86 | 0.368 | 0.424 | 0.594 | 0.132 | 0.72 | ||
ledgar | choice | 1000 | 0.751 | 0.117 | 0.374 | 2.29 | 0.794 | 0.942 | 0.095 | ||||
massive | choice | 1000 | 0.808 | 0.090 | 0.295 | 1.92 | 0.859 | 0.968 | 0.056 | ||||
measuring_hate_speech | score | 1000 | 0.527 | 0.237 | 0.669 | 2.75 | 0.538 | 0.720 | 0.289 | 0.267 | 0.71 | 0.428 | |
mmlu | choice | 1000 | 0.923 | 0.027 | 0.124 | 0.46 | 0.960 | 0.986 | 0.021 | ||||
mnli | choice | 1000 | 0.883 | 0.032 | 0.176 | 0.50 | 0.917 | 0.982 | 0.035 | ||||
paws | noul | 1000 | 0.846 | 0.040 | 0.109 | 0.34 | 0.878 | 0.976 | 0.048 | 0.932 | |||
sms_spam | noul | 800 | 0.965 | 0.068 | 0.035 | 0.15 | 0.985 | 0.993 | 0.010 | 0.976 | |||
sst5 | score | 1000 | 0.565 | 0.190 | 0.618 | 1.90 | 0.586 | 0.664 | 0.327 | 0.089 | 0.50 | ||
strategyqa_closed | noul | 687 | 0.785 | 0.042 | 0.144 | 0.45 | 0.820 | 0.910 | 0.091 | 0.885 | |||
strategyqa_grounded | noul | 687 | 0.956 | 0.059 | 0.038 | 0.15 | 0.984 | 1.000 | 0.004 | 0.994 | |||
stsb | score | 1000 | 0.538 | 0.119 | 0.594 | 1.31 | 0.554 | 0.626 | 0.333 | 0.072 | 0.55 | ||
yelp5 | score | 1000 | 0.685 | 0.174 | 0.483 | 1.85 | 0.707 | 0.792 | 0.202 | 0.064 | 0.35 |
Reliability diagrams — stated confidence vs observed accuracy per config. Flat lines mean the confidence carries no information.

Model vs human probability on the calibration-gold configs — the axis that separates a decision model from a classifier.

Does its confidence know when humans disagree? On ChaosNLI (100 annotators per item) Jev's confidence is flat — 0.81 / 0.84 / 0.83 / 0.88 as human agreement goes from split (< 50%, n = 191) through contested (50–70%, n = 828) and clear (70–90%, n = 523) to consensus (≥ 90%, n = 57); Pearson r = 0.046 — while its accuracy on the same bands runs 0.47 / 0.55 / 0.73 / 0.96. It is more confident than the human majority on 80% of items.

Risk–coverage — the error rate a confidence-gated router actually gets at each coverage.

Performance vs decision-set size (cross-dataset, so difficulty is confounded — a hypothesis view).

Within-item experiments: the same state and gold answer, one factor changed. 200 items per source. Full write-up in results/jev-1.13.0/probes/README.md.

The same three primitives, asked about an image. Records are built in memory from POPE (object hallucination, Noul),
A-OKVQA (knowledge VQA, Choice K=4) and AI2D (science diagrams, Choice); the model is a vision-language checkpoint with
no training, scored the same way as everything above, then given the Tier 0 recipe (a temperature per primitive and a
Noul bias, fitted on validation splits only — POPE's is carved from its single split). Predictions and a text-only
records manifest are in results/qwen3vl-2b/; the model is published as
Praveenrajus/jevify-qwen3-vl-2b.
| model | source | primitive | n | acc | ECE raw | ECE fitted | Brier | AUROC |
|---|---|---|---|---|---|---|---|---|
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | pope | noul | 2,000 | 0.891 | 0.086 | 0.046 | 0.079 | 0.958 |
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | aokvqa | choice | 744 | 0.793 | 0.124 | 0.037 | 0.299 | — |
| Qwen/Qwen3-VL-2B-Instruct (Tier 0) | ai2d | choice | 1,500 | 0.652 | 0.175 | 0.059 | 0.454 | — |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | pope | noul | 2,000 | 0.889 | 0.096 | 0.025 | 0.081 | 0.955 |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | aokvqa | choice | 744 | 0.868 | 0.094 | 0.032 | 0.202 | — |
| Qwen/Qwen3-VL-8B-Instruct (Tier 0) | ai2d | choice | 1,500 | 0.767 | 0.137 | 0.038 | 0.315 | — |
| Qwen/Qwen3.5-9B (Tier 0) | pope | noul | 2,000 | 0.895 | 0.044 | 0.030 | 0.077 | 0.959 |
| Qwen/Qwen3.5-9B (Tier 0) | aokvqa | choice | 744 | 0.876 | 0.030 | 0.028 | 0.186 | — |
| Qwen/Qwen3.5-9B (Tier 0) | ai2d | choice | 1,500 | 0.750 | 0.059 | 0.060 | 0.318 | — |
| google/gemma-4-12B-it (Tier 0) | pope | noul | 2,000 | 0.868 | 0.120 | 0.035 | 0.095 | 0.944 |
| google/gemma-4-12B-it (Tier 0) | aokvqa | choice | 744 | 0.825 | 0.120 | 0.049 | 0.261 | — |
| google/gemma-4-12B-it (Tier 0) | ai2d | choice | 1,500 | 0.746 | 0.137 | 0.055 | 0.361 | — |
The raw readout shows the text ordering (Noul better calibrated than Choice); the recipe erases it. After a per-primitive temperature the three sources sit within 0.02 ECE of each other. The raw gap measured how much a scalar could fix, not which primitive is easier.
A starved vision encoder degrades safely. Holding records, prompt and decoder fixed and moving only the pixel
budget: from 42 to 187 median image tokens, accuracy rises 0.048 and ECE falls 0.037. Losing accuracy while
keeping confidence — confident hallucination — never appears at any budget tested. The budget also saturates
silently (512 and 1024 patches both give 280 tokens), which only the measured token count reveals.
Sweep data: results/vision-budget/.
Served, an image question takes 68–79 ms on one A40 (~350 input tokens, ~85% of them image), four questions
about one image 221 ms in one batched forward, 12.6 records/s batched — under Jev's 180–220 ms text round trip.
results/latency/latency_vision.md.
The vision tower is the wrong half to adapt. Three rank-16 LoRAs trained on the readout over 2,000 A-OKVQA records,
confined to the tower, the decoder, or both, then recipe-fitted: the decoder adapter transfers to AI2D, a source it never
saw (0.652 → 0.707, ECE 0.059 → 0.041; macro ECE 0.047 → 0.035), the tower adapter barely (0.669), and both together
is not additive (0.697). After the decoder LoRA the fitted Choice temperature is 1.001: a proper scoring rule on the readout
made the recipe redundant on the trained primitive. One seed per arm.
results/qwen3vl-2b-t2-{vision,decoder,both}/, published as
Praveenrajus/jevify-qwen3-vl-2b-t2.


Jev's round trip barely moves with the number of options. Probes against the API with the server's own clock
(x-envoy-upstream-service-time) explain it as ~75 ms fixed + ~5.5 µs per input token, linear to 27,000 tokens,
with option tokens costing exactly what state tokens cost — no cache, no fixed window, no batching wait — and an
answer template filled in one pass rather than decoded (2,570 "output" tokens in 128 ms at K=255). Data and figure:
results/jev-latency-probe/.
A Jevified model measured the same way on one A40: the research path pays ~120 µs per token; the same model through
vLLM pays ~48 µs, halves the fixed floor and runs 4–5× more records per second — the same shape as Jev's curve, from
throughput rather than from any option-specific mechanism. results/latency/.

At 8–12B. Qwen3-VL-8B answers an image question in 120 ms on one A40, Gemma-4-12B in 175 ms, Qwen3.5-9B in 170 ms
(its hybrid layers run on reference kernels here) — all under Jev's text round trip. Qwen3.5-9B text through vLLM: 56–70 ms
for K ≤ 27, 321 ms at K=151 (Jev 219). And on the same model and prompt, the readout costs the prefill while decoding the
answer costs 52–106 ms per token on top: an eight-token answer is 4–7× the readout, a 32-token one 13–27×.
results/latency/latency_8b*.md, latency_vision_*.md,
latency_generate_*.md.

| path | contents |
|---|---|
data/<config>/{train,validation,test}.jsonl | the benchmark (the configs above; the dataset viewer reads these) |
manifest.json | per-source provenance, sampling seed, split sizes, licences |
results/<model>/ | per model: predictions, test_metrics.json (with reliability bins), the fitted recipe, figures |
results/leaderboard/ | the table and figures above |
results/post-training/ | every training stage of five model families and every readout fine-tune, one battery (README) |
results/jev-1.13.0/ | the Jev baseline, its figures and the probe suite |
results/b/, results/community/ | the three new tests; three Jev benchmarks written by other people |
results/c/, results/phishing-recalibration/ | retraining the 4B the Tev1 way; the phishing threshold |
results/README.md | the full index, one row per folder |
Every weak result was checked by reading samples of the model's errors. Verdicts, examples and the two v0.1.1 fixes that
came out of it are in results/jev-1.13.0/README.md.
helpsteer2_verbosity levels replaced with NVIDIA's verbatim length scale (v0.1 misdescribed them);
go_emotions rebuilt from raw per-rater votes with soft labels; other configs unchanged.Data v0.1.1, built with jevify-bench on 2026-09-20; results updated as they are measured.