openJev-verdict-2.0  /  Base  /  ModernBERT-base  /  149.6M
GitHub ๐Ÿค— Hugging Face

Small model,
bigger numbers.

A 149.6M-parameter decision model, trained in 8.8 hours on a $300 laptop GPU, that beats a 421M model on its own benchmark โ€” and ships a calibrated confidence channel nobody else has.

77.10%
Top-1 accuracy
Laya, at 421.3M params, scores 76.60%
0.0636
Brier score
Best on the benchmark. Laya: 0.0660
0.0144
Confidence ECE
A second channel no competitor exposes
8.8 h
On one GTX 1660 Ti
6 GB, no tensor cores, no cluster

Benchmark: LocalLLaMA/typed-decisions, test split, N = 2,000 decisions. Read exactly once.

Where it wins

Against the model it replaces, on the same harness and the same split.

29×
Better confidence calibration
ECE 0.4209 → 0.0144 vs Verdict 1.0
9.2×
Better Brier
0.5851 → 0.0636 vs Verdict 1.0
2.3×
Better Brier than Jev 1.13.0
0.1480 → 0.0636
2.8×
Fewer parameters than Laya
421.3M → 149.6M, and still ahead
89.0%
Accuracy at 60% coverage
AUROC 0.7664 test discrimination for routing
<150M
Client-side WebGPU footprint
Runs in-browser with zero server bill

Accuracy went from 26.10% โ€” below uniform random โ€” to 77.10%, a 2.95× jump, clearing the TF-IDF floor of 66.10% by eleven points. Option-order flips run 36% below Kev's published rate.

The table

Test split, 2,000 decisions. Lower is better for Brier and ECE.
ModelParamsAccuracy BrierECE (dist.)ECE (conf.) Flip rate
Verdict 1.0 baseline149.6M26.10%0.58510.4209โ€”โ€”
TF-IDF + logistic regressionโ€”66.10%0.15200.0207โ€”0.00%
Jev 1.13.0 โ€ ~150M72.70%0.14800.1440โ€”โ€”
Laya (ModernBERT-large)421.3M76.60%0.06600.2140โ€”โ€”
Kev-0.5B (Qwen2.5) โ€ก500Mโ€”โ€”โ€”โ€”7.41%
Verdict 2.0 Base149.6M77.10%0.06360.15130.01444.76%

โ€  Vendor-published figure; not independently re-measured here. โ€ก Kev's published flip rate on the identical option-order perturbation. Kev has never been evaluated on typed-decisions, so only its stability number is comparable.

The trap everyone else fell into

Soft-labeled benchmarks hide a real mathematical conflict, and it explains the entire table above.

The gold labels are not 0/1. They are expert-panel distributions, and the panel's average top probability is 0.659 โ€” measured human doubt. Meanwhile the model is right 77.1% of the time. That gap is the trap.

Match the panel โ†’ lose ECE

Your top probability sits near 0.62 while you are right 77% of the time. Calibration error against correctness blows out. This is Laya: Brier 0.066, ECE 0.214.

Sharpen to correctness โ†’ lose Brier

You now track your hit rate, but you have stopped matching the panel and your Brier inflates. This is Jev: ECE 0.144, Brier 0.148.

Answer both questions separately

One vector cannot do both jobs, because they are different questions. Verdict 2.0 ships two channels and refuses the trade.

Prior models Verdict 2.0 โ€” distribution channel Verdict 2.0 โ€” confidence channel
0.000.06 0.120.180.24 0.000.04 0.080.120.16 Brier score → ECE → ↙ better on both TF-IDF Jev 1.13.0 Laya · 421.3M Channel 1 Channel 2 · ECE 0.0144
Every prior model sits on a frontier: push Brier left and calibration error climbs. Verdict 2.0 lands furthest left on Brier and, on the distribution channel both models expose, already below Laya. The dashed drop is the second channel taking over the calibration job at the same Brier score. Full numbers in the table above.

Two channels, two questions

Channel 1 โ€” DistributionChannel 2 โ€” Confidence
QuestionWhat does the expert panel believe?Is my answer correct?
MechanismMarker-pointer logits + per-bucket temperatureCorrectnessHead MLP over distribution shape
Fit onCalibration fold, 820 held-out decisionsCalibration fold, out-of-fold predictions
Scored byBrier 0.0636ECE 0.0144

