Released v1.0.0October 11, 2026. Open weights, Apache 2.0.

Avrik-Lite-4B

Calibrated decisions on an ordinary CPU.

The edge tier of the Avrik family: a decision model with 4B effective parameters that answers on a laptop CPU in seconds, with no GPU. Built for offline and on-device use, and for high volumes of simple checks.

86.6%Dev-set accuracy277 of 320, 95% CI 82.4–89.9%
5.0 sPer decision on a laptop CPUp50 at 256 tokens, GGUF Q4_K_M
78.8%JevBench public tasks182 of 231, self-run, not official
2 buildsGGUF Q4_K_M and bf16Each with its own calibration

What it’s for.

Send a state, like a ticket, a transaction, a policy and a case, and one or more typed questions. Get back a calibrated probability for every option, read straight from the model’s output in one forward pass.

  • CPU-only and air-gapped machines
  • On-device and offline decisions
  • High-volume, simple yes/no checks

Pick a build.

Same model, same API, two ways to run it. Each build has its own repo and its own calibration, fitted on that build’s outputs.

GGUF Q4_K_M

avrik-ai/Avrik-Lite-4B-GGUF
Format
GGUF Q4_K_M
Size
5.0 GiB
Runs on
CPU via llama.cpp
Context
8,192 tokens
Latency
5.0 s p50 at 256 tokens on a 6-thread laptop CPU
Temperatures
choice 2.63, yes/no 2.94
Calibration
cal-lite-q4-frozen-20261011-2

Quantised with an importance matrix computed on decision prompts, so it keeps the weights that matter for letter readouts. On the same 148 calibration items, Q4_K_M got 111 right against bf16’s 115, and the top answer agreed on 142.

bf16

avrik-ai/Avrik-Lite-4B
Format
bf16 safetensors
Size
15 GiB
Runs on
GPU via vLLM
Context
70,000 tokens
Latency
Not measured on a GPU for this release
Temperatures
choice 2.48, yes/no 3.09
Calibration
cal-lite-bf16-frozen-20261011-1

GGUF Q4_K_M on a 6-thread laptop CPU (Ryzen 9 6900HX), one question

State tokensp50p95
2565.02 s5.13 s
3006.02 s6.36 s
1,00021.19 s21.69 s

Four question types. One API.

All three Avrik models answer the same /v1/systemone API with the same question types. Pick a tier by accuracy, latency, and hardware, and switch without changing your code.

TypeYou sendYou get
Yes or no noulA yes/no questionP(yes), from 0 to 1
Choice choiceA question and two or more named optionsThe top option and a probability for each
Score scoreA question and ordered levels, like low, medium, highThe expected level and a probability per level
Multi-label multi_labelA question and a set of labelsP(yes) per label, and the labels above a threshold
  • Confidence on every answerEach answer carries top, margin, confidence, and an abstain flag.
  • Room to say “I don’t know”With abstain_option, the model can answer “Insufficient information to decide.”
  • ReplayableEight audit fields per response. The same request on the same backend and precision returns the same numbers.

How an answer is made.

Run the model through avrik-server, not generate(). The readout and calibration are what turn raw weights into probabilities you can act on.

  1. 1

    Prompt renderer

    One fixed template per build, its SHA-256 in every response. Options become letters A, B, C.

  2. 2

    Gemma 4 decoder

    One forward pass per question. Questions on the same state are batched. Nothing is generated.

  3. 3

    Letter readout

    Reads the probability of every form of each option letter, and refuses if the letters hold under 98% of the mass.

  4. 4

    Calibration

    Per-type temperatures fitted for this exact build and bound to its hash.

Results, with their error bars.

Measured by Avrik AI on the bf16 build. Every accuracy carries a 95% Wilson interval, because a bare point estimate hides how few items sit behind it.

Avrik dev set

277/320 overall. 320 text items in 24 families. 100 labels are computed by code; 220 were drafted by a model and aren’t human-verified, so treat those families as indicative.

Agent governance

Prompt injection13/15
Intent alignment12/15
Personal data15/15
Tool-call authorization15/15

Core reasoning

Abstains when ambiguous9/10
Extraction10/10
Judgement15/15
Long policy10/10
Multi-hop10/10
Paraphrase edits15/15
Probability laws10/15
Routing10/10
Rule precedence9/15
Safety judgement15/15
Temporal and numeric20/24
Adversarial traps4/10

Long context

Buried policy clause11/16
Long records17/18
Needle in a haystack12/12

Consistency

Near-tie stability10/10
Negation pairs14/15
Order invariance7/10
Paraphrase invariance9/10

Scoring

Score quality5/10
Accuracy per family, dot is the point estimate, line is the 95% Wilson interval.

JevBench public tasks

The 231 public tasks of JevBench v1.4.2, run by Avrik AI. Not an official measurement, and not on the scale of the current leaderboard.

Easy48/48
Standard68/72
Hard66/111
Overall182/231
Top-answer accuracy by difficulty tier, with 95% Wilson intervals. Axis starts at 50%.

Held-out human evaluation

Pending. Avrik’s sealed evaluation set is written by people, kept encrypted, and never used for training or tuning. Results will be added to the model card in a later revision.

Calibration

Expected calibration error, 10 bins, top option. Lower is better. When this model says 0.8, it should be right about 80% of the time. Calibration pool held out from dev; dev shown for comparison. Each build is fitted on its own outputs.

