From 18fe6faccff7b4ee03830413a272c40c1a684afb Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Tue, 10 Mar 2026 01:00:30 -0700 Subject: [PATCH] fix(client): treat empty OPENAI_BASE_URL as unset When OPENAI_BASE_URL is set to an empty string, os.environ.get() returns "" instead of None, preventing the fallback to the default API endpoint. Use `or None` to treat empty strings as missing. Fixes #2927 Co-Authored-By: Claude Opus 4.6 --- src/openai/_client.py | 4 ++-- tests/test_client.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/openai/_client.py b/src/openai/_client.py index aadf3601f2..04261feace 100644 --- a/src/openai/_client.py +++ b/src/openai/_client.py @@ -161,7 +161,7 @@ def __init__( self.websocket_base_url = websocket_base_url if base_url is None: - base_url = os.environ.get("OPENAI_BASE_URL") + base_url = os.environ.get("OPENAI_BASE_URL") or None if base_url is None: base_url = f"https://api.openai.com/v1" @@ -536,7 +536,7 @@ def __init__( self.websocket_base_url = websocket_base_url if base_url is None: - base_url = os.environ.get("OPENAI_BASE_URL") + base_url = os.environ.get("OPENAI_BASE_URL") or None if base_url is None: base_url = f"https://api.openai.com/v1" diff --git a/tests/test_client.py b/tests/test_client.py index a015cd7d40..995e9e1edc 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -696,6 +696,11 @@ def test_base_url_env(self) -> None: client = OpenAI(api_key=api_key, _strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" + def test_base_url_env_empty_string(self) -> None: + with update_env(OPENAI_BASE_URL=""): + client = OpenAI(api_key=api_key, _strict_response_validation=True) + assert client.base_url == "https://api.openai.com/v1/" + @pytest.mark.parametrize( "client", [ @@ -1734,6 +1739,11 @@ async def test_base_url_env(self) -> None: client = AsyncOpenAI(api_key=api_key, _strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" + async def test_base_url_env_empty_string(self) -> None: + with update_env(OPENAI_BASE_URL=""): + client = AsyncOpenAI(api_key=api_key, _strict_response_validation=True) + assert client.base_url == "https://api.openai.com/v1/" + @pytest.mark.parametrize( "client", [