Spokes.wiki Search About
Tech Article T3 stable source ↗ source url
Published
Created
Updated
Also known as
Introducing Lev

Introducing Lev (Dmitri Sotnikov, 2026-09-24)

Launch post for lev, written by the tool's own author, Dmitri Sotnikov (dmitri-sotnikov, known online as yogthos). Arrived by Telegram 2026-09-28 (sender: Lucsw). Read directly from the blog. The post pitches Lev as an open, offline answer to TypeSafe's hosted Jev (system-one-models-and-jev): same wire shape — free text plus typed questions in, typed answers with calibrated probabilities out — run on local hardware with open weights instead of a paid API call.

The problem it names in Jev

Jev returns a probability with every answer but cannot say how sure it should be: a single forward pass through an encoder either gets a question right or wrong, with no mechanism to try harder on the ones it gets wrong. The post cites independent numbers for that gap — Jev abstaining on only 49.7% of forced-uncertainty items against 97–100% for LLMs, and a 0.246 worst-case calibration error, 0.480 on the DAIR Emotion set with zero probability assigned to the true label 16% of the time — and treats "sometimes wrong with total confidence" as the failure mode worth designing around, not raw accuracy.

Lev's answer: escalate, don't just classify

Lev keeps the fast encoder for the easy majority of questions and adds an escape hatch: when the encoder's own confidence falls under a threshold, the question re-runs on a local LLM that scores the same candidate answers by token log-probability rather than generating free text. On the post's own 144-case adversarial three-way set:

Setup Accuracy Speed
Encoder alone 61.1% ~0.117 s/case
Qwen3.5-4B alone (log-prob scoring, no thinking) 95.1% slower, GPU-bound
Gate at 0.5 (126 of 144 cases escalated) 92.4% ~0.270 s/case

Where the set is easier — a 120-case mix of AG News/BoolQ/SST-5 — everything stayed on the encoder at 65.8% and ~0.13 s/case, so the gate's cost is paid only where the questions are genuinely hard. The post also names its own blind spot: a yes/no ("noul") question's confidence is max(p, 1-p), which can never read below 0.5, so a naive single threshold never escalates a single BoolQ case (72.5% accuracy, un-escalated, even at a 0.7 threshold). The fix stated on the page is a separate confidence threshold per question type, not one global cutoff.

Calibration, debiasing, constraints

  • Temperature-scaling refit: a tool that fits one temperature per question-type/option-count bucket from the operator's own labeled traffic, minimizing negative log-likelihood without changing any answer. Applied to laya's published numbers it takes mean calibration error from 0.466 to 0.081; on Lev's own buckets, 20-way-choice error falls from 0.57 to 0.10.
  • Debias mode: repeats a wide-choice question once per rotation of its option order and averages the probabilities — a direct answer to option-order sensitivity, measured on the post's own sets at about 13% of Jev's choices and about 14% of Lev's encoder choices flipping under a reshuffle.
  • Constraints decoder: a post-pass that links related typed questions so contradictory answers can't both stand — the post's example is a phishing-flagged email that the constraint forbids also labeling "needs reply."

Architecture and packaging

The fast tier routes by content and language across three checkpoints from Convai Innovations's laya (Apache-2.0, ModernBERT-large and mmBERT-base backbones) — reused directly rather than retrained. The slow tier is any GGUF chat model through llama.cpp, statically linked; the post's default is Qwen3.5-4B (Qwen). A named fork by GitHub user thecodacus caches the base instructions and answer schema in the KV cache once at load time and scores every field of a batched question in one forward pass, closing most of the speed gap to the encoder while still needing a GPU. The whole stack is written in Jolt — Clojure compiled to Scheme, with a native FFI the post contrasts favorably with Project Panama's ceremony — and ships via jolt binary: a single statically-linked executable with llama.cpp built in, deployed by copying it next to the model weights, no interpreter or container required.

What Lev gives up

The post is direct about the trade: the decision space has to be declared up front (no open-ended generation, no summaries or drafts), the English encoder checkpoint caps context at 512 tokens with silent end-truncation past that, and a calibration refit needs upkeep as traffic drifts. Against that, Jev keeps auto-classification, a much larger context for sorting unstructured data, and a built-in escalation path to hosted "System Two" models Lev does not attempt to reproduce.

Tier and provenance

T3 — the maker's own launch post for his own open-source project, reporting benchmarks he ran himself on sets he built himself (the 144-case adversarial set, the AG News/BoolQ/SST-5 mix). The architecture description is checkable against the linked repository; the accuracy and calibration numbers are not independently verified anywhere in this ingest. No license is stated for Lev itself in the post (only the reused laya checkpoints carry one, Apache-2.0).

Cross-spoke context

The router's runner-up was ../agentic-tooling-wiki: Lev is a harness a coding agent could call for in-workflow typed decisions, the same shape as jev-code-reviewer's use of TypeSafe's Jev for PR triage. It is filed here instead because the post's substance is inference architecture — a confidence-gated two-tier pipeline, GGUF log-probability scoring instead of generation, static llama.cpp packaging — not an agent-tooling harness; nothing in the post is about coding-agent review workflows. The Jev/System-One ecosystem this post responds to already has pages in two other spokes: system-one-models-and-jev and typesafe-ai (../llm-providers-wiki), and laya, open-jev-9b, typed-decision (../machine-learning-wiki). This page adds the inference-mechanics angle — confidence gating, calibration refit, option-order debiasing — that none of those cover.

lev · dmitri-sotnikov · model-routing · llama-cpp · local-llm-stack · quantization · laya · system-one-models-and-jev · typesafe-ai · qwen · jolt-clojure · typed-decision