Liquid AI
Try LFM • Docs • Discord

d1-omni-600M-MLX-8bit

d1-omni-600M is a decision model developed by Liquid AI: it answers named, typed questions over a state (text, JSON, images or audio) in one forward pass, with no generated tokens.

This repository is an MLX export of d1-omni-600M in 8-bit for Apple Silicon, run with mlx-vlm. Find more details in the original model card: https://huggingface.co/LiquidAI/d1-omni-600M

🏃 How to run d1-omni-600M

d1 support is in mlx-vlm after 0.7.6. Until the next release, install it from GitHub:

pip install -U git+https://github.com/Blaizzy/mlx-vlm.git
from mlx_vlm import load, predict

model, processor = load("LiquidAI/d1-omni-600M-MLX-8bit")

# 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"],
    },
}
result = predict(model, processor, "I was charged twice this month, please refund one of them.", questions)
print(result["answers"])

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

# Audio: one 16 kHz mono clip (a path, URL or array of samples), up to 30 s
kind = {
    "type": "choice",
    "instructions": "What kind of utterance is this?",
    "criteria": {"request": "A request to do something",
                 "question": "A question asking for information",
                 "speech": "A speech to an audience"},
}
print(predict(model, processor, None, {"kind": kind},
              audio="https://github.com/ggml-org/whisper.cpp/raw/master/samples/jfk.wav"))

Each call returns {"answers": {name: answer}, "usage": {"input_tokens": n, "output_tokens": 0}}. A choice answer has the chosen label in value, plus probabilities and metadata.confidence; a score answer has the expected level in value, plus probabilities and the level legend; a noul (or bool) answer has probability, the probability of yes.

From the command line:

python -m mlx_vlm decide --model LiquidAI/d1-omni-600M-MLX-8bit \
  --state "I was charged twice this month, please refund one of them." \
  --questions '{"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}}'

--state is optional with one or more --image options or one --audio.

As a server, with the same request shape on /v1/decisions ("images" or "audio" take URLs, paths or base64 data URIs):

python -m mlx_vlm server --decision-model LiquidAI/d1-omni-600M-MLX-8bit

curl http://127.0.0.1:8080/v1/decisions -H "Content-Type: application/json" -d '{
  "state": "I was charged twice this month, please refund one of them.",
  "questions": {"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}}
}'

📏 Precisions

Every precision was checked against the original checkpoint run in float32 with mlx-vlm, which matches the PyTorch reference to about 1e-5 in probability. The check covers 104 text, 41 image and 30 audio answers. "Same top answer" counts answers whose most likely option matches the float32 run; Δp is the largest change in any option's probability.

Repository Weights Size Same top answer Max Δp Mean Δp
d1-omni-600M-MLX-fp16 float16 1.17 GB 175/175 0.007 0.0010
d1-omni-600M-MLX-8bit 8-bit trunk and audio encoder; vision tower and decision scorer in float16 0.73 GB 175/175 0.060 0.0083

float16 is the recommended precision. The model was trained in float32; float16 keeps its answers, as the original model card reports for GPUs, and 8-bit stays close at about 60% of the size. There is no bfloat16 export: the original model card advises against it, and in this check it changed 2 of the 175 top answers. Four-bit changes a noticeable share of answers, so there is no 4-bit export either. The vision tower and decision scorer are never quantized. This check is a smoke test of agreement, not an accuracy benchmark.

🧪 Recipe

Converted from d1-omni-600M at revision 02b55d7076f1 with mlx-vlm at commit 952d4f6bc65b:

python -m mlx_vlm convert --hf-path LiquidAI/d1-omni-600M --mlx-path d1-omni-600M-MLX-8bit -q --q-bits 8 --q-group-size 64 --dtype float16

The upstream PyTorch .py files were removed after conversion; config.json keeps its auto_map.

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}
}

📄 License

This model is released under the LFM 1.0 License, as is the original checkpoint.

Downloads last month
291
Safetensors
Model size
0.6B params
Tensor type
F16
·
U32
·
MLX
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for LiquidAI/d1-omni-600M-MLX-8bit

Quantized
(13)
this model

Paper for LiquidAI/d1-omni-600M-MLX-8bit