Downloads · 30 days
181
12% of all-time downloads
Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 is a image-text-to-text model from Ex0bit. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for mlx. The card lists the license as apache-2.0.
Apple Silicon / MLX port of Ex0bit/Qwen3.6-35B-A3B-PRISM-NVFP4.
Downloads · 30 days
181
12% of all-time downloads
All-time downloads
1.5K
Public
Parameters
9.8B
25 GB on disk
Likes
4
Public
Click a slice to open those files.
.safetensors25 GB · 100%
How the weights are stored.
U324.4B · 45%
From the Hugging Face model README
Apple Silicon / MLX port of Ex0bit/Qwen3.6-35B-A3B-PRISM-NVFP4.
PRISM softens over-refusal and removes bias / propaganda patterns while keeping task quality, coherence, and multimodal ability. This repo is the MLX-native NVFP4 checkpoint for oMLX on Mac.
| Base | Qwen/Qwen3.6-35B-A3B (35B total, ~3B active, 256 experts, top-8) |
| Format | MLX quantization.mode = nvfp4, group_size 16 |
| Size | ~23 GB (model.safetensors) |
| Context | up to 262K (set per-model in oMLX) |
| Vision | BF16 tower included |
| MTP | Lossless stock names: mtp.* (Lightning MTP ready) |
| Target runtime | oMLX on Apple Silicon (M-series, 64 GB+ unified memory recommended) |
Sibling GPU repo (vLLM / compressed-tensors):
Ex0bit/Qwen3.6-35B-A3B-PRISM-NVFP4
Collections (browse the full family like Unsloth’s pages):
| Collection | Link |
|---|---|
| Qwen3.6 PRISM | Ex0bit/qwen36-prism |
| PRISM NVFP4 | Ex0bit/prism-nvfp4 |
Use this on a new Mac. It installs stock oMLX, downloads
this model, installs the required NVFP4 compat patch, writes launchers, and starts the server.
Do not use plain omlx serve for this checkpoint (see below).
| Machine | Apple Silicon (M1/M2/M3/M4…) |
| Memory | 64 GB+ unified memory recommended (warns below 48 GB) |
| OS | macOS 15+ recommended |
| Network | ~25 GB download on first run |
| Python | oMLX uses 3.11–3.13 (3.14 not supported) |
Open Terminal and run:
curl -fsSL https://huggingface.co/Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4/resolve/main/scripts/setup_one_click.sh | bash
First run can take a while (Homebrew/oMLX + ~25 GB model download). Leave the window open until it prints Done.
# e.g. hf download Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 --local-dir ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
cd ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
bash scripts/setup_one_click.sh
If model.safetensors is already under ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4, the script skips re-downloading.
hf / huggingface-cli)~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4patches/nvfp4_compat.py into the oMLX Python env (.pth + runtime check)~/.omlx/settings.json + model preset (sampling + MTP enabled)omlx serve):
~/.omlx/bin/start-prism-nvfp4.shscripts/verify_e2e.py| Chat UI | http://127.0.0.1:9999/admin/chat |
| OpenAI API | http://127.0.0.1:9999/v1 |
| Model id | Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 |
| Model path | ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 |
| Restart later | double-click Start PRISM NVFP4.command or run ~/.omlx/bin/start-prism-nvfp4.sh |
| Server log | ~/.omlx/logs/prism-nvfp4.log |
Recommended sampling (preset defaults):
temperature = 0.6
top_p = 0.95
top_k = 20
Set these before running the script:
| Variable | Default | Purpose |
|---|---|---|
MODEL_DIR | ~/Models | Where the model folder is created |
OMLX_PORT | 9999 | Server port |
OMLX_HOME | ~/.omlx | Settings, cache, launchers |
REPO_ID | Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 | HF repo to download |
OMLX_FORCE_LATEST | 1 | Reinstall/upgrade oMLX even if already installed |
OMLX_PYTHON | (auto) | Force a specific Python 3.11–3.13 for oMLX |
MIN_RAM_GB | 48 | Warning threshold for unified memory |
SKIP_VERIFY | 0 | Set to 1 to skip verify_e2e.py |
HF_ENDPOINT | (empty) | Mirror endpoint if needed |
Examples:
# Custom port + skip the long e2e check
OMLX_PORT=10000 SKIP_VERIFY=1 \
curl -fsSL https://huggingface.co/Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4/resolve/main/scripts/setup_one_click.sh | bash
# Model already on an external drive
MODEL_DIR=/Volumes/Models bash scripts/setup_one_click.sh
# Start / restart (always use this — not plain omlx serve)
~/.omlx/bin/start-prism-nvfp4.sh
# Or open Desktop → Start PRISM NVFP4.command
API smoke:
curl -s http://127.0.0.1:9999/v1/models | head
curl http://127.0.0.1:9999/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "Qwen3.6-35B-A3B-PRISM-MLX-NVFP4",
"messages": [{"role":"user","content":"Say only: HELLO_WORLD"}],
"temperature": 0,
"max_tokens": 16
}'
| Symptom | Fix |
|---|---|
Received … weight_global_scale / extras not in model | You started plain omlx serve. Use start-prism-nvfp4.sh or scripts/start_omlx_nvfp4.py |
| Port already in use | OMLX_PORT=10000 or stop the process on 9999 |
| Download fails | Install CLI: brew install huggingface-cli or pip install -U "huggingface_hub[cli]"; re-run script |
| Low memory / thrashing | Prefer 64 GB+ unified memory; close other apps; lower oMLX cache if needed |
| Python 3.14 only on machine | Install 3.13: brew install [email protected] and re-run (oMLX 0.5.x needs <3.14) |
| Verify step fails but server might still work | Re-run with SKIP_VERIFY=1, then check the log: ~/.omlx/logs/prism-nvfp4.log |
Important: always start via the one-click launcher. Stock omlx serve alone rejects this checkpoint’s weight_global_scale tensors.
Yes — on Apple Silicon — if you use this repo’s one-click or start_omlx_nvfp4.py.
Plain omlx serve without the companion patch does not load this checkpoint.
| Runtime | Loads? | Quality | Notes |
|---|---|---|---|
One-click / start_omlx_nvfp4.py + stock oMLX | Yes | Lossless (bit-exact packs + calibrated ×1/g) | Supported path for any new Mac |
Stock oMLX only (omlx serve, no patch) | No | — | Fails on weight_global_scale extras |
| NVIDIA GPU / vLLM | No (this package) | — | Use GPU sibling: PRISM-NVFP4 |
| Python 3.14 | No for oMLX 0.5.x | — | Upstream requires >=3.11,<3.14 |
Verified path (zero → generate): remove patch → load fails → nvfp4_compat install → load (280 global-scale wrappers) → greedy HELLO_WORLD.
Weights are a lossless MTP-key repack (mtp.*); tensor bytes match the calibrated NVFP4 conversion.
Re-run the harness on your machine:
# same Python that runs omlx:
python scripts/verify_e2e.py --model-dir ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
The NVFP4 conversion keeps per-tensor weight_global_scale.
Metal MLX QuantizedLinear only applies per-group FP8 scales. Folding g
into FP8 at convert time hurts fidelity (and can underflow). This release
keeps globals bit-exact and applies 1/g after the matmul via a thin
portable wrapper: patches/nvfp4_compat.py.
That interceptor is not in upstream jundot/omlx
as of the verified 0.5.x line. One-click always starts through
scripts/start_omlx_nvfp4.py so the patch is active before weights load.
Lightning MTP: checkpoint uses stock mtp.* names; enable mtp_enabled
in oMLX model settings (preset ships enabled).
# App (easiest UI)
# https://github.com/jundot/omlx/releases
# or Homebrew
brew tap jundot/omlx https://github.com/jundot/omlx
brew install omlx
# or from source
git clone https://github.com/jundot/omlx.git && cd omlx && pip install -e .
mkdir -p ~/Models
hf download Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 \
--local-dir ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
cd ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
# Use the same Python that runs omlx:
python patches/nvfp4_compat.py install
python scripts/start_omlx_nvfp4.py serve --model-dir ~/Models --port 9999
# open http://127.0.0.1:9999/admin/chat
Point oMLX’s model directory at ~/Models (Welcome wizard or Settings). Pin
Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 as default if you want it always loaded.
curl http://127.0.0.1:9999/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "Qwen3.6-35B-A3B-PRISM-MLX-NVFP4",
"messages": [{"role":"user","content":"In one sentence, what is mixture-of-experts?"}],
"temperature": 0.6,
"top_p": 0.95,
"max_tokens": 256
}'
| File | Purpose |
|---|---|
model.safetensors | MLX NVFP4 LM + vision + mtp_head.* (~23 GB) |
config.json | qwen3_5_moe + quantization: {mode: nvfp4, group_size: 16, bits: 4} |
tokenizer*, chat_template.jinja, processor_config.json | tokenizer / VLM processor |
patches/nvfp4_compat.py | Required global-scale + extra-key load patch |
scripts/setup_one_click.sh | End-to-end installer |
scripts/start_omlx_nvfp4.py | oMLX entry that installs the patch first |
presets/model_settings.json | Recommended oMLX per-model preset |
| Unified memory | Expectation |
|---|---|
| 128 GB (reference: M4 Max) | Comfortable; pin model + long context |
| 64–96 GB | Works; lower hot cache / concurrent load |
| 32–48 GB | Possible with paging; not recommended for agents |
| Intel Mac | Unsupported |
weight_global_scale; rename MTP mtp.* → mtp_head.*; keep vision BF16.model_type: qwen3_5_moe) with the global-scale
interceptor so Metal matmul stays bit-faithful to the calibrated quant.Start oMLX.app (Desktop)
└─ do shell script ~/.omlx/bin/start-omlx.sh
└─ ~/.local/bin/omlx serve # port 9999
model_dirs: ~/Models
default+pinned:
~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
That process uses a local oMLX tree with in-package NVFP4 patches. The files in this HF repo make the same behaviour available on stock oMLX via the compat layer + launcher.
Apache 2.0 (inherited from the base model and PRISM NVFP4 release).
<div align="center">