Skip to content

Commit aa5920a

Browse files
chore(client): validate that max_retries is not None (#1286)
1 parent 0470d1b commit aa5920a

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/openai/_base_client.py

+5
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,11 @@ def __init__(
361361
self._strict_response_validation = _strict_response_validation
362362
self._idempotency_header = None
363363

364+
if max_retries is None: # pyright: ignore[reportUnnecessaryComparison]
365+
raise TypeError(
366+
"max_retries cannot be None. If you want to disable retries, pass `0`; if you want unlimited retries, pass `math.inf` or a very high number; if you want the default behavior, pass `openai.DEFAULT_MAX_RETRIES`"
367+
)
368+
364369
def _enforce_trailing_slash(self, url: URL) -> URL:
365370
if url.raw_path.endswith(b"/"):
366371
return url

tests/test_client.py

+10
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,10 @@ class Model(BaseModel):
646646

647647
assert isinstance(exc.value.__cause__, ValidationError)
648648

649+
def test_client_max_retries_validation(self) -> None:
650+
with pytest.raises(TypeError, match=r"max_retries cannot be None"):
651+
OpenAI(base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None))
652+
649653
@pytest.mark.respx(base_url=base_url)
650654
def test_default_stream_cls(self, respx_mock: MockRouter) -> None:
651655
class Model(BaseModel):
@@ -1368,6 +1372,12 @@ class Model(BaseModel):
13681372

13691373
assert isinstance(exc.value.__cause__, ValidationError)
13701374

1375+
async def test_client_max_retries_validation(self) -> None:
1376+
with pytest.raises(TypeError, match=r"max_retries cannot be None"):
1377+
AsyncOpenAI(
1378+
base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None)
1379+
)
1380+
13711381
@pytest.mark.respx(base_url=base_url)
13721382
@pytest.mark.asyncio
13731383
async def test_default_stream_cls(self, respx_mock: MockRouter) -> None:

0 commit comments

Comments
 (0)