JUSTE UN LLM · v0.1 · APACHE-2.0

Decisions, not chat.
On your machine.

Ask a typed question, get a calibrated probability per option. A 4B model read once, stopped one step before its first word: no API, no tokens generated, no data leaving the box. Same calls as Jev's SDK: change one import.

It has nothing to say, and it says it in 55 milliseconds._

YOUR MACHINE VS JEV'S API · JEV'S OWN BENCHMARK

ACCURACY · ZERO-SHOT

85.7%


      

LATENCY · P50

55ms


      

MEMORY · 4-BIT

2.6GB


      

0 tokens generated · 0 bytes sent · no key · $0 per call. Jev: every text goes to an API.

Illustrative output · usage and latency as the CLI prints them.

JEV BENCH · 300 EXAMPLES

Ahead of Jev.

HOW IT ANSWERS

Read the mind, skip the mouth.

STATE "I was charged twice"
               │
┌──────────────┴──────────────┐
│ WeMM-4B 4-bit (your laptop) │
│ layers 1 → 31, then stop.   │
└──────────────┬──────────────┘
               │ hidden state
               ▼
      cosine(state, option) ◄── options
               │         (encoded once,
               ▼              cached)
       softmax(cos / τ)
               │
               ▼
billing    ████████████████  0.88
technical  ██                0.11
sales      ▏                 0.01
  • The state and each option pass through the same prompt. The answer is the option whose hidden vector sits closest.
  • Everything that does not depend on the state (prompt prefix, option vectors, center) is computed once. A call only pays for its own tokens.
  • The forward pass stops at the last layer it reads. No decoding loop, no sampling, no JSON to repair.
  • A temperature fitted on dev sets turns cosines into probabilities you can threshold on.

WHY LOCAL

Small model. Short answer. Your box.

ALREADY ON JEV?

Change one import.

- from typesafe_sdk import TypeSafeClient, Choice, Noul, Score
+ from jul import TypeSafeClient, Choice, Noul, Score

client = TypeSafeClient(model="wemm-4b-4bit")

r = client.system_one(
    state={"ticket": "I was charged twice this month."},
    questions={
        "team": Choice(
            instructions="Which team should handle this?",
            criteria={"billing":   "payments, refunds",
                      "technical": "bugs, errors",
                      "sales":     "pricing, plans"}),
        "is_bug": Noul(instructions="Is it a bug report?"),
    },
)
r.choices["team"].choice         # "billing"
r.choices["team"].probabilities  # {"billing": 0.88, ...}

Same imports, same calls, same response shapes. Arguments that only mean something remotely are accepted and ignored.

ZERO-SHOT · JEV'S PUBLISHED BENCHMARK · 300 EXAMPLES

Jev's own benchmark, beaten by 12 points.

jul wemm-4b ²0.950.880.800.8770.11278 ms4.5 GB
jul wemm-9b ²0.970.840.780.8630.114138 ms9.0 GB
jul wemm-4b-4bit ²0.900.870.800.8570.08455 ms2.6 GB
jul f2llm-4b ²0.890.820.810.8400.09046 ms3.0 GB
jul f2llm-1.7b ²0.910.670.870.8170.08224 ms1.0 GB
jul minicpm5-2b-decision ¹0.910.790.690.7960.133217 ms1.3 GB
Jev (published)0.910.870.480.7530.156246 mshosted
jul harrier-0.6b ²0.720.520.760.6670.14413 ms0.31 GB
jul minicpm5-2b0.800.590.460.6170.11364 ms2.7 GB
GLiNER2.5 (published)0.700.610.440.5830.101128 ms—

Click a column to sort. Highlighted: the best value in each column.

  • ² Embedding LLMs (Tencent, CodeFuse-AI, Microsoft), read by jul like any other model: jul models add. Better calibrated than Jev, all six.
  • Banking77 and Emotion are in MTEB, which embedding models train on. AG News is not: there, wemm-9b scores 0.97 against 0.91.
  • ¹ Trained on these three tasks' training splits. On six sources neither model trained on, Jev leads: 0.857 against 0.721.
  • With 1,000 labeled examples, wemm-4b-4bit reaches 0.897 and 0.94 on Banking77. Harrier-0.6B passes Jev in 0.31 GB at 13 ms.
  • 100 rows per dataset: ±5 points per cell, ±3 on the mean. If a bag of words solves your task, use it: we measured that too.

TWO LINES · ON PYPI

Up in one coffee.

C:\> pip install jul
C:\> jul setup
  backend ....... mlx (Apple Silicon)
  model ......... wemm-4b-4bit, 2.6 GB, downloaded once
  check ......... 1 decision OK

jul setup picks the backend (MLX on Apple Silicon, PyTorch elsewhere), installs it if missing, downloads the model once and runs one real decision.

No terminal handy? Let an agent do it →

OR FROM A PROMPT

Let a big LLM install the small one.

Paste this into Claude Code, Codex, or any agent that has a shell.

Install jul (https://pypi.org/project/jul/), a local library that answers typed questions
with a 4B model, and check that it works on this machine.

1. Create a virtualenv with Python >= 3.10.
2. In that venv: pip install jul   then   jul setup
   jul setup picks the backend (MLX on Apple Silicon, else PyTorch), installs it, downloads
   WeMM-Embedding-4B (2.6 GB, 4-bit) and runs one test decision.
3. Then run:
   jul ask choice "Which team should handle this ticket?" -o billing:"payments, invoices" -o technical:"bugs, errors" --state "I was charged twice"
   and show me the JSON.

Do not use sudo and do not install anything outside the venv. If a step fails, show me the error and
what you suggest before trying something else. At the end, tell me in two lines: the backend, the
latency per decision, and the answer to the ticket.
A model that writes essays, installing one that answers in a single word. Neither of them minds.

BY JÉRÔME GUYON · JUL-SHOWCASES

Seen in the wild.

  • A form that branches itself. JuL picks the next question from the answers so far. No if/then.
  • Re-rank by intent. One Score per item: deep engineering up, clickbait down.
  • Mute the noise. One Noul per notification: the OTP stays, the flash sale goes.
  • Fast mode or full model? A prompt's difficulty, decided before it is sent.
  • Millions of tickets. 50,000 real support tickets in 668 s on a Mac, 82.9% accuracy, $0.
  • Autotune, measured. 82.0% → 96.5% after a 6-second head, throughput unchanged.
  • An on-device browser agent. JuL picks each action, the Apple Foundation Model types, and it books a train on SNCF Connect.

Seven small demos, each one an idea from jevable.com, run locally through from jul import TypeSafeClient.

JuL, Juste un LLM. A headless decision runtime for local models. Apache-2.0.

CREDITS
  bdauzats ........ author
  jlestel ......... contributor
  JeromeGuyon ..... contributor

github.com/usejul/jul · pip install jul · weights on Hugging Face · Not affiliated with TypeSafe AI or Jev.

C:\JUL> exit_

Game of Life. Also runs locally.