Dissolve Labs

The Voice Demo That Sells Itself

Speech-to-speech models feel magical in a demo, but they lack caching, so cost compounds with conversation length in a way cascaded pipelines do not.

5 min read
A compounding spiral contrasted with a thin three-stage voice processing pipeline.

The first time you plug a speech-to-speech model into a mic, it feels like a magic trick. You talk, it talks back, no lag, no robotic cadence, it even laughs at the right moment. Everyone leans in. Someone says "ship it." OpenAI's Realtime API, Google's Gemini Live, Alibaba's Qwen-Omni-Realtime, built for exactly this moment, and they earn it. One model, one WebSocket, audio in, audio out. No ASR-to-LLM-to-TTS relay race, no glue code.

Then it goes to production, and a few weeks in, two things show up that nobody saw in the demo.

The first is the bill. S2S models don't have a caching layer the way text-based LLM calls do: there's no cheap re-send of a system prompt or history, because the model consumes a continuous stream of audio tokens for as long as the session is open, not just when someone's talking. Every extra turn drags the whole conversation's audio context along with it, so a five-minute call costs meaningfully more than a one-minute call, in a way that's hard to predict or cap ahead of time. A cascaded pipeline (separate ASR, LLM, TTS) can cache the repeated parts (system prompt, tool schema, earlier turns) the way any text-based LLM app does, so cost per turn flattens as the conversation runs longer instead of climbing with it.

Relative cost as a conversation gets longer

Illustrative, exact per-vendor cost curves aren't publicly disclosed. Scrub the slider.

Line chart, turn count 1 to 30. An S2S no-caching architecture rises steeply to an index of about 51 at turn 30. A cached pipeline rises then flattens, reaching about 7.6 at turn 30.01020304050Turn 1, S2S no caching: index 1.0Turn 5, S2S no caching: index 6.0Turn 10, S2S no caching: index 13.0Turn 15, S2S no caching: index 21.0Turn 20, S2S no caching: index 30.0Turn 25, S2S no caching: index 40.0Turn 30, S2S no caching: index 51.0Turn 1, cached pipeline: index 1.0Turn 5, cached pipeline: index 3.0Turn 10, cached pipeline: index 4.5Turn 15, cached pipeline: index 5.5Turn 20, cached pipeline: index 6.3Turn 25, cached pipeline: index 7.0Turn 30, cached pipeline: index 7.61102030Conversation length (turns)
S2S, no cachingCached pipeline

Turn 1, S2S no caching: index 1.0

The second thing is worse: something breaks, and you can't tell why. In a pipeline, every stage leaves a paper trail: a transcript, a visible LLM response, a TTS log. When a call goes sideways, you read the trail and know in ten seconds whether it was a mishearing, a bad response, or a mangled word. With S2S, audio goes in, audio comes out, and the reasoning in between is invisible. Debugging means listening to a recording and guessing. Fine for a demo call; a real liability on a support line handling anything regulated, or any dispute over what was said.

Add to that: S2S handles interruptions and turn-taking inside its own black box (sometimes gracefully, sometimes leaking stale audio mid-response), tool-calling is less reliable when the reasoning never touches text, and switching vendors later means re-architecting the whole voice layer, no swapping just the TTS component like you could in a pipeline. It's one vendor, all the way down.

None of this makes S2S a bad choice. S2S is still the right call for some products, the point is knowing the cost curve before you commit, not avoiding S2S outright. It makes the choice between S2S and a pipeline a lot more consequential than "which one felt better in the demo," and a lot harder to reverse once you've already built on top of it. The variables that actually decide it (real call volume, compliance exposure, how much tool-calling the agent needs to do mid-conversation, how fast you'll need to swap a vendor later) rarely line up neatly, and getting the call wrong doesn't show up until you're deep into a rebuild, not a patch.

Picking between S2S and a pipeline isn't a matter of taste, it's a matter of matching the architecture to what the product actually has to survive: real users, real call volume, real bills. Dissolve Labs builds with both, and we make that call by modeling your actual use case against both architectures before a line of code gets written, not by defaulting to whichever one is trending in this month's demo reel.