How OpenAI delivers low-latency voice AI at scale
TL;DR Highlight
OpenAI redesigned its WebRTC stack to serve real-time voice AI to over 900 million users, detailing the design decisions and trade-offs of a relay + transceiver split architecture.
Who Should Read
Backend/infrastructure developers aiming to add real-time voice/audio features to apps, or developers struggling with port management or routing issues while operating WebRTC in a Kubernetes environment.
Core Mechanics
- OpenAI chose WebRTC because it’s a standardized protocol already implemented in browsers, mobile devices, and servers, eliminating the need to implement low-level processing like ICE (NAT traversal), DTLS/SRTP (encrypted transmission), codec negotiation, RTCP (quality control), and echo cancellation/jitter buffering.
- The most crucial characteristic of voice AI is that audio arrives as a continuous stream, allowing the model to simultaneously transcribe, infer, call tools, and generate speech while the user is speaking – creating the difference between a ‘conversational’ and a ‘push-to-talk’ feel.
- The traditional WebRTC server approach, SFU (Selective Forwarding Unit), requires opening a separate port for each session, and this ‘one port per session’ model was a core problem colliding with Kubernetes at OpenAI’s scale, making horizontal scaling difficult due to stateful ICE/DTLS sessions needing to be pinned to specific nodes.
- To solve this, OpenAI designed a relay + transceiver split architecture, placing relays at the global edge to minimize first-hop latency to clients, while transceivers handle actual media processing and model connections within the internal infrastructure.
- Clients experience standard WebRTC behavior, while the underlying packet routing is completely changed, using ICE credentials to route to the correct transceiver and maintain stateful sessions.
- Combining global relays with geostering (automatic routing based on user location) ensures that connections are routed to the nearest relay worldwide, which is critical for maintaining low latency at a scale of 900 million users.
- The implementation leveraged the open-source Go WebRTC library Pion (https://github.com/pion/webrtc), and Pion’s creator, Sean DuBois, has since joined OpenAI.
- Currently, the Realtime API’s voice models are limited to the GPT-4o family, meaning the model’s capabilities aren’t at the level of the latest frontier models despite the architectural improvements.
Evidence
- "Pion library developers commented thanking OpenAI for publicly acknowledging its use and recommended 'WebRTC for the Curious (webrtcforthecurious.com)' as a WebRTC introductory resource. A WebRTC + Kubernetes game streaming product veteran strongly disagreed, arguing that the problems OpenAI described were mostly issues with the libwebrtc implementation, and that proper feature flag configuration could reduce latency without paid network workarounds. Users shared experiences where low latency itself created UX problems, with the system incorrectly interpreting pauses as turn endings. OpenAI mentioned their open-source Voice AI pipeline framework pipecat (https://github.com/pipecat-ai/pipecat), with comments recommending it as a good starting point. Questions arose about whether OpenAI replaced LiveKit with a custom WebRTC stack, but the architecture explanation itself implied a custom build."
How to Apply
- If you’re running WebRTC servers in Kubernetes and facing scale-out limitations due to the one-port-per-session problem, consider redesigning your architecture with a relay (edge, stateless) and transceiver (internal, stateful) split, routing based on ICE credentials.
- To quickly prototype real-time voice AI services, explore pipecat (https://github.com/pipecat-ai/pipecat) or Pion (https://github.com/pion/webrtc) before implementing a WebRTC stack from scratch, allowing you to start quickly without low-level implementation.
- When implementing ‘end-of-turn detection’ logic for Voice AI, avoid relying solely on silence timers, as they can prematurely cut off users pausing to find a word; instead, make the silence threshold user-adjustable or design separate logic to distinguish mid-utterance pauses from turn endings.
- If you’re operating WebRTC based on libwebrtc, consider checking feature flag settings, as latency issues may be solvable through configuration before resorting to paid network solutions or complex infrastructure changes.
Terminology
Related Papers
Claude Code sends 33k tokens before reading the prompt; OpenCode sends 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Mesh LLM: distributed AI computing on iroh
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Show HN: Frugon – Find which LLM calls a cheaper model could handle (local, MIT)
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
Jamesob's guide to running SOTA LLMs locally
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Faster embeddings: how we rebuilt the ONNX path in Manticore
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: Near-Lossless Retrieval with 97% Storage Reduction
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.