Praveenrajus/jev-bench

Dataset

jev-bench

7

115 commits

2 linked in READMEs

updated Oct 2, 2026

See the code

README

jev-bench

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 jev-bench: accuracy vs calibration

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 measuresTyped 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 modelQwen-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 leadsthe 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

Quick start

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).

primitivethe questionwhat comes backexample config
choicewhich of these K options?probabilities over options + confidenceclinc150 (151 intents incl. out-of-scope)
scorewhere on these K ordered levels?probabilities over levels, expected score, confidencehelpsteer2_helpfulness (0–4 Likert)
noulis 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.

The data

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.

Choice

configKdomainquestiontest / val / trainhuman distributionlicense
banking7777customer-supportRoute a customer's banking message to one of 77 intents.1,000 / 500 / 8,000cc-by-4.0 (PolyAI; mirror: mit)
clinc150151virtual-assistantClassify an assistant query into one of 150 intents or 'oos' (out of scope).1,000 / 500 / 8,000cc-by-3.0
massive60virtual-assistantClassify a smart-assistant utterance into one of 60 intents.1,000 / 500 / 8,000cc-by-4.0 (Amazon; mirror: apache-2.0)
ledgar100legalClassify a contract clause into one of 100 provision categories.1,000 / 500 / 8,000cc-by-4.0
go_emotions28socialWhich emotion does a Reddit comment primarily express (27 emotions + neutral)? soft_label = rater vote shares.1,000 / 500 / 8,000yesapache-2.0
mmlu4knowledgeAnswer a multiple-choice exam question (A/B/C/D) across 57 academic subjects.1,000 / 500 / 285mit
arc_challengevariableknowledgeAnswer a science exam question from its lettered options.1,000 / 299 / 1,119cc-by-sa-4.0
mnli3nliDoes the hypothesis follow from, contradict, or remain undetermined by the premise?1,000 / 500 / 8,000other (GLUE/MultiNLI, research use)
chaosnli3nliMNLI items re-annotated by 100 crowdworkers each; soft_label = human vote shares (calibration gold).1,599 / 0 / 0yescc-by-sa-4.0 (ChaosNLI; Hub mirror of the MNLI portion)

Score

configKdomainquestiontest / val / trainhuman distributionlicense
sst55reviewsRate the sentiment of a movie-review sentence on five levels.1,000 / 500 / 8,000unspecified (Stanford Sentiment Treebank)
yelp55reviewsPredict the star rating (1–5) a Yelp reviewer gave from the review text.1,000 / 500 / 8,000other (Yelp Dataset License, research use)
helpsteer2_helpfulness5llm-judgingRate how helpful an assistant response is to the user's prompt (HelpSteer2 helpfulness, 0–4).1,000 / 500 / 8,000cc-by-4.0
helpsteer2_verbosity5llm-judgingRate the length of an assistant response relative to what the prompt asked for (HelpSteer2 verbosity, 0 succinct – 4 verbose).1,000 / 500 / 8,000cc-by-4.0
stsb6nliRate how similar in meaning two sentences are on the 0–5 STS scale.1,000 / 500 / 5,749cc-by-sa-4.0 (STS Benchmark)
measuring_hate_speech3safetyDoes the comment contain hate speech? Three levels with annotator distributions as soft labels.1,000 / 500 / 8,000yescc-by-4.0

Noul

configKdomainquestiontest / val / trainhuman distributionlicense
boolqvariablereading-comprehensionGiven a Wikipedia passage, is the answer to the question yes?1,000 / 472 / 8,000cc-by-sa-3.0
fever_evidencevariablefact-checkingGiven gold Wikipedia evidence sentences, is the claim supported (yes) or refuted (no)?1,000 / 500 / 8,000cc-by-sa-3.0
pawsvariablenliDo two sentences with high lexical overlap actually mean the same thing?1,000 / 500 / 8,000other (Google PAWS, free for research and commercial use)
civil_commentsvariablesafetyIs this online comment toxic? Soft label = share of annotators who said yes.2,000 / 500 / 8,000yescc0-1.0
sms_spamvariablemessagingIs this SMS message spam?800 / 237 / 4,000unknown (UCI SMS Spam Collection, public)
strategyqa_closedvariableknowledgeAnswer an implicit multi-hop yes/no question from world knowledge alone.687 / 160 / 1,400mit
strategyqa_groundedvariableknowledgeSame questions with the supporting facts supplied in the state.687 / 160 / 1,400mit

Licenses are those of the upstream datasets; this repackaging adds no restrictions. Per-source provenance is in manifest.json.

Why we measure coherence

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.

Leaderboard

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.

