Voice pipelines: what to pick and what it costs

Three options on one dropdown, the model family each carries, and the ladder to climb when the agent mishandles a phone menu.

Updated

/agents → your agent → Voice Pipeline. Four controls: Pipeline, Provider, Model, and the voice.

Most people should leave this alone until something specific is wrong. This page is for when something specific is wrong. Everything here can also be changed by asking Octo, which is usually the safer route — see the last constraint below for why.

The three pipelines

All three handle both a human and an interactive phone menu end to end. They differ in cost, inspectability and how natural they sound.

PipelineWhat it isWhen it is the right one
Standard (STT + LLM + TTS)Speech-to-text → language model → text-to-speechThe default. Cheapest and easiest to inspect, because each stage leaves a written trace. Best for high call volumes.
OpenAI RealtimeOne model, native audioSensible if your organisation is already standardised on OpenAI.
Gemini LiveOne model, native audioThe cleanest realtime architecture, and the most natural-sounding of the three.

The split that matters is standard versus realtime, not which vendor. A standard pipeline transcribes, thinks, then speaks — three steps you can each swap. A realtime pipeline hears and answers as one operation, which is why it interrupts and recovers more like a person does.

Models

Each pipeline has its own model family, and a model from the wrong family is rejected rather than quietly substituted.

On standard, a small fast model is the recommended default — cheap, and it handles ordinary reception well. Larger models exist and are worth reaching for when the agent is mishearing, not by default.

On realtime pipelines, take the current recommended model. Older ones are still accepted for compatibility, and at least one of them handles phone menus noticeably worse. If you are asking for a realtime pipeline by name, ask for the current model with it.

Four things the choice changes underneath

These produce a confusing result rather than an error message.

Switching pipelines does not carry the voice across. Realtime pipelines have their own built-in voices — Alloy, Ash, Coral, Marin, Cedar on OpenAI; a different set again on Gemini. Standard uses your TTS provider’s catalogue, with “Preview voices at elevenlabs.io.” Switch, and you are picking again from a list that does not contain what you had.

A voice belongs to whatever produces the audio. A voice from the wrong provider is rejected outright. Same fact from the other direction, and why the two questions always arrive together.

STT and TTS choices only exist on standard. The Provider control is meaningful there and mostly absent on realtime — there is no separate transcription step to configure.

Not every accepted provider is wired up. The sharp edge. Some combinations validate, save cleanly, and then fail when the call is actually placed — the worst possible time to find out. Octo steers you away from those, which is the main reason to change the voice by asking rather than by editing configuration directly.

When it mishandles a phone menu

If the agent presses wrong keys, or talks over a human who has just picked up, work the ladder rather than guessing:

  1. A larger model in the same pipeline. Often the entire fix, and the cheapest thing to try.
  2. If standard still struggles, move to Gemini Live. Native audio understanding handles a continuous menu better than transcribing it and reading the transcript does — the transcription step is where the timing information you need gets thrown away.
  3. Know what you are paying for it. Realtime pipelines bill per second of audio in and out, so they cost more than standard on long calls. Worth it for a menu you must reliably get through. Not worth it as a default for calls that are mostly a person talking.

For outbound campaigns there is a matching control in the composer — Phone Menu (IVR), sitting beside Recipients, because whether there is a menu to get through is a fact about who you are calling.

A custom or cloned voice

A voice ID that is not in the standard list is fine on the standard pipeline, as long as it belongs to the text-to-speech provider you have configured. The provider rule above still applies — it is the one rule with no exceptions.

Which to start on

Start wherever the agent was created and change it only for a reason you can name. “It sounds slightly better” is not one; “it talks over callers” or “it mishears our street name” is.

Test the change on the phone

Start mic test on /agents is the fast loop and will tell you how the voice sounds. It will not tell you whether the pipeline works over the phone path, because “WebRTC works for browser testing. Phone routes need a number.”

After any pipeline change, ring the number once from an actual phone. This is the step that catches the provider that validated and then would not dial.