Benchmarks
Measured on our own hardware, under load. Nothing here is estimated, and where a figure would mislead without its method the method is next to it. Measured 2026-09-05T18:43:42Z.
The whole surface, verified by probing it
Every number below comes from an audit script that sends real requests, not from reading the code.
endpoints working 15 endpoints broken 0 endpoints not built 0 voices producing audio 20/20 speech-to-text models 5/5 usable (1 more is gated) websocket /ws/stream WORKS
No rate limits, demonstrated
| Probe | Requests | Parallel | Status codes | 429s |
|---|---|---|---|---|
| normalize serial | 40 | — | 200 | 0 |
| normalize 20-way parallel | 60 | 20 | 200 | 0 |
| models serial | 30 | — | 200 | 0 |
| filler cache 30-way parallel | 60 | 30 | 200 | 0 |
| TTS 8-way parallel (GPU) | 8 | 8 | 200 | 0 |
| STT 6-way parallel (GPU) | 6 | 6 | 200 | 0 |
| chat 6-way parallel (reply model) | 6 | 6 | 200 | 0 |
| translate 6-way parallel (CPU) | 6 | 6 | 200 | 0 |
Live call, measured over the websocket
wss://api.latency.cam, from inside AWS (excludes the ~238ms India round trip)
transcription 166 ms LLM reply 387 ms time to first audio 793 ms full turn 3997 ms whole streamed sentence perceived wait 1 ms cached filler barge-in 200 ms after the caller starts talking
turn_total is the whole streamed sentence. What the caller experiences is the filler at 1ms and the reply starting at ~1.35s.
Speech-to-text accuracy on real human speech
google/fleurs test split, CC-BY-4.0. Read human speech with ground-truth transcripts. Scored at 16kHz and again after a round trip through 8kHz mulaw, which is what a phone line delivers. CER matters more than WER for Indic scripts because word-break conventions punish WER unfairly.
| Model | 16kHz WER / CER | 8kHz WER / CER | Latency |
|---|---|---|---|
| General multilingual, faster | 0.204 / 0.099 | 0.252 / 0.121 | 345 ms |
| General multilingual, more accurate | 0.187 / 0.093 | 0.232 / 0.107 | 2490 ms |
| General multilingual, alternate backend | 0.391 / 0.199 | 0.28 / 0.143 | 1695 ms |
| Single-language, Hindi only | 0.717 / 0.552 | 0.759 / 0.64 | 4895 ms |
| Single-language, Telugu only | 0.686 / 0.47 | 0.691 / 0.471 | 5727 ms |
Single-language transcription is available for offline work and is noticeably more accurate for its own language, at roughly 15× the time. It is the right choice when nobody is waiting on the result and the wrong choice on a live call, which is why the live path does not use it.
Translation
English to Tamil 1056 ms Indic to Indic 1309 ms pivots through English batch of 3, num_beams=1 392 ms total, not each 12 concurrent requests 14.5 s all succeeded
Indic to Indic pivots through English, which is the extra ~250ms.
Turn breakdown
speech to text 40 ms language identified for free
reply model 587 ms largest stage; the one that leaves our machines
number formatting 1 ms "15250" -> "pandrah hazaar do sau pachas"
first spoken audio 96 ms streaming, real-time factor 0.83
────────
TOTAL 724 ms
what the caller hears 3 ms a cached acknowledgement plays firstThe reply model is the largest single line, and it is the one stage that leaves our own machines. Worth stating plainly: the parts we control are already the small parts, so going faster from here means a closer or smaller reply model rather than more work on the audio path.
Reliability, stated plainly
3 of 15 pre-rendered fillers were initially silent or rambling and had to be regenerated. Silence does not raise, so cached audio must be audited.
This is the most important operational fact on this page. A model that fails by returning plausible-looking silence, rather than by raising, has to be checked on every call — which is what the sanity check and retry now do.