Reality check (2026-04-24)
What runs today vs what the spec targets. Updated each session.
Manifest models (in-scope for run/)
The 4 models in manifest.rs are the acceptance criterion.
| Model | Family | Load | Run | Output | tok/s CPU | tok/s honeycrisp |
|---|---|---|---|---|---|---|
| qwen3-0.6b-abl | decoder/baseline | ✓ | ✓ | ✓ HF golden pass | ~26 | ~5 |
| qwen2.5-coder-1.5b-abl | decoder/baseline | ✓ | ✓ | ✓ verified correct | ~16 | ~7 |
| qwen2.5-coder-14b-abl | decoder/baseline | ✓ | ✓ | ✓ verified correct | ~0.4 | ~2 |
| gemma-4-31b | decoder/gemma4 | ✓ | ✓ | ✓ verified correct | ~0.5 | n/a (OOM) |
CPU backend: pure Rust Q4_K matmul, rayon-parallel where applicable. Honeycrisp (Apple M-series Metal): faster than CPU for large models where matmul dominates; slower for tiny models (0.6b, 1.5b) where Metal dispatch overhead outweighs compute savings. CPU backend is ~4-8× behind llama.cpp (expected — no hand-tuned NEON intrinsics yet).
qwen3-0.6b passes HF per-op activation golden regression (tier3_goldens).
All 4 produce sensible factual answers on "What is the sun?" and math prompts. qwen3-0.6b passes HF per-op activation golden regression (tier3_goldens).
Full inventory (broader soma model set — future targets)
| Model | Type | Modality | Status | Blocker |
|---|---|---|---|---|
| qwen2.5-0.5b-abl | qwen2 | LLM | not in manifest | out of scope |
| qwen2.5-coder-1.5b-abl | qwen2 | LLM | ✓ works | — |
| qwen2.5-coder-14b-abl | qwen2 | LLM | ✓ works | — |
| qwen3-0.6b-abl | qwen3 | LLM | ✓ works | — |
| gemma-4-31b | gemma4 | LLM | ✓ works | — |
| deepseek-r1-8b-abl | qwen3 | LLM | loads, quality unknown | needs verify |
| nuextract-0.5 | phi3 | LLM | err | tensor naming mismatch |
| smollm2-360m | llama | LLM | err | tensor naming mismatch |
| bitnet-2b | bitnet | LLM | loads, quality unknown | needs verify |
| mimo-7b-rl | mimo | LLM | err | Q8 dtype gap |
| qwen2.5-vl-7b-abl | qwen2_vl | VL | err | nested config + VL arch |
| whisper-small | whisper | ASR | err | WhisperStyle arch missing |
| deberta-zeroshot | deberta-v2 | encoder | err | BertStyle arch missing |
| modernbert | modernbert | encoder | err | BertStyle arch missing |
| jina-v5-nano | eurobert | encoder | err | BertStyle arch missing |
| granite-hap-125m | roberta | encoder | err | BertStyle arch missing |
| granite-hap-38m | roberta | encoder | err | BertStyle arch missing |
| beats / glotlid / piper / xtts / yolo | — | — | — | binary, not .model format |
Failure taxonomy (future targets)
A. Tensor naming gaps
smollm2, nuextract: use different naming convention. Fix: import.md normalization schema.
B. Weight dtype gaps
mimo-7b-rl: Q8 dispatch not wired through load path. Fix: quant.md enumerate per-backend dtype support.
C. Config parsing gaps
VL models: hidden_size under text_config.hidden_size, not root.
Fix: format.md canonical config schema.
D. Missing arch families
Encoder-only (BERT family), Whisper, VL hybrid — no curated codepath. Fix: arch/encoder/, arch/encoder_decoder/ — future milestones.
Path forward
- Honeycrisp backend — accelerate existing 4 manifest models on Apple Silicon.
- Import normalization — unblock tensor-naming and config gaps without new archs.
- BertStyle codepath — unblock 5 encoder models (arch/encoder/).
- WhisperStyle — arch/encoder_decoder/.
- VL — multimodal arch.