Paper Feed

Issue 41 · Project 06 HF model AI / ML trending #9 ✓ read

LiquidAI/d1-3B

image-text-to-text · transformers

TL;DR: d1-3B is Liquid AI's 3B multimodal "decision model": you hand it a state (text, JSON, images) and a dictionary of typed questions (yes/no, choice, score), and it returns calibrated probability distributions for all of them in a single forward pass with zero output tokens — 8 ms per decision on a 4090, 30 ms on an M5 Pro, usable on a Jetson Orin Nano. The interesting part isn't the benchmark numbers; it's the interface, which replaces generate-then-parse-JSON with a direct calibrated readout and is a deployment pattern that could spread fast.

What it is

d1-3B is LFM2.5-VL-3B (SigLIP2 NaFlex 400M vision encoder, 32k context) post-trained so that decisions are read out during prefill rather than decoded. Three question types, following their "Decision Index" schema:

  • noul — yes/no, returns P(yes)
  • choice — one of N named options, returns the pick plus a full probability vector
  • score — 2–10 ordered levels, returns an expected value over the levels plus probabilities

Multiple named questions ride on a single state encoding: the model reads the state (and its images) once and answers everything in one pass. Three questions cost 21 ms vs 8 ms for one on a 4090 — not 3×. There's also a padding-free batched call that hits 475 states/s on a 4090 and 1,106/s on an MI325X.

The card doesn't describe the training recipe or the exact readout mechanism (presumably distributions over answer positions, calibrated during post-training), and the model ships custom code — this is not a standard generate() workflow.

State text / JSON / images encoded once Questions noul · choice · score named, typed d1-3B one forward pass 0 output tokens refund: P(yes)=0.97 noul team: billing (0.91) choice + probs urgency: 2.3 / 3 expected score
No decoding, no JSON parsing, no regex: typed answers with full probability vectors come straight from the prefill, and N questions share one state encoding.

Evidence

The headline claim is best "decision model" under 10B on Decision Index 0.2.1: 48.57, ahead of Decider 35B-A3B (47.11) and all 4B/9B entries, behind only a 12B. Caveat: this leaderboard and its competitors (Winnow, Decider, JPT, Jet) are not names I can independently place — this looks like a young benchmark ecosystem that's hard to externally sanity-check, and Liquid's score is self-reported ("official scorer, not a leaderboard submission").

More interpretable: on classic classification benchmarks framed as decisions it averages 77.1 (SQuAD 2.0 85.3, BoolQ 86.7, XNLI 85.0), beating Decider 4B's 76.2 — though it loses on several individual rows (HelpSteer2, XNLI, BoolQ, MASSIVE). Vision is preserved from the base model: 74.1 mean over 11 image benchmarks vs 73.9 for LFM2.5-VL-3B, with a nice ablation — removing the images drops the same questions to 45.1, so it's actually looking.

The glaring omission: no calibration metrics (ECE, reliability curves) despite "calibrated" being the core claim, and no head-to-head against a prompted generative VLM doing the same tasks via constrained decoding. The latter is the comparison that matters for anyone deciding whether to adopt this.

Single-decision latency (warm, one question)ms010203040508RTX 40909MI325X16Jetson Thor26Jetson Orin 64GB30M5 Pro50Orin NanoFrom the model card; 4090 uses CUDA-graph compile mode (16 ms without)

What's actually there and what to expect

Safetensors weights, custom modeling code (trust_remote_code=True required, transformers>=5.14), a HF Space collection ("Open d1 Arcade", 10 demos), and a blog post. Multilingual (en/zh/ar/fr/de tags). License is "other" — likely Liquid's LFM license with commercial restrictions; check before production use. It is explicitly not a chat model — it cannot generate text at all, so no rationales, no extraction of free-form fields. Scores are capped at 10 ordered levels. 3.1B params in bf16 means ~6.5 GB, fine for edge.

The real significance: half the LLM calls in production pipelines are classification wearing a generation costume — routing, moderation, judging, guardrails, reranking — paying for autoregressive decoding and brittle JSON parsing to get one label. A single-pass readout with native probabilities is strictly better for those if accuracy holds, and 262 decisions/s on a Jetson Thor makes real-time multimodal triage on-device plausible. Whether the calibration claim survives contact with your distribution is the open question; the README gives you no ECE numbers to lean on.

Try it

pip install "transformers>=5.14" torch torchvision pillow
from transformers import AutoModel
model = AutoModel.from_pretrained("LiquidAI/d1-3B", trust_remote_code=True).to("cuda")

out = model.system_one(
    "I was charged twice this month, please refund one of them.",
    {"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}},
)
print(out["answers"]["refund"])  # P(yes), 0 output tokens

Or poke the zero-setup demos first: the Open d1 Arcade Space collection linked from the model card.