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.