# Ornith-1.0-35B Q6 MTP Onboarding

Onboarded: June 26-27, 2026
Source: skinnyctax/Ornith-1.0-35B-Q6_K-Frankenstein-MTP-GGUF
File: `ornith-1.0-35b-Q6_K-MTP-final.gguf` (28 GB)
Architecture: `qwen35moe` (40 layers, 256 experts, 35B total / ~3B active)

## What This Is

Cross-model MTP head graft — Ornith did not ship with MTP support. Skinnyctax surgically grafted 20 MTP head tensors from a sibling Qwen3.6-based finetune to enable `--spec-type draft-mtp` self-speculative decoding. No quality regression.

## Download

```bash
hf download skinnyctax/Ornith-1.0-35B-Q6_K-Frankenstein-MTP-GGUF \
  ornith-1.0-35b-Q6_K-MTP-final.gguf \
  --local-dir /models/downloads/Ornith-1.0-35B-GGUF
```

Note: `hf` CLI replaces deprecated `huggingface-cli`. `--local-dir-use-symlinks` does not exist on `hf`.

## Benchmark Results

### n-cpu-moe Sweep (RTX 2080 Ti 11 GB, Q8 KV, 128K ctx)

| n-cpu-moe | VRAM | Avg TG | Acceptance | Status |
|-----------|------|--------|------------|--------|
| 48 | 3.6 GB | 27.9 t/s | 95% pos 1, 89% pos 4 | ✅ All CPU |
| 32 | 8.6 GB | 32.0 t/s | 98% pos 1, 89% pos 4 | ✅ |
| **30** | **9.9 GB** | **33.7 t/s** | **95% pos 1, 87% pos 4** | **⭐ Best** |
| 29 | 10.5 GB | 32.9 t/s | 95% pos 1 | ✅ Tight |
| 28 | — | ❌ OOM | — | ❌ MTP ctx OOM |

### spec-draft-n-max Tuning (n-cpu-moe 30)

| n_max | Avg TG | Best run |
|-------|--------|----------|
| 1 | 31.4 | 33.5 |
| 2 | 33.0 | 33.4 |
| 3 | 32.1 | 32.9 |
| **4** | **33.7** | **34.5** |

n_max=4 wins on this hardware. The verification cost is amortized across 4 speculated tokens with high acceptance rates.

### MTP Stats (at sweet spot)

- Mean accepted length: 4.7 tokens (out of max 4 = drafts almost always fully accepted)
- MTP context overhead: 568 MiB
- Draft KV cache: Q8_0 explicitly set via `--spec-draft-type-k q8_0 --spec-draft-type-v q8_0`

## Comparison: Q8 vs Q6 MTP

| Metric | Q8_0 (no MTP) | Q6_K + MTP | Δ |
|--------|--------------|------------|---|
| File size | 36.9 GB | 28 GB | -24% |
| VRAM | 9.1 GB | 9.9 GB | +9% |
| TG t/s | 18.9 | 33.7 | **+78%** |
| Quality | Reference | Near-reference | Minimal (Q6 vs Q8) |

## Llama-Swap Config Key

```yaml
ornith-35b-q6-mtp:
  cmd: "/usr/local/bin/llama-server-sm75 -m /models/downloads/Ornith-1.0-35B-GGUF/ornith-1.0-35b-Q6_K-MTP-final.gguf --port ${PORT} --host 127.0.0.1 --jinja --reasoning off -ngl 99 --no-mmap --mlock --prio 2 --poll 30 --no-cont-batching --timeout 300 --threads 16 --threads-batch 32 --parallel 1 -c 131072 --batch-size 2048 --ubatch-size 512 --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn on --no-host -fitt 1024 --n-cpu-moe 30 --no-kv-offload --spec-type draft-mtp --spec-draft-n-max 4 --spec-draft-type-k q8_0 --spec-draft-type-v q8_0 --temp 0.6 --top-p 0.95 --min-p 0.05 --top-k 20 --metrics"
  aliases: [ornith, ornith-35b, ornith-mtp]
  ttl: 3600
  concurrency: 1
```

## Key Differences from Qwen3.6-35B-MTP

Ornith is post-trained from Qwen3.5 via RL for agentic coding. Key flag differences:
- `--temp 0.6` (Ornith eval default) vs 0.2 (Qwen — overly deterministic for Ornith)
- Same `--n-cpu-moe 30` sweet spot (both are 35B MoE)
- Ornith has MTP grafted (not native) — same `--spec-type draft-mtp` works
- `--spec-draft-n-max 4` best for Ornith vs 3 for Qwen36 (different optimal acceptance depth)
