One directory per model, laid out like apple/coreai-models
so that an agent primed on Apple’s repo recognises this one without new instructions:
models/<model>/
README.md the card — architecture, parity numbers, measured speeds, lessons
recipe.toml the configuration that produced each published bundle (our addition)
verify.toml expected config, where this port deliberately deviates from its source
Ready-to-run bundles are on Hugging Face — one best verified configuration per platform × compute unit. Every card links its source checkpoint, its exporter, and its parity numbers.
Two files here are generated, never hand-edited: _INVENTORY.md (every
published repo, with downloads and verification verdicts) and index.json (the
same thing machine-readable — start there if you are an agent).
python3 conversion/zoo_convert.py list # what can be reproduced
python3 conversion/zoo_convert.py show qwen3.5-0.8b # the command + its prerequisites
python3 conversion/zoo_convert.py doctor # is this venv wired up?
python3 conversion/zoo_convert.py run qwen3.5-0.8b # do it
Scripts that can run without any setup say so: show prints a uv line for the ones that
declare their own dependencies inline (PEP 723, the same mechanism Apple’s models/*/export.py
use), so uv run conversion/export_da3.py --variant small --dtype float16 --res 504 is the
whole story for those ports. The rest import re-authored model code and need the overlay
environment — zoo_convert.py doctor checks it.
Unlike Apple’s repo, several families share one exporter (Qwen3.5’s drives Ornith and
Qwen3.6-27B too), so the export scripts stay in ../conversion/ and
recipe.toml names the one to run. A recipe marked status = "unverified" will not run
without --force: the repo does not record which configuration produced the published bundle,
and a wrong recipe is worse than a missing one.
Two fields name the two ends of a conversion, and they are easy to confuse:
hf_repo is the repo the recipe publishes to; source_hf_id is the checkpoint it
converts from. Ports whose upstream is not on the Hub carry source_repo instead
(RF-DETR, YOLOX, AdcSR, TripoSplat, LTX-Video are released on GitHub). Recording the source is
what lets a tool answer “how do I convert this model” from a Hugging Face id, rather than
only “how was that bundle produced” from a recipe name.
python3 conversion/zoo_verify.py mlboydaisuke/qwen3.5-0.8B-CoreAI # one repo
python3 conversion/zoo_verify.py --all --json models/_VERIFY.json # the whole catalog
python3 cli/coreai_doctor.py exports/my_bundle --profile iphone # known failure patterns
python3 cli/coreai_verify.py exports/my_bundle -n 16 # vs an HF oracle
Tier 1 compares a bundle’s tokenizer, chat template, context length and declared precision
against the source repository named in its own metadata.json — no oracle, no device, no
weights, so the whole catalog checks in minutes.
cli/ asks a different question of the same bundle: not “does it match its
source” but “does it match what the runtime will do with it”, from the bundle’s own files.
The two are complementary — a port can copy its source perfectly and still ship a value the
chat template never emits. See cli/DOCTOR_RULES.md.
| Card | Family | Download | Status |
|---|---|---|---|
qwen3.5.md |
Qwen3.5 (hybrid linear+full attn) | 🤗 qwen3.5-0.8B-CoreAI | 0.8B + 2B, top-1 exact vs HF |
gemma4-e2b.md |
Gemma 4 (multimodal; text decoder) | 🤗 gemma-4-E2B-CoreAI | 8/8 exact vs HF |
gemma4-vl.md |
Gemma 4 E2B vision (image+text→text, 2nd VLM) | vl/ in 🤗 gemma-4-E2B-CoreAI |
margin-ruled exact vs fp32 HF; 82.4 tok/s M4 Max / 25.5 iPhone 17 Pro (pipelined VLM rider) |
lfm2.5.md |
LFM2.5 (conv + full-attn hybrid, LiquidAI) | 🤗 LFM2.5-1.2B-CoreAI | 1.2B, oracle gate 16/16, 276.5 tok/s M4 Max / 44.1–46.6 iPhone (int8 + absmax int8 head) (pipelined) |
granite-4.0-h.md |
Granite 4.0-H (Mamba2 + attn hybrid, IBM) | 🤗 granite-4.0-h-CoreAI | 1b + 350m, oracle gate 16/16, 136.5 tok/s M4 Max / 35.4–37.1 iPhone 17 Pro (int8 head) (pipelined, first SSM-scan rider) |
nemotron-3-nano.md |
Nemotron-3-Nano 4B (Mamba2 + attn + MLP hybrid, NVIDIA) — zoo’s 2nd SSM-scan rider, 1st non-Granite Mamba2 | 🤗 Nemotron-3-Nano-4B-CoreAI | 4B int8hu 4.3 GB, AOT h18p, 16.0 tok/s iPhone 17 Pro (cooled) / 85.2 tok/s M4 Max (raw AIModel), nat 24/24 + oracle 24/24; no custom kernel |
minicpm5-1b.md |
MiniCPM5-1B (plain Llama dense, OpenBMB) | 🤗 MiniCPM5-1B-CoreAI | 1.08B int8, lossless (24/24 token-exact vs HF fp32), 66.8 tok/s iPhone 17 Pro (pipelined, llama→mistral remap) |
fastcontext.md |
FastContext-1.0-4B-SFT (repo-exploration agent, Qwen3-4B arch, Microsoft) | 🤗 FastContext-1.0-4B-CoreAI | 4B 4bit, parity 23/24 argmax (ppl 1.41) vs HF, 20.4 tok/s decode / 22.1 prefill iPhone 17 Pro (AOT h18p GPU; zoo’s first stock-arch + first 4B-class iPhone LLM) |
youtu.md |
Youtu-LLM-2B (dense DeepSeek-MLA, Tencent) — zoo’s first iPhone MLA + first dense MLA (absorbed latent-KV + flash-decode kernel shared with GLM-4.7-Flash) | 🤗 Youtu-LLM-2B-CoreAI | 1.96B int8, token-exact vs HF fp32 (naive+absorbed 0 flips; int8 engine 16/16 device ≡ Mac ≡ HF), 102.8 tok/s M4 Max / ~19 iPhone 17 Pro |
rf-detr.md |
RF-DETR + RF-DETR-Seg (detection / instance segmentation, Roboflow) | 🤗 RF-DETR-CoreAI | det ×4 + seg ×6 fp32, gated cpu+gpu (mask IoU 1.000), 8.6–59.1 ms/frame M4 Max GPU |
depth-anything-3.md |
Depth Anything 3 (monocular depth, DINOv2+DPT, ByteDance) — zoo’s first depth model | 🤗 Depth-Anything-3-CoreAI | small + base, fp16/fp32, engine cos 1.000000 (cpu+gpu) / vs official mean r 0.98, 54 MB · 65.7 FPS M4 Max GPU (small fp16) |
qwen3-embedding.md |
Qwen3-Embedding (multilingual text embedder, last-token pooling + MRL, Alibaba) | 🤗 Qwen3-Embedding-0.6B-CoreAI | 0.6B fp16, torch ladder exact + engine gate cos 0.999998, 25–45 ms/embedding M4 Max GPU |
qwen3-reranker.md |
Qwen3-Reranker (cross-encoder reranker, yes/no logit score, Alibaba) | 🤗 Qwen3-Reranker-0.6B-CoreAI | 0.6B fp16, torch ladder exact (P(yes) Δ=0) + engine gate Δ<5e-4, 45.7 ms/score M4 Max GPU |
holo2.md |
Holo2-4B (GUI-grounding / computer-use VLM, Qwen3-VL-4B backbone, H Company) | 🤗 Holo2-4B-CoreAI | 4B int8lin + fp16 vision, parity vision cos 0.9999 / decoder 16/16 vs fp32 HF; rides the Qwen3-VL pipeline; zoo’s first GUI-grounding / computer-use model |
colmodernvbert.md |
ColModernVBERT (visual document retriever, late-interaction/MaxSim, ModernBERT+SigLIP2) — zoo’s first visual retriever + first late-interaction model | 🤗 ColModernVBERT-CoreAI | 250M, query + doc encoders fp16/fp32, engine per-token cosine 1.000000 (fp32) / ≥0.99999 (fp16), MaxSim == processor.score exactly, single-tile retrieval 3/3 |
yolox.md |
YOLOX-S (single-stage anchor-free detector, YOLO-family, Megvii) — zoo’s first YOLO / single-stage detector (CNN counterpart to RF-DETR; needs host NMS) | 🤗 YOLOX-CoreAI | 8.97M fp32, gated cpu+gpu (head cos 1.000000, detections IoU 1.000), 4.80 ms · 208 FPS M4 Max GPU · ~22 ms iPhone 17 Pro GPU (device-verified live in DetectCamera) |
parakeet.md |
Parakeet-TDT-0.6B (FastConformer transducer / TDT, NVIDIA) — zoo’s first transducer / TDT (RNN-T family) ASR (3 graphs + host greedy loop, not an LLM) | 🤗 Parakeet-TDT-0.6B-CoreAI | 600M, encoder fp16 + predict/joint fp32, 77/77 token-exact e2e vs HF (GPU enc cos 0.999995); iPhone 17 Pro: 14.84 s clip → 0.31 s (47.9× real-time), AOT encoder load 3.9 s; 25 EU langs |
nemotron-asr-streaming.md |
Nemotron 3.5 ASR Streaming 0.6B (cache-aware FastConformer + pure RNN-T, NVIDIA) — zoo’s first STREAMING ASR (live mic, 320 ms chunks, 40 locales via a run-time language input, punctuation built in, any-length) | 🤗 Nemotron-3.5-ASR-Streaming-CoreAI | 600M, conformer fp16 (two 12-layer AOT halves) + predict/joint fp32, 99/99 token-exact e2e vs HF streaming; iPhone 17 Pro: 53 ms/chunk = 6.0× real-time, cached load ~4 s; OpenMDW-1.1 (commercial OK) |
whisper-large-v3-turbo.md |
Whisper large-v3-turbo (speech→text, OpenAI) — official-recipe artifact + fixed-128 autoregressive decode, stock runtime; the golden card (▶️ runner / 💻 snippet / checklist) | 🤗 whisper-large-v3-turbo-CoreAI-official | 809M fp16, token-for-token exact vs HF greedy; 0.18 s/token M4 Max (first step 0.68 s); Mac + iPhone (AOT); 100 langs, auto-detect |
ltxvideo.md |
LTX-Video 2B distilled (text→video flow-matching DiT, Lightricks) — zoo’s first VIDEO model (T5 + DiT + causal video VAE; 8-step host FlowMatch sampler) | 🤗 LTX-Video-2B-CoreAI | 3 nets converted, per-net cos 1.000000 + DiT 8/8 real-step cos 1.000000; DiT fp16 + VAE fp16 + T5 bf16 = 13.5 G; 512×768×49f in ~14 s M-series GPU, coherent photoreal video; Mac-first |
triposplat.md |
TripoSplat (single image → 3D Gaussian splats, VAST) — zoo’s first 3D model | 🤗 TripoSplat-CoreAI | 5 nets converted, each converted-vs-eager cos 1.000000; DiT 20-step flow sampler + octree resampling host-side; ~1 min/image Mac GPU; .ply/.splat out |
ornith-1.0-9b.md |
Ornith-1.0-9B (agentic coding / self-scaffolding, Qwen3.5 hybrid arch, DeepReinforce) — zoo’s first agentic-coding model | HF upload pending (user-gated) | 9B, eager gate 24/24 exact vs fp32 oracle (fp16 / int8hu / int4lin — family-first clean int4) + engine greedy 12/12 ≡ oracle, 48.3 tok/s int8hu ship / 58.9 int4lin option, M4 Max (pipelined, zero new export code; Mac ship) |
nanbeige4.2-3b.md |
Nanbeige4.2-3B (22 shared physical Llama layers × 2 passes), ported by Vadim Smirnov | 🤗 Nanbeige4.2-3B-CoreAI | int8hu 4.59 GiB, fp32 + engine gates pass, 46.4 tok/s M4 Max; 44 KV cache layers; iPhone 17 Pro device-gated: 24/24 token-exact ×2 runs, 8.5/6.4 tok/s settled — zoo’s first community-contributed model |
kokoro-82m.md |
Kokoro-82M (StyleTTS2 + iSTFTNet text-to-speech, hexgrad) — zoo’s first TTS (3 graphs + host DSP, non-autoregressive 24 kHz) | 🤗 Kokoro-82M-CoreAI | 82M fp32 (~335 MB), spectral gate corr 0.999 vs patched torch; full utterance ~0.75 s M4 Max CPU; 28 English voices |
vjepa2.md |
V-JEPA 2 ViT-L SSv2 (self-supervised video world model + action head, Meta) — zoo’s first video understanding model | 🤗 VJEPA2-ViTL-SSv2-CoreAI | 375M fp16 (~708 MB), engine cos 0.999996 top-5 identical + semantic motion gate; ~160 ms/clip M4 Max GPU · ~0.34 s iPhone 17 Pro (AOT) |
unlimited-ocr.md |
Unlimited-OCR 3B-A0.5B MoE (document OCR → structured markdown, baidu) — zoo’s first doc-OCR, stock runtime | 🤗 Unlimited-OCR-CoreAI | vision fp16 + R-SWA MoE decoder sym8 (~4.5 GB), decode 0 flips / 9 steps vs fp32 oracle, flat 12.7 ms/token (~79 tok/s) M4 Max |
glm-ocr.md |
GLM-OCR 0.9B (document OCR, GLM-4.V small — zhipu) — zoo’s 2nd doc-OCR (image_embeds + M-RoPE decode) |
🤗 GLM-OCR-CoreAI | vision fp16 + GLM decoder int8, CogViT tower + GLM-4 decoder on the rope-shift rider |
mineru.md |
MinerU2.5-Pro 1.2B (whole-page document parsing → structured markdown, opendatalab) — zoo’s first whole-page auto-structuring doc-OCR (2-stage layout + per-region recognition in one stock Qwen2-VL) | 🤗 MinerU2.5-Pro-CoreAI | vision fp16 + Qwen2 int8lin, torch ladder 706/706 vs HF. Single-pass (768 grid) on iPhone 17 Pro ~4 s/page (chunked prefill). 2-stage (1036² layout + 768 recognition, tables → <table> HTML via OTSL) byte-identical to reference in the ReadDoc Mac app |
llada-8b.md |
LLaDA-8B d3LLM (masked-diffusion LLM, GSAI-ML/d3LLM) — zoo’s first diffusion LLM (parallel canvas denoising, host semi-AR loop) | 🤗 LLaDA-8B-dLLM-CoreAI | int4 blk32 + int8 head 4.9 GB (S=256), layer/logits cos ≈1.0 + temp-0 decode gate vs official; ~38–40 tok/s M4 Max (NFE 11); Mac |
flux2-klein |
text → image + in-context editing; int4, Mac (BFL) | 🤗 FLUX.2-klein-4B-CoreAI | card adopted from the model page |
voxcpm |
tokenizer-free TTS, iPhone + Mac (OpenBMB) — kit voxcpm-0.5b |
🤗 VoxCPM-0.5B-CoreAI | card adopted from the model page |
voxcpm2 |
tokenizer-free TTS, second generation — kit voxcpm2-2b |
🤗 VoxCPM2-CoreAI | card adopted from the model page |
stable-audio-open-small |
text → music/audio, 13× realtime (Stability AI) — kit stable-audio-open-small |
🤗 Stable-Audio-Open-Small-CoreAI | card adopted from the model page |
qwen2.5-omni-audio |
audio understanding (Omni thinker’s audio tower) — kit qwen2.5-omni-3b-audio |
🤗 Qwen2.5-Omni-3B-Audio-CoreAI | card adopted from the model page |
rwkv7-goose |
attention-free RNN, constant-memory decode | 🤗 RWKV7-Goose-1.5B-CoreAI | card adopted from the model page |
qwen3.5-4b |
the Qwen3.5 family’s Mac-class dense size | 🤗 qwen3.5-4B-CoreAI | card adopted from the model page |
adcsr |
single-step ×4 image super-resolution — kit adcsr-x4 |
🤗 AdcSR-CoreAI | card adopted from the model page |
| macOS GPU (M4 Max) | iOS GPU | iOS ANE | |
|---|---|---|---|
| Gemma 4 E2B | ✅ 8/8 · 56.6–59.0 tok/s (int8 kernels) | ✅ 8/8 · 22 tok/s (int4-k-means kernels) | ✅ 8/8 · 6 tok/s (int8 chunks) |
| Qwen3.5 0.8B | ✅ 8/8 · 58.5 (int8 dynamic) | ✅ 27.7 (fp16 static, ctx 2048) / 12.5 (int8 dynamic) | ✅ 14.7 (int8 dynamic); static ✗ this beta (fp16 SSM recurrence) |
macOS ANE is intentionally out of scope (the runtime auto-prefers GPU on Mac for these structures, and the Mac GPU dominates it anyway).
Parity is measured against the Hugging Face eager reference (cosine + top-1 argmax on a fixed prompt): conversion on macOS, then re-verified end-to-end on-device (iPhone 17 Pro, iOS 27 beta). Device numbers are int8, greedy, prompt “What is the capital of France?” / “The capital of France is” → “Paris”.