On this page
- What "base load and burst" means for a voice agent
- Why STT and TTS should cover the peak on their own GPUs
- How the LLM split works at 10 million minutes a month
- Residency in India costs more on the LLM tier
- Failover is the other half of a hybrid
- How Sonex fails over: a held standby and a one-second STT budget
- What to settle before you build a hybrid
- Sources
What "base load and burst" means for a voice agent
The base load is the traffic you can count on at almost every hour of the week. The burst is everything above it: the mid-morning peak, a campaign, a seasonal spike. A hybrid design owns GPUs for the first and rents capacity by the minute, from an API, for the second, so that no owned GPU sits idle through the night.
Whether a given GPU belongs in the owned fleet depends on its critical utilisation, the share of time it must be busy to cost less than the API on hardware alone. It equals the GPU's hourly price ÷ (60 × concurrent streams per GPU × the API's price per call-minute). A GPU that will be busier than that is worth owning; below it, that traffic is cheaper on the API. Critical utilisation for STT, TTS and LLMs works out the values: about 5 to 6% for speech to text (STT) and text to speech (TTS), and about 48% for an LLM against a cached mini-class API.
Sonex Labs sells hosted speech and LLM APIs, including the Vyas LLM API, and runs its own speech models on GPUs with a standby, so it sits on both sides of this design. The cost figures below come from public price pages and an hour-by-hour model, labelled as such.
Why STT and TTS should cover the peak on their own GPUs
For speech, even the GPU that only works during the busiest hour of the week pays for itself. An STT GPU on an AWS L4 needs to be busy about 5.8% of the time to beat Deepgram, and a TTS GPU on an L40S about 5.4% to beat ElevenLabs Flash. A business-hours call curve keeps even its last GPU busier than that.
So when the cheapest fleet was modelled hour by hour, on a synthetic weekday profile at 10 million call-minutes a month, STT and TTS came out covering about 100% of the peak, with under 1% of minutes spilled to the API. For these two components, burst capacity is insurance against outages and deploys, not a way to save money.
The exception is a model that carries far fewer streams. NVIDIA's L4 tables list a multilingual code-switching STT model at a maximum of 3 streams, against 49 to 83 for its English models. At 3 streams, critical utilisation becomes 0.805 ÷ (60 × 3 × 0.0048), about 93%, so a GPU would have to be busy almost all the time to beat the API. For code-switched STT, keeping the traffic on the API is usually the cheaper choice, which is one more reason to load-test on real Hinglish or Tamil-English calls before deciding.
How the LLM split works at 10 million minutes a month
The LLM is where bursting pays, because its threshold is high. Take a Lambda H100 PCIe at $3.29 an hour serving about 50 voice sessions. Against gpt-4.1-mini with cached prompts, at about $0.0023 a call-minute, it needs to be busy about 48% of the time. Against nano-class models at about $0.0013 it needs 84%, which almost no call curve reaches.
So only GPUs that stay busy more than half the week are worth owning. In the same hour-by-hour model, that was 3 H100s, with about 73% of LLM minutes sent to the API. The table compares that hybrid with the two pure designs, GPUs only and no people.
The hybrid comes out about 4% dearer than all-API and 41% cheaper than a GPU fleet sized for the peak. That is the honest result: bursting makes a self-hosted LLM nearly cost-neutral, not cheaper. The reasons to self-host the base load are lower latency, data that must not leave your servers, or a fine-tuned model. The hybrid is how you get them without paying for a peak-sized fleet.
| LLM design | Monthly LLM cost | How it is made up |
|---|---|---|
| All API | $23.0k | 10M minutes × $0.0023 |
| Hybrid: base load on GPUs, overflow to API | $23.9k | 3 H100s at $3.29 an hour, plus 73% of minutes on the API |
| GPU fleet sized for the peak | $40.8k | Enough H100s for the busiest hour, idle the rest |
Residency in India costs more on the LLM tier
Hosting in India moves the LLM threshold up, not down. E2E Networks charges ₹347.70 an hour for a committed H100 before 18% GST, about $4.32 an hour with GST at ₹95.04 per dollar. On that GPU the busy share needed against cached gpt-4.1-mini rises to 4.32 ÷ (60 × 50 × 0.0023), about 63%. Indian clouds buy residency and shorter network paths, not cheaper hardware.
A hybrid also sends some calls to the burst path, so residency has to hold there too. If your contracts or sector rules require call data to stay in India, the API you overflow to must meet the same terms as your own GPUs. How India's DPDP Act applies to voice AI covers the data-protection side.
Indian teams do win on people, because engineering salaries are about a fifth of US ones. That, not the hardware, is where the full self-hosting cost model finds the Indian advantage.
Failover is the other half of a hybrid
A cascaded voice agent chains several services, and their failures add up. Softcery's arithmetic is that four hosted services at 99.9% each multiply to about 99.6%, and at 99% each to about 96% (Softcery). At 99.6%, the agent is unavailable about 0.4% of 730 hours, close to 3 hours a month.
A hybrid can do better, because the API you burst to is also a second path for each component. If the two paths fail independently and switching is instant, a component's downtime shrinks to the time both are down at once. The catch is the word instant: a fallback only helps once you notice the primary has failed.
Streaming connections are bad at telling you. A LiveKit Agents issue opened on 17 October 2026 reports that several streaming STT plugins never notice a WebSocket that goes silent without closing, and that the fixed ones take about 45 seconds, "45s of dead air before failover" (livekit/agents #7900). Another reports an STT stream that does not reconnect after a mid-stream disconnect. Forty-five seconds of a caller talking to nobody is a lost call, whatever the uptime figure says.
Frameworks do provide the switching itself. LiveKit's fallback adapters move to the next provider on errors including timeouts and mid-stream disconnects, and probe the failed one in the background until it recovers (LiveKit fallback strategies). What they cannot supply is fast detection of a stream that stays open but stops answering, and that part is yours to build.
How Sonex fails over: a held standby and a one-second STT budget
Sonex's own failover, as its code describes it, follows two rules: keep paid standby capacity off until it is needed, and never make a caller repeat themselves.
A standby GPU that is held only while it is needed
The speech standby runs on serverless GPUs that normally scale to zero and cost nothing. Waking one takes 100 seconds or more, measured, and handing a live call to a cold container is worse than failing fast, so traffic moves only after the standby has answered. Traffic also moves only after the primary has failed several health checks in a row, and moves back only after it has passed several, so a single failed probe is treated as a blip.
On failover the standby is held warm, and on recovery it is released back to zero, so the meter stops when the outage does. Every service that synthesises speech switches, not only the live-call path. On 23 September 2026 parts of the platform kept calling a GPU host that had left the network for an hour after calls had recovered, so the switch now happens in one shared setting. An alert fires if speech has run on the paid standby for over an hour. The standby runs the same voice model as the primary, so callers do not hear a different voice.
Speech recognition gets one second
If the speech-to-text stream drops during a call, the primary gets a single recovery budget of one second, and then the call moves to a fallback STT provider. It replaced an older design in which a caller could speak into nothing for the better part of half a minute. The caller's audio is buffered throughout and replayed into whichever provider ends up with the call, so what they said during the switch is still transcribed.
Where a fallback connection is already open, the switch costs only that one second; otherwise a fresh connection follows, and the first transcript still lands within about two seconds. Before a call starts, the STT connection is opened and retried in advance, so a slow handshake does not cost the caller's first turn.
What to settle before you build a hybrid
A hybrid is only as good as its least-checked path, so settle these before the first call goes through it. The deployment steps around them, from measuring your call curve to load-testing, are in how to self-deploy open-source voice models.
- Warm API contracts: keep the fallback account, rate limits and any minimum commitment active, because a fallback you have not called in months is not a fallback.
- Spill rate: track the share of minutes served by the API. For the LLM it is planned (about 73% in the model above); for STT and TTS any spill means an incident or a fleet that is too small.
- Detection time: alert on a stream that stops returning results while audio is still flowing, not only on a closed connection.
- Spot capacity: spot H100s are far cheaper, such as $1.29 an hour on Azure against $6.98 on demand, but can be taken back at short notice, so keep them for batch work unless a live session can move mid-call.
- Regions: a second active region needs its own spare GPU per component, doubling the minimum fleet at zero traffic. Many teams start with one region plus the API as the second path.
- People: count the engineers who run the GPUs; that cost, not the hardware, decides whether self-hosting pays at your volume.
Sources
- Softcery: self-hosting a voice AI stack, the short version (reliability arithmetic, 3 July 2026)Secondary
- Softcery: self-hosted voice AI stack, staffing costs (3 July 2026)Secondary
- livekit/agents issue #7900: streaming STT never notices a silently dropped WebSocket (17 October 2026, open)Official
- livekit/agents issue #4609: ElevenLabs STT does not reconnect after a mid-stream disconnectOfficial
- LiveKit docs: fallback strategiesOfficial
- Vantage: AWS g6.xlarge (L4) and g6e.xlarge (L40S) pricesSecondary
- Lambda: GPU cloud pricing (checked 24 Oct 2026)Official
- E2E Networks: GPU pricing, India, excludes 18% GST (checked 24 Oct 2026)Official
- Azure Retail Prices API (H100 on-demand and spot)Official
- NVIDIA Riva: ASR performance tablesOfficial
- Deepgram: pricingOfficial
- ElevenLabs: API pricingOfficial
- OpenAI: API pricingOfficial
- open.er-api.com: USD to INR rate, 24 October 2026Secondary
Change log: 24 Oct 2026, First published. Later the same day, rewritten as one continuous article: added what frameworks' fallback adapters do and do not cover, the standby's cold-start rule, repeated-check switching, the September 2026 incident behind the shared switch and the one-hour standby alert; the India residency point moved beside the LLM numbers; FAQs folded into the closing list




