Praveenrajus/jevify-qwen3.5-2b-readout-coh

Model

Qwen3.5-2B, readout fine-tuned (LoRA, + coherence)

0

5 commits

1 linked in READMEs

updated Sep 25, 2026

See the code

README

Qwen3.5-2B, readout fine-tuned (LoRA, + coherence)

A System One decision model: it reads a state, answers typed questions (choice, score, noul) and returns calibrated probability distributions your code can branch on β€” it never writes text. This repo is a rank-16 LoRA (10,911,744 parameters) on Qwen/Qwen3.5-2B, merged into the weights at load, trained on its own decision readout with a coherence penalty.

At a glance β€” accuracy 0.702 Β· ECE 0.054 Β· held-out 0.742 Β· TVD to human labels 0.315 Β· sure loss 0.031
same order, Qwen3.5-2B, untuned (Tier 0): 0.577 / 0.089 / 0.634 / 0.458 / 0.212
same order, Jev 1.13.0: 0.733 / 0.113 / 0.835 / 0.432 / 0.081

jev-bench Β· leaderboard Β· findings Β· code

Use it

from jevify import load_jevified

model = load_jevified("Praveenrajus/jevify-qwen3.5-2b-readout-coh")
model.ask({"text": "The battery lasted two days on a single charge."},
          {"q": {"type": "noul", "instructions": "Is the review positive?"}})

