alt.freeweights.vision / clef-omni-4bit
From: mlx-community <huggingface.co/mlx-community>Newsgroups: alt.freeweights.visionSubject:

clef-omni-4bit

Date: 2026-11-15Commit: 040a6e4Signed: 2DC28CC7B26A283B ✓

Zero shot classification model with 31.7B parameters. Safetensors weights, 19.8 GB in all. Published by mlx-community under Apache-2.0.

31.7B params19.8GBclef-omni-4bitsafetensorspermissive
FactsParams31.7BSize19.8 GBFormatssafetensorsTaskzero shot classificationLicenseApache-2.0From sourcepermissive
$ fw get mlx-community/clef-omni-4bit
# manifest sha256 3df6e74dd6e6… · 19.8 GB · 17 files
$ fw verify ./clef-omni-4bit mlx-community/clef-omni-4bit
From sourceHosted (signed)mlx-community/clef-omni-4bitLast check: 2026-11-15 00:22 UTC

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

Quantized of clef-omni.

Works with

Runs with

Ranked by fit to this model (safetensors), then by GitHub stars.

Overview

Size
19.8 GB
Weights
19.8 GB (safetensors)
Parameters
31.7B
Formats
safetensors
Task
zero shot classification
License
Apache-2.0 (permissive)
Files
17, each with a sha256
Publisher
mlx-community
Added
2026-11-15
Section
alt.freeweights.vision
Lineage

Original release from the publisher.

Base model: Cloudflare/clef-omni

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 00:22 UTCpassed

Model card

From the publisher at commit 040a6e4. Shown as plain text with links; images open at the publisher.

mlx-community/clef-omni-4bit#

Cloudflare/clef-omni converted to MLX (4-bit) for Apple Silicon.

Clef-Omni is a 30B-A3B mixture-of-experts decision model built on the Qwen3-Omni thinker. It turns a state (text, JSON, images, audio, or video with its soundtrack) plus a schema of typed questions into a probability for every allowed option, in a single forward pass. It is not a chat model: mlx_vlm.generate and LM Studio would load the backbone but produce meaningless text. Use the bundled clef_mlx.py loader, which runs the backbone and the joint schema head.

Which variant fits your Mac?#

VariantBaseDownloadPeak memory (1k / 4k / 14k tokens)Latency (1k / 14k tokens)21 s video + soundMinimum Mac RAM
clef-omni-4bit (this repo)30B-A3B19.8 GB20.3 / 20.8 / 22.2 GB0.19 s / 4.5 s2.8 s32 GB
clef-omni-8bit30B-A3B35.0 GB35.6 / 36.1 / 37.5 GB0.26 s / 5.4 s4.6 s64 GB

Measured on an M5 Max (128 GB), median of 3 runs. A 1 MP image takes about 0.3 s and a 30 s audio clip about 0.25 s. macOS lets the GPU use only about 70–75% of RAM by default, so the minimum RAM is higher than the peak. Only ~3B parameters are active per token, so Clef-Omni is faster than the dense 9B Clef-Flash on long prompts despite the bigger download.

Usage#

pip install "mlx-vlm>=0.7.6,<0.8" huggingface_hub av pillow   # no torch needed

Tested with mlx 0.32.3, mlx-vlm 0.7.6 and transformers 5.19 (tokenizer and the numpy Whisper feature extractor only). clef_mlx.py uses mlx-vlm internals, so it warns if you load it with an untested mlx-vlm minor version. av (PyAV) decodes audio and video files; pillow decodes images.

import sys
from huggingface_hub import snapshot_download

path = snapshot_download("mlx-community/clef-omni-4bit")
sys.path.insert(0, path)
import clef_mlx

model = clef_mlx.load(path)
response = model.systemone({
    "model": "clef-omni",
    "state": "Our checkout started returning errors and orders are blocked.",
    "questions": {
        "department": {
            "type": "choice",
            "instructions": "Which team should handle the message?",
            "criteria": {"billing": "Payments or invoices", "technical": "Bugs or outages"},
        },
        "urgency": {"type": "score", "criteria": ["Can wait", "This week", "Today"]},
        "outage": {"type": "noul", "instructions": "Is a service down?"},
    },
})
print(response["answers"])

