Skip to content

v2.24.0

Choose a tag to compare

@zoltanam zoltanam released this 26 Jul 21:34
· 951 commits to master since this release

Voice input

You can now dictate into the AI chat panel instead of typing. Press the
microphone button in the chat input row, or ctrl+t while the input is
focused.

Speech is transcribed entirely on your machine — audio never leaves the
workstation and no transcription service is contacted.

The feature is opt-in and downloads nothing by default. Enable it in
Settings → AI → Voice Input, which walks through the four things it needs
(Python packages, the PortAudio system library, a microphone, and model
weights) and offers the action for whichever is missing.

Two engines to choose from

Whisper — records, then transcribes. Smaller download, very accurate.

pip install 'servonaut[voice]'

Nemotron streaming — decodes as the audio arrives, so words appear in the
input box while you are still speaking, and already-shown words are never
rewritten. Larger download, with a configurable chunk size trading a little
accuracy for how soon words appear.

pip install 'servonaut[voice-streaming]'

Both also need the PortAudio system library (sudo apt install libportaudio2,
brew install portaudio) and a one-time model download, both surfaced in the
settings panel.

Review before sending, by default

The transcript lands in the input box for you to check and send. It is never
sent automatically unless you switch on Send dictation automatically —
off by default, because the assistant can run commands and a misheard word
would otherwise reach it unedited.

Recordings are capped (60 seconds by default), and a dictation that hits the
cap tells you the tail was dropped rather than silently truncating. Dictated
text is redacted in demo mode like every other on-screen surface.

Model disk management

Speech models are several hundred megabytes each. The settings panel lists
every model on disk with its size, marks which one is in use, and offers to
remove the rest. Switching engine or model size prompts directly afterwards,
naming what is now unused and how much removing it would reclaim — nothing is
deleted without confirmation.

Full guide: docs/voice-input.md