diff --git a/src/openai/__init__.py b/src/openai/__init__.py index 7ce6df0817..6e90913161 100644 --- a/src/openai/__init__.py +++ b/src/openai/__init__.py @@ -182,7 +182,7 @@ def project(self, value: str | None) -> None: # type: ignore @override def base_url(self) -> _httpx.URL: if base_url is not None: - return _httpx.URL(base_url) + return self._enforce_trailing_slash(_httpx.URL(base_url)) return super().base_url @@ -245,6 +245,11 @@ def _client(self, value: _httpx.Client) -> None: # type: ignore http_client = value + def _enforce_trailing_slash(self, url: _httpx.URL) -> _httpx.URL: + if url.raw_path.endswith(b"/"): + return url + return url.copy_with(raw_path=url.raw_path + b"/") + class _AzureModuleClient(_ModuleClient, AzureOpenAI): # type: ignore ... diff --git a/tests/test_module_client.py b/tests/test_module_client.py index 6bab33a1d7..bab3e95f70 100644 --- a/tests/test_module_client.py +++ b/tests/test_module_client.py @@ -41,8 +41,8 @@ def test_base_url_option() -> None: openai.base_url = "http://foo.com" - assert openai.base_url == URL("http://foo.com") - assert openai.completions._client.base_url == URL("http://foo.com") + assert openai.base_url == URL("http://foo.com/") + assert openai.completions._client.base_url == URL("http://foo.com/") def test_timeout_option() -> None: