alt.freeweights.text / d1-omni-600M
From: LiquidAI <huggingface.co/LiquidAI>Newsgroups: alt.freeweights.textSubject:

d1-omni-600M

Date: 2026-11-15Commit: 02b55d7Signed: 2DC28CC7B26A283B ✓

Image text to text model with 587M parameters. Safetensors weights, 2.35 GB in all. Published by LiquidAI under LFM-1.0 (custom).

587M params2.35GBd1-omni-600Msafetensorscustom terms
FactsParams587MSize2.35 GBFormatssafetensorsTaskimage text to textLicenseLFM-1.0 (custom)From sourcecustom termsread terms
# custom terms: read the license before you download
$ fw get LiquidAI/d1-omni-600M
# manifest sha256 37a75ca5a0af… · 2.35 GB · 12 files
$ fw verify ./d1-omni-600M LiquidAI/d1-omni-600M
From sourceHosted (signed)LiquidAI/d1-omni-600MLast check: 2026-11-15 02:43 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of LFM2.5-Encoder-350M.

Works with

Overview

Size
2.35 GB
Weights
2.35 GB (safetensors)
Parameters
587M
Formats
safetensors
Task
image text to text
License
LFM-1.0 (custom) (custom)
Files
12, each with a sha256
Publisher
LiquidAI
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: LiquidAI/LFM2.5-Encoder-350M

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:43 UTCpassed

Model card

From the publisher at commit 02b55d7. Shown as plain text with links; images open at the publisher.

Image: Liquid AI

Try LFM • Docs • Discord

d1-omni-600M#

d1-omni-600M is a 600M parameter decision model built on LFM2.5-Encoder-350M. You give it a state (text or JSON, with images or a voice clip) and a set of named questions. It returns typed answers with zero output tokens: every answer is read directly from the model's distribution over the options, with no generation and no parsing.

  • Vision-language: text and images (tiled for large frames, several images per state) in a single forward pass.
  • Audio-language: text and up to 30 s of speech in a single forward pass.
  • Edge-sized: 587M parameters: a 381M shared trunk and decision head, a 94M vision encoder and a 112M audio encoder. Every modality runs the same trunk weights.

Find more information about open d1 in our blog post.

Image: image

🗒️ Model Details#

ModelParametersDescription
LFM2.5-Encoder-350M350MGeneral-purpose encoder model (base)
d1-omni-600M587MPost-trained for single-pass decisions over text, images and speech
  • Total parameters: 587M
  • Vision encoder: SigLIP2 vision tower from LFM2.5-VL-450M
  • Audio encoder: 17-layer FastConformer
  • Context length: 16,384 tokens (text, image and audio positions together); with images, the state and question text is cut to 896 tokens, as trained
  • Vocabulary size: 65,536

We recommend d1-omni-600M wherever a pipeline needs a yes/no, a pick from named options, or a rating: routing and triage, moderation, intent and topic classification, voice-command routing, extraction checks, reranking, agent guardrails, and visual inspection. It is not a chat model and does not write text.

Warning. ⚠️ Audio capabilities were trained on requests between an English speaker and an assistant. Training tasks include what kind of utterance it is, its topic, and what the speaker wants. Clips are also cut at 30 seconds.

🏃 How to use#

Install the dependencies (requires transformers>=5.15):

pip install "transformers>=5.15" torch torchvision pillow soundfile

The model ships its own code, so load it with trust_remote_code=True:

import io
from urllib.request import urlopen

import soundfile as sf
import torch
from transformers import AutoModel
from transformers.image_utils import load_image

device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
dtype = torch.float32 if device == "cpu" else torch.float16
model = AutoModel.from_pretrained("LiquidAI/d1-omni-600M", trust_remote_code=True, dtype=dtype).to(device)

# Text: several named questions over one state, answered in one pass
questions = {
    "refund": {
        "type": "noul",
        "instructions": "Is the customer asking for a refund?",
    },
    "team": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
            "billing": "Charges, refunds, invoices",
            "technical": "App or site faults",
            "fraud": "Suspected unauthorised use",
        },
    },
    "urgency": {
        "type": "score",
        "instructions": "How urgent is this?",
        "criteria": ["Can wait", "Today", "Blocking the customer now"],
    },
}
print(model.system_one("I was charged twice this month, please refund one of them.", questions))

# Image: the photo is the whole state
image = load_image("http://images.cocodataset.org/val2017/000000039769.jpg")  # two cats on a sofa
cats = {
    "type": "choice",
    "instructions": "How many cats are there?",
    "criteria": {"one": "One", "two": "Two", "more": "Three or more"},
}
print(model.system_one(None, {"cats": cats}, images=[image]))

