AiMELO

Taalmodellen op een goedkoop touchscreen

Een 28,9 miljoen parameter LLM die verhaaltjes schrijft en een pratende espresso-barista — volledig lokaal op een ESP32-S3, geen internet, geen cloud. Flash hem hieronder zelf via je browser.

ESP32-S3 · 8 MB PSRAM ~7,5 tokens/sec 100% offline GitHub

Twee demo's, één board

📖 TinyStories

Een 28,9M-param model (Per-Layer Embeddings, techniek uit Gemma 3n) schrijft kinderverhaaltjes.

  • Kies een thema op het scherm: robot, prinses, draak, puppy…
  • Verhaal streamt live, stopt op zijn eigen einde
  • Cracktro-modus: het verhaal wordt herafgespeeld als Amiga-intro met chiptune

☕ Barista

Vraag-antwoordmodel dat alléén over espresso kan praten: 854 woorden output-vocabulaire, hallucineren onmogelijk.

  • On-screen keyboard, vraag in het Engels
  • Spreekt zijn antwoorden: elk woord staat als sample op de SD-kaart
  • Volumeknoppen op het scherm

Live demo (in je browser)

Pixel-getrouwe nabootsing van het echte 480×320-scherm. De verhalen en antwoorden zijn letterlijke transcripten van het echte board (vastgelegd via de seriële poort).

Flash je eigen board

Heb je een Guition JC3248W535C (3.5" ESP32-S3 touchscreen, ~€30 op AliExpress)? Flash de demo direct vanuit je browser — geen toolchain nodig. Werkt in Chrome of Edge (WebSerial).

📖 TinyStories

  1. Board via USB-C aan je computer
  2. Klik Install, kies de seriële poort
  3. ±4 min (model is 14,9 MB) — klaar

☕ Barista

  1. Board via USB-C aan je computer
  2. Klik Install, kies de seriële poort
  3. ±2 min — klaar
⚠️ Flashen vervangt alles op het board (het board bevat één model tegelijk; wisselen = opnieuw flashen). 🔊 Voor geluid (sprekende barista, chiptune, kliks) horen er samples op de SD-kaart: zie tools/aimelo in de repo. Zonder SD-kaart werkt alles gewoon, maar stil. Speaker: 8Ω/2W aan de JST 1.25-connector (let op: de andere JST 1.25 is de accu-aansluiting!).

Hoe past een LLM op een microcontroller?

Truc 1Per-Layer Embeddings (Gemma 3n-techniek): 25M van de 28,9M parameters staan in flash en worden per token maar voor één rij (~450 bytes) aangeraakt.
Truc 2Geheugen-tiers naar leesfrequentie: flash (1× per token) → PSRAM (1× per positie) → SRAM (vaak per token). 4-bit gewichten, int8-activaties.
Truc 3Barista's asymmetrische vocabulaire: 8057 tokens lezen, 854 woorden schrijven — en die 854 passen als audio-samples op een SD-kaart, dus hij kan práten.
BoardGuition JC3248W535C: ESP32-S3 (2× 240 MHz), 8 MB PSRAM, 16 MB flash, 3.5" 480×320 IPS met capacitieve touch, I2S-versterker, SD-slot.
Prestaties~7,5 tokens/sec end-to-end inclusief scherm-updates; 94 ms/token rekenwerk.