Skip to content
MrJev

NotJev

Serves the Jev request shape from any OpenAI-compatible endpoint by presenting options as single letters and reading the letter mass out of logprobs.

View on GitHub →

Checked, not fully reviewed

Turns any OpenAI-compatible model with logprobs into typed decisions. Checked, not fully reviewed: the maths holds, and since v0.2.3 the official SDK reads it.

Good for

  • Getting a Jev-style decision out of a model you already serve with logprobs — vLLM, llama.cpp, Ollama
  • Seeing how much of the model's mass actually landed on your options
  • Code written for Jev's /v1/systemone, through the official SDK

Watch out for

  • Its confidence is entropy-based, not TypeSafe's published formula
  • Upgrading to v0.2.3 breaks anything that read the old grouped answers

Tested Oct 5, 2026 at ec50d9804e9a · Node 24 in Docker; its 187 tests, and its server driven against a stub OpenAI-compatible backend and the official @typesafe-ai/sdk 0.6.0

Checked, not fully reviewed. We ran its 187 tests (all pass) and drove notjev serve against a stub backend whose log-probabilities we chose. No Jev calls.

NotJev presents your options as A., B., … asks the backend for one token with logprobs, and keeps only the letter mass. The arithmetic is right: with letters at 0.70 and 0.10 and the rest on another token, it answered 0.875; it asked for max_tokens: 1, top_logprobs: 20, temperature: 0. Every answer carries a notjev block with coverage — how much mass landed on the options at all — which is the number to watch: at 10% coverage it still answered, with a low confidence and degraded: false.

The SDK now reads it

When we first checked it, /v1/systemone grouped answers under nouls, choices and scores, so the official SDK returned without error and found nothing. We reported it; the author fixed it within a day in v0.2.3, and fixed two things we had not reported: score legend and probabilities are now keyed by level ("0", "1", …), and GET /v1/models returns the { models: [...] } shape. We reran our script with a noul, a choice and a score through @typesafe-ai/sdk 0.6.0: all three answers came back under their question names, probabilities[1] was readable, and client.models.list() worked.

This is a protocol change: code that read answers.nouls from the old route needs updating. The native /v1/decide route is unchanged.

Its confidence, 1 − H(p)/ln K, is not the formula TypeSafe published on 3 October, and the README now says so, so the two are not comparable. Some requests are refused with a 422 rather than answered: null instructions, a state that is not a string, and a choice with more than 26 options.

Apache-2.0, 21 stars.

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

Review updated Oct 5, 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.