* init: _realtime_health_check + routing * refactor: OpenAIRealtime * refactor: XAI_API_BASE * feat: XAIRealtime * init feat: XAIRealtime * OpenAIRealtime * TestXAIRealtime * test fixes * test OAI * TEST xAI, OAI * clean realtime jobs * refactor * test XAI * docs xAI * fix xAI * fix lint errors * test_async_realtime_url_contains_model * test fix * document test changes * _realtime_health_check * docs xai realtime * fix handlers * add additional_headers * fix |
||
|---|---|---|
| .. | ||
| README.md | ||
| test_openai_realtime_handler.py | ||
OpenAI Realtime Handler Tests
Important Context: additional_headers vs extra_headers
Background
There was confusion about the correct parameter name for passing headers to websockets.connect(). This README documents the resolution for future maintainers.
Timeline of Changes
- Dec 5, 2025 - Changed
extra_headers→additional_headers(commit8db7f1b8e4) - Dec 18, 2025 - Changed
extra_headers→additional_headersagain (PR #17950, commit9f88d61d10) - Jan 15, 2026 - Upgraded
websocketsfrom 13.1.0 → 15.0.1 (commita3cf178e24, Issue #19089)
The Issue & Resolution
The websockets library changed its API between versions:
- websockets < 14.0: Used
extra_headersparameter ✅ - websockets >= 14.0: Uses
additional_headersparameter ✅
LiteLLM uses websockets 15.0.1 (per requirements.txt), which requires additional_headers.
Verification
You can verify the correct parameter name:
poetry run python -c "import websockets; import inspect; print(inspect.signature(websockets.connect))"
This shows: additional_headers: 'HeadersLike | None' = None for websockets 15.0.1.
Current Implementation (Correct)
# ✅ Correct for websockets 15.0.1+
await websockets.connect(url, additional_headers={
"Authorization": f"Bearer {api_key}",
"OpenAI-Beta": "realtime=v1"
})
Impact
This is NOT just a test fix - this was a critical bug that affected all realtime APIs:
- OpenAI realtime
- Azure realtime
- xAI realtime
- Any pass-through realtime connections
Using extra_headers with websockets 15.0.1 resulted in:
TypeError: connect() got an unexpected keyword argument 'extra_headers'
For Future Maintainers
If you see test failures related to header parameters:
-
Check installed websockets version:
poetry run python -c "import websockets; print(websockets.__version__)" -
Check requirements.txt for the specified version
-
Verify the correct parameter:
- websockets >= 14.0: use
additional_headers - websockets < 14.0: use
extra_headers
- websockets >= 14.0: use
-
Ensure consistency across all files:
litellm/llms/openai/realtime/handler.pylitellm/llms/azure/realtime/handler.pylitellm/llms/custom_httpx/llm_http_handler.pylitellm/realtime_api/main.pylitellm/proxy/pass_through_endpoints/pass_through_endpoints.py
Current Status (Feb 2026):
- ✅ websockets version: 15.0.1
- ✅ Correct parameter:
additional_headers - ✅ All handlers updated and working