Instructions to use nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8") model = AutoModelForMultimodalLM.from_pretrained("nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8
- SGLang
How to use nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 with Docker Model Runner:
docker model run hf.co/nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8
Ornith-1.5-35B-A3B-abliterated-W8A8
INT8 W8A8 quantisation of huihui-ai's abliterated Ornith 1.5 35B-A3B, with the vision tower, the MoE routers and the MTP head deliberately left in bf16.
35.7 GiB, compressed-tensors 0.18.0, format int-quantized.
Architecture Qwen3_5MoeForConditionalGeneration: vision intact, MTP intact.
Lineage
Every link is pinned to the commit this artifact was actually built from.
| step | source | revision |
|---|---|---|
| foundation | ornith-ai/Ornith-1.5-35B-A3B |
upstream release |
| abliteration (tower) | huihui-ai/Huihui-Ornith-1.5-35B-A3B-abliterated |
7269f0953054d68b3cacbd9ad729921258732007 |
| MTP head | shisa-ai/Ornith-1.5-35B-A3B-MTP-ONLY |
2b19b31bfe1659c6b0d9459ec3cbd87e34a322ef |
| quantisation | llmcompressor QuantizationModifier, recipe in recipe.yaml |
this repo |
The MTP head is not the one the base model ships, and that is deliberate. It is grafted from shisa-ai's distill. See "The MTP head" below, including a correction to a claim about the original head that circulates and is wrong.
Why this abliteration
Three abliterations of Ornith 1.5 35B-A3B are published. Only huihui-ai's keeps the model whole, and this quantisation preserves that:
| this repo | the other published W8A8 | the other abliterations | |
|---|---|---|---|
| abliterated | yes | no | yes |
| architecture | Qwen3_5MoeForConditionalGeneration |
Qwen3_5MoeForCausalLM |
one downgrades to ForCausalLM |
model.visual.* tensors |
333 | 0 | 0 |
| MTP head | yes (grafted) | yes (original, unfused) | dropped |
The two alternatives drop both the MTP head and the vision tower (64.6 GiB against the official 67.0 GiB, zero of each). A text-only checkpoint silently drops every image and OCR caller, which is a failure that looks like nothing at all: the model answers, it just cannot see.
What was quantised, and what was not
Scheme W8A8: 8-bit integer weights, symmetric, per channel, and 8-bit
integer activations, dynamic. Targets Linear. No calibration data (data-free
round-to-nearest), so nothing about this checkpoint is tuned to a calibration
corpus.
Left in bf16, on purpose:
- the whole vision tower, all 27 blocks and the merger
- every MoE router:
mlp.gateandshared_expert_gateon all 40 layers. Routers pick experts, and an 8-bit router picks different experts - the
linear_attnmodules and their norms. Ornith 1.5 is a hybrid, and the linear-attention state is precision-sensitive lm_head- the entire MTP head (
re:.*mtp.*)
The MTP head
The head here is shisa-ai's distill, not the one Ornith ships. Three reasons, and the first thing to say is what is not a reason.
The original head is trained. The widespread claim that it is not is false.
The claim (from the model's own discussion #10) is that every projection has a
standard deviation of exactly 0.0200, i.e. initializer_range. Probing the
published safetensors directly on 2026-08-27 does not support it:
mtp.norm.weight has mean +1.9251, mtp.layers.0.post_attention_layernorm.weight
+0.8686, and the projection standard deviations vary by a factor of three
(mtp.fc 0.0085, shared_expert.gate_proj 0.0089, mlp.gate 0.0096, o_proj
0.0185, q_proj 0.0247). A single init at initializer_range would put all of
them at 0.0200 and leave the norms near 0.02. For scale, the same checkpoint's
trained model.language_model.norm.weight is 1.6397 against the head's 1.9251.
Please do not repeat the claim.
The actual reasons:
- It accepts nearly twice as many drafted tokens. Measured in vLLM by shisa-ai and published alongside the head: Ornith's own head accepts 37.20% (mean accepted run 2.116), a zero-shot graft of the Qwen3.6 head 50.19% (2.506), and this head, a 12K KL distill over two mixed-data epochs warm-started from Ornith's own, 69.27% (3.078).
- It transfers. It is a fine-tune rather than a retrain: element-wise against the official head the deltas are 0.5% to 8.7% of each tensor's range. A head only has to be accepted by the tower it drafts for, and this one is within a few percent of the head that already pairs with it.
- Layout. Ornith ships the head's 256 experts unfused, as 785 separate
mtp.layers.0.mlp.experts.N.*tensors. This head ships the 19-tensor fused form (experts.gate_up_proj[256, 1024, 2048],experts.down_proj[256, 2048, 512]).
DFlash was the other candidate and was rejected: its acceptance falls from 89.8% at 8K context to 48.8% near 256K, it is slower than plain autoregressive decode at 252K/8K (0.67x), and it reportedly breaks multimodal.
Why W8A8 rather than FP8 or NVFP4
This matters on Ampere and not much anywhere else. vLLM's W8A8 INT8 scheme declares a minimum compute capability of 75, so an A40 (8.6) multiplies in its own INT8 tensor cores. The FP8 W8A8 scheme declares 89, so below Lovelace vLLM resolves the checkpoint to the weight-only scheme and serves it through Marlin: the activations go back to 16 bits and the memory saving is real while the speedup is not. NVFP4 has no native FP4 path on Ampere at all.
So on Ada, Hopper and Blackwell, prefer the official FP8 build. On Ampere, this one.
Serving
vllm serve nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8 \
--tensor-parallel-size 2 \
--enable-auto-tool-choice --tool-call-parser qwen3_xml
Fits 2x 48GB (A40, A6000) with room for a long context.
Credit and licence
The model is ornith-ai's, the abliteration is huihui-ai's, and the MTP head is shisa-ai's. This repository changes the numeric format and nothing else. Licence follows the upstream Ornith release; if that differs from the Apache-2.0 declared here, upstream governs.
Abliterated models have had refusal behaviour removed. You are responsible for what you do with it.
- Downloads last month
- 394
Model tree for nuoram/Ornith-1.5-35B-A3B-abliterated-W8A8
Base model
ornith-ai/Ornith-1.5-35B-A3B