The biggest model. The smallest hardware.

TV boxes, old tablets, single-board computers and routers sit idle most of the day. smolmaxxing finds the biggest language model each of them can really run, then pushes it further with custom kernels, careful memory use and weights streamed from flash.

On the front page of Hacker News. Read the discussion

Hacker News rank via HackerGit

260K to 35B parameters on hardware you already own.

The TV box and the iPad run 8B and 16B models on about 1 GB of RAM, and the phone runs a 35B one with about 3 GB free. They all keep only part of each model in memory and read the rest from flash as it’s needed.

Device 01

Xiaomi TV Box S (3rd Gen)

4× Cortex-A55 · 1.9 GB RAM, about 1 GB usable · Android 14 · no root

Everyday modelQwen3.5-2B
7.7 tok/s
Biggest modelLing-mini-2.0, 16B
5.1 tok/s
Full results

Device 02

iPad Air (2013)

Apple A7, 2 cores · 1 GB RAM, about 700 MB usable · iOS 12.5.7 · jailbroken

Everyday modelBonsai-1.7B, 1-bit
24–26 tok/s
Biggest modelLing-mini-2.0, 16B
2.6–4.5 tok/s
Full results

Device 03

OnePlus Nord CE 2 (2022)

Dimensity 900, 8 cores · 7.4 GB RAM, about 3 GB free · Android 13 · no root

Everyday modelLing-mini-2.0, 16B
11–15 tok/s
Biggest modelQwen3.6-35B-A3B
4.9–5.7 tok/s
Full results

TV box: the best model of each size, first run to now

Size classBest modelTok/s, first run → nowGainBits/byte
0.8BQwen3.5-0.8B7.5 → 16.8 bench×2.2≈1.00*
2BQwen3.5-2BThe default: best overall0.1 → 7.7 chat×770.909
4BTernary-Bonsai-4B2.2 → 4.3 chat×2.0≈0.965
8B denseBonsai-8B, 1-bit1.21 → 5.2 chat×4.30.974
8B mixture of expertsMoon-Beam-8B-A1BThe fastest 8B1.87 → 7.2 chat×3.90.996
9B denseQwen3.5-9BBest quality; limited by flash0.16 → 0.27 chat×1.70.885
16B mixture of expertsLing-mini-2.0The biggest at a usable speed4.1 → 5.1 chat×1.21.054

iPad Air: what a tablet from 2013 runs

ModelFileTok/sNotes
Bonsai-1.7B, 1-bit237 MiB23.7–25.8The one to use: answers well and writes correct code
Bonsai-4B, 1-bit546 MiB9.4–11.4With a 512-token context
Moon-Beam-8B-A1B2.6 GiB, 474 MB mapped3.5–3.68B mixture of experts, paged from flash
Ling-mini-2.05.2 GiB, 466 MB mapped2.6–4.516B mixture of experts; faster settings cost quality
SmolLM2-360M258 MiB10.9–12.5The lightest good option

Phone: from 16B to a 35B model

ModelSettingsTok/sNotes
Ling-mini-2.0, 16BExact routing11.1Three times the TV box
Ling-mini-2.0, 16BThe TV box’s speed settings15.3Faster, at a cost in quality
Qwen3.6-35B-A3BExact routing4.935B mixture of experts, 12.3 GB file
Qwen3.6-35B-A3BSlightly biased to cached experts5.70.7% worse perplexity

“Chat” is real chat requests through llama-server; “bench” is llama-bench. Bits per byte measures quality, and lower is better. * Measured on the pruned head’s positions, so not exactly comparable. All 163 experiments, failures included, are in the experiment log.

Past RAM, flash sets the speed.

A dense model that streams its weights can never beat the flash. A mixture-of-experts model touches only a few experts per token, so most reads are skipped. That is how an 8B model runs about 27 times faster than a dense 9B on the same box.

On the TV box
flash reads              278 MB/s
dense 9B, streamed       ~1,600 MB per token
  ceiling                278 / 1,600 = 0.17 tok/s
  with MTP               0.27 tok/s
8B mixture of experts    7.2 tok/s
16B mixture of experts   5.1 tok/s

How it gets there.

All of it is a patch on llama.cpp. Every technique, with its measured gain.

Kernels built for the chip.

A 1-bit lookup-table kernel and repacked 2-bit and ternary formats for the Cortex-A55, with versions for the A7, which has no dot-product instructions.

Less RAM per model.

Most of a small model’s vocabulary is rarely used, so those output rows are dropped. On the TV, a headless mode also stops the launcher while a model runs.

Experts paged from flash.

A mixture-of-experts model uses a few experts per token. The popular ones stay in RAM and the rest are read on demand. This is how 8B and 16B models run on 1 GB, and a 35B model on a phone.

Streaming for dense models.

A dense model bigger than RAM keeps part of itself in memory and streams the rest from flash at the flash’s full speed.

Nine model files, ready to download.

The best file of each size class, exactly as each device runs it, is on Hugging Face. They need the patched llama.cpp.

ModelDeviceTok/sHugging Face
Qwen3.5-0.8BTV box16.8Qwen3.5-0.8B-tvbox-GGUF
Qwen3.5-2BThe defaultTV box7.7Qwen3.5-2B-tvbox-GGUF
Ternary-Bonsai-4BTV box4.3Ternary-Bonsai-4B-tvbox-GGUF
Bonsai-8B, 1-bitTV box5.2Bonsai-8B-tvbox-GGUF
Moon-Beam-8B-A1BTV box7.2Moon-Beam-8B-A1B-tvbox-GGUF
Ling-mini-2.0, 16BTV box5.1Ling-mini-2.0-tvbox-GGUF
Moon-Beam-8B-A1BiPad Air3.5–3.6Moon-Beam-8B-A1B-ipad-GGUF
Moon-Beam-8B-A1B, XLWithout the lookup-table repackiPad Airabout 4% slowerMoon-Beam-8B-A1B-ipad-xl-GGUF
Ling-mini-2.0, 16BiPad Air2.6–4.5Ling-mini-2.0-ipad-GGUF

All models on Hugging Face. Model weights keep their own licences. The phone’s 35B file isn’t published; a script in the repo builds it on the phone. On the iPad, the smaller Bonsai models are used exactly as their authors publish them.

What it can’t do yet.

  • Three devices are done.

    The TV box, the iPad Air and one phone are the only devices with results so far. Single-board computers, routers and more phones are coming, and you can submit numbers from your own device.

  • Bigger isn’t automatically better.

    Ling-mini-2.0 is twice Moon-Beam’s size, but it runs slower and scores worse per byte.

  • Dense models past RAM are slow.

    The 9B’s 0.27 tok/s on the TV, and the dense 8B’s 0.08 on the iPad, show what can run, not what you’d want to chat with.

  • It’s an engineering project, not an app.

    The released model files need the patched llama.cpp; the stock build can’t load them. The TV needs network ADB and the iPad needs a jailbreak.

The default model on the TV box
hf download hyperionaidev/Qwen3.5-2B-tvbox-GGUF --local-dir models/
adb push models/w-q4k-h65p8.gguf /data/local/tmp/llm/
tv-llm-ui/start.sh
# then open http://<tv-ip>:8090 on your network

On the TV, everything lives in /data/local/tmp/llm and changes no system settings, so one rm -rf removes it all.

Have hardware that should be doing more?