Skip to content

Providers overview

Every provider Syrinx ships is a thin adapter over one of three shared streaming-lifecycle modules. The module owns the socket, reconnect, the interim/final funnel, and usage billing; the provider implements only its wire protocol. That’s what makes swapping a vendor a one-line change instead of a rewrite.

ModuleOwnsA provider implements
@kuralle-syrinx/stt-coreSocket, reconnect, the interim/final transcript funnel, usage.recorded audio-second billing, pre-handshake audio buffering, reconfigure/resetAn SttWireProtocol: encodeFinalize, decode, and optional encodeAudio / onOpen / encodeReconfigure
@kuralle-syrinx/tts-coreThe multi-context streaming lifecycle, attribution, usage.recorded character billingA WireProtocol: attribution plus encode text/finish/cancel and decode
@kuralle-syrinx/realtimeThe RealtimeBridge plugin, capability negotiation, resumeA RealtimeAdapter: sendAudio / sendText / requestResponse / cancelResponse, tools, events
  • STT providers — Deepgram (Nova and Flux), ElevenLabs, Google, Grok.
  • TTS providers — Cartesia, ElevenLabs, Deepgram Aura, Gemini, Grok, and any OpenAI-compatible endpoint.
  • Realtime providers — OpenAI Realtime, Gemini Live, and Grok’s realtime API.

All of them run on Node and on the Cloudflare Workers edge — every socket connection is injectable, so you swap createNodeWsSocket for createWorkersSocket and nothing else changes.

Some STT providers let you bias recognition — keyterms, end-of-turn thresholds, language — without tearing down the session. See STT reconfigure.

Every STT, TTS, and LLM provider emits a usage.recorded packet (STT audio-seconds, TTS characters, LLM tokens). Turn that into a running dollar cost, or bound it with a spend cap — see Usage & pricing.