Skip to Content
cuelo.

07Reference

Providers

Every speech, LLM and turn-taking provider, with its install extra and credential.

Each provider is a Python class behind a slot interface. config.cuelo names it, and the registry (x-cuelo-providers in the schema) maps the name to the class, the pip extra it needs and the environment variable holding its key.

Install the extras you use: pip install "cuelo[smallest,anthropic,maai]". The CLI install includes the common ones.

Speech-to-text

All STT providers are streaming. They support language (BCP-47) and vocab (keyword boosting) and accept model, base_url and api_key_env.

FieldTypeDefaultDescription
provider (required)smallest | elevenlabs | deepgram | cartesia | inworld | assemblyai | soniox——
modelstring—Provider model ID. Omit for the provider default.
languagestring—BCP-47 tag, e.g. en or en-US. Omit to auto-detect.
vocabstring[]—Terms to recognize more reliably: names, products, jargon.
api_key_envenvName——
base_urlstring——

LLM

NameClassExtraCredential
anthropiccuelo.llms.anthropic.AnthropicLLMcuelo[anthropic]ANTHROPIC_API_KEY
openaicuelo.llms.openai_native.OpenAINativeLLMcuelo[openai]OPENAI_API_KEY
openroutercuelo.llms.openrouter.OpenRouterLLMcuelo[openai]OPENROUTER_API_KEY
cerebrascuelo.llms.cerebras.CerebrasLLMcuelo[openai]CEREBRAS_API_KEY
openai-compatiblecuelo.llms.openai_spec.OpenAISpecLLMcuelo[openai]OPENAI_API_KEY

openrouter and cerebras are thin subclasses of the OpenAI-compatible client with their own base URL and key. openai uses OpenAI's native API. Use openai-compatible with base_url for anything else that speaks Chat Completions.

Text-to-speech

Names ending in -streaming take text as the LLM writes it and stream audio back over one connection, which is the lowest latency. The others synthesize one sentence at a time over HTTP, which is simpler and often just as fast for short replies. elevenlabs-dialogue uses ElevenLabs' multi-speaker dialogue model.

FieldTypeDefaultDescription
provider (required)smallest | elevenlabs | elevenlabs-streaming | elevenlabs-dialogue | cartesia | cartesia-streaming | deepgram | deepgram-streaming | inworld | inworld-streaming——
voice (required)string—A provider voice ID, or a path to a voice profile (voices/*.yaml).
modelstring——
speednumber——
languagestring——
api_key_envenvName——
base_urlstring——
Providervoicespeedlanguagepronunciations
smallest✓✓✓✓
elevenlabs (all)✓✓ (not dialogue)✓✓
cartesia (all)✓✓✓✓
deepgram (all)✓✓—✓
inworld (all)✓✓✓✓

Setting a field a provider doesn't support raises at startup, so mistakes don't fail silently.

Turn-taking controllers

These have no credentials. They run locally on model weights from the models catalog.

NameClassExtraCredential
vadcuelo.controllers.vad_turn.VADControllercuelo[silero]—
backchannelcuelo.controllers.backchannel.VADBackchannelControllercuelo[silero]—
smart-turncuelo.controllers.smart_turn.SmartTurnControllercuelo[silero]—
turn-1-minicuelo.controllers.turn1_mini.Turn1MiniControllercuelo[silero]—
backchannel-detectorcuelo.controllers.backchannel_detector.BackchannelDetectorControllercuelo[silero]—
maaicuelo.controllers.maai.MaaiTurnControllercuelo[maai]—
maai-backchannelcuelo.controllers.maai.MaaiBackchannelControllercuelo[maai]—
maai-interruptcuelo.controllers.maai.MaaiInterruptControllercuelo[maai]—
backchannel-firstcuelo.controllers.compose.BackchannelFirstcuelo[silero]—

Verified status

Every provider has tests against a local fake server that follows its documented protocol. These are also verified against the live APIs: Smallest (STT and TTS), Cerebras and Anthropic. The rest are implemented to their docs but not yet live-tested. Reports and fixes are welcome.

Missing a provider? Add one.

On this page