How we reviewed this: we ran its test suite in python:3.12, then drove the Transformers backend on four CPU cores with Qwen2.5-0.5B-Instruct — the library path, not the SGLang server, which needs a GPU. To test the order-independence claim we ran the same mixed request twice with the Choice options reversed. We made no Jev calls; this project replaces the model rather than the route.
What it does
Takes a local language model and answers Jev-shaped requests with it: Choice, Score and Noul questions defined at runtime, typed answers with probabilities out. Nothing is generated — each candidate is scored with an independent yes/no judgment and the JSON is assembled in code.
Two backends: Transformers for anything, and SGLang for the fast path, where the interesting engineering lives. Candidates share the state, and candidates of the same question also share its instructions, so the library stages submissions to reuse SGLang’s Radix Cache — one real candidate first to establish the prefix, then the rest behind it. There is an architecture document and a benchmark for that; both are the author’s, on the author’s hardware, and we did not reproduce them.
The claim we could test
“Order-independent options: evaluate each Choice candidate independently, so reordering options does not introduce a positional preference or change their scores.”
That is a real property with a real test, and it is the one thing most option-scoring implementations quietly fail. We ran a three-question request — a department Choice, an urgency Noul, a severity Score — then ran it again with the three Choice options in reverse order:
| option |
first order |
reversed |
identical |
billing |
0.790000 |
0.790000 |
yes |
shipping |
0.050000 |
0.050000 |
yes |
technical |
0.160000 |
0.160000 |
yes |
Same winner, same confidence (0.68), and the Score answer came back identical too, legend and all:
"severity": {"type": "score", "score": 1.37, "confidence": 0.3,
"legend": {"0": "minor", "1": "annoying", "2": "serious"},
"probabilities": {"0": 0.05, "1": 0.53, "2": 0.42}}
Returning the legend alongside the number is a small thing that saves the caller from keeping the rubric in sync at the other end.
What it costs on a CPU
The model loaded in five seconds and each three-question request took about 15.6 seconds on four cores with a 0.5B model. That is the shape of the design: scoring every candidate independently means one forward pass per candidate rather than one per request, which is exactly what the SGLang prefix-caching work exists to make cheap. On a CPU you feel every one of them.
So: the library path is genuinely usable on a laptop for development and tests, and the serving path is for a GPU. llm2jev-serve imports SGLang’s HTTP app and says so plainly if the extra is missing — “The System One server requires the ‘sglang’ extra” — rather than failing obscurely.
Engineering
109 tests and 46 subtests pass in under a second, covering the assembler, the binary-question compiler, the prompt renderer, the prefix plan, normalisation and both backends. The module layout is clean — core, inference, backend — and the SGLang-specific parts are confined to one package.
Apache-2.0, documentation in English and Chinese, demos including a Snake agent and a web playground. There is no .github directory, so nothing runs the tests but you.
The README opens by saying it is an independent project, not affiliated with or endorsed by TypeSafe. It is the second-largest of the open reproductions we have looked at, and the only one whose headline feature is a property of the interface rather than a benchmark number.
Verdict
If you want Jev’s shape on a model you host, this is the most carefully argued of the adapters: the order-independence claim holds exactly, the answers carry the metadata a caller needs, and the expensive part of the design is the part the SGLang path is built to optimise.
Try the library on a CPU to see the answers, then plan for a GPU before you put the server anywhere. And read docs/shared-prefix-cache.md before you benchmark it — the staging is the whole performance story.
For a CPU-sized model of its own rather than an adapter, see OpenThai-SystemOne and the rest of the open models category.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 21, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.