modeltiermacro accmacro ECEmacro Briersel@90choice accscore accnoul accTVD→humanGPUtest cost
Jev 1.13.0 (TypeSafe API)API0.7330.1130.3490.7600.7700.5030.8810.432
Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence)Readout FT0.7700.0550.2920.7990.7920.5660.9170.305
Qwen/Qwen3.5-9B (readout LoRA + coherence)Readout FT0.7630.0560.2990.7910.7910.5540.9060.301
Qwen/Qwen3.5-4B (readout LoRA + coherence)Readout FT0.7510.0580.3160.7790.7710.5550.8930.303
perplexity-ai/pplx-decider-v1-27b (hosted API, as served)External0.7480.0800.3180.7740.7750.5190.9110.378$0.33
google/gemma-4-E4B-it (readout LoRA + coherence)Readout FT0.7420.0530.3220.7720.7590.5460.8890.297
Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05)Tier 2 residual0.7340.0960.3420.7620.7610.5180.8840.337A40
google/gemma-4-12B-itTier 00.7160.0860.3590.7400.7490.5070.8550.405A40
Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds)Tier 1 residual0.7140.0710.3620.7400.7250.5070.8780.376A40
togethercomputer/Tev1-4B-experimental (Tev1 prompt)External0.7030.0860.3610.7320.7170.5120.8500.394A40
Qwen/Qwen3.5-9BTier 00.6890.0920.3790.7170.7160.5030.8150.423A40
All 46 rows, and accuracy / ECE per config for every drawn model
modeltiermacro accmacro ECEmacro Briersel@90choice accscore accnoul accTVD→humanGPUtest cost
Jev 1.13.0 (TypeSafe API)API0.7330.1130.3490.7600.7700.5030.8810.432
Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence)Readout FT0.7700.0550.2920.7990.7920.5660.9170.305
Qwen/Qwen3.5-9B (readout LoRA + coherence)Readout FT0.7630.0560.2990.7910.7910.5540.9060.301
Qwen/Qwen3.5-9B (readout LoRA)Readout FT0.7590.0520.3020.7870.7900.5410.9050.314
Qwen/Qwen3.5-4B (readout LoRA + coherence)Readout FT0.7510.0580.3160.7790.7710.5550.8930.303
perplexity-ai/pplx-decider-v1-27b (hosted API, as served)External0.7480.0800.3180.7740.7750.5190.9110.378$0.33
Qwen/Qwen3.5-4B-Base (readout LoRA + coherence)Readout FT0.7470.0580.3180.7770.7710.5350.8970.314
Qwen/Qwen3.5-4B (Tier 2 residual)Tier 2 residual0.7470.1100.3420.7740.7700.5290.9030.347A40
Qwen/Qwen3.5-4B (readout LoRA)Readout FT0.7430.0590.3210.7720.7660.5300.8960.326
google/gemma-4-E4B-it (readout LoRA + coherence)Readout FT0.7420.0530.3220.7720.7590.5460.8890.297
Qwen/Qwen3.5-4B-Base (readout LoRA)Readout FT0.7410.0640.3240.7700.7680.5220.8930.324
google/gemma-4-E4B-it (readout LoRA)Readout FT0.7370.0570.3300.7660.7540.5310.8920.316
Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05)Tier 2 residual0.7340.0960.3420.7620.7610.5180.8840.337A40
google/gemma-4-12B-itTier 00.7160.0860.3590.7400.7490.5070.8550.405A40
Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds)Tier 1 residual0.7140.0710.3620.7400.7250.5070.8780.376A40
Qwen/Qwen-AgentWorld-35B-A3BTier 00.7090.0770.3500.7350.7540.4730.8520.408L40S
google/gemma-4-E4B (readout LoRA)Readout FT0.7080.0610.3590.7360.7170.5020.8740.335
Qwen/Qwen3.5-2B (readout full fine-tune + coherence)Readout FT0.7040.0560.3580.7350.7180.5100.8530.307
togethercomputer/Tev1-4B-experimental (Tev1 prompt)External0.7030.0860.3610.7320.7170.5120.8500.394A40
Qwen/Qwen3.5-2B (readout full fine-tune)Readout FT0.7030.0560.3580.7340.7150.5090.8550.315
Qwen/Qwen3.5-2B-Base (readout LoRA + coherence)Readout FT0.7020.0510.3650.7310.7140.5090.8520.320
Qwen/Qwen3.5-2B (readout LoRA + coherence)Readout FT0.7020.0540.3640.7290.7180.4960.8580.315
Qwen/Qwen3.5-2B (readout LoRA)Readout FT0.7010.0510.3620.7300.7130.5080.8490.324
Qwen/Qwen3.5-4B (Tier 1 residual)Tier 1 residual0.6980.0890.3780.7290.6990.5070.8620.360A100-80GB$1.28
Qwen/Qwen3.5-2B-Base (readout LoRA)Readout FT0.6960.0530.3650.7250.7140.4870.8520.342
Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05, soft labels)Tier 2 residual0.6940.1050.3900.7240.6970.4970.8590.364A40
togethercomputer/Tev1-4B-experimental (Jevify prompt)External0.6900.0880.3690.7180.7140.4870.8340.408A40
Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05)Tier 2 residual0.6900.1030.3890.7200.6930.5100.8400.332A40
Qwen/Qwen3.5-9BTier 00.6890.0920.3790.7170.7160.5030.8150.423A40
Qwen/Qwen3.5-2B (Tier 2 residual)Tier 2 residual0.6850.1160.4100.7130.6710.5080.8540.370A40
Qwen/Qwen3.5-2B (Tier 2 residual, soft labels)Tier 2 residual0.6740.1160.4120.7030.6820.4710.8370.433A40
Qwen/Qwen3.5-4B (Tev1 prompt)Tier 00.6730.1040.4020.7020.6870.4990.8050.421A40
Qwen/Qwen3.5-4BTier 00.6620.0900.4010.6890.6870.4680.7960.438A100-80GB$0.96
google/gemma-4-E4B-itTier 00.6580.0920.3980.6820.7000.4320.7980.434A100-80GB$1.00
Qwen/Qwen3.5-2B (Tier 1 residual)Tier 1 residual0.6320.0690.4450.6570.5960.4490.8350.374A100-80GB$0.67
Qwen/Qwen3.5-2B (Tier 1 residual, 6-epoch cap, mean of 5 seeds)Tier 1 residual0.6310.0780.4500.6550.6030.4450.8270.373A40
IFM/K2-Horizon-7BTier 00.6230.0930.4360.6470.6170.4090.8130.434A40
Qwen/Qwen3.5-2B (Tier 1 replace)Tier 1 replace0.5990.0830.4750.6210.5670.3780.8280.416A100-80GB$0.62
google/gemma-4-E2B-itTier 00.5910.1230.4840.6120.5940.4400.7160.492L4$0.75
Qwen/Qwen3.5-2BTier 00.5770.0890.4850.5990.5450.4240.7500.458A100-80GB$0.66
HuggingFaceTB/SmolLM3-3BTier 00.5520.1110.5190.5700.5040.4010.7440.460A100-80GB$0.64
Qwen/Qwen3.5-0.8BTier 00.5260.1120.5420.5440.4360.3880.7590.440L4$0.55
Qwen/Qwen3.5-0.8B-BaseTier 00.4660.1050.5820.4780.3260.4120.6920.452L4$0.50
IFM/K2-Horizon-0.9BTier 00.4480.1190.5890.4610.3440.3430.6700.479L4$0.35
google/gemma-4-E2BTier 00.3960.1150.6090.4040.2470.3820.6000.496L4$0.69
CLM-v0.1-8B (Contrastive-LM, self-hosted)External0.3400.3380.8140.3490.2130.2340.5930.669

accuracy per config

ECE per config

Highlights

Jev, measured

  • Excellent and calibrated on crisp, grounded questions (ARC 0.979 at ECE 0.010, FEVER 0.972) — and over-confident exactly where humans disagree: on ChaosNLI its confidence stays at 0.81–0.88 while its accuracy runs 0.47 → 0.96 across human-agreement bands (r = 0.046). Baseline
  • Applies a rule written into the question at 0.924 — its largest lead over every open model. New tests
  • ~75 ms + 5.5 µs per input token, flat in the number of options: the answer is read, not decoded. Latency

Open models, no training (Tier 0)

  • A readout plus a validation-fitted temperature matches Jev's calibration, not its accuracy: Gemma-4-12B-it 0.716 / ECE 0.086, Qwen3.5-9B 0.689 / 0.092.
  • On a phishing benchmark written by someone else, untrained Gemma-4-12B beats Jev by twenty points (0.825 vs 0.628). Community benchmarks

Training on the decision itself (post-training study, FINDINGS 18)

  • Readout fine-tuning puts open models above Jev overall: 9B 0.763 / ECE 0.056, 4B 0.751 / 0.058, Gemma-4-E4B 0.742 / 0.053, with TVD to human labels ~0.30 against Jev's 0.43.
  • Trained alone, each question gets sharper while its implied siblings drift: answers to related questions contradict each other more (sure loss 0.15 → 0.28 at 4B). A coherence penalty cuts that tenfold, to 0.02–0.03 — below Jev's 0.081 — at no accuracy cost, at every size, in both families and under full fine-tuning.
  • Starting from the base checkpoint ends in the same place in Qwen3.5 (4B: 0.741 vs 0.743) and closes most of Gemma's wider gap.
  • A 35B mixture-of-experts model has the highest accuracy in the table. Qwen-AgentWorld-35B-A3B (about 3B active parameters), readout fine-tuned with the coherence penalty: 0.770 accuracy, ECE 0.055, TVD 0.305, sure loss 0.030 (one seed), up from 0.709 / 0.077 / 0.408 / 0.138 untuned. It gives back accuracy on two rating scales (yelp5 62.3 to 52.2, sst5 56.7 to 52.2). Model.

