Appearance
Native D1 decisions
LiquidAI's D1 release provides two decision models that score typed answers without generating tokens. Both run locally in Swift/MLX through text decide on macOS and Linux. iOS includes catalog metadata only; it does not include D1 inference.
| Managed model | Checkpoint precision | Inputs |
|---|---|---|
text-decide-d1-3b-bf16 | BF16 | Text, JSON, images |
text-decide-d1-omni-600m-fp32 | FP32 | Text, JSON, images or audio |
Install and decide
Original LiquidAI safetensors load directly. Tensor names and layouts are adapted in memory; users need no checkpoint conversion or Python setup.
Review the custom LFM Open License v1.0, then pull either model:
bash
mere.run model pull text-decide-d1-3b-bf16 --accept-model-license
mere.run model pull text-decide-d1-omni-600m-fp32 --accept-model-license
mere.run text decide --model text-decide-d1-3b-bf16 --input request.json --preflight
mere.run text decide --model text-decide-d1-3b-bf16 --input request.json --prettyAn explicit local checkpoint directory also works. Runtime invocation requires an installed model; it does not automatically download weights. The CLI emits JSON to stdout and optionally saves the response with --output. Text inference uses the existing 16 GiB available-memory admission floor; --preflight does not reserve inference memory.
json
{
"state": "The parcel arrived on time, but the glass inside was broken.",
"questions": {
"arrived": {"type": "noul", "instructions": "Did the parcel arrive?"},
"route": {
"type": "choice",
"instructions": "Which team should handle the claim?",
"criteria": {"shipping": "Late delivery", "damage": "Damaged goods"}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this claim?",
"criteria": ["low", "medium", "high"]
}
}
}state accepts any JSON value, including null. Questions are a named object. Choice options retain source order; ties choose the first option. Scores require 2–10 ordered levels and return the expected level. A noul returns P(yes). usage.output_tokens is always zero. Each question uses an independent forward pass; usage.input_tokens counts the rows actually executed. The upstream tree packing optimization is not implemented.
Images and audio
Add "images": ["/path/to/image.png"] for either model, or "audio": "/path/to/clip.wav" for omni. Requests accept up to 16 images or one audio file and reject mixed image/audio, videos, URLs, and processor overrides. Audio is decoded to 16 kHz mono, capped at 30 seconds, and padded to at least 0.5 seconds. Omni's media prefix attends only to media; text attends to both. Images use smart resize, up to ten 512-pixel tiles plus a thumbnail, packed 16-pixel RGB patches, SigLIP2 NaFlex, and a 2×2 pixel-unshuffle projector. D1-3B first caps each source image at one megapixel with Pillow-compatible bicubic resampling, then uses the released bicubic tensor resize. Omni uses bilinear tensor resize. Both preserve torchvision’s intermediate 8-bit rounding. Extreme aspect ratios that exceed the 1,024-patch crop budget are rejected during preflight.
--preflight decodes media and reports per-question token counts, truncated state tokens, option order, and omni marker positions without loading weights. max_tokens may reduce the checkpoint context limit. D1-3B rejects prompts that exceed its 32K context. Omni reserves space for its complete option markers, truncates state on the right, and applies the released text budget: 16K for text, 896 text positions with images, or 15360 with audio, further reduced by media prefix length. Caller text cannot forge omni's reserved delimiters.
Native implementation and validation
MereRunD1Model owns model computation; MereRunCore/D1 owns orchestration. The original checkpoints load directly, with strict keys and shape checks for trunk, head, vision, and FP32 audio. D1-3B max-pools each answer's single-token forms and normalizes over options. Omni uses a bidirectional LFM encoder and two-layer option head, reverses its internal false/true order for noul responses, and applies released temperature calibration only for text-only requests.
Pins:
- LiquidAI/d1-3B:
da1fe36a861f24690f27f622dca1d8688503d113 - LiquidAI/d1-omni-600M:
414f8d6438174f5b2133a9c21a478fc42625e308
Independent, small FP32 fixtures in Tests/MereRunCoreTests/Fixtures/D1 come from those revisions' original PyTorch code. They cover both trunks, isolation of media prefixes, the option head, vision projection, normalized log-mel features, FastConformer audio, and exact antialiased image pixels. Optional tests compare both original tokenizers and exercise complete checkpoint loading with text, image, and audio requests. Reproduce arithmetic and prompt fixtures with scripts/fixtures/export-d1-reference.py. Run swift test --filter D1 and ./scripts/check.sh.
Released-checkpoint CLI execution and independent probability comparisons passed on 2026-10-09: text and images for BF16 D1-3B, and text, images, and audio for FP32 omni. Both original safetensors matched their published SHA-256 hashes. Across 15 decisions, maximum absolute probability differences from the original CPU reference were 0.00128 for D1-3B and 0.0000089 for omni. Chosen options and executed token counts agreed. See the qualification record for inputs, reproduction, and limits.
The committed released-checkpoint regression requires only original model assets and native Swift/MLX execution:
bash
MERERUN_TEST_MLX_DEVICE=gpu \
MERERUN_TEST_D1_RELEASED_CHECKPOINTS=/path/to/original-checkpoints \
swift test --filter D1ReleasedCheckpointTestsThat directory contains causal/ and omni/ checkpoint folders. Python is needed only to regenerate the independent reference answers with scripts/fixtures/export-d1-release-reference.py. These cases do not establish benchmark accuracy, all-input numerical equivalence, or edge latency. Omni misanswers two speech questions in both implementations. No speed claim is made.