Skip to content
MrJev

LLM2Jev

Adapts a local language model into a Jev-style decision engine, answering runtime-defined Choice, Score and Noul questions through SGLang.

View on GitHub →

Hands-on review

Turns a local model into typed decisions by scoring each candidate independently. We reversed the options and the probabilities were identical.

Good for

  • A Choice whose scores do not move when you reorder the options
  • Running the library path on a CPU with a small model, no server needed
  • Per-question confidence and a legend on every Score answer

Watch out for

  • The `/v1/systemone` server needs the SGLang extra, so Linux and a GPU
  • One three-question request took 15 s on four CPU cores
  • No CI, and the shared-prefix benchmark is the author's on their hardware

Tested Sep 21, 2026 at 1909c50bbd73 · python:3.12 in Docker on 4 CPU cores with Qwen2.5-0.5B-Instruct; its 109 tests, and a mixed request run twice with the options reversed

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.

More in Open Models & Reproductions

Laya

★ 18k▲ 2.9k

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

★ 4.7k▲ 4.3k

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

★ 3.9k▲ 2.1k

TheoLeeCJ/SemIf

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.