The confidence head never sees the gold label as an input โ€” only the shape of the prediction: top probability, margin between first and second, normalized entropy, option cardinality, question type. It is trained on decisions the encoder was never fit on.

And the distribution channel's calibration error turns out to be almost perfectly explained by the panel-doubt gap itself:

accuracy (0.7710) − mean distribution confidence (0.6197) = 0.1513
reported ece_distribution                                 = 0.1513

Exact to four decimals. The distribution channel is not disordered โ€” it is correctly shaped and deliberately offset, because it reports the panel rather than its own hit rate. That is what Channel 2 is for.

How it was built

Marker-pointer

Every option scored in one pass

A 2-layer MLP reads the bidirectional hidden state at each [MASK] marker and emits one logit per option โ€” simultaneously, inside a single attention pass. No generation loop, no decoding, no parse step.

Type-routed loss

Ordinal questions get ordinal math

Choice gets soft cross-entropy plus Brier. Score adds Ranked Probability Score, so predicting level 1 when the truth is level 5 costs more than predicting level 4. Result: MAE 0.2409, and 99.0% land within one level.

Permutation-KL

Order the options differently, get the same answer

On 30% of steps, a twin batch with shuffled options is scored and the symmetric KL between the two predictions is added to the loss. Flip rate lands at 4.76% against Kev's published 7.41%, with p90 swing compressed from 0.2486 to 0.0915.

Dual calibration

Both channels fit after training, on held-out data

One temperature per (question type, option cardinality) bucket for the distribution channel; the correctness head on out-of-fold predictions. The test vault is touched by neither step.

Client-side WebGPU

Zero-cloud edge execution

At 149.6M parameters (<600 MB unquantized, ~150 MB INT4), openJev-verdict-2.0 runs locally in client browsers via WebGPU and ONNX Runtime Web. Zero network latency, zero server bills, and zero data exfiltration.

Selective routing

AUROC 0.7664 automated gates

The confidence head achieves 0.7664 AUROC on 2,000 held-out test decisions. In automated pipelines, gating decisions at 80% coverage lifts accuracy to 83.44%; gating at 60% coverage delivers 89.00% accuracy, and 50% coverage delivers 91.40% for reliable human-in-the-loop escalation.

Trained on a laptop

No cluster. No A100. No cloud bill. One consumer laptop GPU, overnight.

6 GB
GTX 1660 Ti
Turing TU116 โ€” no tensor cores
31,757 s
Wall clock, 8 epochs
Best checkpoint at epoch 6
~5.8 GB
Peak VRAM
Of 6.0 GB available
24.7/s
Inference throughput
~40 ms per decision, same card

The result outperforms a 421M-parameter model on the benchmark that model was published against.

Per-workflow

WorkflowDecisionsAccuracy
Invoice processing50081.2%
Customer service50078.4%
Security incidents50075.6%
Agent trace observability50073.2%

Why Base and not Large

ModernBERT-large was the original plan. We stopped at Base, and the reason is on the record rather than after the fact.

The runbook pre-registered the gate for the shipping model before any training started: dev accuracy ≥ 0.760 and dev Brier ≤ 0.120. Base delivered 0.785 and 0.0639 โ€” it cleared the bar that had been set for the large model.

Base had also converged. Dev accuracy across the final four epochs: 0.7775 → 0.7850 → 0.7762 → 0.7825, oscillating inside half a point. Against that, Large needs 8-bit AdamW and gradient checkpointing to fit in 6 GB at all, and would run an estimated 14โ€“18 hours on this hardware.

Anti-leak protocol

The test split was treated as a vault.

Reference floors are published alongside the results, not omitted: uniform random 29.85%, majority label 48.35%, TF-IDF + logistic regression 66.10%, gold-distribution oracle 98.45%.

Receipts

FileWhat it holds
reports/verdict2_base_test.jsonOfficial test-vault receipt, all metrics
artifacts/verdict2-base/dev_metrics.jsonOut-of-fold dev metrics
reports/reference_floors.jsonBaseline floors on the same split
verdict2/train.pyTraining, temperature fitting, confidence head
verdict2/evaluate.pyThe single test read, with the anti-leak gate
RUNBOOK.mdExact commands to reproduce end to end

Every number on this page traces to a file in the repository.