Commit 665f4dcb
Changed files (1)
src
openai
src/openai/_base_client.py
@@ -956,6 +956,11 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
stream: bool,
stream_cls: type[_StreamT] | None,
) -> ResponseT | _StreamT:
+ # create a copy of the options we were given so that if the
+ # options are mutated later & we then retry, the retries are
+ # given the original options
+ input_options = model_copy(options)
+
cast_to = self._maybe_override_cast_to(cast_to, options)
self._prepare_options(options)
@@ -980,7 +985,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
if retries > 0:
return self._retry_request(
- options,
+ input_options,
cast_to,
retries,
stream=stream,
@@ -995,7 +1000,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
if retries > 0:
return self._retry_request(
- options,
+ input_options,
cast_to,
retries,
stream=stream,
@@ -1024,7 +1029,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
if retries > 0 and self._should_retry(err.response):
err.response.close()
return self._retry_request(
- options,
+ input_options,
cast_to,
retries,
err.response.headers,
@@ -1533,6 +1538,11 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
# execute it earlier while we are in an async context
self._platform = await asyncify(get_platform)()
+ # create a copy of the options we were given so that if the
+ # options are mutated later & we then retry, the retries are
+ # given the original options
+ input_options = model_copy(options)
+
cast_to = self._maybe_override_cast_to(cast_to, options)
await self._prepare_options(options)
@@ -1555,7 +1565,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
if retries > 0:
return await self._retry_request(
- options,
+ input_options,
cast_to,
retries,
stream=stream,
@@ -1570,7 +1580,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
if retries > 0:
return await self._retry_request(
- options,
+ input_options,
cast_to,
retries,
stream=stream,
@@ -1593,7 +1603,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
if retries > 0 and self._should_retry(err.response):
await err.response.aclose()
return await self._retry_request(
- options,
+ input_options,
cast_to,
retries,
err.response.headers,