What post-training does to a decision readout (FINDINGS 17)

  • Base checkpoints range from under- to over-confident (fitted temperature 0.6–1.7). Where the SFT checkpoint is published, SFT leaves the readout close to calibrated, and preference optimisation (Tülu DPO, SmolLM3 APO) then makes it over-confident at flat accuracy — two labs, two algorithms.
  • 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.

Beyond jev-bench

  • Fine-tunes stop flagging phishing while keeping their ranking — a moved threshold, repaired by one shift fitted on sixteen labelled emails. Phishing threshold
  • Readout fine-tuning cuts injected-instruction hijacks from ~0.3 to ~0.1. New tests
Results log — every result as it was found (later entries supersede earlier ones)
  • Post-training shapes the readout stage by stage (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.
  • Readout fine-tuning with a coherence penalty gives the best open decision models here (FINDINGS 18). Trained on its own decision distribution, Qwen3.5-4B reaches 0.751 macro accuracy at ECE 0.058 and TVD 0.303 to human labels (Jev 0.733 / 0.113 / 0.432); without the penalty, fine-tuning makes answers to related questions contradict each other (sure loss 0.15 → 0.28), and the penalty cuts that tenfold, to 0.029 — below Jev's 0.081 — at no accuracy cost. Same at 2B, 9B and on Gemma-4-E4B; starting from the base checkpoint ends in the same place. Models: jevify-qwen3.5-4b-readout-coh and nine siblings (2B/4B/9B, Gemma-4-E4B, base starts), each with a reproduction check.
  • Given a rule, Jev applies it; no open model does yet. Three new tests (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).
  • Retraining the 4B Tier 2 the Tev1 way did not help. Together's generated data and shuffled options, alone and together, moved held-out accuracy by −0.003 to −0.015 and left the phishing collapse in place; a fine-tune's behaviour outside jev-bench varies between identical runs far more than its jev-bench score does (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/).
  • On three Jev benchmarks written by other people, an untrained 12B beats Jev by twenty points on phishing. Gemma-4-12B at Tier 0: 0.825 on 2,000 phishing emails against Jev's 0.628 (McNemar p = 10⁻⁸⁷); the untrained Qwen3.5-4B readout: 0.700 at ECE 0.023. Records identical, all 2,087, to the inputs Together AI used. Details: results/community/.
  • Fine-tuning broke both fine-tuned 4Bs on phishing — Together's Tev1 and our own Tier 2. They flag 0.6% and 6.1% of the emails where their shared base flags 23.6% (16.3% in Tev1's own prompt, so the prompt is not the cause).
  • Tev1 on jev-bench: 0.703 macro, ECE 0.086 (read in its own prompt, recipe fitted on validation; answers identical to Together's hosted model on 2,086 of 2,087 shared items). The fine-tune adds +0.030 over its base at equal prompt, almost all on the four tasks it trained on (+0.003 held-out); Tev1's prompt format alone lifts the untrained base +0.044 on the held-out sources. Details: results/tev1-comparison/.
  • CLM-v0.1-8B (Stanford / NVIDIA contrastive model), served by its own code: 0.340 macro, ECE 0.338 — near chance on knowledge and many-option configs; probed by hand before reporting. Details: results/clm-8b/.
  • Perplexity's pplx-decider-v1-27b on jev-bench: 74.8% macro accuracy, ECE 0.080, 84.0% on the six held-out tasks (their hosted API, as served; all 22,773 test records, no errors). It beats Jev overall (+1.6 points, interval [+1.1, +2.0]) and ties it on the held-out tasks, and it is better calibrated than Jev as served, but it is the least coherent system measured (sure loss 0.219 against Jev's 0.081; coherence-penalty fine-tunes reach 0.02-0.03). Its card's "JevBench public hard" row is a different benchmark of the same name. Details: results/pplx-decider-v1-27b/.
  • An open 4B is now above Jev on the overall number. Qwen3.5-4B with LoRA + residual heads (Tier 2): macro accuracy 0.747 vs 0.733, ECE 0.110 vs 0.113, Noul 0.903 vs 0.881, TVD to human distributions 0.347 vs 0.432. The qualifier: on the six sources it never trained on, Jev leads 0.835 to 0.769. One seed.
  • An open 4B now matches or beats Jev on every macro number. Qwen3.5-4B, Tier 2 at LoRA lr 3e-5: accuracy 0.734 vs 0.733, ECE 0.096 vs 0.113, TVD to human distributions 0.337 vs 0.432. Jev still leads the six held-out sources (0.835 vs 0.765). Published as Praveenrajus/jevify-qwen3.5-4b-t2-lowlr.
  • At 9B, a frozen backbone with heads beats Jev where it trained. Three seeds with the six-epoch cap: held-out 0.743 ± 0.002, trained-source 0.703 / ECE 0.064 vs Jev's 0.694 / 0.122.
  • Our recipe fitter read the rounded wire format and zeroed real high-K probabilities; fixed and every Tier 0 run refitted. The Gemma-4 instruct models were the ones it hurt (12B 0.149 → 0.086, E4B-it 0.148 → 0.092, E2B-it 0.158 → 0.123); nothing else moved by more than 0.003. Details: results/recipe-k/.
  • Seed variance, measured — and explained. Five seeds of the Qwen3.5-2B residual head: held-out accuracy 0.579 ± 0.049 (two seeds match Tier 0's 0.628, three regress by ~0.09), trained accuracy 0.635 ± 0.007. The earlier claim that the residual "erases" the held-out regression was one seed at the top of that spread. The weight the head learns on the model's own log-score separates the basins (0.95 for the seeds that held up, 0.92–0.93 for the ones that collapsed; the same ordering over five 4B seeds), and capping training at six epochs collapses the spread to 0.621 ± 0.004 with the trained gain intact. At 4B over five seeds the trained gain (+0.047) is robust and the held-out gain is not (0.715 ± 0.025 vs Tier 0's 0.714). Per-seed results: results/qwen35-2b-t1r-s0 … -s4, results/qwen35-2b-t1r-e6-s0 … -s4, results/qwen35-4b-t1r-s1 … -s4.
  • Jevified open models beat Jev on calibration and on human agreement. Qwen3.5-4B with residual heads reaches macro accuracy 0.698 against Jev's 0.733, ECE 0.089 vs 0.113, TVD to human label distributions 0.360 vs 0.432, and Score accuracy 0.507 vs 0.503. Qwen3.5-2B reaches ECE 0.069, the best of anything tested.
  • LoRA (Tier 2) buys accuracy the frozen backbone cannot, and the learning rate decides its calibration — three seeds per arm. Qwen3.5-2B goes 0.632 → 0.690 macro accuracy (LoRA lr 3e-5) and the held-out ordinal scale gains +0.17 with better calibration. At 3e-5 the model is better than at 1e-4 on the six sources it never trained on — accuracy 0.716 ± 0.003 vs 0.700 ± 0.002, ECE 0.083 ± 0.004 vs 0.104 ± 0.014 — and its agreement with human label distributions (TVD 0.339) is the best of any model here (Jev 0.432). What the seeds took away: the low learning rate does not rescue calibration on ambiguous items — ChaosNLI ECE spans 0.16–0.33 across seeds in both arms, at Jev's 0.222 and far from the Tier 1 residual's 0.077 — and training on human label distributions did not help (TVD 0.433). Held-out accuracy under LoRA is seed-stable (±0.003) where the frozen-backbone head was bimodal (±0.049). Every 2B LoRA run overfits after one or two passes. Per-seed results: results/qwen35-2b-t2{,-s1,-s2}, results/qwen35-2b-t2-lowlr{,-s1,-s2}.
  • Held-out sources changed the architecture. Heads that replace the model's own scorer gain +0.077 accuracy on trained sources and lose −0.098 on held-out ones; a zero-initialized residual on that scorer keeps the gain and erases the regression. Holding out records instead of whole sources would have hidden it.

Tier 1: trained vs held-out sources

Three Jev benchmarks written by other people

Full catalogue with evidence and caveats: docs/FINDINGS.md.

Published models

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>).

familyrepos
Readout fine-tuned + coherenceqwen3.5-9b (supervised; + coherence to follow) · qwen3.5-4b-coh · qwen3.5-2b-coh · gemma-4-e4b-it-coh
Readout fine-tuned, supervisedqwen3.5-4b · qwen3.5-2b · gemma-4-e4b-it
From base checkpointsqwen3.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-expertsqwen-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
Visionqwen3-vl-2b (Tier 0) · qwen3-vl-2b-t2 (decoder LoRA)

Jev 1.13.0 baseline

accuracy vs calibration, one point per config

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.

Per-config table (22 configs, 14 metrics)
sourceprimnaccECEBrierNLLsel@90sel@50AURCRPSMAEAUROCTVD→human
arc_challengechoice10000.9790.0100.0370.190.9930.9960.005
banking77choice10000.7960.0950.3172.100.8390.9640.072
boolqnoul10000.9170.0210.0610.210.9530.9900.0170.978
chaosnlichoice15990.6150.2220.5831.710.6290.6910.2790.332
civil_commentsnoul20000.7290.0450.1830.550.7520.8370.1530.8290.289
clinc150choice10000.8930.0330.1590.820.9410.9860.024
fever_evidencenoul10000.9720.0280.0250.110.9860.9960.0060.991
go_emotionschoice10000.2820.3841.0409.890.2940.3700.5900.677
helpsteer2_helpfulnessscore10000.3630.2320.8123.250.3730.4320.5370.1730.96
helpsteer2_verbosityscore10000.3410.2310.7931.860.3680.4240.5940.1320.72
ledgarchoice10000.7510.1170.3742.290.7940.9420.095
massivechoice10000.8080.0900.2951.920.8590.9680.056
measuring_hate_speechscore10000.5270.2370.6692.750.5380.7200.2890.2670.710.428
mmluchoice10000.9230.0270.1240.460.9600.9860.021
mnlichoice10000.8830.0320.1760.500.9170.9820.035
pawsnoul10000.8460.0400.1090.340.8780.9760.0480.932
sms_spamnoul8000.9650.0680.0350.150.9850.9930.0100.976
sst5score10000.5650.1900.6181.900.5860.6640.3270.0890.50
strategyqa_closednoul6870.7850.0420.1440.450.8200.9100.0910.885
strategyqa_groundednoul6870.9560.0590.0380.150.9841.0000.0040.994
stsbscore10000.5380.1190.5941.310.5540.6260.3330.0720.55
yelp5score10000.6850.1740.4831.850.7070.7920.2020.0640.35

Reliability diagrams — stated confidence vs observed accuracy per config. Flat lines mean the confidence carries no information.

reliability

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

model vs human

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.

confidence vs agreement

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

risk coverage

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

vs cardinality

Behavioral probes

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.

cardinality probe

  • Decision-set size is a cost, not a cliff: clinc150 99.5% → 91.0% from K=2 to K=151, banking77 99.5% → 82.0% at K=77, with ECE ≤ 0.10 and mean P(gold) tracking accuracy throughout
  • Ambiguity is the cliff: GoEmotions is 85% at K=2 and 30% by K=25 (rater agreement with the plurality is only 0.66) while ECE climbs to 0.34 — confident and wrong
  • Option order: argmax flips 0–2.5% on crisp small-K tasks, 4–7.5% on large-K routing, 13% on GoEmotions — modest, and scaling with ambiguity, not K.
  • Opaque keys with descriptions kept: accuracy unchanged (banking77 0.82 → 0.81, clinc150 0.905 → 0.915, massive 0.815 → 0.805); without descriptions: chance. Jev reads semantics, not key strings.
  • Distractor injection: ≤3.3% of probability mass leaks to nonsense options.
  • Primitive geometry matters: the same yes/no question is better calibrated as Noul than as a 2-way Choice (BoolQ ECE 0.028 vs 0.054, Civil Comments 0.056 vs 0.126, at equal accuracy); Score beats an unordered Choice over the same levels (+2.5 points accuracy and lower ECE on sst5, yelp5 and helpsteer2).

Vision

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.

modelsourceprimitivenaccECE rawECE fittedBrierAUROC
Qwen/Qwen3-VL-2B-Instruct (Tier 0)popenoul2,0000.8910.0860.0460.0790.958
Qwen/Qwen3-VL-2B-Instruct (Tier 0)aokvqachoice7440.7930.1240.0370.299—
Qwen/Qwen3-VL-2B-Instruct (Tier 0)ai2dchoice1,5000.6520.1750.0590.454—
Qwen/Qwen3-VL-8B-Instruct (Tier 0)popenoul2,0000.8890.0960.0250.0810.955
Qwen/Qwen3-VL-8B-Instruct (Tier 0)aokvqachoice7440.8680.0940.0320.202—
Qwen/Qwen3-VL-8B-Instruct (Tier 0)ai2dchoice1,5000.7670.1370.0380.315—
Qwen/Qwen3.5-9B (Tier 0)popenoul2,0000.8950.0440.0300.0770.959
Qwen/Qwen3.5-9B (Tier 0)aokvqachoice7440.8760.0300.0280.186—
Qwen/Qwen3.5-9B (Tier 0)ai2dchoice1,5000.7500.0590.0600.318—
google/gemma-4-12B-it (Tier 0)popenoul2,0000.8680.1200.0350.0950.944
google/gemma-4-12B-it (Tier 0)aokvqachoice7440.8250.1200.0490.261—
google/gemma-4-12B-it (Tier 0)ai2dchoice1,5000.7460.1370.0550.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.

vision budget

three LoRA scopes

Latency

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/.

research path vs serving path

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.

reading the answer against decoding it

What is in this repo

pathcontents
data/<config>/{train,validation,test}.jsonlthe benchmark (the configs above; the dataset viewer reads these)
manifest.jsonper-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.mdthe full index, one row per folder

Label audit and changelog

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.

  • v0.1.1 — 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.
  • v0.1 — initial release.

Data v0.1.1, built with jevify-bench on 2026-09-20; results updated as they are measured.

benchmark
calibration
decision-model
human-label-distributions
jevify
system-one

Praveenrajus/jev-bench

Dataset

jev-bench

7

115 commits

2 linked in READMEs

updated Oct 2, 2026

See the code

README

jev-bench

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 jev-bench: accuracy vs calibration

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 measuresTyped 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 modelQwen-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 leadsthe 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

Quick start

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).

