# 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

1. **Dec 5, 2025** - Changed `extra_headers` → `additional_headers` (commit `8db7f1b8e4`)
2. **Dec 18, 2025** - Changed `extra_headers` → `additional_headers` again (PR #17950, commit `9f88d61d10`)
3. **Jan 15, 2026** - Upgraded `websockets` from 13.1.0 → 15.0.1 (commit `a3cf178e24`, Issue #19089)

### The Issue & Resolution

**The `websockets` library changed its API between versions:**

- **websockets < 14.0**: Used `extra_headers` parameter ✅
- **websockets >= 14.0**: Uses `additional_headers` parameter ✅

**LiteLLM uses websockets 15.0.1** (per `uv.lock`), which requires `additional_headers`.

### Verification

You can verify the correct parameter name:

```bash
uv 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)

```python
# ✅ 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:

1. **Check installed websockets version:**
   ```bash
   uv run python -c "import websockets; print(websockets.__version__)"
   ```

2. **Check `uv.lock`** for the pinned version

3. **Verify the correct parameter:**
   - websockets >= 14.0: use `additional_headers`
   - websockets < 14.0: use `extra_headers`

4. **Ensure consistency** across all files:
   - `litellm/llms/openai/realtime/handler.py`
   - `litellm/llms/azure/realtime/handler.py`
   - `litellm/llms/custom_httpx/llm_http_handler.py`
   - `litellm/realtime_api/main.py`
   - `litellm/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
