Skip to content
MrJev

jeff (Firelex)

Qwen3.5 and Gemma 4 fine-tunes for zero-shot classification that take Jev's request shape. The author reports about 22 ms per decision on an RTX PRO 6000 and 28 ms on an M4 Max under MLX.

View on GitHub →

Hands-on review

Task adapters on a 0.8B decision model, with unusually reproducible evidence. Its headline holds — but the 27B 'fallback' is almost never used.

Good for

  • A handful of narrow decisions — injection guard, triage, intent, tool choice — at small-model cost
  • Anyone who wants to check a benchmark: sample seeds, row ids and model revisions are all published
  • Training your own adapter on the documented data format

Watch out for

  • On a four-core CPU a decision takes about two seconds, and questions in one request are not batched
  • The base model, without an adapter, gets negated and inverted questions badly wrong
  • One request at a time: concurrent callers get 529 and must retry; `jev-latest` is rejected

Tested Oct 4, 2026 at d0173b4ee317 · Jeff-Qwen3.5-0.8B v1.2 with the guard and triage adapters, jeff-serve on CPU in Docker, 4 cores / 15 GB, no GPU; published results recomputed from jeff-reference-app at 4e86bc1

How we reviewed this: we ran the v1.2 base and two of its nine adapters on CPU in Docker, replayed the exact 300-row test samples the project’s own benchmark used, and recomputed its headline table from the published result files. We could not run the 27B it compares against — it needs 28.6 GB — so that side of the comparison is the author’s. No Jev calls.

What it is

Jeff is an open 0.8B “System 1” model on Qwen3.5, served by jeff-serve at /v1/systemone. Questions are noul, choice (up to 254 options) and score, answered from one forward pass with a probability per option. On top of the zero-shot base sit LoRA adapters, one per job: guard (prompt injection), triage, support intents, tools, grounding, voice navigation, spam, legal clauses, emotion. A request names an adapter as its model; anything else goes to the untouched base. Each adapter ships its test and calibration sets, and a decision_config.json that records the SHA-256 of its training data and of every training script. MIT, 1,351 stars in six days.

The headline, recomputed

The README leads with Put Jeff in front of your 27B: let Jeff decide, and pass a decision to Qwen3.8-27B only when Jeff is unsure. Across eight adapters the author reports 95.3% accuracy for the cascade against 86.6% for the 27B alone, in 0.25 s instead of 8.1 s.

Those numbers come from jeff-reference-app, and they hold. We recomputed every mean from results/cascade.json — 86.6%, 95.3%, 8.11 s, 0.25 s, a 37.7× geometric speed-up — and checked the two things that most often flatter a comparison like this. The 27B’s 300 replies per task contain no invalid JSON, so Jeff is not winning on format failures; and the test and calibration rows come from disjoint families, with no state shared between them, and thresholds chosen on calibration rows only. The 27B run records its exact revision, 8-bit quantisation, machine, thinking: off, sample seed and a hash of its row ids.

Then we replayed those same 300 rows through Jeff on our CPU:

adapter author reports we measured
guard 98.0% 98.0% (294/300)
triage 91.0% 91.7% (275/300)

Guard reproduces exactly. Triage is two rows better than published.

What the table does not say

The cascade’s threshold, per task, is the lowest one whose accuracy beats the 27B alone by a point. On seven of the eight headline tasks that threshold is 0.00, so nothing is ever passed on — the “cascade” column is Jeff and its adapter alone. On the same seven, sending every decision to the 27B scores below Jeff; on guard, accuracy falls steadily from 98.0% toward the 27B’s 84.0% as more rows are escalated. Grounding is the one task where the 27B is better on its own and the cascade does route to it, 1.7% of the time.

So the result is stronger and narrower than the framing. Stronger: a task-tuned 0.8B adapter beat a 27B generalist outright on these tasks. Narrower: the test rows are synthetic — each records its source as the project’s own generator, jeff-finetunes/<task> — so they are held out by family but not by distribution, and the 27B ran with reasoning switched off, which the README’s caveats do say. Expect the adapters to be excellent at their nine jobs and treat the 27B as the generalist you keep for everything else, not a safety net under them.

On a CPU

The README’s speed table quotes 22 ms on an RTX PRO 6000, 28 ms on an M4 Max and 463 ms on a 32-thread CPU. On our four cores the replay above took a median of 2.2 seconds per decision, 5.8–6.3 s at the 95th percentile, with prompts of a few hundred tokens. Several questions in one request do not share work: the base took 906 ms for one question and 12.9 s for twenty, about 650 ms each. The process held 4.9 GB with the base and two adapters loaded.

The server takes one request at a time. Of eight sent together, one succeeded and seven returned 529 with Retry-After: 1 — the same overload code TypeSafe uses, so clients written for Jev will back off and retry rather than fail. It does not accept jev-latest, the model name those clients send by default, so pointing the official SDK at it needs the model set to jeff-latest as well as the base URL.

Without an adapter

The base is the zero-shot model, and on our standard probe it struggles. Is this a billing problem? separates billing from technical messages cleanly (0.96 and 0.95 against 0.07 and 0.11). Is it false that this is a billing problem? returned 0.58 and 0.76 for the billing messages — closer to agreeing than negating — and the positively worded inversion, which every other model we have probed handles, came back between 0.43 and 0.58 for all four. Use adapters for anything that matters, and keep questions short and positive on the base.

Verdict

The best-evidenced benchmark we have reviewed: seeds, row ids, model revisions and training-data hashes are published, and the two numbers we could reproduce came out the same. The adapters are the product. A v1.3 base is due within days and the current adapters will not carry over to it, so pin the revision you test. For many open models behind one daemon, see ollaya; for the other two projects called jeff, see Alurith’s CLI and logan-markewich’s server.

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

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