Original Reddit post

I maintain the Soniqo speech stack, and I built this prototype to test whether a useful mobile voice agent really needs a large general-purpose model. The complete voice-to-action pipeline runs on a Galaxy S23 Ultra: Silero VAD → Parakeet-EOU 120M STT → FunctionGemma 270M → Android action → Pocket TTS After the initial model download, speech recognition, action selection and speech synthesis all run locally. No recorded audio or transcript is sent to a server. The complete pipeline uses approximately 1.2 GB of memory on my S23 Ultra. It currently supports: Looking up a contact or phone number Opening the Android dialer for a contact Dialling a number spoken by the user Listing or searching music stored on the device Playing and stopping local music Setting the media volume Explaining which actions are currently available Calls are not placed silently—the agent opens Android’s dialer so the user remains in control. FunctionGemma is paired with a 9.5 MB adapter trained on a compact command-to-action format. It produces one structured tool call rather than an open-ended conversational response. One useful design choice was filtering the available tools according to the current device state. For example, stop_music is only presented to the model while music is playing. This prevents some invalid actions before generation instead of asking the model to reason around them. The model is also not trusted to invent outcomes. Contact and music searches are checked against real device data. The spoken confirmation comes from the result returned by Android rather than what the model predicted would happen. This is still a deliberately narrow prototype, not a replacement for Google Assistant. The experiment is about whether small local models can provide fast, inspectable device control without routing private speech through a cloud service. Demo: https://www.youtube.com/watch?v=7L7_Uvvxtv0 Source and signed APK: https://github.com/soniqo/speech-android I’m curious where others would draw the boundary: keep extending a constrained action router, or introduce a larger planner once commands require multiple steps? submitted by /u/ivan_digital

Originally posted by u/ivan_digital on r/ArtificialInteligence