Images, audio, and videos go in images / audio / videos, as in the original. Each item can be a file path, URL, base64 data URL, or raw bytes. Images may also be PIL images, audio may be 16 kHz mono sample arrays, and videos may be RGB frame arrays sampled at 2 frames per second. Video files are sampled at 2 fps, and their soundtracks are heard alongside the frames when every video in the record has one.

model.predict({
    "state": {"task": "Review the installation: a photo of the unit, a recording of it running, and a video of the fan."},
    "images": ["unit.jpg"],
    "audio": ["running.mp3"],
    "videos": ["fan.mp4"],
    "questions": {
        "label_visible": {"type": "noul", "instructions": "Is the model and serial number label visible in the photo?"},
        "sounds_normal": {"type": "noul", "instructions": "Does the unit sound like it is running smoothly, without rattling or grinding?"},
        "fan_running": {"type": "noul", "instructions": "Is the fan running in the video?"},
    },
})

Images, audio, and video can all be mixed in one record. See the original model card for the input format, question types, and benchmarks.

Try it from the command line#

clef_mlx.py runs on its own. From the downloaded repo it uses that repo by default; elsewhere pass --model mlx-community/clef-omni-4bit.

cd "$(hf download mlx-community/clef-omni-4bit --quiet)"
python clef_mlx.py predict \
  --state "Review the voicemail." --audio voicemail.wav \
  --questions '{"urgent": {"type": "noul", "instructions": "Is the caller reporting an urgent problem?"},
               "team": {"type": "choice", "criteria": {"billing": "Payments", "technical": "Outages and errors"}}}'

--questions takes JSON, a .json file, or - for stdin; --request takes a whole request body instead; --image, --audio and --video attach files (each repeatable). The output is the SystemOne response as JSON.

Run a local SystemOne server#

python clef_mlx.py serve --port 8000          # http://127.0.0.1:8000, local only by default
curl http://127.0.0.1:8000/v1/systemone -H "Content-Type: application/json" -d '{
  "model": "clef-omni",
  "state": "Checkout has been failing for every customer for the last hour.",
  "questions": {"urgent": {"type": "noul", "instructions": "Is this urgent?"}}
}'
  • POST /v1/systemone takes the same request body as the Jev/SystemOne API (and the Workers AI @cf/cloudflare/clef-omni example) and returns the same response (plus usage.latency_ms), so existing SystemOne clients can point at your laptop. GET /health and GET /v1/models are also available.
  • images, audio, and videos go in as data URLs (data:audio/mpeg;base64,...), raw base64, or http(s) URLs. Local file paths are not accepted over HTTP.
  • Errors return JSON: 400 for invalid requests, 413 with "maximum context length" for inputs that don't fit. Add "truncate": false to a request (or start with --no-truncate) to get the 413 instead of truncation.
  • Requests run one at a time on the GPU. There is no authentication: keep the default 127.0.0.1 binding unless you put your own proxy in front.
  • For the Decision Index, start with --no-truncate and use its http engine: python -m decision_index run --engine http --option base_url=http://127.0.0.1:8000.

Limitations#

  • Not a chat model. Text generation tools (mlx_vlm.generate, LM Studio, Ollama) load the backbone but give meaningless output. Only clef_mlx.py runs the decision head.
  • No speech output. The base model's talker and code2wav weights (speech generation) are not included. The reference implementation doesn't load them either.
  • Long inputs are truncated by default, exactly like the reference implementation: the state is cut so the whole prompt fits in 64,000 tokens (the reference default). Pass truncate=False to predict()/systemone() to get a clef_mlx.ContextTooLong error instead, or change max_length. Video costs tokens fast: about 150–260 tokens per second of video depending on resolution (about 255/s for 720p and up), plus about 13 per second of audio.
  • One record per call. There is no batching; requests run one after another.
  • Speed depends heavily on the chip. Latencies above are from an M5 Max; long prompts on base M-series chips will be several times slower.
  • Custom code. Like the original release, this repo ships Python (clef_mlx.py) that you import and run. Read it before use if that matters in your environment.

