Skip to content
MrJev

JevK5

Open-weight decision model that serves the /v1/systemone request shape from your own GPU, with weights on Hugging Face.

View on GitHub →

Hands-on review

An open-weight decision model that serves the /v1/systemone shape. Its server entry point needs CUDA, and a seventeenth option drops the connection.

Good for

  • A local answer in the TypeSafe request shape, from weights you hold
  • A README example that reproduces against the published checkpoint
  • Reading a small, legible readout: one forward pass, no tokens decoded

Watch out for

  • `jevk5-serve` has no device flag and dies on a machine without CUDA
  • A choice with more than sixteen options drops the connection with no reply
  • Your option keys are part of the prompt, so their wording moves the answer

Tested Sep 24, 2026 at 01d3cc99e11d · python:3.12-slim in Docker on 4 CPU cores, no GPU, --network none with the published weights from a local cache, loaded in bfloat16 with CUDA graphs disabled

How we reviewed this: on four CPU cores in python:3.12-slim, no GPU, --network none, with the published weights from a local cache. We drove the library and the project’s own HTTP handler, sent its README’s example verbatim, and walked the validation paths. This is an open model — our own run of their model, with no Jev calls and no measurement of Jev.

What it does

A decision model that answers a typed question by reading the logits of the answer letters in one forward pass: noul for yes/no, choice over your options, score over ordered levels. Nothing is decoded — the answers carry "output_tokens": 0, and the readout is a slice of the language-model head, softmaxed through one fitted temperature (1.532 in the published checkpoint). Apache-2.0, weights on Hugging Face, and the server speaks POST /v1/systemone, so a client written against TypeSafe’s shape can be pointed at it.

Setup

The README’s quick start is jevk5-serve --model alibiserikbay/JevK5 --port 8090. On a machine without an NVIDIA GPU that is where it ends:

python -m jevk5.server --port 8090
AssertionError: Torch not compiled with CUDA enabled

JevK5.__init__ takes device, and JEVK5_GRAPHS=0 turns off the CUDA-graph capture, but main() passes neither — it constructs JevK5(args.model) and the default is "cuda". The library is fine on CPU; the shipped entry point is not, and the fix is one argparse flag. (We ran everything below by constructing the model with device="cpu" and serving the project’s own handler ourselves.)

Once it is up, its documented example reproduces exactly as printed:

POST /v1/systemone  {"state": "I was billed twice, please refund",
                     "questions": {"refund": {"type": "noul", "instructions": "Asks for money back?"}}}
200 {"answers": {"refund": {"type": "noul", "noul": 0.8576, "confidence": 0.8576}},
     "usage": {"input_tokens": 108, "output_tokens": 0}}

A 4B model in bfloat16 on four cores takes 16 to 26 seconds a decision, which is the wrong machine rather than a defect: this is built for a GPU, and the project’s own latency figures are its author’s, measured on an H100 and an L40S.

Using it

The three primitives answer in the shape the README documents, and a support ticket routes to billing at 0.82 against three teams. Bad requests are refused politely — an unknown type, a missing instructions, a choice with one option and a truncated body all come back 400 with a sentence. GET /health answers {"ok": true, ...}.

There is one shape it does not refuse. LETTERS is a sixteen-character alphabet, and options are zipped against it:

LETTERS = "ABCDEFGHIJKLMNOP"
"options": [{"letter": LETTERS[i], "description": d} for i, d in enumerate(options)]

Sixteen options answer normally. The seventeenth raises IndexError: string index out of range inside messages(), which do_POST does not catch, so the connection closes with no response at all — the client sees RemoteDisconnected and the traceback goes to the server’s log:

choice, 16 options   200 {"choice": "t0", "probabilities": {...}}
choice, 17 options   RemoteDisconnected: Remote end closed connection without response

The validator already enforces a floor — “choice criteria must name at least two options” — so the ceiling belongs next to it, and neither the README nor the model card names sixteen as a limit. The same arithmetic applies to score, whose levels are letter-indexed too. Reported, together with the missing device flag, with a PR offered for both.

Permissions and data

Nothing leaves the machine: no key, no outbound call, the server binds 127.0.0.1 by default (--host can widen that, with no auth of any kind, so keep it where it is). Worth knowing before you design your options: the prompt carries your option keys as well as their descriptions — {"letter": "A", "description": "billing: payments and refunds"} — so unlike projects that keep transport identifiers out of the input, here the words you choose as keys are part of what the model reads.

Maintenance

Apache-2.0, a model card, a changelog, a results/ directory and a bench/ harness. There is no test directory and no CI: nothing in the repository runs the code on a push, which is how a sixteen-slot alphabet and an entry point that cannot start without CUDA both stay unnoticed.

The README’s headline — second of 76 systems in JevBench v1.4, first among open entrants — is a third-party benchmark’s result, reported by its author. We have not run that benchmark and do not republish its figures as ours.

Verdict

If you have a GPU and want Jev’s request shape answered by weights you hold, this is a clean, small implementation that reproduces its own example. Use the library rather than jevk5-serve until the device flag lands, keep your option list under seventeen, and treat your option keys as part of the prompt.

For the same idea with a stricter contract and a service that runs on a laptop, see AgentJev; for multilingual decisions, Laya; for serving open checkpoints in the same wire format, sys1.

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

Review updated Sep 24, 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

★ 25k▲ 10k

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

★ 7.1k▲ 6.7k

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.3k▲ 2.5k

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.