# Text + audio: one 16 kHz mono clip
url = "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac"
audio, rate = sf.read(io.BytesIO(urlopen(url).read()), dtype="int16")
topic = {
    "type": "choice",
    "instructions": "What is the speaker talking about?",
    "criteria": {"food": "Food and meals", "travel": "Travel and transport", "weather": "The weather"},
}
print(model.system_one("Voice note from a user.", {"topic": topic}, audio=audio))

# Batch: many requests in one call
tickets = ["Where is my parcel? It was due Monday.", "The app crashes when I open settings."]
print(model.system_one_batch([(t, {"team": questions["team"]}) for t in tickets]))
call
system_one(state, questions, images=None, audio=None)Named questions over one state, and its images or its audio clip. The media are encoded once for all questions.
system_one_batch([(state, questions[, images[, audio]]), ...])Many requests, batched together.
probabilities(state, questions, images=None, audio=None)The raw distributions, in option order.

A state is a string, any JSON value, or None when the images or the audio are the whole state. images is a PIL image or a list of them; audio is one 16 kHz mono clip as int16 or float samples. A request carries images or audio, not both: passing both raises a ValueError.

The model was trained in float32. On GPUs, float16 is faster and keeps the float32 answers: on our checks it gave the same top answer on every text (243), image (214) and audio (416) row. Avoid bfloat16, which changed the top answer on 0.8% of text and 1.7% of audio rows.

Questions and answers#

Questions follow the Decision Index schema: type, instructions, and criteria.

typecriteriaanswer fields
noul: yes or nooptional: {"true": "...", "false": "..."} to define each sidenoul: P(yes)
choice: one of named options{name: description}choice, confidence, probabilities
score: 2 to 10 ordered levelsa list of level descriptions, lowest firstscore (the expected level), confidence, probabilities, legend

With audio, questions are written the way the audio questions were trained: choice options by their description (option_000: ...), yes/no as plain yes or no. Answers still come back under your option names.

Each call returns {"answers": {name: answer}, "usage": {"input_tokens": n, "output_tokens": 0}}, where input_tokens counts every position the trunk read.

Text answers are calibrated with per-type temperatures stored in config.json; image and audio answers are the model's softmax as trained.

⚡ Speed#

We don't report inference numbers for d1-omni-600M as it is an early research release and is under active development.

📊 Performance#

Decision Index 0.2.1#

We scored d1-omni-600M and d1-3B with the official scorer (not leaderboard submissions). All other rows come from the public leaderboard v0.2.1.

ModelSizeDecision IndexKnowledgeLanguageRetrievalToolsArts
Winnow-12B12B50.0233.856.054.071.030.0
d1-3B3B48.5723.856.452.874.536.3
Decider 35B-A3B36B47.1131.855.554.756.532.6
JPT-9B9.7B46.8931.756.744.667.028.6
Decision 1.0 Lux9.7B43.4930.948.050.057.226.4
JPT-4B4.7B43.0428.752.545.057.225.8
Jet v6.24.7B42.6028.743.948.262.927.0
Decider 4B4.7B40.7025.746.044.758.625.0
Winnow-E4B8.0B39.8922.345.143.862.522.8
Decider 2B2.3B28.9714.932.637.342.414.6
d1-omni-600M587M15.958.312.935.015.16.8
Benchmarks as decisions#

Besides the Decision Index, we added a few other internal evaluations based on public benchmarks. HelpSteer2 is left out: it may overlap with d1-omni-600M's training data.

Benchmarkd1-omni-600Md1-3BDecider 4BDecider 2B
SQuAD 2.074.085.376.067.7
Civil Comments95.893.092.893.6
MASSIVE intent86.187.388.381.1
PubMedQA61.366.063.365.7
BoolQ77.786.789.087.3
XNLI74.785.088.685.0
PAWS-X79.576.969.859.5
Mean78.482.981.177.1

d1-omni-600M also scores 76.9 on Fast Decisions (dev split).

📬 Contact#

Citation#

