Skip to content
MrJev

LocalJev

Local Jev-compatible /v1/systemone server for Bun that asks DiffusionGemma for probabilities, from GitHub Next.

View on GitHub →

Hands-on review

GitHub Next's small Bun server answers Jev requests with any OpenAI-compatible model. Highly compatible with Jev's API, but probabilities are self-reported.

Good for

  • Developing and testing Jev code offline against a model you already run locally
  • Keeping Jev-style requests on your own machine with any OpenAI-compatible server
  • A small, readable example of adapting Jev's API onto chat completions

Watch out for

  • Probabilities are written by the model as JSON, not read from its logits, so calibrate first
  • Slow on small hardware: the SDK's default 10-second timeout needed raising on our CPU
  • Pinned Jev names like jev-1.13.0 are rejected; use jev-latest or its own model names

Tested Sep 19, 2026 at 3f23e36e1a3b · Bun 1 in Docker, backed by llama.cpp serving Qwen2.5-1.5B-Instruct (Q4) on a 4-core CPU; called with typesafe-sdk 0.7.0

What it does

LocalJev, from GitHub Next, is a small TypeScript server for Bun that implements Jev’s POST /v1/systemone API on top of any OpenAI-compatible chat completions endpoint. By default it targets DiffusionGemma served by oMLX on a Mac, but anything that speaks chat completions works.

For each request it turns the state and typed questions into a classification prompt, asks the model for a JSON probability (or a vector of them), validates the result and retries malformed output, normalizes it, and returns Jev-shaped answers with choices, expected scores, and entropy-based confidence.

The README is upfront about the trade-off. OpenJev reads probabilities from the model directly, which needs unmerged vLLM extensions. LocalJev instead asks the model to state its probabilities, which is “wire-compatible, but not mathematically equivalent”, and it tells you to evaluate calibration on your own workload. A bake-off of five local models is included; it doesn’t compare against Jev.

Setup

bun install
cp .env.example .env   # set LOCALJEV_UPSTREAM, its model and key
bun run start          # http://127.0.0.1:8080

It needs Bun 1.2+ and a running model server. Settings cover the upstream URL, model and key, an optional LOCALJEV_API_KEY for clients, timeouts, retries, concurrency, queue size, and how many questions go into each model call.

Using it

We ran LocalJev in Docker against llama.cpp serving a small 1.5B instruct model on a four-core CPU, set a client API key, and called it with TypeSafe’s official Python SDK (0.7.0) using the same compatibility checks we run on every Jev reproduction.

  • The tests pass. All 19 tests and the type check passed.
  • It passed 11 of our 12 compatibility checks. All three question types, chat-message and JSON state, SDK response_model parsing, Noul criteria, Choice options without descriptions, a 64-option Choice, a question without instructions, the model list, and rejecting a wrong key with the SDK’s authentication error.
  • It names the version that answered. Responses report localjev-0.2 rather than echoing jev-latest, which is how Jev itself reports versioned models.
  • One difference. A pinned Jev name such as jev-1.13.0 returns 404. jev-latest works, along with its own localjev-latest and localjev-0.2.
  • Mind the timeout. On our CPU, a few larger requests took longer than the SDK’s default 10-second timeout. With a longer timeout they all succeeded. That’s our hardware and small model, not a LocalJev limit, but set the SDK’s timeout accordingly with local models.

As with every model we test, we don’t judge the answers here: a 1.5B model on a CPU says little about what LocalJev does with a strong model.

Permissions and data

  • Everything stays where your model runs. LocalJev sends the prompt to the upstream you configure, which is 127.0.0.1:8000 by default, and nowhere else.
  • Authentication is optional. It listens on 127.0.0.1 by default and accepts any key unless you set LOCALJEV_API_KEY. Set it before exposing the port.
  • Keys live in .env. The upstream key is read from .env, which is gitignored, or from the environment.

Maintenance

Three commits on September 18 under the GitHub Next organization, MIT licensed, with tests, an evaluation framework, and a detailed first bake-off report. No issues yet. It reads as a focused experiment rather than a maintained product.

Verdict

LocalJev matched Jev’s API as closely as any self-hosted server we’ve tested, tied with jeff, and its small codebase makes it easy to understand and adapt. It’s ideal for developing Jev code offline, or for keeping requests on your own hardware with whatever model you already run. Just remember what the probabilities are: numbers a generative model wrote down, not scores read from its internals. Calibrate them on labeled data before any decision depends on them, and give the SDK a longer timeout on slow machines.

For servers that read probabilities directly, see openjev-sglang and jeff. For trained Jev-style models, see kev. Our Jev alternatives guide compares the approaches.

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

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