OpenAI Responses WebSocket
Enabled by default on local, dev, and beta. On latest and prod, set OPENCODE_EXPERIMENTAL_WEBSOCKETS=true.
Flow
- A streamed
POST /responsesrequest arrives. - If it has no
session-idorx-session-affinityheader, use HTTP. - Title requests use HTTP.
- If that session's socket is busy or already in fallback mode, use HTTP.
- Otherwise, reuse its open socket or open a new one.
- Send
response.createand return WebSocket events as SSE.
Lifetime
- Connect timeout: 15 seconds.
- Idle timeout: 5 minutes.
- After a completed response, keep the socket for reuse.
- Reuse a socket for up to 55 minutes, then replace it on the next request.
Retries
- Retry WebSocket stream/setup failures up to 5 times, then use HTTP for that session until the pool entry is idle-pruned.
websocket_connection_limit_reachedconsumes the same retry budget and HTTP fallback.- If a WebSocket fails after its first event, fail it as retryable rather than replaying partial output in transport.
- Abort or cancel closes the socket.
Next Steps
previous_response_idcontinuation.- Optional second WebSocket for concurrent requests in one session. Currently these use HTTP.