@article{liquidAI2026opend1,
  author  = {Liquid AI},
  title   = {Open d1: Edge decision models for text, vision, and audio},
  journal = {Liquid AI Blog},
  year    = {2026},
  note    = {https://www.liquid.ai/blog/d1-open},
}
@article{liquidai2025lfm2,
  title   = {LFM2 Technical Report},
  author  = {Liquid AI},
  journal = {arXiv preprint arXiv:2511.23404},
  year    = {2025}
}

Files

12 files · 2.35 GBWeights 2.35 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 12 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
LICENSE10.6 KB9953509cbd8c1c6ce7b06ddf74fcc204a892692316201dd8f7400a84790d4120
README.md10.4 KB6577bee7b8cb23b595a90e99aa82007f57214d447f0ebcdfb2e812a7123d57bf
audio.py11.8 KBc5ff09d52d6a079e79d0505c89dbd0582ba2bc9abf2b26595d8d5b1d0c347bdf
config.json1.99 KBdfccae241822f81752426629c88c8b8d7efdd03dd19418b6645c604fad43d619
encoder.py7.73 KB5f2e20319ee42a7367febf06c7653d7b3f9b28ef99a64cb9ec7739563dcfcffe
model.safetensors2.35 GB0713bb05270c2685ad106522f4092bceeeb3a93cf79b401f399a712296c911e1
modeling_d1.py8.65 KB2b71a5c909ec5d3aa6307378a41a0fd24af1e17d5c1c1f8d510582147051a686
prompt.py6.31 KBa6b29a55ec8345f1fc1fdbfcc4b64d80d473dc4316f095a62c51cb6cce1194cf
tokenizer.json4.73 MB1efc3a6609abf6b63b1f47188d139f3b59973a6a434dffe970a7261a51ed2711
tokenizer_config.json259 B03efc74b752b899b6292ff7e607738be59e6f206fec9aca32bbc05e9184090fc
vision.py5.23 KB43ad71029f82e20fd26b97574627773d47639d7a3742c8b04fe5bf55f41c4c28
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
02b55d7076 pinned now2026-11-15 02:43 UTC12 files · 2.35 GB

Use it

# custom terms: read the license before you download
$ fw get LiquidAI/d1-omni-600M
# manifest sha256 37a75ca5a0af… · 2.35 GB · 12 files
$ fw verify ./d1-omni-600M LiquidAI/d1-omni-600M
Terms that come with these files. LFM 1.0: commercial use only for organisations under US$10M annual revenue. Keep a copy of the license with the files.
Custom license (custom). Read the license text first. Open this panel to show the commands once you accept its terms.
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/LiquidAI/d1-omni-600M.json --dir ./d1-omni-600M $ python3 fw.py verify ./d1-omni-600M ./LiquidAI__d1-omni-600M.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download LiquidAI/d1-omni-600M --revision 02b55d7076f15129e59ab3f94783f32c4b088674 --local-dir ./d1-omni-600M
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForImageTextToText, AutoProcessor processor = AutoProcessor.from_pretrained("LiquidAI/d1-omni-600M", revision="02b55d7076f15129e59ab3f94783f32c4b088674") model = AutoModelForImageTextToText.from_pretrained("LiquidAI/d1-omni-600M", revision="02b55d7076f15129e59ab3f94783f32c4b088674", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve LiquidAI/d1-omni-600M --revision 02b55d7076f15129e59ab3f94783f32c4b088674

License

Name
LFM Open License v1.0
Id
LicenseRef-LFM-1.0
Class
Custom terms
Redistribution
click-through
Listing
Hosted (signed)
Terms
LFM 1.0: commercial use only for organisations under US$10M annual revenue. Keep a copy of the license with the files.
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
LICENSE
Text sha256
9953509cbd8c1c6ce7b06ddf74fcc204a892692316201dd8f7400a84790d4120
Terms gate
Yes. The commands stay folded until you open them after reading the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: LiquidAI <huggingface.co/LiquidAI>Newsgroups: alt.freeweights.textSubject: d1-omni-600MDate: 2026-11-15Commit: 02b55d7Signed: 2DC28CC7B26A283B ✓
Upstream
LiquidAI/d1-omni-600M
Pinned commit
02b55d7076f15129e59ab3f94783f32c4b088674
Manifest
d1-omni-600M.json · .minisig
Manifest sha256
37a75ca5a0afdc0ef0a98a8444675f3bae13b1124e2379e9c5859788ab9555bc
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:43 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/LiquidAI/d1-omni-600M.json $ curl -O https://freeweights.allternit.com/manifests/LiquidAI/d1-omni-600M.json.minisig $ minisign -Vm d1-omni-600M.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

LiquidAI/LFM2.5-Encoder-350M · this model is a finetune of it

1 model in the catalog name this one as their parent.

Quantizations
1
Quantizations 1
Get it
Read license, then download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download LiquidAI/d1-omni-600M
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. d1-omni-600M.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of d1-omni-600M. Each has its own license check and page.

From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B