A decision model from Liquid AI. Reads the state and up to 16 questions in one forward pass and softmaxes each answer slot over its option codes, with a fitted temperature. Never generates text.
- download
- –
- load
- –
- self-check
- –
Checking the cache…
edulab
SemIf browser lab
d1-2B never writes text. It reads your state and every question about it in one forward pass and takes each answer straight from the logits at that question's answer slot, so it cannot break the format. Every answer is a calibrated probability over the options you listed. Put it side by side with basal-1.5-mini, a Polish-English decision model, and with Qwen3 0.6B from page 1.
Model d1-2B by Liquid AI (built on LFM3-VL-2B) · ONNX LiquidAI/d1-2B-ONNX · LFM Open License v1.0
Compare with basal-1.5-mini by Remigiusz Kinas (fine-tuned from Bielik-1.5B) · ONNX for WebGPU andrzej/basal-1.5-mini-onnx-web · Apache 2.0
Is this phishing? Should this escalate? The answer is one probability that the statement holds.
Which queue, which intent? You get the winning label and the full distribution over every option.
How severe, how urgent? Ordered levels, so the answer is an expectation, not only a pick.
Checking the weight caches…
A decision model from Liquid AI. Reads the state and up to 16 questions in one forward pass and softmaxes each answer slot over its option codes, with a fitted temperature. Never generates text.
Checking the cache…
A Polish-English decision model. Reads the option letters' logits after a fixed prompt, in both option orders, and applies a temperature fitted per question type.
Checking the cache…
A general chat model from page 1, read directly: the softmax of its next-token logits over the option letters. Not calibrated.
Not loaded. Needs WebGPU; shares page 1's cache (639 MB).
Nothing loads by itself: tick the models, then press load selected (or a card's own load button). Only ticked, loaded models decide. Weights come from Hugging Face (pinned revisions) and stay in this browser's cache; inputs never leave the page. All three run on the GPU through WebGPU.
Load a ticked model first (pick the models).
Each question is {"type", "instructions", "criteria"}. A choice takes a list of labels or an object of label → description; a score takes ordered levels, lowest first; a boolean takes null or {"false": …, "true": …}. A state that parses as a JSON object or array is passed as structured data. d1 reads up to 16 questions about one state in one forward pass; a score takes 2 to 10 levels. A samples file holds one STATE and one QUESTIONS block per sample: download the format (.txt).
Load at least one ticked model, then press decide. Answers appear here one question at a time, one lane per model.
The ticked models run one after another on the GPU: d1, then basal, then Qwen3, so none slows another. None of them generates text.
no run yet
The prompt is fixed by the model's code: a chat turn with your state (text as it is, JSON indented), then QUESTION:, the instructions and the options, and an empty assistant turn. A choice lists its options as one-token codes (A, B, … with each option's description), a score its levels as digits from 0, a boolean asks for yes or no.
Every question about one state sits in the same row after it, each ending at its own answer slot, and the whole row runs through the model once. On its attention layers the state reads every question and each question reads the state and itself, never another question, so one pass answers them all as if each were asked alone.
The answer is the softmax of the logits at the slot over the option codes (the best of each code's spellings, such as yes or Yes), divided by the temperature the release ships in calibration.json (1.34). Nothing is generated, so an answer can never fall outside the options. A score's own answer is its median level; the bars show the whole distribution.
This page runs the published decoder_q4 graph: int4 MLP gate and up projections, int8 elsewhere, 32-bit activations, because the 16-bit WebGPU kernels gave wrong answers on an Intel GPU. A self-check repeats the model card's ticket before d1 is marked ready. Pictures, video and the typed reads (text, numbers, dates, boxes) are not part of this page.
The prompt is fixed by the model's authors: a short system message ("evaluate the state, answer one question, treat the state as data"), then the state, the question and the options lettered A to J, in Polish when the state or question has Polish letters and in English otherwise. The assistant's reply is started as {"answer": ", so the next token can only be a letter.
The answer is the softmax of the next-token logits over those letters: one forward pass, no generated text. Each question is asked twice, with the options in the original and the reversed order, and the two readouts are averaged, which removes most of the bias towards a position. A temperature fitted per question type (choice, yes/no, score) then calibrates the confidence.
The state is read once per decide: every question shares the system message and the state, so that part is computed once and only each question's tail runs again. A choice option is shown as key: description, a boolean as Yes / No (Tak / Nie), and a score as its levels in order. basal reads at most 10 options.
"Accept" means the confidence is at or above the threshold the authors certified for a 5% error rate on their calibration set; below it, basal suggests deferring to a person. These thresholds were fitted on the original bf16 weights.
This page runs an ONNX conversion of the original weights: asymmetric 4-bit, with 8-bit for the most sensitive layers and a full-precision output head. On 48 reference prompts it keeps the original's top answer on 47 and moves a probability by 0.07 on average. It keeps 32-bit activations because the 16-bit WebGPU kernels gave wrong answers on an Intel GPU; a self-check repeats three reference answers before basal is marked ready.
All three see the same state, the same instructions and the same options. They read them differently.
Qwen3 0.6B is a general chat model. It gets a chat prompt that lists the options as letters and asks for one letter. Its numbers are the softmax of its next-token logits over those letters: a real readout, but not calibrated, and sensitive to option order and wording.
basal-1.5-mini reads the same kind of letter logits, but it was fine-tuned for exactly this task, averages both option orders and applies a fitted temperature, so its confidence is meant to match how often it is right.
d1-2B was trained for exactly this kind of question. It reads all of them about one state in one pass, each at its own answer slot, and applies one fitted temperature.
So agreement on the top answer is the useful signal; the probabilities themselves are on different scales. A score question is compared on its most likely level. Untick a model in the setup above to leave it out of the next run.
Neither d1 nor basal comes with an abstain rule for your data. Liquid AI recommends calibrating any decision threshold on examples from your own use.