Sonex Labs

The true cost of self-hosting open-source voice AI: a break-even model for STT, LLM and TTS

Open-weight speech and language models are free to download, and a rented GPU costs a few dollars an hour, so running your own voice stack looks far cheaper than paying per minute. In practice a voice GPU spends most of the hours you pay for waiting for calls, and the engineers who keep it running cost more than the hardware. With October 2026 prices, self-hosting usually costs more than per-use APIs below about 1 million call-minutes a month and less above a few million, and in between the location of your team decides it. Text to speech (TTS) pays off first, speech to text (STT) second, and the language model (LLM) last or never.

Self-hosting cost model: The true cost of self-hosting open-source voice AI: a break-even model for STT, LLM and TTS
Written by
Anmol Agarwal
Published
Last updated
Reading time
14 min read
On this page
  1. Why self-hosting looks cheaper than it is
  2. Utilisation comes from your call curve, not from the GPU
  3. Why TTS pays off first and the LLM last
  4. People cost more than GPUs below a few million minutes
  5. Why published estimates of self-hosting cost disagree
  6. What to do at your volume, and what the model leaves out
  7. Sources

Why self-hosting looks cheaper than it is

The comparison usually goes wrong because the two sides are quoted in different units. An API charges per minute of audio, per character spoken or per token, so you pay only for the calls you take. A GPU is rented per hour, and it costs the same whether it is carrying fifty calls or none. To compare them you need the cost of one call-minute, meaning one minute of a live call handled by the agent, on each side.

On your own GPU, that cost is the hourly price divided by 60, by the number of calls the card can carry at once, and by its utilisation. Utilisation is the share of that capacity your calls actually use over the month. It is the term most estimates leave out, and for live calls it is usually small, because calls arrive when people dial, not when the GPU is free.

Start with a GPU that is busy all the time. An AWS L4 at $0.805 an hour carrying 48 STT streams costs $0.805 ÷ (60 × 48) = $0.00028 per call-minute. An AWS L40S at $1.861 carrying 32 TTS streams costs $0.00097, and a Lambda H100 at $3.29 carrying 50 LLM sessions costs $0.00110. The STT and TTS stream counts come from NVIDIA's published tables. The LLM figure is a planning value inside Softcery's modelled range of 40 to 75 sessions per H100, and it is the least certain input here.

Those figures look tiny next to API prices of $0.0025 to $0.0048 a minute for streaming STT, $0.0135 to $0.036 for premium TTS and $0.0007 to $0.0052 for a small LLM. The catch is that no voice GPU is busy all the time. At 15% utilisation every self-hosted figure is multiplied by 1 ÷ 0.15, about 6.7, so the L40S's TTS minute becomes $0.0065 and the H100's LLM minute becomes $0.0073. Where those prices come from, and how they move with the commitment you sign, is covered in GPU prices for voice AI in the US and India.

Four formulas carry the rest of this page. Each section works one of them through with real prices, and the editable spreadsheet linked at the end lets you change every input.

cost per call-minute   g  = P / (60 x N x U)
utilisation            U  ~ 1 / (PAR x (1 + h))     at large scale, before N+1 spares
critical utilisation   U* = P / (60 x N x a)
break-even volume      M* = F / (a - g)

P   GPU price, $ per hour            N   concurrent streams or sessions per GPU
PAR peak-to-average ratio of calls   h   headroom above the peak (20%)
a   API price per call-minute        F   fixed monthly cost (people, tooling)
The model in four lines. Every number on this page comes from these formulas and the inputs listed in the spreadsheet.

Utilisation comes from your call curve, not from the GPU

How busy a GPU can be is set by how uneven your call volume is across the week, not by the hardware. You have to size the fleet for the busiest hour plus some headroom, but the calls that pay for it arrive at the average rate. So utilisation is roughly 1 ÷ (peak-to-average ratio × (1 + headroom)), where the peak-to-average ratio is the busiest hour's concurrent calls divided by the weekly average.