primitivethe questionwhat comes backexample config
choicewhich of these K options?probabilities over options + confidenceclinc150 (151 intents incl. out-of-scope)
scorewhere on these K ordered levels?probabilities over levels, expected score, confidencehelpsteer2_helpfulness (0–4 Likert)
noulis 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.

The data

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.

Choice

configKdomainquestiontest / val / trainhuman distributionlicense
banking7777customer-supportRoute a customer's banking message to one of 77 intents.1,000 / 500 / 8,000cc-by-4.0 (PolyAI; mirror: mit)
clinc150151virtual-assistantClassify an assistant query into one of 150 intents or 'oos' (out of scope).1,000 / 500 / 8,000cc-by-3.0
massive60virtual-assistantClassify a smart-assistant utterance into one of 60 intents.1,000 / 500 / 8,000cc-by-4.0 (Amazon; mirror: apache-2.0)
ledgar100legalClassify a contract clause into one of 100 provision categories.1,000 / 500 / 8,000cc-by-4.0
go_emotions28socialWhich emotion does a Reddit comment primarily express (27 emotions + neutral)? soft_label = rater vote shares.1,000 / 500 / 8,000yesapache-2.0
mmlu4knowledgeAnswer a multiple-choice exam question (A/B/C/D) across 57 academic subjects.1,000 / 500 / 285mit
arc_challengevariableknowledgeAnswer a science exam question from its lettered options.1,000 / 299 / 1,119cc-by-sa-4.0
mnli3nliDoes the hypothesis follow from, contradict, or remain undetermined by the premise?1,000 / 500 / 8,000other (GLUE/MultiNLI, research use)
chaosnli3nliMNLI items re-annotated by 100 crowdworkers each; soft_label = human vote shares (calibration gold).1,599 / 0 / 0yescc-by-sa-4.0 (ChaosNLI; Hub mirror of the MNLI portion)

