Skip to content
MrJev

jevos

Serves /v1/systemone and /v1/models for yes/no questions only — other types are refused — from a GGUF model through llama.cpp on CPU, offline once the file is downloaded.

View on GitHub →

Hands-on review

A 1B decision model behind Jev's wire format, now a C++ server with real batching and a state cache. Negated questions are better than before, not yet sound.

Good for

  • Yes/no gates, and now choices and scores, with no GPU, no API key and no network
  • Asking many questions about the same text: the twentieth question costs about 15 ms
  • Code already written for Jev's /v1/systemone, by changing one URL

Watch out for

  • How well a negated question works depends on its wording; ask positively and compute 1 − P(yes) yourself
  • A long text is slow the first time — 4,000 words took 19 s — and fast after that
  • The repository's star count belongs mostly to an earlier project; see below

Tested Oct 4, 2026 at d48b9b77a610 · The jevos-v3 release (tag d48b9b7): its Linux binary and its OpenVINO INT8 model, in Docker (Ubuntu 24.04), 4 CPU cores / 15 GB, no GPU, --threads 4

How we reviewed this: we ran the published jevos-v3 Linux binary and OpenVINO model, both checked against the release’s SHA256SUMS, in Docker on four cores, and repeated the measurements from our first review of the Python build so the two can be compared. Numbers are ours, on that hardware; the project’s own benchmarks, including its comparisons with Jev, are the author’s and we have not reproduced them.

What it is

One 25 MB binary and a 600 MB INT8 model. The server is C++: OpenVINO runs the model, llama.cpp’s tokenizer is compiled in, cpp-httplib serves POST /v1/systemone and GET /v1/models. The release archive carries every dependency’s licence under licenses/, matching a THIRD_PARTY_NOTICES.md in the repository, and /health reports the SHA-256 of each model file — a small thing that lets you prove which weights answered.

It is still candid. /v1/models lists jev-latest as “answered by jevos-v3 on this server, not by TypeSafe’s Jev”, and it ran with --network none from the first request.

New since our first review: choice and score work — a choice is asked as one yes/no question per option — and jev decide now accepts the same request body the README documents, which fixes the other issue we filed.

What it costs on four cores

The Python build read the state once and then paid about 85 ms for every question. This one does not:

questions median per question
1 216 ms 216 ms
5 280 ms 56 ms
10 369 ms 37 ms
20 502 ms 25 ms

About 15 ms for each question after the first, against 85 before. Twenty questions went from 1.6 s to half a second.

Long texts are still expensive the first time — 4,000 words took 18.7 s, down from 22.3 — but the server now keeps what it has read. A 1,100-word text took 6.8 s, then 114 ms for the same question again and 105 ms for a new question about the same text. That is the shape to design around: ask everything you want about a document while it is warm. Past 8,192 tokens it still refuses with no truncation rather than reading part of it.

Repeated answers are identical to the last digit. The same question inside a batch differs in the seventh decimal place, which main.cpp documents as the cost of INT8 activation groups and offers a flag to remove.

Negated questions: better, not sound

Our first review found that Is it false that this is a billing problem? returned 0.10–0.13 for every message, billing or not. On the same four messages:

question billing billing technical technical
Is this a billing problem? 0.932 0.932 0.069 0.114
Is it false that this is a billing problem? 0.056 0.054 0.307 0.199
Is this about something other than billing? 0.013 0.021 0.839 0.771

It now moves in the right direction. It does not move far enough: for the two technical messages, a question and its negation add up to 0.38 and 0.31, and across all five non-billing messages the negated answer ranged from 0.20 to 0.76. The positively worded inversion in the third row is reliable. Write conditions positively still.

Rechecked on jevos-v4, 13 October. The model released after our test does the same thing:

question billing billing technical technical
Is this a billing problem? 0.938 0.942 0.044 0.073
Is it false that this is a billing problem? 0.045 0.038 0.302 0.245
Is this not a billing problem? 0.036 0.038 0.890 0.587

How well negation works depends on the wording. “Is this not…” mostly flips, and “Is it false that…” still stays low on the technical messages. A contributor’s probe with a different state and negated questions tracked the evidence well (0.12 with a bomb beside the ship, 0.92 with none), and we got the same numbers. The maintainer closed our issue and points to a wiki page, negation in yes/no questions, with the same advice we give: ask positively and compute 1 − P(yes) in your own code.

On the ten-message set it scored nine of ten at 0.5 again. The miss is the same angry double-charge ticket, now at 0.496 rather than 0.183.

What it believes

Planted instructions moved nothing that matters — “ignore previous instructions” and a fake system turn shifted a crash report from 0.069 to 0.054 and 0.062. A planted fact moved it to 0.956, as its prompt intends: an assertion in the evidence is evidence.

History

We first reviewed the Python build at eb74cf7, which pinned llama.cpp and refused choice and score. Its numbers are superseded by the ones above.

At that ref four files carried a header naming Rizzo Flow, Apache-2.0, and a NOTICE the repository did not ship. We filed that as issue 9 on 28 September; it was deleted, and the headers were removed while the code in three files stayed byte-identical. We asked on 29 September, as issue 15, whether the headers had been wrong; that was deleted too, with no reply. The two technical issues from the same review were left alone. The C++ rewrite then removed the derived files and added the notices above — a better state than the one we raised, reached without an answer.

The repository was created in August 2024 and its oldest issues concern a résumé-builder library: jevos was published onto an existing popular repository, so its star count is not a measure of jevos.

Verdict

The rewrite fixed what made the first version awkward. Batching is real, a warm document answers in about a tenth of a second, and the answer types match Jev’s. On a laptop with no GPU and no key, this is now the most complete local stand-in for the wire format we have run.

Two cautions: give it time to read a long document once and then ask everything, and phrase every condition positively — negation is improved but a question and its negation still do not add up. For the same protocol over a model you already serve, see jevify; for many open models behind one daemon, ollaya.

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

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