Instructions to use Brooooooklyn/Qwen3.8-27B-NVFP4-mlx with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use Brooooooklyn/Qwen3.8-27B-NVFP4-mlx 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("Brooooooklyn/Qwen3.8-27B-NVFP4-mlx") config = load_config("Brooooooklyn/Qwen3.8-27B-NVFP4-mlx") # 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
- Unsloth Desktop
- Pi
How to use Brooooooklyn/Qwen3.8-27B-NVFP4-mlx with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Brooooooklyn/Qwen3.8-27B-NVFP4-mlx"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "Brooooooklyn/Qwen3.8-27B-NVFP4-mlx" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use Brooooooklyn/Qwen3.8-27B-NVFP4-mlx 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 "Brooooooklyn/Qwen3.8-27B-NVFP4-mlx"
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 Brooooooklyn/Qwen3.8-27B-NVFP4-mlx
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Brooooooklyn/Qwen3.8-27B-NVFP4-mlx with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Brooooooklyn/Qwen3.8-27B-NVFP4-mlx"
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 "Brooooooklyn/Qwen3.8-27B-NVFP4-mlx" \ --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.8-27B — Unsloth NVFP4 + E4M3 FP8 weights (MLX, DGX)
Brooooooklyn/Qwen3.8-27B-NVFP4-mlx
is an MLX mixed-weight-format quantization of
Qwen/Qwen3.8-27B, prepared for
experimental NVIDIA CUDA inference on Linux aarch64. The model has a 64-layer
dense Qwen3.5-family language backbone with 48 linear-attention and 16
full-attention layers, a BF16 vision tower, and one preserved MTP layer.
This model is part of the Unsloth NVFP4 Tensor-Class Recipe for MLX — macOS + DGX collection.
The source was the all-BF16 checkpoint at revision
1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0.
Update — re-converted 2026-09-01
Every dense SwiGLU FFN block scale is lifted by an exact power of two, folded
into the feeding norm. NVFP4 stores a block scale as amax / 6 in E4M3, and on
real weights those land in E4M3's subnormal band, carrying three mantissa bits
instead of four -- or rounding to the zero code, which decodes all 16 weights in
the block to zero. The fold is exact, so the layer's function is unchanged.
Annihilated dense MLP blocks: 0.0049% -> 0.0000%; worst dense tensor 0.0770% -> 0.0000%.
Weight bytes changed; the tensor-class map, shard layout and tensor counts are unchanged. Earlier revisions remain in this repository's history.
Quantization recipe
This is a data-free, weight-only MLX storage port of the Unsloth Qwen3.6 NVFP4 recipe, applied to Qwen3.8's matching dense Qwen3.5-family tensor layout:
- tensors assigned NVFP4 by the recipe are stored as NVFP4, 4-bit with group size 16;
- tensors assigned FP8 by the recipe are stored as raw E4M3 FP8 weight bytes with one BF16 dequantization scale per output channel;
- every excluded tensor stays BF16.
The NVFP4 class uses MLX weight-only quantized matmul with BF16/A16
activations. For the FP8 class, mlx-node reconstructs each weight to BF16 once
at load and then uses ordinary A16 matmul. The serialized fp8_e4m3 form is
Uint8 [N, K] weight plus BF16 [N, 1] scale; it is not MLX mxfp8 and it is
not native W8A8 execution.
No imatrix, calibration dataset, AWQ-style pre-scaling, activation calibration, NVFP4 global scale, or FP8 KV-cache calibration was used. This artifact preserves the recipe's tensor-class boundaries and weight storage formats under mlx-node's A16 runtime; it does not claim numerical or performance parity with Unsloth's calibrated W4A4/W8A8 execution.
| Tensor class | Stored format |
|---|---|
Dense FFN {gate,up,down}_proj, layers 0–55 |
NVFP4 4/16 |
Dense FFN {gate,up,down}_proj, layers 56–63 |
E4M3 FP8 weight + per-output BF16 scale |
Full-attention {q,k,v,o}_proj |
E4M3 FP8 weight + per-output BF16 scale |
Linear-attention in_proj_qkv, in_proj_z, out_proj |
E4M3 FP8 weight + per-output BF16 scale |
lm_head |
E4M3 FP8 weight + per-output BF16 scale |
Embeddings; in_proj_a/b; GDN state, convolution, and norm tensors; all other norms |
BF16 |
Entire 15-tensor mtp.* subtree |
BF16 |
| Vision tower and merger tensors | BF16 |
The allocation contains 168 NVFP4 modules and 233 E4M3 FP8 modules.
The top-level config is nvfp4, 4-bit, group size 16; the 233 higher-class
modules are explicit fp8_e4m3 overrides. The final eight dense FFNs
intentionally use the higher class.
Target and usage
The canonical native target is aarch64-unknown-linux-gnu: Linux aarch64 with
glibc and NVIDIA CUDA 13.0. mlx-node currently validates this experimental
inference-only path on NVIDIA GB10 / DGX Spark (sm_121). It is not a generic
CUDA or x86_64 artifact, and there is no published CUDA prebuilt native npm
binary. Build the pinned checkout on the DGX host:
git clone https://github.com/mlx-node/mlx-node.git
cd mlx-node
git checkout e281f0bbc61eb71a244ad6681ffad324a1177780
git submodule update --init --recursive
yarn install
yarn build
The current CUDA preview uses eager execution and a flat KV cache:
MLX_QWEN35_FORCE_EAGER=1 \
MLX_QWEN35_PAGED_OVERRIDE=0 \
yarn oxnode your-script.ts
For example:
import { loadSession } from '@mlx-node/lm';
const session = await loadSession('./Qwen3.8-27B-NVFP4-mlx');
const result = await session.send('Explain the purpose of a unit test in one sentence.');
console.log(result.text);
The full BF16 MTP subtree is preserved inline and is supported by mlx-node on the macOS fallback path. CUDA speculative decoding is not supported in the DGX preview, so preservation of these tensors does not claim DGX MTP validation.
Reproduction
Converter checkout:
mlx-node e281f0bb
(package version 0.0.10). The invocation was:
mlx convert \
--input /Users/brooklyn/.mlx-node/models/qwen3.8-27b \
--output /Users/brooklyn/.mlx-node/models/qwen3.8-27b-unsloth-nvfp4-mlx \
--model-type qwen3_5 \
--dtype bfloat16 \
--quantize \
--q-recipe unsloth \
--q-mode nvfp4
No --imatrix-path was supplied. The converter therefore applied the fixed
tensor-class map without AWQ pre-scaling.
Validation
The five-shard SafeTensors index contains 1,600 entries and reports
metadata.total_size = 23,417,338,336 bytes. Header and index validation
confirmed exact shard closure, valid physical offsets, 168 inherited NVFP4
groups, 233 complete fp8_e4m3 groups, 401 scale sidecars, no bias sidecars,
and identical quantization and quantization_config blocks.
All 333 vision/merger tensors and all 15 mtp.* tensors remain BF16 without
quantization sidecars. No imatrix or calibration artifact is present. The
tokenizer, chat template, generation config, and preprocessor assets are
byte-identical to the pinned source snapshot.
A macOS A16-fallback smoke test detected hasMtpWeights() = true and completed
a short deterministic generation with native MTP explicitly enabled. This
plumbing check does not validate model quality, long-context behavior, vision
quality, DGX/CUDA execution, or benchmark performance.
License and attribution
The source model card declares the Apache-2.0 license. Model capability and training credit belong to the Qwen Team. The tensor-class recipe is credited to Unsloth. This repository converts the pinned BF16 source weights into the mixed NVFP4/plain-E4M3 MLX representation described above.
- Downloads last month
- 498
4-bit
Model tree for Brooooooklyn/Qwen3.8-27B-NVFP4-mlx
Base model
Qwen/Qwen3.8-27B