Commit 1455a7c1

Stainless Bot <107565488+stainless-bot@users.noreply.github.com>
2023-11-10 04:17:50
fix(client): correctly assign error properties (#759)
1 parent aa68189
Changed files (1)
src
openai
src/openai/_client.py
@@ -20,7 +20,7 @@ from ._types import (
     ProxiesTypes,
     RequestOptions,
 )
-from ._utils import is_given
+from ._utils import is_given, is_mapping
 from ._version import __version__
 from ._streaming import Stream as Stream
 from ._streaming import AsyncStream as AsyncStream
@@ -221,30 +221,31 @@ class OpenAI(SyncAPIClient):
         body: object,
         response: httpx.Response,
     ) -> APIStatusError:
+        data = body.get("error", body) if is_mapping(body) else body
         if response.status_code == 400:
-            return _exceptions.BadRequestError(err_msg, response=response, body=body)
+            return _exceptions.BadRequestError(err_msg, response=response, body=data)
 
         if response.status_code == 401:
-            return _exceptions.AuthenticationError(err_msg, response=response, body=body)
+            return _exceptions.AuthenticationError(err_msg, response=response, body=data)
 
         if response.status_code == 403:
-            return _exceptions.PermissionDeniedError(err_msg, response=response, body=body)
+            return _exceptions.PermissionDeniedError(err_msg, response=response, body=data)
 
         if response.status_code == 404:
-            return _exceptions.NotFoundError(err_msg, response=response, body=body)
+            return _exceptions.NotFoundError(err_msg, response=response, body=data)
 
         if response.status_code == 409:
-            return _exceptions.ConflictError(err_msg, response=response, body=body)
+            return _exceptions.ConflictError(err_msg, response=response, body=data)
 
         if response.status_code == 422:
-            return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body)
+            return _exceptions.UnprocessableEntityError(err_msg, response=response, body=data)
 
         if response.status_code == 429:
-            return _exceptions.RateLimitError(err_msg, response=response, body=body)
+            return _exceptions.RateLimitError(err_msg, response=response, body=data)
 
         if response.status_code >= 500:
-            return _exceptions.InternalServerError(err_msg, response=response, body=body)
-        return APIStatusError(err_msg, response=response, body=body)
+            return _exceptions.InternalServerError(err_msg, response=response, body=data)
+        return APIStatusError(err_msg, response=response, body=data)
 
 
 class AsyncOpenAI(AsyncAPIClient):
@@ -431,30 +432,31 @@ class AsyncOpenAI(AsyncAPIClient):
         body: object,
         response: httpx.Response,
     ) -> APIStatusError:
+        data = body.get("error", body) if is_mapping(body) else body
         if response.status_code == 400:
-            return _exceptions.BadRequestError(err_msg, response=response, body=body)
+            return _exceptions.BadRequestError(err_msg, response=response, body=data)
 
         if response.status_code == 401:
-            return _exceptions.AuthenticationError(err_msg, response=response, body=body)
+            return _exceptions.AuthenticationError(err_msg, response=response, body=data)
 
         if response.status_code == 403:
-            return _exceptions.PermissionDeniedError(err_msg, response=response, body=body)
+            return _exceptions.PermissionDeniedError(err_msg, response=response, body=data)
 
         if response.status_code == 404:
-            return _exceptions.NotFoundError(err_msg, response=response, body=body)
+            return _exceptions.NotFoundError(err_msg, response=response, body=data)
 
         if response.status_code == 409:
-            return _exceptions.ConflictError(err_msg, response=response, body=body)
+            return _exceptions.ConflictError(err_msg, response=response, body=data)
 
         if response.status_code == 422:
-            return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body)
+            return _exceptions.UnprocessableEntityError(err_msg, response=response, body=data)
 
         if response.status_code == 429:
-            return _exceptions.RateLimitError(err_msg, response=response, body=body)
+            return _exceptions.RateLimitError(err_msg, response=response, body=data)
 
         if response.status_code >= 500:
-            return _exceptions.InternalServerError(err_msg, response=response, body=body)
-        return APIStatusError(err_msg, response=response, body=body)
+            return _exceptions.InternalServerError(err_msg, response=response, body=data)
+        return APIStatusError(err_msg, response=response, body=data)
 
 
 class OpenAIWithRawResponse: