Offline LLM assistant · proof of concept

It listens.It answers.Wi-Fi off.

A speech recogniser, a language model and a speech synthesiser taking turns inside 8 MB of PSRAM on a board that costs less than a takeaway. Ask out loud, or type it. No cloud, no account, no microphone leaving the room. It is a proof of concept, and this page is the write-up as much as the demo — what it cost, what broke, and the numbers we actually measured.

5.4–5.9 tok/stokens/sec, on the chip
14–17 sa whole spoken turn
19.7Mparameters, answering offline
0bytes of your voice sent anywhere
Offline by construction

It runs with
the Wi-Fi off.

Not "private cloud". Not "we don't store it". There is no network path for your voice to take, because the recogniser, the model and the voice all live on the SD card and run on the chip. Pull the aerial off and nothing about the conversation changes.

Wi-Fi is used for one thing: asking an NTP server what time it is, once an hour, so the clock is right. That is the entire list.

The only way to prove audio never leaves a device is for there to be nowhere for it to go.

Honesty, on screen

Cyan means
no AI touched this.

The time, the date, its own name, a kitchen timer — those are twenty lines of C, not a language model, and the screen says so with a cyan diamond. Everything else came from a model small enough to fit here, which means it is sometimes wrong and says so in its own voice.

An assistant that tells you which answers it made up is worth more than one that sounds confident about both kinds.

no AI  — a label, not a disclaimer buried in a settings page.

Two ways in

Ask out loud.
Or type it.

Press BOOT, say your question, and stop talking — 720 ms of silence is how it knows you have finished. Or tap the question in on the on-screen T9 keypad and skip the microphone entirely.

The same model answers either way, and the typed path is also the honest way to see what the model can do without the recogniser's mistakes in the middle of it.

A speech recogniser that mishears "red robot" as "re robot" is a different failure from a model that does not know the answer. Typing tells the two apart.

The real constraint

Internal RAM,
not compute.

The chip is fast enough. What it does not have is fast memory: about 264 KB of internal SRAM that the recogniser, the model, the radio and the operating system all want at once. So the pipeline runs in phases, and each phase hands the whole arena back before the next one starts.

Twelve consecutive conversations, measured: zero drift. The same 50,412 bytes free after turn twelve as after turn one.

Where each tensor lives decides what fits. Not how fast the chip is.

Seven models deep

The score fell
and that was
the improvement.

Version 4 scored 64.2% and version 7 scored 60.9%, and v7 is the better model by a distance — it answers a question space three times larger, and it is allowed to say I don't know. The exam got harder and fairer at the same time as the model got better, which is what makes a headline benchmark number almost meaningless on its own.

The whole arc, including the two experiments that were predicted to help and made it worse, is in the build log.

A benchmark that only ever goes up is measuring the wrong thing.

Swap the brain

Choose a model.
Or train your own.

The model is a file on the SD card, not something baked into the firmware. Drop in a different GGUF and point the device at it — the ones already measured on this board are in Results, with the arithmetic that tells you whether a candidate will fit before you download it.

Or train one. The whole pipeline is written up: generate the question set, fine-tune on a Mac overnight, convert to the device format, copy it to the card.

The interesting thing about a model that fits on a card is that you can replace it.