EdgeMind
Un asistente de voz para Android que se ejecuta por completo en el dispositivo. Gemma 4 E2B con audio nativo se encarga del razonamiento; las herramientas se invocan por reflexión. Tu voz nunca sale del teléfono.
EdgeMind es un asistente de voz para Android que se ejecuta por completo en el dispositivo: sin nube, sin cuenta, sin telemetría. Mantienes pulsado un botón, hablas, y un modelo local te responde o invoca una herramienta. Tu voz nunca sale del teléfono.
Qué hace
- Gemma 4 E2B con audio nativo. Los bytes del micro entran directamente al modelo, sin etapa separada de speech-to-text.
- Llamadas a herramientas por reflexión. Temporizador, calendario (lectura y escritura), contactos, transporte de música, linterna, volumen, abrir apps y búsqueda web, todo en el dispositivo contra las APIs de Android.
- Modelo descargado. El archivo
.litertlmde ~2,5-3 GB se descarga una vez de HuggingFace, no se empaqueta en el APK. - Voz de salida con el
TextToSpeechintegrado de Android; entrada por push-to-talk.
Qué fue difícil
- MediaPipe
tasks-genaino cargaba el adaptador de audio de Gemma 4: el modelo lo fija a CPU, mientras que ese runtime cablea el executor de audio a GPU. Bajar a LiteRT-LM, que expone backends por modalidad, es el único camino que funciona. - LiteRT-LM decodifica el audio con miniaudio, que lee el formato de una cabecera. Prefijar una cabecera RIFF/WAVE de 44 bytes al PCM en bruto es lo que convierte “miniaudio error -10” en entrada de audio funcional.
- Una rama anterior con Phi-3 es donde ocurrió la mayor parte del aprendizaje: un tokenizer SentencePiece escrito a mano y un KV cache que llevó la generación de unos 800 ms/token a 200 ms.
Estado
En pausa. Las partes difíciles funcionan de extremo a extremo: el modelo carga, el audio entra, las herramientas se invocan y las respuestas salen. Lo que queda es pulido, sobre todo registrarse como asistente por defecto del dispositivo y un modo manos libres con VAD on-device.
Código: github.com/IgnacioLD/edgemind.
Escrito con asistencia de IA. Pienso reescribirlo a mano.