Please read this first
- Have you read the docs? Yes: README, docs/models/index.md, docs/realtime/guide.md, docs/release.md, and the current GitHub release notes.
- Have you searched for related issues? Yes. I searched repo-local open/closed issues and PRs plus broader GitHub searches; duplicate-search details are below.
Describe the feature
Please expose a configurable WebSocket message-size limit for both OpenAI Responses WebSocket transport and the Realtime WebSocket transport.
Right now both code paths hard-code max_size=None when calling websockets.connect, which disables the websockets library's incoming-message size limit. The SDK exposes keepalive knobs (ping_interval, ping_timeout, and for Realtime handshake_timeout), but not the message-size bound.
This matters for long-lived agent processes that run behind proxies or inside containers with explicit memory budgets. In our use case, we run agent operators over long sessions and want a way to bound resource usage without forking or monkeypatching the SDK. We do not necessarily need the default behavior to change; an opt-in config field would be enough.
Evidence inspected:
src/agents/models/openai_responses.py
OpenAIResponsesWebSocketOptions currently documents only ping_interval and ping_timeout.
_open_websocket_connection() passes "max_size": None to websockets.asyncio.client.connect.
src/agents/realtime/openai_realtime.py
TransportConfig currently documents ping_interval, ping_timeout, and handshake_timeout.
_create_websocket_connection() passes "max_size": None # Allow any size of message to websockets.connect.
tests/models/test_openai_responses.py has test_websocket_model_open_websocket_connection_disables_message_size_limit, which locks in max_size is None for the Responses WebSocket path.
docs/models/index.md shows responses_websocket_options={"ping_interval": 20.0, "ping_timeout": 60.0} as the low-level Responses WebSocket config surface.
docs/realtime/guide.md documents Realtime WebSocket as a long-lived connection and lists custom url, headers, and auth options, but does not expose a message-size/resource-limit control.
- The upstream
websockets docs for the asyncio client document max_size as the maximum incoming message size in bytes, with None disabling the limit.
Expected behavior:
Applications should be able to configure the incoming WebSocket message-size limit without replacing the SDK transport. For example:
responses_websocket_options={"max_size": 8 * 1024 * 1024, ...}
OpenAIRealtimeWebSocketModel(transport_config={"max_size": 8 * 1024 * 1024, ...})
Suggested implementation shape:
- Add optional
max_size: int | None to OpenAIResponsesWebSocketOptions.
- Add optional
max_size: int | None to Realtime TransportConfig.
- Keep today's default behavior if you want full backwards compatibility, but pass the configured value through when present.
- Add tests showing the configured value reaches
websockets.connect in both transport paths.
- Update the docs to mention that
None disables the library limit and finite integers bound incoming message size.
Duplicate search performed:
Repo-local exact searches returned no covering issue/PR:
websocket max_size → 0 open, 0 closed
"max_size" websocket → 0 open, 0 closed
"Allow any size of message" → 0 open, 0 closed
"disables message size limit" → 0 open, 0 closed
"ResponsesWebSocketOptions" max_size → 0 open, 0 closed
"TransportConfig" max_size realtime → 0 open, 0 closed
"websocket message size" → 0 open, 0 closed
"resource limit" websocket realtime → 0 open, 0 closed
OOM websocket realtime → 0 open, 0 closed
Related but not covering:
Broader GitHub searches were also run for websocket and max_size across open and closed issues/PRs to avoid missing generic prior art.
Willing to contribute a small PR if this config shape is acceptable.
Please read this first
Describe the feature
Please expose a configurable WebSocket message-size limit for both OpenAI Responses WebSocket transport and the Realtime WebSocket transport.
Right now both code paths hard-code
max_size=Nonewhen callingwebsockets.connect, which disables thewebsocketslibrary's incoming-message size limit. The SDK exposes keepalive knobs (ping_interval,ping_timeout, and for Realtimehandshake_timeout), but not the message-size bound.This matters for long-lived agent processes that run behind proxies or inside containers with explicit memory budgets. In our use case, we run agent operators over long sessions and want a way to bound resource usage without forking or monkeypatching the SDK. We do not necessarily need the default behavior to change; an opt-in config field would be enough.
Evidence inspected:
src/agents/models/openai_responses.pyOpenAIResponsesWebSocketOptionscurrently documents onlyping_intervalandping_timeout._open_websocket_connection()passes"max_size": Nonetowebsockets.asyncio.client.connect.src/agents/realtime/openai_realtime.pyTransportConfigcurrently documentsping_interval,ping_timeout, andhandshake_timeout._create_websocket_connection()passes"max_size": None # Allow any size of messagetowebsockets.connect.tests/models/test_openai_responses.pyhastest_websocket_model_open_websocket_connection_disables_message_size_limit, which locks inmax_size is Nonefor the Responses WebSocket path.docs/models/index.mdshowsresponses_websocket_options={"ping_interval": 20.0, "ping_timeout": 60.0}as the low-level Responses WebSocket config surface.docs/realtime/guide.mddocuments Realtime WebSocket as a long-lived connection and lists customurl,headers, and auth options, but does not expose a message-size/resource-limit control.websocketsdocs for the asyncio client documentmax_sizeas the maximum incoming message size in bytes, withNonedisabling the limit.Expected behavior:
Applications should be able to configure the incoming WebSocket message-size limit without replacing the SDK transport. For example:
responses_websocket_options={"max_size": 8 * 1024 * 1024, ...}OpenAIRealtimeWebSocketModel(transport_config={"max_size": 8 * 1024 * 1024, ...})Suggested implementation shape:
max_size: int | NonetoOpenAIResponsesWebSocketOptions.max_size: int | Noneto RealtimeTransportConfig.websockets.connectin both transport paths.Nonedisables the library limit and finite integers bound incoming message size.Duplicate search performed:
Repo-local exact searches returned no covering issue/PR:
websocket max_size→ 0 open, 0 closed"max_size" websocket→ 0 open, 0 closed"Allow any size of message"→ 0 open, 0 closed"disables message size limit"→ 0 open, 0 closed"ResponsesWebSocketOptions" max_size→ 0 open, 0 closed"TransportConfig" max_size realtime→ 0 open, 0 closed"websocket message size"→ 0 open, 0 closed"resource limit" websocket realtime→ 0 open, 0 closedOOM websocket realtime→ 0 open, 0 closedRelated but not covering:
Broader GitHub searches were also run for
websocketandmax_sizeacross open and closed issues/PRs to avoid missing generic prior art.Willing to contribute a small PR if this config shape is acceptable.