Core AI model zoo

Models

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).

Reproduce a bundle

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.

Check a published bundle

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.

Catalog

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

The matrix (every meaningful platform × compute-unit cell, greedy, top-1 vs HF)

  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”.