For business-hours calling this page uses a ratio of 3.5. It comes from Softcery's worked example, in which a 500,000-minute month averages about 12 concurrent calls if spread over the whole day but about 43 if the calls fall in business hours (Softcery, 3 July 2026). With 20% headroom, the ceiling is 1 ÷ (3.5 × 1.2), or 24%.

Redundancy pulls it lower. You need at least one spare GPU per component, known as N+1, so that a failure does not drop live calls. At 1 million minutes a month, average concurrency is 1,000,000 ÷ 43,800 minutes = 22.8 calls, and the sized peak is 22.8 × 3.5 × 1.2 = 95.9. That needs 3 L4s for STT, 4 L40S cards for TTS and 3 H100s for the LLM, each including the spare, and utilisation lands at 15 to 18%. At 100,000 minutes the two-GPU minimum per component sits only 2 to 4% busy, which is why self-hosting at that volume is never a cost decision.

The curve is also the cheapest lever you have. Flattening the ratio from 3.5 to 2, for example with customers in several time zones or outbound campaigns moved into quiet hours, raises utilisation from about 22% to about 40%. At 10 million minutes a month that cuts the GPU bill by about 45%, as much as a large hardware discount. How to measure your own curve before committing is the first step in the guide to self-deploying open-source voice models.

Why TTS pays off first and the LLM last

The order in which the three components pay off depends on two things: how much the API charges for a call-minute, and how cheaply a GPU can produce the same minute. TTS scores well on both counts, while the LLM scores badly on both.

What the APIs charge per call-minute

APIs price TTS per character and LLMs per token, so converting them needs two assumptions. This page assumes 450 TTS characters per call-minute, about 150 words a minute at six characters a word with the agent talking half the time. It assumes 12,000 LLM input tokens a minute, from four turns that each resend about 3,000 tokens of instructions and conversation, plus 240 output tokens. Both are assumptions, so replace them with counts from your own calls.

On those figures, TTS from ElevenLabs Flash at $40 per million characters costs 450 × $40 ÷ 1,000,000 = $0.018 a minute. STT from Deepgram Nova-3 costs $0.0048, a rate Deepgram marks as a limited-time promotion against a list price of $0.0077. gpt-4.1-mini with 80% of its input cached costs (2,400 × $0.40 + 9,600 × $0.10 + 240 × $1.60) ÷ 1,000,000 = $0.0023.

That quality stack totals $0.0251 a minute, and TTS is 72% of it, STT 19% and the LLM 9%. A budget stack of AssemblyAI streaming, gpt-4.1-nano and Azure Neural voices totals $0.0105. The LLM is the smallest line in both, which surprises people who expect it to dominate. It stays small unless you use a mid-tier model or resend very long prompts.

Critical utilisation sets the order

Critical utilisation, U*, is the busy share above which a GPU costs less than the API it replaces, counting hardware only. Against the prices above it is about 5.8% for STT, 5.4% for TTS against ElevenLabs Flash and 48% for an LLM against cached gpt-4.1-mini. In plain terms, a speech GPU pays for itself if it is busy about one hour in seventeen, while an LLM GPU must be busy about half the time, which a business-hours curve capped near 24% does not allow.

The derivation, the full table against cheaper APIs and a three-input calculator are in critical utilisation: when a GPU beats the API. What matters here is the consequence: speech components cross the line at almost any real volume, and the LLM rarely does.

Ease of running points the other way

