CrankGPT è un prototipo di assistente vocale basato su modelli di intelligenza artificiale eseguiti interamente in locale e alimentati da una manovella manuale. Il progetto è stato sviluppato da Squeez Labs come dimostrazione di un approccio edge AI nel quale non sono necessari né batteria, né rete elettrica, né connessione a servizi cloud.
Il dispositivo richiede che l’utente produca direttamente l’energia necessaria all’elaborazione. La manovella aziona un generatore USB manuale da 20 watt, progettato normalmente per la ricarica di emergenza di piccoli dispositivi. L’elettricità prodotta non viene inviata direttamente al computer di bordo: passa prima attraverso una scheda a condensatori realizzata appositamente, che stabilizza la tensione e fornisce una breve riserva energetica.
Questa riserva dura circa venti secondi. Se la manovella si ferma più a lungo, il sistema non riceve più abbastanza energia per mantenere attivo il Raspberry Pi e deve essere riavviato. Per iniziare una sessione servono circa trenta secondi di rotazione continua, necessari per completare l’avvio del computer, caricare i modelli e rendere disponibile l’assistente vocale.
L’hardware principale è un Raspberry Pi 5 con 8 GB di RAM e ventola di raffreddamento. La scheda esegue riconoscimento vocale, modello linguistico e sintesi vocale esclusivamente tramite CPU, senza GPU o acceleratori IA dedicati. Per l’audio viene utilizzato un ReSpeaker 2-Mic Pi HAT, una scheda collegata ai pin GPIO del Raspberry Pi che integra un array di microfoni MEMS e le connessioni audio necessarie per costruire un assistente vocale compatto.
Il sistema operativo è una versione alleggerita di DietPi, distribuzione basata su Debian progettata per ridurre i tempi di avvio e i servizi attivi. Squeez Labs ha disabilitato componenti non necessari, come Bluetooth e Wi-Fi, ottenendo un passaggio dall’avvio di Linux allo spazio utente operativo in circa tre secondi. Il tempo complessivo resta più elevato perché il Raspberry Pi 5 richiede comunque una sequenza firmware iniziale di circa dieci-quindici secondi e il caricamento dei modelli vocali aggiunge un ulteriore intervallo simile.
La pipeline vocale è composta da riconoscimento automatico del parlato, rilevamento dell’attività vocale, modello linguistico e sintesi vocale. Il riconoscimento viene affidato a Moonshine, scelto per la velocità su CPU, mentre Silero VAD rileva l’inizio e la fine dell’intervento dell’utente. Moonshine è meno robusto di modelli più grandi in ambienti rumorosi o con accenti marcati, ma il progetto privilegia la latenza ridotta rispetto alla massima accuratezza di trascrizione.
Il modello linguistico viene eseguito tramite llama.cpp, runtime open source pensato per eseguire LLM quantizzati anche su hardware a risorse limitate. Le configurazioni utilizzate includono Liquid AI LFM2.5 da 350 milioni e 1,2 miliardi di parametri, oltre a Gemma 3 da 1 miliardo di parametri. Tutti i modelli vengono caricati in formato quantizzato Q4_K_M, una compressione che riduce l’occupazione di memoria mantenendo una qualità adatta a risposte brevi e conversazionali.
Sul Raspberry Pi 5, LFM2.5 da 350 milioni di parametri raggiunge circa 49 token al secondo nella generazione, mentre LFM2.5 da 1,2 miliardi e Gemma 3 da 1 miliardo si attestano attorno a 15 e 14 token al secondo. La differenza è rilevante per l’interazione vocale: modelli più grandi producono risposte migliori in alcuni compiti, ma una generazione lenta aumenta il tempo che l’utente deve attendere prima di sentire la prima frase.
I test indicano un tempo medio alla prima risposta vocale di circa 0,8 secondi con LFM2.5 da 350 milioni di parametri, 1,5 secondi con la variante da 1,2 miliardi e 2,9 secondi con Gemma 3 da 1 miliardo. Per ridurre ulteriormente la percezione della latenza, il testo generato dal modello viene inviato a Piper frase per frase, senza attendere la conclusione dell’intera risposta.
Piper è il componente utilizzato per la sintesi vocale. È stato scelto perché riesce a produrre una frase di circa venti parole in circa mezzo secondo su Raspberry Pi 5, molto più rapidamente di altri modelli vocali locali testati dal team. L’output del modello linguistico viene quindi trasformato progressivamente in audio, permettendo all’assistente di iniziare a parlare mentre continua a generare il resto della risposta.
La manovella rende visibile anche la differenza tra le fasi di elaborazione. In stato di attesa, il Raspberry Pi consuma circa 4 watt, con una corrente intorno a 0,8 ampere. Durante il riconoscimento vocale il consumo sale a circa 8 watt, mentre durante l’esecuzione simultanea del modello linguistico e della sintesi vocale arriva intorno a 15 watt. Sotto carico massimo sono stati osservati picchi brevi fino a 5 ampere, sufficienti a far intervenire la protezione da sovracorrente del generatore se la riserva dei condensatori non compensa la variazione.
La resistenza percepita sulla manovella cambia quindi in base al carico computazionale. Quando il dispositivo ascolta o resta in attesa, la rotazione è più leggera. Quando il modello genera testo e il sistema sintetizza la risposta vocale, aumentano assorbimento, coppia richiesta e sforzo manuale. In questo modo il consumo energetico dell’inferenza non rimane nascosto nell’infrastruttura remota, ma viene reso fisicamente percepibile dall’utente.
CrankGPT non è pensato per sostituire un assistente cloud o per eseguire modelli di grandi dimensioni. Il progetto mostra piuttosto quali funzioni possono essere gestite da modelli piccoli, quantizzati e specializzati su dispositivi locali a basso consumo. Oltre alle conversazioni vocali, il sistema è stato usato per traduzioni, generazione di piccoli contenuti testuali, codice e immagini di dimensioni ridotte.
Il software dell’assistente vocale è disponibile pubblicamente in un repository GitHub. La base software supporta diversi motori di riconoscimento vocale, modelli linguistici eseguiti tramite llama.cpp e motori di sintesi vocale locali. Il progetto CrankGPT prevede inoltre la pubblicazione delle specifiche hardware, del circuito dei condensatori e dei file di progettazione necessari per replicare il dispositivo.
