Skip to content
MrJev

openJev-verdict-2.0

A 151M non-autoregressive decision model on ModernBERT with calibrated uncertainty and an in-browser WebGPU playground. Its LICENSE is not recognised as the Apache 2.0 its badge claims.

View on GitHub →

Hands-on review

Auditable metrics, a runnable training pipeline, checksummed artifacts — and the advertised checkpoint is a dead LFS pointer behind a private repo.

Good for

  • Reading a project that publishes its evaluation log and lets you recompute every number
  • Artifacts with SHA-256 verification, which almost nobody does
  • A training pipeline that actually runs end to end on a CPU

Watch out for

  • The advertised checkpoint cannot be downloaded: LFS 404, Hugging Face 401
  • What you can download is a v1 model that abstains on most questions
  • The LICENSE is a 410-word rewrite with Apache-2.0's redistribution terms removed

Tested Sep 20, 2026 at a458733 · Python 3.12 in Docker on 4 CPU cores, no GPU; 42 tests, its own metrics recomputed, and a training smoke run

How we reviewed this: we ran its 42 tests in Docker on four CPU cores, recomputed its published metrics from its own prediction log, rebuilt its evaluation set from the public dataset, and ran its training pipeline end to end. We made no calls to TypeSafe.

What it is

Two stacks in one repository, and telling them apart is most of the work.

verdict2/ is what the README describes: ModernBERT-base with a marker-pointer head and a separate correctness head, 149,614,210 parameters by our count, which matches their figure. core/ and rlcd/ are an earlier system built on GLiClass — and that is what import openjev actually exposes.

You cannot get the model

The checkpoint the README is about, artifacts/verdict2-base/model.pt, is a 134-byte Git LFS pointer. We asked the LFS server for the object:

{"oid":"2201b07c…","size":598509338,
 "error":{"code":404,"message":"Object does not exist on the server"}}

The README’s badge points at huggingface.co/heman10x/openJev-verdict-2.0, which returns 401 — we checked; the same account’s rlcd-modernbert-151m returns 200, so this is not a network problem at our end. Following the runbook’s evaluation step gives:

_pickle.UnpicklingError: invalid load key, 'v'.

'v' is the first byte of version https://git-lfs.github.com/spec/v1.

What the download script does fetch is the v1 GLiClass model, and its bundle manifest says so: "model_architecture": "knowledgator/gliclass-modern-base-v2.0", 151,378,177 parameters, trained in 645 seconds on Apple Silicon. That is not the 149.6M model trained for 8.8 hours that the README describes.

Driving that v1 model on an unambiguous duplicate-charge incident, it abstained on the choice question at 0.95 and on the score question at 0.98; only the yes/no answered. Their own file reports/reference_floors.json records the v1 baseline at 0.261 accuracy against a 0.2985 uniform floor, and the runbook says, in its own words, that being reliably worse than chance “points at a wiring defect”. Worse, the bundled example script defaults to a directory the download script doesn’t write to, so it silently runs the un-finetuned base model and prints a confident answer to a question about a solar eclipse.

The parts that are genuinely good

It would be easy to stop there, and it would misrepresent the project.

  • Every published metric recomputes. We ran their metrics.py over their own 2,000-row prediction log and got their accuracy, Brier, both ECEs, both AUROCs and all four coverage points to the digit.
  • The evaluation set checks out independently. We rebuilt the items from the public LocalLLaMA/typed-decisions dataset: 2,000 of 2,000 predictions matched, zero soft-target mismatches, zero gold-label mismatches. Nothing was dropped or re-labelled.
  • The training pipeline runs. A smoke run on four CPU cores completed in 338 seconds including temperature fitting and evaluation, and cleared the runbook’s own floor.
  • Artifacts are SHA-256 verified on download, with a non-zero exit on mismatch. We have reviewed a lot of projects this month; this is the first to do it.
  • Negative results are kept. The shipped calibrator records that the fitted temperature made things worse on NLL, Brier and ECE, and that 1.0 was shipped instead.

One caveat to carry if you compare numbers: their Brier is computed against a soft teacher distribution rather than one-hot truth, and score questions are excluded from it.

What we measured

Four cores of an i3-9100T, no GPU, 30 timed calls after warm-up:

  • v1 GLiClass, one question: 81 ms median, 1.10 GB resident, 5.5 s to load.
  • The Verdict 2.0 architecture, from a checkpoint we trained ourselves because theirs is unavailable: 79 ms median, 1.66 GB resident. Accuracy from that run means nothing; the shape and cost are real.

Batching is not free: three questions in one call took 185 ms against 81 ms for one. The per-question latency_ms in the response is the total divided by the number of questions, not a measurement.

The licence is not Apache-2.0

GitHub reports NOASSERTION and the badge says Apache 2.0. GitHub is right. The LICENSE file is 410 words against the real licence’s 1,581, and what is missing is section 4 in its entirety — the requirement to pass on the licence, to mark modified files, to retain attribution notices, and to carry the NOTICE file. The patent-termination clause and most of the disclaimer wording are gone too, and no copyright holder is named.

Everything upstream is properly Apache-2.0, so there is no conflict to resolve — but nobody can rely on this file, and a compliance review will stop at it.

Also worth knowing: torch.load(..., weights_only=False) appears in three places including the documented evaluation entry point, so pointing it at someone else’s checkpoint runs their code. Their own documentation-freshness test fails, reporting that the README’s generated-table markers have been removed — meaning the numbers in it are now maintained by hand, and the mechanism built to keep them honest has been bypassed.

Verdict

The engineering habits here are better than almost anything else we have reviewed: checksummed downloads, an auditable prediction log, a public evaluation set that reconciles row by row, a runnable pipeline, and negative results left in the repository.

None of that can be pointed at the model it is about, because that model is not published. Until the LFS object or the Hugging Face repository is restored, what you can actually run is a v1 system that its own report marks as worse than chance. Reported, along with the licence.

For local models you can download today, see SemIf, NanoJev and LocalJev.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Open Models & Reproductions

Laya

★ 35k▲ 521

NandhaKishorM/laya

Non-autoregressive decision engine over 100+ languages: three checkpoints and a router that detects the script and dispatches per request. Its benchmarks end with a limits section naming the datasets it does not generalise to and the headline figure that came from a training split.

PythonReviewed

kev

★ 9.8k▲ 215

jaredpalmer/kev

Jev-style decision models from 0.5B to 8B, built as LoRA adapters on Qwen and served behind a Jev-compatible /v1/systemone API.

PythonReviewed

SemIf

★ 4.9k▲ 35

TheoLeeCJ/SemIf-OpenJev

Jev-style decisions from a frozen 4B model on a single RTX 3090, with a browser demo. Formerly OpenJev.

PythonReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.