Instructions to use Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # if on a CUDA device, also pip install mlx[cuda] # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX") prompt = "Once upon a time in" text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- MLX LM
How to use Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Generate some text mlx_lm.generate --model "Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX" --prompt "Once upon a time"
Ornith-1.0-35B MTP2 — High-Acceptance Q8 Sidecar for MTPLX
A trained, standalone high-acceptance Q8 affine MTP2 sidecar for Ornith-1.0-35B, optimized and validated on Apple Silicon with MTPLX 2.4.2.
This repository contains the adjusted MTP weights, runtime contract, benchmark summaries, and a bundle assembler. It intentionally does not redistribute the 22-36 GB trunk weights. Download a compatible trunk separately and combine it with this sidecar.
Main contribution: MTP2 acceptance optimization
The main result is not a new trunk quantization. It is the adjustment of an existing Qwen3.5-compatible MTP initialization to Ornith UD-Q8 hidden states and output behavior, with special attention to both the first and second speculative tokens.
Same-contract comparison against the borrowed MTP initialization:
| Metric | Borrowed MTP | Trained MTP2 | Change |
|---|---|---|---|
| Aggregate acceptance | 71.66% | 86.29% | +14.63 pp |
| D1 acceptance | 78.57% | 87.18% | +8.61 pp |
| D2 acceptance | 56.39% | 84.88% | +28.49 pp |
| MTP throughput | 101.31 tok/s | 116.10-116.67 tok/s | +14.79-15.36 tok/s |
| Token-weighted speedup | 1.193x | 1.368-1.372x | +0.175-0.179x |
| MTP-induced validator regressions vs AR | 1 | 0 | fixed in tested suite |
The largest improvement is at D2. This matters because a nominal depth-2 MTP head is only useful when the second drafted token is accepted often enough to offset its additional forward cost.
The reliability result is equally important. The borrowed MTP introduced one new validation failure relative to paired AR; the trained MTP2 introduced zero under the same eight-task Hermes contract. The complete 164-task HumanEval run also recorded zero AR-pass-to-MTP-fail transitions. This is a scoped, observed-zero-regression result, not a claim that the model can never make an error.
The comparison above measures the merged training candidate. We separately
reloaded the exact standalone sidecar published here and repeated the same
three-run contract. That distribution-ready package produced
114.83-115.75 tok/s, or 1.361-1.367x over its paired AR runs, while
preserving 86.29% aggregate, 87.18% D1, 84.88% D2, and zero induced validator
regressions. We report these package numbers separately so the downloadable
artifact is not credited with the slightly faster in-memory candidate result.
Trunk compatibility and application status
| Combination | Status | AR tok/s | MTP2 tok/s | MTP2 vs AR | Quality result |
|---|---|---|---|---|---|
| UD-Q8 trunk + this Q8 MTP2 | Verified / recommended | 84.65 | 115.21 | 1.361-1.367x | HumanEval 125/164; zero AR-pass to MTP-fail |
| UD-Q4 trunk + this Q8 MTP2 | Experimental / not primary-ready | 96.26 | 127.37 | 1.312-1.326x | 21/32 vs Q4 AR 22/32; one regression |
After the MTP2 acceptance work was complete, the same sidecar was tested with two trunk precisions. The Q4 trunk was about 13.7% faster than Q8 AR in our same-host test, but its 32-task HumanEval score fell from Q8 AR's 26/32 to 22/32. The cross-precision Q4+Q8-MTP2 combination then fell to 21/32 and reproduced two Hermes-format regressions. It is published for research and reproduction, not as the recommended primary model.
Files
mtp.safetensors- 897,467,628-byte trained Q8/group-64 MTP2 sidecar.mtp_config.json- architecture, quantization, and trunk profiles.mtplx_runtime.json- tested runtime contract and benchmark settings.artifact-manifest.json- provenance, pinned revisions, hashes, and claims.scripts/assemble_mtplx_bundle.py- fail-closed local bundle assembler.TECHNICAL_REPORT.md- methodology, results, limitations, and decision.reports/*.json- compact, path-sanitized benchmark summaries.
Recommended combination: UD-Q8
hf download Brooooooklyn/Ornith-1.0-35B-UD-Q8_K_XL-mlx \
--revision 1aa23d99400067a00d72ad0f47bb0c9ef6126480 \
--local-dir ~/Models/Ornith-1.0-35B-UD-Q8_K_XL-mlx
hf download Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX \
--local-dir ~/Models/Ornith-1.0-35B-MTP2-MTPLX
python ~/Models/Ornith-1.0-35B-MTP2-MTPLX/scripts/assemble_mtplx_bundle.py \
--profile q8-verified \
--trunk ~/Models/Ornith-1.0-35B-UD-Q8_K_XL-mlx \
--sidecar-dir ~/Models/Ornith-1.0-35B-MTP2-MTPLX \
--output ~/Models/Ornith-1.0-35B-UD-Q8-MTP2-MTPLX
Inspect before serving:
mtplx inspect-model ~/Models/Ornith-1.0-35B-UD-Q8-MTP2-MTPLX \
--require-mtp --json
The accepted test contract used greedy AR and draft sampling, MTP depth 2,
Q8/group-64 affine MTP and draft LM heads, unquantized KV cache,
capture_commit, linear-gdn-from-conv-tape, margin 0.9, pre-D2 margin
2.0, and minimum speculative depth 0.
Experimental combination: UD-Q4
To reproduce the faster but lower-quality cross-precision experiment, download
Brooooooklyn/Ornith-1.0-35B-UD-Q4_K_XL-mlx at revision
1fbf6f036940ce58694904c1035d84a32fa54994, then run the assembler with
--profile q4-experimental.
The assembler prints and records a NO-GO warning and places a public-release blocker in the assembled Q4 runtime contract, so strict MTPLX inspection will not promote it as verified. This Q8 MTP head was optimized against the Q8 trunk distribution; it is not a Q4-specific MTP head.
Important claim boundaries
- MTP speculative decoding does not make the trunk intrinsically smarter.
- The Q8 result means no observed regression under the named test contract; it is not a bit-for-bit equivalence claim.
- The Q4 result is an exploratory cross-precision measurement, not an accepted release configuration.
- Throughput is host-, runtime-, prompt-, and thermal-state dependent.
- Q4 KV-cache quantization was not used in these measurements.
- MTP3 was tested separately and intentionally not packaged.
- This is a sidecar release. Standard
mlx-lmalone will not automatically use these speculative weights; use a compatible MTPLX runtime.
Provenance and licensing
- Ornith-1.0-35B: MIT, revision
5df2ed3f675c7beaa490328cc70bb573b65fb660. - UD-Q8 trunk: MIT, revision
1aa23d99400067a00d72ad0f47bb0c9ef6126480. - UD-Q4 trunk: MIT, revision
1fbf6f036940ce58694904c1035d84a32fa54994. - Initial MTP graft:
wang-yang/Ornith-1.0-35B-MTPLX, MIT model repository, revision5ad47122e7d28827bc3430e8216c248fd32aae13. - The graft traces to
Qwen/Qwen3.5-35B-A3B, Apache-2.0, revision59d61f3ce65a6d9863b86d2e96597125219dc754. - This release materially changes the initial graft through Ornith-Q8 teacher capture, MTP2 distillation, LoRA merge, and affine Q8 deployment export.
See NOTICE and licenses/ for retained notices. The release is distributed
under Apache-2.0 to preserve the upstream Qwen obligations clearly.
中文摘要
建議使用 UD-Q8 主幹 + 本 Q8 MTP2 sidecar。同條件三輪測試約為
1.361-1.367x,完整 HumanEval 為 AR 119/164、MTP2 125/164,沒有
觀察到 AR 通過但 MTP2 失敗的題目。主要成果是把整體接受率從 71.66%
提升至 86.29%,D2 從 56.39% 提升至 84.88%;同一組 Hermes 驗證中,
原始借用 MTP 新增的驗證退步由 1 項降為 0 項。
UD-Q4 組合雖然速度較快,但 32 題 HumanEval 明顯低於 Q8,且接上現有 Q8 MTP2 後仍有一題回歸,因此只建議作研究或低風險快速模式,不建議 取代 Q8 成為主力。
Quantized
Model tree for Joseph007fu/Ornith-1.0-35B-MTP2-MTPLX
Base model
ornith-ai/Ornith-1.0-35B