Models
The three Ab tiers — Pebble, Cobble and Boulder — what powers each, and what your browser needs to run them.
Ab ships three model tiers. They differ only in size: all three are Qwen3.5 instruct models, quantized the same way, running through the same in-browser stack. A bigger tier reasons better and writes better; it also downloads slower and needs more memory. The tier name is the product surface — the underlying model id is an implementation detail we can change without renaming anything.
The tiers
| Tier | Model | Download | Best for |
|---|---|---|---|
| Pebble 2.5 | Qwen3.5-0.8B-q4f16_1-MLC | ~1.6 GB | Quick, runs almost anywhere |
| Cobble 2.5 | Qwen3.5-4B-q4f16_1-MLC | ~3.8 GB | Balanced everyday pick |
| Boulder 2.5 | Qwen3.5-9B-q4f16_1-MLC | ~6.3 GB | Most capable, needs a fast machine |
All three are q4f16 quantized: weights compressed to 4 bits with 16-bit floating-point activations. That is what makes a 9-billion-parameter model fit in a browser tab at all.
The sizes above are runtime footprints — weights plus the KV cache the model needs while it is thinking — not just the download. That is the number worth watching, because it decides whether your device can hold the model, not merely fetch it.
How the model runs
Inference happens on your GPU, in your browser, through WebLLM. There is no inference server.
- Pebble starts downloading the moment you sign in. A thin strip along the bottom of the screen fills as it arrives — even while you are still typing your PIN — so by the time you reach chat the model is usually ready. If you are still faster than the download, the first reply shows the progress instead. Cobble and Boulder download only when you pick them.
- The model thinks before it answers. Its reasoning streams first, folded away under a "Thinking" row above the reply; open it if you are curious, and it never goes back to the model as history.
- It runs in a Web Worker, so generation never blocks the interface.
- Weights are downloaded once and cached by the browser under this origin. Later sessions start almost immediately. You can see the cache in DevTools under Application → Cache Storage, in the
webllm/model,webllm/wasmandwebllm/configbuckets, and clearing site data removes it.
The one and only network request in the whole flow is that initial weight download from the MLC CDN. Your prompts, and anything the assistant reads about your holdings, never leave the tab.
How a tier gets chosen
Pebble is the default, everywhere. It is the only tier safe to assume sight-unseen, and because it is loading from the moment you sign in, the chat's default has to be the tier that is already warm — auto-switching to a bigger one would throw that download away. Cobble and Boulder are always a deliberate choice from the model picker in the composer.
The device-capability heuristic in apps/web/lib/chat/capability.ts (navigator.deviceMemory, Chromium-only and capped at 8 GB, with the WebGPU adapter's maxBufferSize as a fallback) still exists for the Wealth dock, but it no longer changes which tier Ab loads for you.
Browser support
Ab needs WebGPU, which in practice means:
- Chrome or Edge 113+
- Safari 18+
- A desktop machine
Where WebGPU is missing, the chat surface says so plainly instead of failing halfway through a download.
Open models
The whole inference stack is deliberately unencumbered. WebLLM is Apache-2.0, and the tiers are all Qwen3.5, also Apache-2.0. Model weights carry their own licenses independent of the runtime, which is exactly why the ladder is all-Qwen rather than a mix — it keeps the licensing story simple and commercially clean.
Because every tier is the same family, tokenizer and prompting behaviour stay identical as you move between them. Switching tiers changes how well Ab thinks, not how it behaves.
