Instructions to use Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 with MLX:
# Make sure mlx-vlm is installed # pip install --upgrade mlx-vlm from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template from mlx_vlm.utils import load_config # Load the model model, processor = load("Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4") config = load_config("Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4") # Prepare input image = ["http://images.cocodataset.org/val2017/000000039769.jpg"] prompt = "Describe this image." # Apply chat template formatted_prompt = apply_chat_template( processor, config, prompt, num_images=1 ) # Generate output output = generate(model, processor, formatted_prompt, image) print(output) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4"
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
Run Hermes
hermes
- OpenClaw new
How to use Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
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 |
One-click setup (recommended)
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).
Requirements
| 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) |
Option A — curl (easiest, no clone)
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.
Option B — after you already downloaded the repo
# 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.
What the script does
- Checks Apple Silicon + unified memory
- Installs/upgrades latest stock oMLX (Homebrew, else pipx)
- Ensures Hugging Face CLI (
hf/huggingface-cli) - Downloads this model to
~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 - Installs
patches/nvfp4_compat.pyinto the oMLX Python env (.pth+ runtime check) - Writes
~/.omlx/settings.json+ model preset (sampling + MTP enabled) - Installs launchers (compat-first — not bare
omlx serve):~/.omlx/bin/start-prism-nvfp4.sh- Desktop: Start PRISM NVFP4.command
- Optionally runs
scripts/verify_e2e.py - Starts the server and opens the chat UI
When finished
| 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
Optional environment variables
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
After install — daily use
# 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
}'
Troubleshooting one-click
| 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 python@3.13 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.
Will this run on the latest oMLX from GitHub?
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
Why a patch is required (not a second model)
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).
Manual install
1. oMLX
# 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 .
2. Download weights
mkdir -p ~/Models
hf download Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4 \
--local-dir ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
3. NVFP4 compat (required)
cd ~/Models/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
# Use the same Python that runs omlx:
python patches/nvfp4_compat.py install
4. Serve
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.
5. API example
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
}'
Files
| 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 |
Hardware guidance
| 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 |
How this was produced
- Start from Ex0bit/Qwen3.6-35B-A3B-PRISM-NVFP4 (compressed-tensors NVFP4).
- Repack packed U8 weights → MLX U32 NVFP4 layout; keep FP8 group scales and
weight_global_scale; rename MTPmtp.*→mtp_head.*; keep vision BF16. - Serve under oMLX VLM engine (
model_type: qwen3_5_moe) with the global-scale interceptor so Metal matmul stays bit-faithful to the calibrated quant.
Reference machine layout (how the author runs it)
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.
License
Apache 2.0 (inherited from the base model and PRISM NVFP4 release).
- Downloads last month
- 443
Quantized
Model tree for Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4
Base model
Qwen/Qwen3.6-35B-A3B