1616 resolve_openai_agent_registration_config ,
1717)
1818from .openai_chatcompletions import OpenAIChatCompletionsModel
19- from .openai_responses import OpenAIResponsesModel , OpenAIResponsesWSModel
19+ from .openai_responses import (
20+ OpenAIResponsesModel ,
21+ OpenAIResponsesWebSocketOptions ,
22+ OpenAIResponsesWSModel ,
23+ )
2024
2125# This is kept for backward compatibility but using get_default_model() method is recommended.
2226DEFAULT_MODEL : str = "gpt-4o"
@@ -49,6 +53,7 @@ def __init__(
4953 use_responses : bool | None = None ,
5054 use_responses_websocket : bool | None = None ,
5155 agent_registration : OpenAIAgentRegistrationConfig | None = None ,
56+ responses_websocket_options : OpenAIResponsesWebSocketOptions | None = None ,
5257 ) -> None :
5358 """Create a new OpenAI provider.
5459
@@ -67,6 +72,8 @@ def __init__(
6772 use_responses_websocket: Whether to use websocket transport for the OpenAI responses
6873 API.
6974 agent_registration: Optional agent registration configuration.
75+ responses_websocket_options: Optional low-level websocket keepalive options for the
76+ OpenAI Responses websocket transport.
7077 """
7178 if openai_client is not None :
7279 assert api_key is None and base_url is None and websocket_base_url is None , (
@@ -95,6 +102,7 @@ def __init__(
95102 self ._responses_transport = _openai_shared .get_default_openai_responses_transport ()
96103 # Backward-compatibility shim for internal tests/diagnostics that inspect the legacy flag.
97104 self ._use_responses_websocket = self ._responses_transport == "websocket"
105+ self ._responses_websocket_options = responses_websocket_options
98106
99107 # Reuse websocket model wrappers so websocket transport can keep a persistent connection
100108 # when callers pass model names as strings through a shared provider.
@@ -214,17 +222,22 @@ def get_model(self, model_name: str | None) -> Model:
214222 if not self ._use_responses :
215223 return OpenAIChatCompletionsModel (model = resolved_model_name , openai_client = client )
216224
217- responses_model_type = (
218- OpenAIResponsesWSModel if use_websocket_transport else OpenAIResponsesModel
219- )
220- model = responses_model_type (
225+ if use_websocket_transport :
226+ model = OpenAIResponsesWSModel (
227+ model = resolved_model_name ,
228+ openai_client = client ,
229+ model_is_explicit = model_is_explicit ,
230+ websocket_options = self ._responses_websocket_options ,
231+ )
232+ if loop_cache is not None :
233+ loop_cache [cache_key ] = model
234+ return model
235+
236+ model = OpenAIResponsesModel (
221237 model = resolved_model_name ,
222238 openai_client = client ,
223239 model_is_explicit = model_is_explicit ,
224240 )
225- if use_websocket_transport :
226- if loop_cache is not None :
227- loop_cache [cache_key ] = model
228241 return model
229242
230243 async def aclose (self ) -> None :
0 commit comments