Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion libs/partners/openai/langchain_openai/chat_models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1022,10 +1022,11 @@ def validate_environment(self) -> Self:
client_params: dict = {
"organization": self.openai_organization,
"base_url": self.openai_api_base,
"timeout": self.request_timeout,
"default_headers": self.default_headers,
"default_query": self.default_query,
}
if self.request_timeout is not None:
client_params["timeout"] = self.request_timeout
if self.max_retries is not None:
client_params["max_retries"] = self.max_retries

Expand Down
14 changes: 14 additions & 0 deletions libs/partners/openai/tests/unit_tests/chat_models/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,20 @@ def test_openai_client_caching() -> None:
assert llm1.root_client._client is not llm7.root_client._client


def test_timeout_omitted_from_client_params_when_none() -> None:
"""Timeout should be omitted from client_params when None (default),
letting the SDK's built-in default apply."""
with patch("openai.OpenAI") as mock_sync:
ChatOpenAI(model="gpt-4.1-mini", api_key=SecretStr("test"))
sync_kwargs = mock_sync.call_args
assert "timeout" not in sync_kwargs.kwargs

with patch("openai.OpenAI") as mock_sync:
ChatOpenAI(model="gpt-4.1-mini", api_key=SecretStr("test"), timeout=30)
sync_kwargs = mock_sync.call_args
assert sync_kwargs.kwargs.get("timeout") == 30


def test_profile() -> None:
model = ChatOpenAI(model="gpt-4")
assert model.profile
Expand Down
Loading