Score

configKdomainquestiontest / val / trainhuman distributionlicense
sst55reviewsRate the sentiment of a movie-review sentence on five levels.1,000 / 500 / 8,000unspecified (Stanford Sentiment Treebank)
yelp55reviewsPredict the star rating (1–5) a Yelp reviewer gave from the review text.1,000 / 500 / 8,000other (Yelp Dataset License, research use)
helpsteer2_helpfulness5llm-judgingRate how helpful an assistant response is to the user's prompt (HelpSteer2 helpfulness, 0–4).1,000 / 500 / 8,000cc-by-4.0
helpsteer2_verbosity5llm-judgingRate the length of an assistant response relative to what the prompt asked for (HelpSteer2 verbosity, 0 succinct – 4 verbose).1,000 / 500 / 8,000cc-by-4.0
stsb6nliRate how similar in meaning two sentences are on the 0–5 STS scale.1,000 / 500 / 5,749cc-by-sa-4.0 (STS Benchmark)
measuring_hate_speech3safetyDoes the comment contain hate speech? Three levels with annotator distributions as soft labels.1,000 / 500 / 8,000yescc-by-4.0

Noul

configKdomainquestiontest / val / trainhuman distributionlicense
boolqvariablereading-comprehensionGiven a Wikipedia passage, is the answer to the question yes?1,000 / 472 / 8,000cc-by-sa-3.0
fever_evidencevariablefact-checkingGiven gold Wikipedia evidence sentences, is the claim supported (yes) or refuted (no)?1,000 / 500 / 8,000cc-by-sa-3.0
pawsvariablenliDo two sentences with high lexical overlap actually mean the same thing?1,000 / 500 / 8,000other (Google PAWS, free for research and commercial use)
civil_commentsvariablesafetyIs this online comment toxic? Soft label = share of annotators who said yes.2,000 / 500 / 8,000yescc0-1.0
sms_spamvariablemessagingIs this SMS message spam?800 / 237 / 4,000unknown (UCI SMS Spam Collection, public)
strategyqa_closedvariableknowledgeAnswer an implicit multi-hop yes/no question from world knowledge alone.687 / 160 / 1,400mit
strategyqa_groundedvariableknowledgeSame questions with the supporting facts supplied in the state.687 / 160 / 1,400mit

Licenses are those of the upstream datasets; this repackaging adds no restrictions. Per-source provenance is in manifest.json.

Why we measure coherence

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.

Leaderboard

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.

