Core AI model zoo

LLaDA-8B (diffusion LM) — Core AI

d3LLM/d3LLM_LLaDA (distilled from GSAI-ML/LLaDA-8B-Instruct, MIT) — the zoo’s first diffusion LLM. The reply is not written left-to-right: a masked canvas denoises in place, tokens committing in parallel, lowest-entropy first, semi-AR block by block. One static bidirectional forward (input_ids[1,S] → logits[1,S,V], no KV cache); the denoising loop is host code.

Bundle: 🤗 mlboydaisuke/LLaDA-8B-dLLM-CoreAI — macOS (int4 per-block-32 body + int8 head, 4.9 GB, S=256 canvas). Mac-only today (the canvas graph wants an AOT export before iPhone). Catalog id: llada-8b.

Use it

New to Core AI? Start with CoreAIKit 0.7.3. Follow its requirements and first-run steps for qwen3-0.6b, then open the same release’s ChatDemo. The README records the tested OS/SDK and download size; model and device coverage is stated per example.

▶️ Run it (source) — the DiffuseChat runner (GUI + CLI, one app for every diffusion LM in the catalog):

git clone --branch 0.7.3 --depth 1 https://github.com/john-rocky/coreai-kit
export DEVELOPER_DIR=/Applications/Xcode-27.0.0-RC.app/Contents/Developer
open -a /Applications/Xcode-27.0.0-RC.app coreai-kit/Examples/DiffuseChat/DiffuseChat.xcodeproj
# → Run, then pick "LLaDA-8B (diffusion)" in the model picker

# agents / headless (macOS):
cd coreai-kit/Examples/DiffuseChat
swift run -c release diffuse-cli --model llada-8b --prompt "What is the capital of France?"

Use Xcode build 27A266a from the release’s .xcode-pin; adjust the app path if your installation is named differently.

💻 Build with it — complete; the glue is kit API, copy-paste runs:

import CoreAIKit

let dlm = try await KitDiffusionLM(catalog: "llada-8b")
let reply = try await dlm.reply(to: prompt)
// reply: the denoised answer — pass onStep: to watch the canvas fill in per forward
// (still-masked positions as ░), in parallel, not left-to-right

The take-home is Examples/DiffuseChat/Sources/QuickStart.swift — this exact code as one typed function, no UI; the CLI is an argument shell over it, and the GUI renders the same live canvas. The canvas is fixed (S=256 ≈ 210 generated tokens) and the whole history must fit — no KV cache. reply(messages:) takes role/content turns and drops the oldest first. Pass onStep: nil if you only want the final text.

Integration checklist

Measured (M4 Max, GPU)

Distillation (d3LLM) commits ~8 tokens per forward; the entropy threshold trades step count (NFE) against caution at constant ms/forward: 0.5 → NFE 19, 1.0 → NFE 11 ≈ 38–40 tok/s, 1.5 → NFE 8 ≈ 53 tok/s (≥ ~2.5 degrades). The shipped bundle’s metadata carries the validated defaults; KitDiffusionLM reads them.

Parity

Canvas limits (honest)

S=256 fits ≈ 210 generated tokens and the whole history must fit in the canvas (no KV cache): KitDiffusionLM drops oldest turns first, so short multi-turn works but long memory does not. A delayed-KV-cache decode is the known next lever.

Run

The kit’s DiffuseChat runner (GUI + diffuse-cli, live ░-canvas view), or the zoo’s CoreAIChatMac app (pick LLaDA-8B d3LLM, same denoising view).