Downloads · 30 days
42
4% of all-time downloads
Jonandrop/Ornith-1.0-35B-MTPLX-Vision-mxfp4-int4-mtp
Ornith-1.0-35B-MTPLX-Vision-mxfp4-int4-mtp is a image-text-to-text model from Jonandrop. 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.
A vision-enabled Ornith 1.0 35B model for Apple Silicon via MTPLX native speculative decoding (MTP). The body is the Shiftedx mxfp4 + abliterated build; the MTP head has been re-quantized from its original 5-bit to 4-…
Downloads · 30 days
42
4% of all-time downloads
All-time downloads
1.2K
Public
Parameters
35.1B
19.8 GB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors19.8 GB · 100%
How the weights are stored.
U3234.7B · 99%
From the Hugging Face model README
A vision-enabled Ornith 1.0 35B model for Apple Silicon via MTPLX native speculative decoding (MTP). The body is the Shiftedx mxfp4 + abliterated build; the MTP head has been re-quantized from its original 5-bit to 4-bit affine (group 64) so the model loads on stock MTPLX without a loader patch.
The Shiftedx mxfp4-vision model has the best MTP acceptance of the
Ornith MTP variants I measured, but its MTP head is prequantized at
5-bit. Stock MTPLX (up to 2.1.0) miscomputes the 5-bit group size in
_infer_prequantized_group_size (integer-floor 32 // 5 = 6 instead of
6.4), infers group_size 60 instead of 64, and nn.quantize rejects
the layer at load:
ValueError: [quantize] The last dimension of the matrix needs to be
divisible by the quantization group size 60 ... shape (2048,4096)
That bug is filed as youssofal/MTPLX#182 with a fix in PR #183. This repo is the model-side workaround: the MTP head is re-quantized to 4-bit affine (group 64), which stock MTPLX loads natively (5-bit packing is the only non-power-of-2 width that triggers the bug; 4-bit does not).
Per quantized MTP tensor (a weight / scales / biases triple):
13 quantized triples transformed, 33 norm / layernorm tensors passed through unchanged. The body (model shards) and vision tower are unchanged from the Shiftedx source.
The 5-bit to 4-bit round-trip costs a small amount of draft-head fidelity: mean abs error ~0.0006 per tensor against the original 5-bit dense, which shows up as a modest acceptance drop at the deepest draft position (see below).
The signal that matters for an MTP head is draft acceptance at the chosen bit width: high acceptance at lower bits means the draft head matches the target well without paying for extra precision. Wall-clock tok/s is reported for completeness but varies with hardware state and is not the figure of merit here.
Apple M5 Pro 64 GB, MTPLX 2.1.0 (stock, no patch), mtp_history_policy=committed
(CLI default), --draft-temperature 0, thinking OFF, warm.
| Variant | MTP bits | d3 accept pos1/2/3 | loads on stock MTPLX |
|---|---|---|---|
| This repo (int4 MTP head) | 4 | 0.90 / 0.77 / 0.66 | yes |
| Shiftedx mxfp4-vision (source) | 5 | 0.93 / 0.86 / 0.76 | no (needs MTPLX #183) |
| Jonandrop/Ornith-1.0-35B-MTPLX-Vision | 4 | 0.85 / 0.71 / 0.52 | yes |
| wang-yang/Ornith-1.0-35B-MTPLX (non-vision source) | 4 | 0.23 / 0.04 / 0.00 | yes |
This repo is the highest-acceptance Ornith MTP variant at 4-bit, and the highest-acceptance variant overall that loads on stock MTPLX. At 4-bit it reaches pos3=0.66, close to the 5-bit source's 0.76, while every other 4-bit variant is at 0.52 or collapses. The 5-bit source is marginally higher but costs an extra bit and needs the MTPLX loader fix; this repo gets most of the way there at lower precision with no patch.
The wang-yang source collapse (pos3=0.00) is not a quantization issue: its shipped MTP draft head diverges from its own target body (264 of 1803 body leaf tensors differ from the vision variants; the MTP head is bit-identical across variants). See the comparison repo Jonandrop/Ornith-1.0-35B-MTPLX-Vision README for the weight-diff evidence.
| Depth | tok/s (e2e) | speedup vs AR | acceptance pos1/2/3 |
|---|---|---|---|
AR (--no-mtp) | 64.7 | 1.00x | - |
| MTP depth 1 | 73.2 | 1.13x | 0.893 |
| MTP depth 2 | 68.5 | 1.06x | 0.866 / 0.775 |
| MTP depth 3 | 78.4 | 1.21x | 0.899 / 0.768 / 0.661 |
tok/s (e2e) is generated_tokens / total_elapsed, wall-clock including
prefill. Varies run-to-run with thermal/contention state.
The 5-bit to 4-bit re-quantization here is plain round-to-nearest (RTN). I tried two techniques that beat RTN for weight quality on standard LLMs (AWQ, arXiv:2306.00978; GPTQ, arXiv:2210.17323). Both collapsed MTP acceptance below RTN when applied to this draft head:
s per input channel and must inverse-scale activations by
1/s at runtime. In a transformer draft head those rescaled activations
feed residual streams, RMSNorms, attention softmax, and the (RTN) MoE
experts, none of which are re-quantized with W*s, so the rescale leaks
and corrupts them. AWQ's rescale is only invisible when every consumer of
the rescaled activation uses the scaled weights.The headline finding from this: weight reconstruction error is not acceptance. A 13.6% weight-error win (AWQ) produced acceptance 30x worse. RTN remains the best stock-loadable 4-bit MTP head here. The 5-bit source (0.76 at pos3) stays marginally ahead but needs the MTPLX loader fix (#182/#183).
mtplx start --model <path-to-this-model-dir> --port 8092 \
--chat-template-path <path-to-this-model-dir>/chat_template.jinja
OpenAI-compatible endpoint supporting text and image input via
POST /v1/chat/completions. The MTPLX CLI defaults to the
committed history policy this model requires.
| Component | Source | License |
|---|---|---|
| Base model | deepreinforce-ai/Ornith-1.0-35B | MIT |
| mxfp4 body + 5-bit MTP + abliteration + vision tower | Shiftedx/ornith-1.0-35b-abliterated-mxfp4-vision-mtplx | Apache-2.0 |
| MTP head re-quantization (5-bit to 4-bit) | this repo | Apache-2.0 |
| MTPLX runtime | youssofal/MTPLX | Apache-2.0 |
Released under Apache-2.0, preserving the upstream licenses.