Documentation menu

Build an agent

Voice engines

How an agent listens, thinks and speaks is chosen per agent, not per account — three pipelines, each with its own tradeoffs and its own required keys.

Classic

Deepgram for speech-to-text, any model on OpenRouter for the language model, ElevenLabs for the voice — three separate providers Voicelo orchestrates as one pipeline. Tools, appointment booking, transfer and hangup all ride as text tags in the model’s reply (e.g. [[END_CALL]]), since a plain chat model has no native function-calling channel of its own.

Needs
Deepgram key
Speech-to-text.
OpenRouter key
The language model — pick any model in the live catalogue.
ElevenLabs key
The voice.

Deepgram Voice Agent

One realtime connection to Deepgram’s own Voice Agent API does speech-to-text, the language model and text-to-speech together, with server-side turn-taking — generally the lowest latency of the three. Tools use real function calling rather than text tags, which the model follows more reliably than a written instruction to emit a tag.

Managed vs. bring-your-own model

llmProvider: "managed" runs the model Deepgram hosts alongside the agent — lowest latency, fixed catalogue. llmProvider: "openrouter" uses any OpenRouter model instead, at the cost of one extra network hop.

Needs
Deepgram key
Speech, the model (if managed), and the voice.
OpenRouter key
Only if llmProvider is set to openrouter.

Sarvam

Saaras for speech-to-text, the Sarvam-105B chat model, and Bulbul for text-to-speech — a single, self-contained pipeline built for Indic languages. Like classic, tools and commands ride as text tags rather than native function calling.

Needs
Sarvam key
The whole pipeline — nothing else to add.

Which one

Deepgram Voice Agent for the lowest latency and the most reliable tool-calling, if the managed catalogue or an OpenRouter model both work for you. Classic if you want a specific OpenRouter model with ElevenLabs’ voice selection. Sarvam if the call is happening in Hindi or another Indic language.

Note
Switching an existing agent’s engine takes effect on its next call — nothing else about the agent (prompt, tools, knowledge base) needs to change.