BMO
Un asistente de IA físico inspirado en BMO de Hora de Aventura: una cara en pantalla táctil, voz, un LLM local, control de la casa y una carcasa impresa en 3D. Construido desde cero para sacar la IA del navegador y llevarla a una habitación.
Háblale a su core
El core de BMO publica un estado y la cara decide cómo dibujarlo. Es el mismo modelo de expresiones que usa la UI real.
Publica un estado en el core de BMO
bmo/state"IDLE"
Dos máquinas
BMO Core
Raspberry Pi 5, siempre encendida
Core en Python, máquina de estados, UI y broker MQTT. Home Assistant viene después.
Servidor de IA
PC con RTX 4060, bajo demanda
Ollama, modelos más pesados y speech-to-text en la GPU.
Decisiones que lo definieron
- El estado está separado de su representación.
- El core publica "pensando"; la UI decide cómo se ve pensar.
- El LLM propone, las herramientas ejecutan.
- El modelo devuelve una intención estructurada. Nunca toca un dispositivo directamente.
- Que no haya GPU es un estado, no un fallo.
- Si el servidor de IA está apagado, BMO igual arranca, muestra su cara y lo dice.
- El audio nunca toca el disco.
- Vive en memoria durante un turno, viaja con TLS dentro de la red local y luego se descarta.
En qué va
- Ciclo de voz
- Activación → Whisper → core → Piper, con un efecto DSP de "voz de BMO"
- Mensajería
- MQTT con estado retenido, ACLs y TLS
- Cara
- Dibujada por código a 60 fps desde un JSON de expresiones
- Decisiones
- Cada una escrita como ADR, incluidas las rechazadas
El primer ciclo de voz midió entre 3,7 y 6,3 s de punta a punta en CPU. Lo siguiente es el camino por GPU.