bf16 build, calibration cal-lite-bf16-frozen-20261011-1.

GGUF Q4_K_M build

GGUF Q4_K_M build, calibration cal-lite-q4-frozen-20261011-2, fitted on this build’s own outputs.

Run it in a few commands.

avrik pull verifies every file before anything loads. avrik serve exposes the API on 127.0.0.1:8080, loopback only.

On a CPU (Linux, macOS or Windows; no GPU needed). The first line installs llama.cpp’s prebuilt CPU wheel, so nothing has to compile.

pip install llama-cpp-python==0.3.35 --no-deps --only-binary=:all: \
  --index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
pip install "avrik[cpu]"

avrik pull Avrik-Lite-4B                    # downloads avrik-ai/Avrik-Lite-4B-GGUF and verifies it
avrik ask Avrik-Lite-4B \
  --state "Customer bought headphones 12 days ago, unopened, receipt attached. \
Policy: unopened items within 30 days get a full refund." \
  --noul "Should the refund be approved?" \
  --choice "Which action?=approve,deny,escalate"
avrik serve Avrik-Lite-4B                   # the API on http://127.0.0.1:8080

On a GPU with vLLM (Linux, CUDA). avrik pull downloads the repo and verifies every file, vLLM serves the weights on loopback, and avrik serve puts the decision API in front.

pip install avrik "vllm==0.30.0"
avrik pull Avrik-Lite-4B --format bf16          # -> ~/.cache/avrik/Avrik-Lite-4B-bf16

HF_HUB_OFFLINE=1 VLLM_NO_USAGE_STATS=1 DO_NOT_TRACK=1 VLLM_BATCH_INVARIANT=1 \
  vllm serve ~/.cache/avrik/Avrik-Lite-4B-bf16 --served-model-name avrik \
  --dtype bfloat16 --max-model-len 70000 --logprobs-mode raw_logprobs \
  --attention-backend TRITON_ATTN \
  --host 127.0.0.1 --port 8000 &

avrik ask Avrik-Lite-4B --format bf16 --vllm-url http://127.0.0.1:8000 \
  --state "Customer bought headphones 12 days ago, unopened, receipt attached. \
Policy: unopened items within 30 days get a full refund." \
  --noul "Should the refund be approved?" --choice "Which action?=approve,deny,escalate"

avrik serve Avrik-Lite-4B --format bf16 --vllm-url http://127.0.0.1:8000   # API on :8080
RoutePurpose
POST /v1/systemoneDecide: state and questions in, calibrated answers out
GET /healthReadiness and the loaded build’s hashes
GET /v1/modelsThe served model
GET /openapi.jsonThe OpenAPI 3.1 schema
# Typed Python client, sync and async
pip install avrik-sdk

Use it well.

Set your own thresholds: approve above 0.95, send to a person between 0.2 and 0.95, and so on.

Built for

  • Automated decisions with a threshold a person sets
  • Triage, routing, policy and eligibility checks
  • Classification with calibrated confidence
  • A fast first stage in front of people or larger models

Not built for

  • Explanations or free text. It generates none.
  • Acting alone on legal, medical, financial, or safety decisions without human review
  • Images, in this release. Input is text or JSON.
  • Languages other than English, which haven’t been evaluated

Weakest dev-set areas: trap_adversarial (4/10), score_quality (5/10), rule_precedence (9/15). The model judges only what’s in the state, so instructions planted there can sway it. Keep untrusted text clearly delimited.

Provenance you can check.

Every file is listed with its SHA-256 in MANIFEST.sha256. Inference makes no network calls, sends no telemetry, and stores nothing.

Basegoogle/gemma-4-E4B-it at ee0ef6023621cff504d758262d4e04895a5af4a2
RecipeFrozen base with fitted per-type temperatures. No fine-tuning.
Release gateFrozen base. A fine-tuned Lite is in evaluation and replaces this build only if it beats it on the sealed, human-authored set.
GGUF Q4_K_M buildModel hash avrik-ai/Avrik-Lite-4B-GGUF@c6f10bb369fe162aPrompt template a0eb0c15ba82644a1c8cc1fa5193e9f80e64c4b63a88fe38a65588e11ab16ff3
bf16 buildModel hash avrik-ai/Avrik-Lite-4B@8004525daedc7abdPrompt template faef1dd3a7300a8a3cbb5204a78a57c28d2b70ca8965f715920cb4a56a0f9aa7
Releasev1.0.0, October 11, 2026
  • Tamper checksSwapped or altered downloads are refused, and the manifest’s own digest is pinned in the avrik package.
  • No code in releasesCode files, auto_map, and symlinks are refused. Tokenizers load with trust_remote_code=False.
  • LicenceApache 2.0 for the weights, calibration, and readout config. Keep NOTICE with any redistribution.

The rest of the family.

Same API, same question types. Move up a tier for accuracy, or down for speed and cost.

  • Max31B

    Avrik-Max-31B

    The most accurate Avrik model, for the hardest calls.

    Dev-set accuracy
    96.9%
    Per decision on one H100
    168.4 ms

Get Avrik-Lite-4B on Hugging Face.

Open weights under Apache 2.0, with calibration and hashes for every build. Questions or a use case to talk through? We’d like to hear it.