bf16
avrik-ai/Avrik-Pro-12B- Format
- bf16 safetensors
- Size
- 23 GiB
- Runs on
- One GPU via vLLM
- Context
- 70,000 tokens
- Latency
- 90.4 ms p50 (94.6 ms p95) at 702 tokens on an H100
- Temperatures
- choice 2.52, yes/no 5.0
- Calibration
cal-12b-bf16-frozen-20261011-1
The default Avrik model. About 90 ms per decision on one GPU.
The Pro tier and the default model of the Avrik family: a 12B decision model that answers in about 90 ms on one GPU, or on a CPU or 16 GB card with the GGUF build. The right starting point for most workloads.
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.
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.
cal-12b-bf16-frozen-20261011-1cal-12b-q8-frozen-20261011-1On the same 128 calibration items, Q8_0 and bf16 both got 105 right, and the top answer agreed on 126.
Batching: 32 questions on one 1,500-token state took 17.6 ms per decision.
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.
| Type | You send | You get |
|---|---|---|
Yes or no noul | A yes/no question | P(yes), from 0 to 1 |
Choice choice | A question and two or more named options | The top option and a probability for each |
Score score | A question and ordered levels, like low, medium, high | The expected level and a probability per level |
Multi-label multi_label | A question and a set of labels | P(yes) per label, and the labels above a threshold |
top, margin, confidence, and an abstain flag.abstain_option, the model can answer “Insufficient information to decide.”Run the model through avrik-server, not generate(). The readout and calibration are what turn raw weights into probabilities you can act on.
One fixed template per build, its SHA-256 in every response. Options become letters A, B, C.
One forward pass per question. Questions on the same state are batched. Nothing is generated.
Reads the probability of every form of each option letter, and refuses if the letters hold under 98% of the mass.
Per-type temperatures fitted for this exact build and bound to its hash.
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.
292/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
Core reasoning
Long context
Consistency
Scoring
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.
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.
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. The pool’s yes/no items come from two hard families, which is why the yes/no temperature sits at the top of the fit range (5.0). It is refitted when the pool widens.
avrik pull verifies every file before anything loads. avrik serve exposes the API on 127.0.0.1:8080, loopback only.
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-Pro-12B --format bf16 # -> ~/.cache/avrik/Avrik-Pro-12B-bf16
HF_HUB_OFFLINE=1 VLLM_NO_USAGE_STATS=1 DO_NOT_TRACK=1 VLLM_BATCH_INVARIANT=1 \
vllm serve ~/.cache/avrik/Avrik-Pro-12B-bf16 --served-model-name avrik \
--dtype bfloat16 --max-model-len 70000 --logprobs-mode raw_logprobs \
--host 127.0.0.1 --port 8000 &
avrik ask Avrik-Pro-12B --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-Pro-12B --format bf16 --vllm-url http://127.0.0.1:8000 # API on :8080On 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-Pro-12B # downloads avrik-ai/Avrik-Pro-12B-GGUF and verifies it
avrik ask Avrik-Pro-12B \
--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-Pro-12B # the API on http://127.0.0.1:8080| Route | Purpose |
|---|---|
POST /v1/systemone | Decide: state and questions in, calibrated answers out |
GET /health | Readiness and the loaded build’s hashes |
GET /v1/models | The served model |
GET /openapi.json | The OpenAPI 3.1 schema |
# Typed Python client, sync and async
pip install avrik-sdkSet your own thresholds: approve above 0.95, send to a person between 0.2 and 0.95, and so on.
Weakest dev-set areas: score_quality (4/10), long_policy_buried (7/16), order_invariance (8/10). The model judges only what’s in the state, so instructions planted there can sway it. Keep untrusted text clearly delimited.
Every file is listed with its SHA-256 in MANIFEST.sha256. Inference makes no network calls, sends no telemetry, and stores nothing.
| Base | google/gemma-4-12B-it at 707f0a3b8a3c7ad586ed01e27eafbad8a27dd0f7 |
|---|---|
| Recipe | Frozen base with fitted per-type temperatures. No fine-tuning. |
| Release gate | Frozen base. Fine-tuned builds replace this one only if they beat it on the sealed, human-authored set. |
| bf16 build | Model hash avrik-ai/Avrik-Pro-12B@cfd9cc0c27e96d1ePrompt template 8d1575803fdb25b66865405afa0d2e6bb3df4eff08003e858769225b3bcc0b70 |
| GGUF Q8_0 build | Model hash avrik-ai/Avrik-Pro-12B-GGUF@6fbf37d64038ea71Prompt template 3269884bf2b10959761578efcec48f09ec59ac185c735f0f759a9088440e2ce0 |
| Release | v1.0.0, October 11, 2026 |
avrik package.auto_map, and symlinks are refused. Tokenizers load with trust_remote_code=False.NOTICE with any redistribution.Same API, same question types. Move up a tier for accuracy, or down for speed and cost.
Calibrated decisions on an ordinary CPU.
The most accurate Avrik model, for the hardest calls.
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.