Cost is not the only way to rank the components. Softcery ranks them by how hard they are to run well, and puts STT first as "the near-free win", TTS second as deceptively hard, and the LLM last because that is where the quality gap sits (Softcery's short version). TTS needs text normalisation, pronunciation fixes and, often, voice cloning that open models handle less well.

Both rankings put the LLM last, so the disagreement is only between the two speech components. A team with strong audio engineers may start with TTS for the larger saving. A team that wants the easiest first win may start with STT and accept a smaller one.

Decision chart for self-hosted voice AI cost: when to self-host TTS, STT or the LLM instead of an API
Which voice AI component to self-host first: the volume test, then critical utilisation, then people cost.

People cost more than GPUs below a few million minutes

The largest line in a self-hosted voice stack is usually the team, not the hardware. Softcery estimates that a dedicated inference team hired for the purpose costs "$300,000–500,000/year", whatever the call volume. Its crossover sits at about 1 million minutes a month on that assumption, and it notes that the crossover falls sharply if an existing team absorbs the work (Softcery).

Adding people turns critical utilisation into a break-even volume, M* = F ÷ (a − g): the fixed monthly cost divided by the saving on each minute. Charge half an engineer to a component and assume the GPU is 60% busy. A US engineer costs $135,980 × 1.4 = $190,372 a year once employment costs are loaded, so F is $7,932 a month. TTS saves $0.018 − $0.00162 = $0.01638 a minute, so it breaks even at 7,932 ÷ 0.01638 = about 484,000 minutes a month.

With an engineer in India at ₹25 lakh a year × 1.25, about $32,881, F falls to $1,370 and the same TTS break-even falls to about 84,000 minutes. The GPUs cost about the same in both countries, so the location of the team moves break-even far more than the location of the hardware.

By the same formula, STT against Deepgram breaks even at about 1.8 million minutes a month with a US team and 0.3 million with an India-cost team. Against AssemblyAI's cheaper $0.0025 it needs about 3.9 million and 0.67 million. The LLM against cached gpt-4.1-mini needs 16.7 million and 2.9 million at 60% utilisation, and never breaks even at 30%. Against nano-class models at $0.0013 it never breaks even, because the GPU minute costs more than the API minute at any utilisation a call curve allows.

The whole stack at 100,000, 1 million and 10 million minutes

Per-component figures ignore the spare GPUs and the API minutes you still send out, so the table below runs the whole stack. It models 0.5 engineers at 100,000 minutes, 1.5 at 1 million and 3 at 10 million, plus $1,000 a month for monitoring and evaluation tools. It also assumes 2% of minutes still go to an API during incidents and deploys. Network egress for telephony audio is 0.48 MB a minute × $0.09 per GB, about $0.00004 a minute, and the API route pays it too, so it changes nothing.

Here is one row worked through: 1 million minutes, US on-demand GPUs, an India-cost team. The GPUs cost 3 × $0.805 × 730 hours + 4 × $1.861 × 730 + 3 × $3.29 × 730 = $14,402 a month. People and tools cost 1.5 × $32,881 ÷ 12 + $1,000 = $5,110, and failover adds 2% × 1,000,000 × $0.0251 = $502. The total is $20,014 a month, about ₹19.0 lakh, against $25,104 (₹23.9 lakh) for the quality API stack.

The India GPU rows use E2E Networks rates with 18% GST added, because Indian cloud prices are listed before tax. Rupee figures use ₹95.04 per dollar from open.er-api.com on 24 October 2026; other sources showed about ₹96.5, so treat rupee totals as accurate to about 1.5%.

Self-hosted STT, LLM and TTS against API stacks, per month (stack A: Deepgram, cached gpt-4.1-mini, ElevenLabs Flash; stack B: AssemblyAI, gpt-4.1-nano, Azure Neural)
Volume, GPU prices and teamSelf-hosted per monthAgainst the APIs
100k minutes: API stacksStack A $2,510 (₹2.39 L); stack B $1,055 (₹1.00 L)Baseline
100k, US on-demand, US team$17,678 (₹16.8 L)7.0x stack A, 16.8x stack B
100k, US 3-year reserved, India team$8,472 (₹8.05 L)3.4x stack A, 8.0x stack B
100k, India E2E, India team$11,460 (₹10.9 L)4.6x stack A, 10.9x stack B
1M minutes: API stacksStack A $25,104 (₹23.9 L); stack B $10,546 (₹10.0 L)Baseline
1M, US on-demand, US team$39,701 (₹37.7 L)58% more than A, 3.8x B
1M, US on-demand, India team$20,014 (₹19.0 L)20% cheaper than A, 1.9x B
1M, US 3-year reserved, India team$15,277 (₹14.5 L)39% cheaper than A, 1.4x B
1M, India E2E, India team$20,097 (₹19.1 L)20% cheaper than A, 1.9x B
10M minutes (2 regions): API stacksStack A $251,040 (₹238.6 L); stack B $105,460 (₹100.2 L)Baseline
10M, US on-demand, US team$162,852 (₹154.8 L)35% cheaper than A, 54% more than B
10M, US 3-year reserved, US team$126,054 (₹119.8 L)50% cheaper than A, 20% more than B
10M, US 3-year reserved, India team$86,682 (₹82.4 L)65% cheaper than A, 18% cheaper than B
10M, India E2E, India team$122,926 (₹116.8 L)51% cheaper than A, 17% more than B

Why published estimates of self-hosting cost disagree

Published figures range from a fraction of a cent a minute to several hundred thousand dollars a year, and most of the gap comes from what each source puts in the total, not from different GPU prices. Companies that sell GPU hosting tend to quote the GPU cost at a busy moment. Companies that sell APIs tend to quote the fully loaded cost, people included, at low utilisation. Both can be right about what they chose to count.

The table lists the sources this model drew on, with the interest each has in the answer. Sonex Labs is on it too: it sells speech and LLM APIs billed per character, per second of audio and per token (see Sonex's per-use speech and LLM prices), so a reader who self-hosts may be a customer it does not get. That is why every input on this page is sourced and editable.

Sources on the cost of self-hosting voice AI, what they claim and what they sell
What it saysIts interest
Below roughly 1M minutes a month self-hosting loses if the team is hired for it; a dedicated team costs $300,000–500,000 a yearSource: Softcery, July 2026Consultancy that builds voice agents; publishes its assumptions, but its figures are modelled, not load-tested
A production pipeline at $0.02932 a minute; divide by average concurrency, not peakSource: Cerebrium, July 2026Sells serverless GPU hosting
Per-user TTS cost falls sharply as one GPU serves more users; real-time TTS needs about 80 to 100 tokens a second per streamSource: BasetenSells GPU inference
"A GPU idling at 15% still bills at 100%"; self-hosting suits large, steady, offline batch workSource: AssemblyAI, August 2026Sells a speech-to-text API
Self-hosted STT costs $300,000 to $2 million a year including staffSource: GladiaSells a speech-to-text API
Detailed stream-count tables for speech recognition and TTS, by GPU and latencySource: NVIDIASells GPUs; tables are methodical and reproducible
Self-hosted Whisper at $163,680 a year against $38,880 for a hosted model, before staffSource: GDELT, March 2024Independent user, but GPU prices are more than two years old
TTS pays first, the LLM last; most teams under 300,000 minutes should stay on APIsSource: Sonex Labs (this page)Sells speech and LLM APIs

What to do at your volume, and what the model leaves out

The scenarios point to three plain verdicts. Under about 300,000 minutes a month, use APIs for everything unless a regulator or customer requires the data to stay on your own hardware. Between about 0.3 and 3 million minutes, self-host TTS on reserved L40S-class GPUs, and STT too if your languages hold up, while the LLM stays on an API. Above 3 to 5 million minutes, self-host all three for the steady base load and send the LLM's overflow to an API.

That overflow pattern pays only for the LLM. Because speech GPUs cross their threshold at 5 to 14% busy, even the GPU that serves only the peak hour earns its keep, so the cheapest speech fleet covers the whole peak. For the LLM, a few GPUs for the base load plus the API for the rest comes out close to the all-API price, which is worth it only for latency, residency or a tuned model. The numbers, and how the same API doubles as a failover path, are in self-hosting the base load and bursting to an API.

Streams per GPU is the input to test first

The model is most sensitive to how many calls one GPU carries. Doubling streams per GPU halves the GPU cost per minute: at 10 million minutes on US on-demand prices the GPU line falls from about $109,000 to about $60,000 a month. Halving them, as multilingual streaming STT or a voice-cloning TTS model can, raises it to about $210,000, and self-hosting then loses even to the quality API stack with a US team.

NVIDIA's own tables show a multilingual code-switching streaming model at about 8 streams per H100, with seconds of delay, against 48 to 64 for English models. The stream counts here are English benchmarks and the API prices come from English-first vendors, so Hindi, Tamil or Arabic calls need their own measurement. How many concurrent calls a 24 GB GPU carries shows what that measurement looks like, and the self-hosted Whisper comparison covers the STT side for phone audio.

Costs and benefits outside the model

API buyers at volume often get discounts of 20 to 60%, which move every break-even point to a higher volume. Running all three models on one GPU could lower the fixed floor at small scale, but no measured data on those densities was found. A quality gap, such as a higher word error rate causing failed calls, has a real cost, but no published data links it to call outcomes, so it is left as a line to price yourself.

Latency is a separate argument that can justify self-hosting below the cost break-even. Cerebrium, which sells GPU hosting, reports a self-hosted open model answering in about 300 ms against 700 ms to 1.5 seconds for a hosted mini-class API. Treat such vendor figures as a reason to measure, and price any gain as something concrete, such as conversion, rather than assuming it.

Sources

  1. Sonex Labs: voice AI self-hosting break-even spreadsheet (CSV, editable, 24 Oct 2026)Official
  2. Softcery: the self-hosted voice AI stack, 3 July 2026Secondary
  3. Softcery: self-hosting a voice AI stack, the short version, 3 July 2026Secondary
  4. Cerebrium: voice AI agent cost per minute, 29 July 2026Secondary
  5. Cerebrium: concurrent voice sessions per GPU, 30 July 2026Secondary
  6. Daily: announcing Pipecat PhoneLLM alpha 1, 27 August 2026Official
  7. MindStudio: PhoneLLM cost per minute for voice agentsSecondary
  8. AssemblyAI: AssemblyAI vs self-hosting on Baseten, Modal or Fireworks, 4 August 2026Secondary
  9. Gladia: factors to consider before using open-source WhisperSecondary
  10. GDELT: Whisper vs Chirp, the hidden GPU cost of free AI models, March 2024Secondary
  11. Baseten: Inference Engineering, TTS models chapterSecondary
  12. NVIDIA Riva: ASR performance tablesOfficial
  13. NVIDIA TTS NIM: performanceOfficial
  14. Vantage: AWS g6.xlarge (L4) prices (checked 24 Oct 2026)Secondary
  15. Vantage: AWS g6e.xlarge (L40S) prices (checked 24 Oct 2026)Secondary
  16. Lambda: GPU cloud pricing (checked 24 Oct 2026)Official
  17. E2E Networks: pricing, excludes 18% GST (checked 24 Oct 2026)Official
  18. Deepgram: pricing (Nova-3 streaming shown as a limited-time promotional rate, checked 24 Oct 2026)Official
  19. AssemblyAI: pricingOfficial
  20. ElevenLabs: API pricing (checked 24 Oct 2026)Official
  21. OpenAI: API pricing (checked 24 Oct 2026)Official
  22. Azure Retail Prices APIOfficial
  23. US Bureau of Labor Statistics: software developers, payOfficial
  24. Futurense: MLOps engineer salary in IndiaSecondary
  25. open.er-api.com: USD exchange rates, 24 October 2026Official

Change log: 24 Oct 2026, First published. Later the same day, rewritten as one continuous article: added why per-hour and per-minute prices mislead, Softcery's ease-first ordering as a competing view, Deepgram's list price beside its promotional rate; the critical-utilisation derivation and the hybrid LLM numbers moved to their own articles and are linked; takeaways and FAQs folded into the body

Questions about your calling setup?

Tell us what you call about, where and in which languages.