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.
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).
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):
text
1temperature = 0.6
2top_p = 0.95
3top_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:
bash
1# Custom port + skip the long e2e check2OMLX_PORT=10000SKIP_VERIFY=1\3curl -fsSL https://huggingface.co/Ex0bit/Qwen3.6-35B-A3B-PRISM-MLX-NVFP4/resolve/main/scripts/setup_one_click.sh |bash45# Model already on an external drive6MODEL_DIR=/Volumes/Models bash scripts/setup_one_click.sh
After install — daily use
bash
1# Start / restart (always use this — not plain omlx serve)2~/.omlx/bin/start-prism-nvfp4.sh
34# Or open Desktop → Start PRISM NVFP4.command
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.
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:
bash
1# same Python that runs omlx:2python 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
bash
1# App (easiest UI)2# https://github.com/jundot/omlx/releases34# or Homebrew5brew tap jundot/omlx https://github.com/jundot/omlx
6brew install omlx
78# or from source9git clone https://github.com/jundot/omlx.git &&cd omlx && pip install -e .
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).