Skip to content

Latest commit

 

History

History
52 lines (44 loc) · 1.95 KB

File metadata and controls

52 lines (44 loc) · 1.95 KB

Speech provider registry

The registry is providers.toml under the platform user configuration directory printed by limb config paths. On first use, limb writes these built-in entries:

default_stt = "listenai"
default_tts = "listenai"

[providers.listenai]
kind = "both"
driver = "listenai"
stt_endpoint = "wss://api.listenai.com/v2/asr"
tts_endpoint = "wss://api.listenai.com/v1/tts/stream"
credential_env = "LISTENAI_API_KEY"
rate = 16000
channels = 1
sample_format = "s16le"
voice = "x5_lingxiaoxuan_flow"

[providers.whisper-local]
kind = "stt"
driver = "whisper-local"
command = "whisper-cli"
credential_env = "WHISPER_MODEL"
rate = 16000
channels = 1
sample_format = "s16le"

The environment variable named by credential_env takes priority over the user-only credentials.toml file. Credentials are never accepted as command line arguments. limb config set-credential NAME reads a value from the terminal, while limb config remove-credential NAME removes it.

driver = "listenai" speaks the documented ListenAI WebSocket protocol and can point at another compatible endpoint without recompiling. A provider's kind is stt, tts, or both. Audio requirements are explicit and are validated before any PCM is forwarded. The built-in TTS path requests raw PCM from the v2 stream endpoint and fetches only its returned secure_url. Existing official stream_data entries are accepted as a legacy alias and migrated in memory; custom compatible endpoints are left unchanged.

whisper-local invokes whisper-cli after the gated capture ends. Its model path is read from WHISPER_MODEL or the stored whisper-local credential. Install whisper.cpp's CLI and a model to use it. It intentionally cannot emit partial results because its command interface is batch-oriented.

To leave the first-party cloud path, set default_stt = "whisper-local" or add another compatible provider and select it with limb listen --stt NAME. No firmware change is involved.