modeltiermacro accmacro ECEmacro Briersel@90choice accscore accnoul accTVD→humanGPUtest cost
Jev 1.13.0 (TypeSafe API)API0.7330.1130.3490.7600.7700.5030.8810.432
Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence)Readout FT0.7700.0550.2920.7990.7920.5660.9170.305
Qwen/Qwen3.5-9B (readout LoRA + coherence)Readout FT0.7630.0560.2990.7910.7910.5540.9060.301
Qwen/Qwen3.5-4B (readout LoRA + coherence)Readout FT0.7510.0580.3160.7790.7710.5550.8930.303
perplexity-ai/pplx-decider-v1-27b (hosted API, as served)External0.7480.0800.3180.7740.7750.5190.9110.378$0.33
google/gemma-4-E4B-it (readout LoRA + coherence)Readout FT0.7420.0530.3220.7720.7590.5460.8890.297
Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05)Tier 2 residual0.7340.0960.3420.7620.7610.5180.8840.337A40
google/gemma-4-12B-itTier 00.7160.0860.3590.7400.7490.5070.8550.405A40
Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds)Tier 1 residual0.7140.0710.3620.7400.7250.5070.8780.376A40
togethercomputer/Tev1-4B-experimental (Tev1 prompt)External0.7030.0860.3610.7320.7170.5120.8500.394A40
Qwen/Qwen3.5-9BTier 00.6890.0920.3790.7170.7160.5030.8150.423A40
All 46 rows, and accuracy / ECE per config for every drawn model
modeltiermacro accmacro ECEmacro Briersel@90choice accscore accnoul accTVD→humanGPUtest cost
Jev 1.13.0 (TypeSafe API)API0.7330.1130.3490.7600.7700.5030.8810.432
Qwen/Qwen-AgentWorld-35B-A3B (readout LoRA + coherence)Readout FT0.7700.0550.2920.7990.7920.5660.9170.305
Qwen/Qwen3.5-9B (readout LoRA + coherence)Readout FT0.7630.0560.2990.7910.7910.5540.9060.301
Qwen/Qwen3.5-9B (readout LoRA)Readout FT0.7590.0520.3020.7870.7900.5410.9050.314
Qwen/Qwen3.5-4B (readout LoRA + coherence)Readout FT0.7510.0580.3160.7790.7710.5550.8930.303
perplexity-ai/pplx-decider-v1-27b (hosted API, as served)External0.7480.0800.3180.7740.7750.5190.9110.378$0.33
Qwen/Qwen3.5-4B-Base (readout LoRA + coherence)Readout FT0.7470.0580.3180.7770.7710.5350.8970.314
Qwen/Qwen3.5-4B (Tier 2 residual)Tier 2 residual0.7470.1100.3420.7740.7700.5290.9030.347A40
Qwen/Qwen3.5-4B (readout LoRA)Readout FT0.7430.0590.3210.7720.7660.5300.8960.326
google/gemma-4-E4B-it (readout LoRA + coherence)Readout FT0.7420.0530.3220.7720.7590.5460.8890.297
Qwen/Qwen3.5-4B-Base (readout LoRA)Readout FT0.7410.0640.3240.7700.7680.5220.8930.324
google/gemma-4-E4B-it (readout LoRA)Readout FT0.7370.0570.3300.7660.7540.5310.8920.316
Qwen/Qwen3.5-4B (Tier 2 residual, lr 3e-05)Tier 2 residual0.7340.0960.3420.7620.7610.5180.8840.337A40
google/gemma-4-12B-itTier 00.7160.0860.3590.7400.7490.5070.8550.405A40
Qwen/Qwen3.5-9B (Tier 1 residual, 6-epoch cap, mean of 3 seeds)Tier 1 residual0.7140.0710.3620.7400.7250.5070.8780.376A40
Qwen/Qwen-AgentWorld-35B-A3BTier 00.7090.0770.3500.7350.7540.4730.8520.408L40S
google/gemma-4-E4B (readout LoRA)Readout FT0.7080.0610.3590.7360.7170.5020.8740.335
Qwen/Qwen3.5-2B (readout full fine-tune + coherence)Readout FT0.7040.0560.3580.7350.7180.5100.8530.307
togethercomputer/Tev1-4B-experimental (Tev1 prompt)External0.7030.0860.3610.7320.7170.5120.8500.394A40
Qwen/Qwen3.5-2B (readout full fine-tune)Readout FT0.7030.0560.3580.7340.7150.5090.8550.315
Qwen/Qwen3.5-2B-Base (readout LoRA + coherence)Readout FT0.7020.0510.3650.7310.7140.5090.8520.320
Qwen/Qwen3.5-2B (readout LoRA + coherence)Readout FT0.7020.0540.3640.7290.7180.4960.8580.315
Qwen/Qwen3.5-2B (readout LoRA)Readout FT0.7010.0510.3620.7300.7130.5080.8490.324
Qwen/Qwen3.5-4B (Tier 1 residual)Tier 1 residual0.6980.0890.3780.7290.6990.5070.8620.360A100-80GB$1.28
Qwen/Qwen3.5-2B-Base (readout LoRA)Readout FT0.6960.0530.3650.7250.7140.4870.8520.342
Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05, soft labels)Tier 2 residual0.6940.1050.3900.7240.6970.4970.8590.364A40
togethercomputer/Tev1-4B-experimental (Jevify prompt)External0.6900.0880.3690.7180.7140.4870.8340.408A40
Qwen/Qwen3.5-2B (Tier 2 residual, lr 3e-05)Tier 2 residual0.6900.1030.3890.7200.6930.5100.8400.332A40
Qwen/Qwen3.5-9BTier 00.6890.0920.3790.7170.7160.5030.8150.423A40
Qwen/Qwen3.5-2B (Tier 2 residual)Tier 2 residual0.6850.1160.4100.7130.6710.5080.8540.370A40
Qwen/Qwen3.5-2B (Tier 2 residual, soft labels)Tier 2 residual0.6740.1160.4120.7030.6820.4710.8370.433A40
Qwen/Qwen3.5-4B (Tev1 prompt)Tier 00.6730.1040.4020.7020.6870.4990.8050.421A40
Qwen/Qwen3.5-4BTier 00.6620.0900.4010.6890.6870.4680.7960.438A100-80GB$0.96
google/gemma-4-E4B-itTier 00.6580.0920.3980.6820.7000.4320.7980.434A100-80GB$1.00
Qwen/Qwen3.5-2B (Tier 1 residual)Tier 1 residual0.6320.0690.4450.6570.5960.4490.8350.374A100-80GB$0.67
Qwen/Qwen3.5-2B (Tier 1 residual, 6-epoch cap, mean of 5 seeds)Tier 1 residual0.6310.0780.4500.6550.6030.4450.8270.373A40
IFM/K2-Horizon-7BTier 00.6230.0930.4360.6470.6170.4090.8130.434A40
Qwen/Qwen3.5-2B (Tier 1 replace)Tier 1 replace0.5990.0830.4750.6210.5670.3780.8280.416A100-80GB$0.62
google/gemma-4-E2B-itTier 00.5910.1230.4840.6120.5940.4400.7160.492L4$0.75
Qwen/Qwen3.5-2BTier 00.5770.0890.4850.5990.5450.4240.7500.458A100-80GB$0.66
HuggingFaceTB/SmolLM3-3BTier 00.5520.1110.5190.5700.5040.4010.7440.460A100-80GB$0.64
Qwen/Qwen3.5-0.8BTier 00.5260.1120.5420.5440.4360.3880.7590.440L4$0.55
Qwen/Qwen3.5-0.8B-BaseTier 00.4660.1050.5820.4780.3260.4120.6920.452L4$0.50
IFM/K2-Horizon-0.9BTier 00.4480.1190.5890.4610.3440.3430.6700.479L4$0.35
google/gemma-4-E2BTier 00.3960.1150.6090.4040.2470.3820.6000.496L4$0.69
CLM-v0.1-8B (Contrastive-LM, self-hosted)External0.3400.3380.8140.3490.2130.2340.5930.669

accuracy per config

ECE per config

Highlights

Jev, measured

  • Excellent and calibrated on crisp, grounded questions (ARC 0.979 at ECE 0.010, FEVER 0.972) — and over-confident exactly where humans disagree: on ChaosNLI its confidence stays at 0.81–0.88 while its accuracy runs 0.47 → 0.96 across human-agreement bands (r = 0.046). Baseline
  • Applies a rule written into the question at 0.924 — its largest lead over every open model. New tests
  • ~75 ms + 5.5 µs per input token, flat in the number of options: the answer is read, not decoded. Latency

Open models, no training (Tier 0)

  • A readout plus a validation-fitted temperature matches Jev's calibration, not its accuracy: Gemma-4-12B-it 0.716 / ECE 0.086, Qwen3.5-9B 0.689 / 0.092.
  • On a phishing benchmark written by someone else, untrained Gemma-4-12B beats Jev by twenty points (0.825 vs 0.628). Community benchmarks

Training on the decision itself (post-training study, FINDINGS 18)

  • Readout fine-tuning puts open models above Jev overall: 9B 0.763 / ECE 0.056, 4B 0.751 / 0.058, Gemma-4-E4B 0.742 / 0.053, with TVD to human labels ~0.30 against Jev's 0.43.
  • Trained alone, each question gets sharper while its implied siblings drift: answers to related questions contradict each other more (sure loss 0.15 → 0.28 at 4B). A coherence penalty cuts that tenfold, to 0.02–0.03 — below Jev's 0.081 — at no accuracy cost, at every size, in both families and under full fine-tuning.
  • Starting from the base checkpoint ends in the same place in Qwen3.5 (4B: 0.741 vs 0.743) and closes most of Gemma's wider gap.
  • A 35B mixture-of-experts model has the highest accuracy in the table. Qwen-AgentWorld-35B-A3B (about 3B active parameters), readout fine-tuned with the coherence penalty: 0.770 accuracy, ECE 0.055, TVD 0.305, sure loss 0.030 (one seed), up from 0.709 / 0.077 / 0.408 / 0.138 untuned. It gives back accuracy on two rating scales (yelp5 62.3 to 52.2, sst5 56.7 to 52.2). Model.