jevify-serve --model Praveenrajus/jevify-qwen3.5-2b-readout-coh serves it as a drop-in for the TypeSafe SDK (TYPESAFE_BASE_URL=http://localhost:8000). The backbone is pulled from its own repo at load, pinned to commit 15852e8c16360a2fea060d615a32b45270f8a8fc.

Results

Every number is on the jev-bench test splits (22,773 records) or the study's other test suites, scored the same way for every model; the rows under this model are references from the same study.

Decisions and calibration

modelaccECEBrierheld-out accTVD to human labels
this model0.7020.0540.3640.7420.315
Qwen3.5-2B, untuned (Tier 0)0.5770.0890.4850.6340.458
same recipe, supervised only0.7010.0510.3620.7360.324
full fine-tune + coherence (lr 1e-6)0.7040.0560.3580.7420.307
Jev 1.13.0 (TypeSafe API)0.7330.1130.3490.8350.432

Coherence and invariance β€” sure loss: mean dΒ² over 4,749 question families (0 = perfectly coherent); order flip: how often the top answer changes when options are shuffled; tag TVD: how much the distribution moves when option tags change from A–J to other identifiers.

modelsure lossshare incoherentorder fliptag TVDK=2β†’max acc drop
this model0.0310.5140.0940.0440.255
Qwen3.5-2B, untuned (Tier 0)0.2120.9800.2710.0480.452
same recipe, supervised only0.3390.9720.1040.0440.259
full fine-tune + coherence (lr 1e-6)0.0280.4860.1090.0490.250
Jev 1.13.0 (TypeSafe API)0.0810.7250.046β€”0.246

Out of distribution β€” stated rules (LegalBench, rule given in the question), none-of-the-above when the gold option is removed, injected-instruction hijack rate, and three community Jev benchmarks.

modelstated rule'none' when gonehijackphishing AUROCtool risk
this model0.5450.5960.0410.8030.783
Qwen3.5-2B, untuned (Tier 0)0.6020.8500.2690.9020.733
same recipe, supervised only0.5360.4720.0550.7760.767
full fine-tune + coherence (lr 1e-6)0.6120.4620.0210.7720.800
Jev 1.13.0 (TypeSafe API)0.9240.7440.2050.6880.933

Reproduction check. Loading this folder with load_jevified and re-scoring 72 jev-bench test records from six sources reproduced the training run's own test predictions: 0 changed choice answers, mean largest |Ξ”p| 0.006, max 0.027 (the adapter is merged into bf16 weights at load).

How it was trained

The model is trained on its own decision readout β€” the distribution over the allowed answers read at the answer position, one forward pass, no decoding β€” with the primitive's proper scoring rule, plus a coherence penalty (weight 1.0): every training question comes with automatically derived siblings (the options as yes/no questions, the negation, the threshold questions of a scale), and the de Finetti sure loss of the family's answers is penalised, so the model's answers to related questions stay mutually consistent. Options are shuffled per family. Training data: the train splits of the 16 non-held-out jev-bench sources (5,885 families, at most 400 records per source); lr 3e-05, 2 epochs, best epoch by validation loss (epoch 0), seed 0. A Tier 0 recipe (temperature per primitive, Noul bias, option-order permutations) was then fitted on validation splits. The six held-out sources (clinc150, arc_challenge, yelp5, measuring_hate_speech, fever_evidence, strategyqa_grounded) never appeared in training.

Files

  • jevify_config.json β€” the recipe, the backbone and the training settings load_jevified reads
  • lora/ β€” the adapter, merged into the backbone at load
  • results/test_metrics.json β€” every jev-bench config; recipe.json β€” the fitted recipe
  • results/coherence.json, probes.json, tags.json β€” the coherence, probe and tag tests
  • results/train.json β€” the training log; summary.json β€” this model's row of the study table
  • results/verification.json β€” the reproduction check reported under Results

Limitations

  • One training seed per repo branch; out-of-distribution numbers in particular vary between identical runs, so compare arms across seeds before drawing conclusions.
  • The phishing benchmark's decision threshold shifts after fine-tuning (ranking, AUROC, is preserved); a one-number log-odds shift fitted on a handful of labelled emails repairs it.
  • English only; the recipe was fitted on jev-bench validation splits and may need refitting on a very different domain.
calibration
coherence
decision-model
jevify
safetensors
system-one

Praveenrajus/jevify-qwen3.5-2b-readout-coh

Model

Qwen3.5-2B, readout fine-tuned (LoRA, + coherence)

0

5 commits

1 linked in READMEs

updated Sep 25, 2026

See the code

README

Qwen3.5-2B, readout fine-tuned (LoRA, + coherence)

A System One decision model: it reads a state, answers typed questions (choice, score, noul) and returns calibrated probability distributions your code can branch on β€” it never writes text. This repo is a rank-16 LoRA (10,911,744 parameters) on Qwen/Qwen3.5-2B, merged into the weights at load, trained on its own decision readout with a coherence penalty.

At a glance β€” accuracy 0.702 Β· ECE 0.054 Β· held-out 0.742 Β· TVD to human labels 0.315 Β· sure loss 0.031
same order, Qwen3.5-2B, untuned (Tier 0): 0.577 / 0.089 / 0.634 / 0.458 / 0.212
same order, Jev 1.13.0: 0.733 / 0.113 / 0.835 / 0.432 / 0.081

jev-bench Β· leaderboard Β· findings Β· code

Use it

from jevify import load_jevified

model = load_jevified("Praveenrajus/jevify-qwen3.5-2b-readout-coh")
model.ask({"text": "The battery lasted two days on a single charge."},
          {"q": {"type": "noul", "instructions": "Is the review positive?"}})

jevify-serve --model Praveenrajus/jevify-qwen3.5-2b-readout-coh serves it as a drop-in for the TypeSafe SDK (TYPESAFE_BASE_URL=http://localhost:8000). The backbone is pulled from its own repo at load, pinned to commit 15852e8c16360a2fea060d615a32b45270f8a8fc.

Results

Every number is on the jev-bench test splits (22,773 records) or the study's other test suites, scored the same way for every model; the rows under this model are references from the same study.

Decisions and calibration

modelaccECEBrierheld-out accTVD to human labels
this model0.7020.0540.3640.7420.315
Qwen3.5-2B, untuned (Tier 0)0.5770.0890.4850.6340.458
same recipe, supervised only0.7010.0510.3620.7360.324
full fine-tune + coherence (lr 1e-6)0.7040.0560.3580.7420.307
Jev 1.13.0 (TypeSafe API)0.7330.1130.3490.8350.432

Coherence and invariance β€” sure loss: mean dΒ² over 4,749 question families (0 = perfectly coherent); order flip: how often the top answer changes when options are shuffled; tag TVD: how much the distribution moves when option tags change from A–J to other identifiers.

modelsure lossshare incoherentorder fliptag TVDK=2β†’max acc drop
this model0.0310.5140.0940.0440.255
Qwen3.5-2B, untuned (Tier 0)0.2120.9800.2710.0480.452
same recipe, supervised only0.3390.9720.1040.0440.259
full fine-tune + coherence (lr 1e-6)0.0280.4860.1090.0490.250
Jev 1.13.0 (TypeSafe API)0.0810.7250.046β€”0.246

Out of distribution β€” stated rules (LegalBench, rule given in the question), none-of-the-above when the gold option is removed, injected-instruction hijack rate, and three community Jev benchmarks.

modelstated rule'none' when gonehijackphishing AUROCtool risk
this model0.5450.5960.0410.8030.783
Qwen3.5-2B, untuned (Tier 0)0.6020.8500.2690.9020.733
same recipe, supervised only0.5360.4720.0550.7760.767
full fine-tune + coherence (lr 1e-6)0.6120.4620.0210.7720.800
Jev 1.13.0 (TypeSafe API)0.9240.7440.2050.6880.933

Reproduction check. Loading this folder with load_jevified and re-scoring 72 jev-bench test records from six sources reproduced the training run's own test predictions: 0 changed choice answers, mean largest |Ξ”p| 0.006, max 0.027 (the adapter is merged into bf16 weights at load).

How it was trained

The model is trained on its own decision readout β€” the distribution over the allowed answers read at the answer position, one forward pass, no decoding β€” with the primitive's proper scoring rule, plus a coherence penalty (weight 1.0): every training question comes with automatically derived siblings (the options as yes/no questions, the negation, the threshold questions of a scale), and the de Finetti sure loss of the family's answers is penalised, so the model's answers to related questions stay mutually consistent. Options are shuffled per family. Training data: the train splits of the 16 non-held-out jev-bench sources (5,885 families, at most 400 records per source); lr 3e-05, 2 epochs, best epoch by validation loss (epoch 0), seed 0. A Tier 0 recipe (temperature per primitive, Noul bias, option-order permutations) was then fitted on validation splits. The six held-out sources (clinc150, arc_challenge, yelp5, measuring_hate_speech, fever_evidence, strategyqa_grounded) never appeared in training.

Files

  • jevify_config.json β€” the recipe, the backbone and the training settings load_jevified reads
  • lora/ β€” the adapter, merged into the backbone at load
  • results/test_metrics.json β€” every jev-bench config; recipe.json β€” the fitted recipe
  • results/coherence.json, probes.json, tags.json β€” the coherence, probe and tag tests
  • results/train.json β€” the training log; summary.json β€” this model's row of the study table
  • results/verification.json β€” the reproduction check reported under Results

Limitations

  • One training seed per repo branch; out-of-distribution numbers in particular vary between identical runs, so compare arms across seeds before drawing conclusions.
  • The phishing benchmark's decision threshold shifts after fine-tuning (ranking, AUROC, is preserved); a one-number log-odds shift fitted on a handful of labelled emails repairs it.
  • English only; the recipe was fitted on jev-bench validation splits and may need refitting on a very different domain.
calibration
coherence
decision-model
jevify
safetensors
system-one