Conversion#

  • Backbone: mlx-vlm 0.7.6 qwen3_omni_moe, 4-bit affine, group size 64 (4.93 bits per weight overall). The MoE routers (mlp.gate) are 8-bit. The vision and audio encoders are kept in bf16. The thinker lm_head is quantized too: the head only reads its rows for lexical option vectors, and keeping it in bf16 made no measurable difference.
  • talker.* / code2wav.* (speech output, 7.1 GB in bf16) dropped; enable_audio_output: false.
  • Joint schema head: joint_head.safetensors copied unchanged (bf16) and run by clef_mlx.py.
  • processor_config.json / tokenizer files are the originals from Cloudflare/clef-omni. clef_mlx.py is torch-free and reimplements everything the reference gets from transformers' Qwen3OmniMoeProcessor and thinker:
    • the Qwen2VLImageProcessor / Qwen2VLVideoProcessor resizing and patching;
    • the audio placeholder lengths and the audio-in-video token interleaving;
    • the Qwen3-Omni 3D rotary positions, which use time-aligned video and audio positions (mlx-vlm's generic path does not do this). On the parity set, token ids and rotary positions match the reference exactly. Pixel values and log-mel features match to within one uint8 rounding step.

Parity vs. official PyTorch implementation (bf16)#

The reference is the official joint_schema_model.py (torch 2.11, transformers 5.10.2) in bf16 on CPU. On Apple MPS, that reference gives hidden states that disagree with an independent float32 numpy forward pass (cos 0.39 at the first token), while MLX and CPU torch both agree with it. So use CPU, not MPS, when checking this model against the reference on a Mac.

10 records, 23 questions: 3 text, 2 image (one with two images), 2 audio (wav + mp3, speech + tone), 2 video (silent; with a speech soundtrack, so audio-in-video), and 1 with image + audio + video together.

InputsQuestionsMLX bf16: top agrees / max abs Δprob8-bit4-bit (this repo)
Text77/7 / 0.0577/7 / 0.0507/7 / 0.069
Images55/5 / 0.0055/5 / 0.0035/5 / 0.010
Audio44/4 / 0.0034/4 / 0.0084/4 / 0.016
Video (with and without sound)44/4 / 0.0454/4 / 0.0264/4 / 0.042
Image + audio + video33/3 / 0.0053/3 / 0.0253/3 / 0.061
All2323/23 / 0.057 (mean 0.009)23/23 / 0.050 (mean 0.008)23/23 / 0.069 (mean 0.015)

The encoders were also checked on their own. In float32, MLX and torch vision-encoder outputs agree to cos 0.9999. In bf16, image and audio encoder outputs agree to cos ≥ 0.9994 mean. Measured on an M5 Max (128 GB). This is a small spot-check, not a full benchmark run.

License#

Apache-2.0, following Cloudflare/clef-omni and Qwen/Qwen3-Omni-30B-A3B-Instruct.

Files

17 files · 19.8 GBWeights 19.8 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 17 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
LICENSE11.5 KBbbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a
README.md10.5 KB72e88e579f8809026f268896bf8831581f2cd9e6300466e12c9665257ffff24f
chat_template.jinja6.52 KB45777d2e798aae1d1ce6844e69edcb23fc0c710009554711c78efab9044da2c8
clef_mlx.py51.1 KBa42a9d85d8b450a2a3a88085bc7cd7f467e6f30de4cc8ccdf142bf7ed490b279
config.json28.8 KBaea527683537ecb1a990b05d07f45494824f4d7c2c9844ef1592a1f764e8f1be
generation_config.json146 B7fa40989be8e43c078907810c41c25d33747523afce3d5a34d5850f930c886cb
joint_head.safetensors218 MBd5ee8d7e75c9a503edce94400dda9074fc0f2f4d62729012bf0a827df947ba9c
joint_head_config.json119 B96bc7dbf43ae9e42a34ce7bb3032d51769a29912c800df297b37300f41a69fe5
model-00001-of-00004.safetensors5.36 GBe95279b64b686575f4c978efce6334f6972c24f070bde8cd29682ca806cef0ad
model-00002-of-00004.safetensors5.37 GBb30703c88710b74ed0892366d35f16b9c3ed3c597280fd5e8143410f30e5f047
model-00003-of-00004.safetensors5.37 GB302954ada5cfedeb90fea7e82705548fadeaa94bf92dc4abc8b55e37fb3e22f1
model-00004-of-00004.safetensors3.46 GB1ac918a9b986c326028c857eb3293ccee77603d77f136a32e2ff7b4dca5b7986
model.safetensors.index.json235 KB2b528a9fe9b73d1a0eb16de907282a492e96eab351b61786aa1f6850fee8e16b
processor_config.json2.36 KBc72bd6e0a91b84eea5af48fee17b63a8e7f4a37fd5b8293dd5c32710cb1b98ad
tokenizer.json11.4 MBa7d41145c408f3062e824f965be1c29854cd809e111cdf8170aa8b0bcd5d1fab
tokenizer_config.json907 B2602a7d7336bf7ad4cd3eb385ccf27040cc675081d4cd445b1aaa88b10b87ffb
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
040a6e49d2 pinned now2026-11-15 00:22 UTC17 files · 19.8 GB

Use it

$ fw get mlx-community/clef-omni-4bit
# manifest sha256 3df6e74dd6e6… · 19.8 GB · 17 files
$ fw verify ./clef-omni-4bit mlx-community/clef-omni-4bit
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/mlx-community/clef-omni-4bit.json --dir ./clef-omni-4bit $ python3 fw.py verify ./clef-omni-4bit ./mlx-community__clef-omni-4bit.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mlx-community/clef-omni-4bit --revision 040a6e49d2e5d2f4f3ba68e70a6a0654833e23e1 --local-dir ./clef-omni-4bit

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
LICENSE
Text sha256
bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a
Terms gate
No extra terms beyond 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: mlx-community <huggingface.co/mlx-community>Newsgroups: alt.freeweights.visionSubject: clef-omni-4bitDate: 2026-11-15Commit: 040a6e4Signed: 2DC28CC7B26A283B ✓
Upstream
mlx-community/clef-omni-4bit
Pinned commit
040a6e49d2e5d2f4f3ba68e70a6a0654833e23e1
Manifest
clef-omni-4bit.json · .minisig
Manifest sha256
3df6e74dd6e6031d57816ad15f72aa633870fd0080b42a30cfbbe23edfd25d75
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 00:22 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/mlx-community/clef-omni-4bit.json $ curl -O https://freeweights.allternit.com/manifests/mlx-community/clef-omni-4bit.json.minisig $ minisign -Vm clef-omni-4bit.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

Cloudflare/clef-omni · this model is a quantization of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mlx-community/clef-omni-4bit
Open in Freeweights Studio

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

Signed manifest
minisign, key 2DC28CC7B26A283B. clef-omni-4bit.json. Provenance. Takedown history: none.
From: dima806 <huggingface.co/dima806>Subject: ai_vs_real_image_detection
From: legekka <huggingface.co/legekka>Subject: AI-Anime-Image-Detector-ViT
From: onnx-community <huggingface.co/onnx-community>Subject: AI-Anime-Image-Detector-ViT-ONNX
From: AICodexLab <huggingface.co/AICodexLab>Subject: answerdotai-ModernBERT-base-ai-detector
From: onnx-community <huggingface.co/onnx-community>Subject: answerdotai-ModernBERT-base-ai-detector-ONNX
From: onnx-community <huggingface.co/onnx-community>Subject: bart-large-cnn-ONNX