What post-training does to a decision readout (FINDINGS 17)

  • Base checkpoints range from under- to over-confident (fitted temperature 0.6–1.7). Where the SFT checkpoint is published, SFT leaves the readout close to calibrated, and preference optimisation (Tülu DPO, SmolLM3 APO) then makes it over-confident at flat accuracy — two labs, two algorithms.
  • 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.

Beyond jev-bench

  • Fine-tunes stop flagging phishing while keeping their ranking — a moved threshold, repaired by one shift fitted on sixteen labelled emails. Phishing threshold
  • Readout fine-tuning cuts injected-instruction hijacks from ~0.3 to ~0.1. New tests
Results log — every result as it was found (later entries supersede earlier ones)
  • Post-training shapes the readout stage by stage (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.
  • Readout fine-tuning with a coherence penalty gives the best open decision models here (FINDINGS 18). Trained on its own decision distribution, Qwen3.5-4B reaches 0.751 macro accuracy at ECE 0.058 and TVD 0.303 to human labels (Jev 0.733 / 0.113 / 0.432); without the penalty, fine-tuning makes answers to related questions contradict each other (sure loss 0.15 → 0.28), and the penalty cuts that tenfold, to 0.029 — below Jev's 0.081 — at no accuracy cost. Same at 2B, 9B and on Gemma-4-E4B; starting from the base checkpoint ends in the same place. Models: jevify-qwen3.5-4b-readout-coh and nine siblings (2B/4B/9B, Gemma-4-E4B, base starts), each with a reproduction check.
  • Given a rule, Jev applies it; no open model does yet. Three new tests (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).
  • Retraining the 4B Tier 2 the Tev1 way did not help. Together's generated data and shuffled options, alone and together, moved held-out accuracy by −0.003 to −0.015 and left the phishing collapse in place; a fine-tune's behaviour outside jev-bench varies between identical runs far more than its jev-bench score does (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/).
  • On three Jev benchmarks written by other people, an untrained 12B beats Jev by twenty points on phishing. Gemma-4-12B at Tier 0: 0.825 on 2,000 phishing emails against Jev's 0.628 (McNemar p = 10⁻⁸⁷); the untrained Qwen3.5-4B readout: 0.700 at ECE 0.023. Records identical, all 2,087, to the inputs Together AI used. Details: results/community/.
  • Fine-tuning broke both fine-tuned 4Bs on phishing — Together's Tev1 and our own Tier 2. They flag 0.6% and 6.1% of the emails where their shared base flags 23.6% (16.3% in Tev1's own prompt, so the prompt is not the cause).
  • Tev1 on jev-bench: 0.703 macro, ECE 0.086 (read in its own prompt, recipe fitted on validation; answers identical to Together's hosted model on 2,086 of 2,087 shared items). The fine-tune adds +0.030 over its base at equal prompt, almost all on the four tasks it trained on (+0.003 held-out); Tev1's prompt format alone lifts the untrained base +0.044 on the held-out sources. Details: results/tev1-comparison/.
  • CLM-v0.1-8B (Stanford / NVIDIA contrastive model), served by its own code: 0.340 macro, ECE 0.338 — near chance on knowledge and many-option configs; probed by hand before reporting. Details: results/clm-8b/.
  • Perplexity's pplx-decider-v1-27b on jev-bench: 74.8% macro accuracy, ECE 0.080, 84.0% on the six held-out tasks (their hosted API, as served; all 22,773 test records, no errors). It beats Jev overall (+1.6 points, interval [+1.1, +2.0]) and ties it on the held-out tasks, and it is better calibrated than Jev as served, but it is the least coherent system measured (sure loss 0.219 against Jev's 0.081; coherence-penalty fine-tunes reach 0.02-0.03). Its card's "JevBench public hard" row is a different benchmark of the same name. Details: results/pplx-decider-v1-27b/.
  • An open 4B is now above Jev on the overall number. Qwen3.5-4B with LoRA + residual heads (Tier 2): macro accuracy 0.747 vs 0.733, ECE 0.110 vs 0.113, Noul 0.903 vs 0.881, TVD to human distributions 0.347 vs 0.432. The qualifier: on the six sources it never trained on, Jev leads 0.835 to 0.769. One seed.
  • An open 4B now matches or beats Jev on every macro number. Qwen3.5-4B, Tier 2 at LoRA lr 3e-5: accuracy 0.734 vs 0.733, ECE 0.096 vs 0.113, TVD to human distributions 0.337 vs 0.432. Jev still leads the six held-out sources (0.835 vs 0.765). Published as Praveenrajus/jevify-qwen3.5-4b-t2-lowlr.
  • At 9B, a frozen backbone with heads beats Jev where it trained. Three seeds with the six-epoch cap: held-out 0.743 ± 0.002, trained-source 0.703 / ECE 0.064 vs Jev's 0.694 / 0.122.
  • Our recipe fitter read the rounded wire format and zeroed real high-K probabilities; fixed and every Tier 0 run refitted. The Gemma-4 instruct models were the ones it hurt (12B 0.149 → 0.086, E4B-it 0.148 → 0.092, E2B-it 0.158 → 0.123); nothing else moved by more than 0.003. Details: results/recipe-k/.
  • Seed variance, measured — and explained. Five seeds of the Qwen3.5-2B residual head: held-out accuracy 0.579 ± 0.049 (two seeds match Tier 0's 0.628, three regress by ~0.09), trained accuracy 0.635 ± 0.007. The earlier claim that the residual "erases" the held-out regression was one seed at the top of that spread. The weight the head learns on the model's own log-score separates the basins (0.95 for the seeds that held up, 0.92–0.93 for the ones that collapsed; the same ordering over five 4B seeds), and capping training at six epochs collapses the spread to 0.621 ± 0.004 with the trained gain intact. At 4B over five seeds the trained gain (+0.047) is robust and the held-out gain is not (0.715 ± 0.025 vs Tier 0's 0.714). Per-seed results: results/qwen35-2b-t1r-s0 … -s4, results/qwen35-2b-t1r-e6-s0 … -s4, results/qwen35-4b-t1r-s1 … -s4.
  • Jevified open models beat Jev on calibration and on human agreement. Qwen3.5-4B with residual heads reaches macro accuracy 0.698 against Jev's 0.733, ECE 0.089 vs 0.113, TVD to human label distributions 0.360 vs 0.432, and Score accuracy 0.507 vs 0.503. Qwen3.5-2B reaches ECE 0.069, the best of anything tested.
  • LoRA (Tier 2) buys accuracy the frozen backbone cannot, and the learning rate decides its calibration — three seeds per arm. Qwen3.5-2B goes 0.632 → 0.690 macro accuracy (LoRA lr 3e-5) and the held-out ordinal scale gains +0.17 with better calibration. At 3e-5 the model is better than at 1e-4 on the six sources it never trained on — accuracy 0.716 ± 0.003 vs 0.700 ± 0.002, ECE 0.083 ± 0.004 vs 0.104 ± 0.014 — and its agreement with human label distributions (TVD 0.339) is the best of any model here (Jev 0.432). What the seeds took away: the low learning rate does not rescue calibration on ambiguous items — ChaosNLI ECE spans 0.16–0.33 across seeds in both arms, at Jev's 0.222 and far from the Tier 1 residual's 0.077 — and training on human label distributions did not help (TVD 0.433). Held-out accuracy under LoRA is seed-stable (±0.003) where the frozen-backbone head was bimodal (±0.049). Every 2B LoRA run overfits after one or two passes. Per-seed results: results/qwen35-2b-t2{,-s1,-s2}, results/qwen35-2b-t2-lowlr{,-s1,-s2}.
  • Held-out sources changed the architecture. Heads that replace the model's own scorer gain +0.077 accuracy on trained sources and lose −0.098 on held-out ones; a zero-initialized residual on that scorer keeps the gain and erases the regression. Holding out records instead of whole sources would have hidden it.

Tier 1: trained vs held-out sources

Three Jev benchmarks written by other people

Full catalogue with evidence and caveats: docs/FINDINGS.md.

Published models

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>).

familyrepos
Readout fine-tuned + coherenceqwen3.5-9b (supervised; + coherence to follow) · qwen3.5-4b-coh · qwen3.5-2b-coh · gemma-4-e4b-it-coh
Readout fine-tuned, supervisedqwen3.5-4b · qwen3.5-2b · gemma-4-e4b-it
From base checkpointsqwen3.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-expertsqwen-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
Visionqwen3-vl-2b (Tier 0) · qwen3-vl-2b-t2 (decoder LoRA)

Jev 1.13.0 baseline

accuracy vs calibration, one point per config

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.

Per-config table (22 configs, 14 metrics)
sourceprimnaccECEBrierNLLsel@90sel@50AURCRPSMAEAUROCTVD→human
arc_challengechoice10000.9790.0100.0370.190.9930.9960.005
banking77choice10000.7960.0950.3172.100.8390.9640.072
boolqnoul10000.9170.0210.0610.210.9530.9900.0170.978
chaosnlichoice15990.6150.2220.5831.710.6290.6910.2790.332
civil_commentsnoul20000.7290.0450.1830.550.7520.8370.1530.8290.289
clinc150choice10000.8930.0330.1590.820.9410.9860.024
fever_evidencenoul10000.9720.0280.0250.110.9860.9960.0060.991
go_emotionschoice10000.2820.3841.0409.890.2940.3700.5900.677
helpsteer2_helpfulnessscore10000.3630.2320.8123.250.3730.4320.5370.1730.96
helpsteer2_verbosityscore10000.3410.2310.7931.860.3680.4240.5940.1320.72
ledgarchoice10000.7510.1170.3742.290.7940.9420.095
massivechoice10000.8080.0900.2951.920.8590.9680.056
measuring_hate_speechscore10000.5270.2370.6692.750.5380.7200.2890.2670.710.428
mmluchoice10000.9230.0270.1240.460.9600.9860.021
mnlichoice10000.8830.0320.1760.500.9170.9820.035
pawsnoul10000.8460.0400.1090.340.8780.9760.0480.932
sms_spamnoul8000.9650.0680.0350.150.9850.9930.0100.976
sst5score10000.5650.1900.6181.900.5860.6640.3270.0890.50
strategyqa_closednoul6870.7850.0420.1440.450.8200.9100.0910.885
strategyqa_groundednoul6870.9560.0590.0380.150.9841.0000.0040.994
stsbscore10000.5380.1190.5941.310.5540.6260.3330.0720.55
yelp5score10000.6850.1740.4831.850.7070.7920.2020.0640.35

Reliability diagrams — stated confidence vs observed accuracy per config. Flat lines mean the confidence carries no information.

reliability

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

model vs human

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.

confidence vs agreement

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

risk coverage

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

vs cardinality

Behavioral probes

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.

cardinality probe

  • Decision-set size is a cost, not a cliff: clinc150 99.5% → 91.0% from K=2 to K=151, banking77 99.5% → 82.0% at K=77, with ECE ≤ 0.10 and mean P(gold) tracking accuracy throughout
  • Ambiguity is the cliff: GoEmotions is 85% at K=2 and 30% by K=25 (rater agreement with the plurality is only 0.66) while ECE climbs to 0.34 — confident and wrong
  • Option order: argmax flips 0–2.5% on crisp small-K tasks, 4–7.5% on large-K routing, 13% on GoEmotions — modest, and scaling with ambiguity, not K.
  • Opaque keys with descriptions kept: accuracy unchanged (banking77 0.82 → 0.81, clinc150 0.905 → 0.915, massive 0.815 → 0.805); without descriptions: chance. Jev reads semantics, not key strings.
  • Distractor injection: ≤3.3% of probability mass leaks to nonsense options.
  • Primitive geometry matters: the same yes/no question is better calibrated as Noul than as a 2-way Choice (BoolQ ECE 0.028 vs 0.054, Civil Comments 0.056 vs 0.126, at equal accuracy); Score beats an unordered Choice over the same levels (+2.5 points accuracy and lower ECE on sst5, yelp5 and helpsteer2).

Vision

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.

modelsourceprimitivenaccECE rawECE fittedBrierAUROC
Qwen/Qwen3-VL-2B-Instruct (Tier 0)popenoul2,0000.8910.0860.0460.0790.958
Qwen/Qwen3-VL-2B-Instruct (Tier 0)aokvqachoice7440.7930.1240.0370.299—
Qwen/Qwen3-VL-2B-Instruct (Tier 0)ai2dchoice1,5000.6520.1750.0590.454—
Qwen/Qwen3-VL-8B-Instruct (Tier 0)popenoul2,0000.8890.0960.0250.0810.955
Qwen/Qwen3-VL-8B-Instruct (Tier 0)aokvqachoice7440.8680.0940.0320.202—
Qwen/Qwen3-VL-8B-Instruct (Tier 0)ai2dchoice1,5000.7670.1370.0380.315—
Qwen/Qwen3.5-9B (Tier 0)popenoul2,0000.8950.0440.0300.0770.959
Qwen/Qwen3.5-9B (Tier 0)aokvqachoice7440.8760.0300.0280.186—
Qwen/Qwen3.5-9B (Tier 0)ai2dchoice1,5000.7500.0590.0600.318—
google/gemma-4-12B-it (Tier 0)popenoul2,0000.8680.1200.0350.0950.944
google/gemma-4-12B-it (Tier 0)aokvqachoice7440.8250.1200.0490.261—
google/gemma-4-12B-it (Tier 0)ai2dchoice1,5000.7460.1370.0550.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.

vision budget

three LoRA scopes

Latency

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/.

research path vs serving path

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.

reading the answer against decoding it

What is in this repo

pathcontents
data/<config>/{train,validation,test}.jsonlthe benchmark (the configs above; the dataset viewer reads these)
manifest.jsonper-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.mdthe full index, one row per folder

Label audit and changelog

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.

  • v0.1.1 — 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.
  • v0.1 — initial release.

Data v0.1.1, built with jevify-bench on 2026-09-20; results updated as they are measured.

benchmark
calibration
decision-model
human-label-distributions
jevify
system-one