diff --git a/openai/api_requestor.py b/openai/api_requestor.py index cde4108bde..beaca4a8c7 100644 --- a/openai/api_requestor.py +++ b/openai/api_requestor.py @@ -362,7 +362,11 @@ def handle_error_response(self, rbody, rcode, resp, rheaders, stream_error=False error_data.get("message"), rbody, rcode, resp, rheaders ) elif rcode in [400, 404, 415]: - return error.InvalidRequestError( + error_type = error.InvalidRequestError + if error_data.get("code") == "content_filter": + error_type = error.ContentPolicyError + + return error_type( error_data.get("message"), error_data.get("param"), error_data.get("code"), diff --git a/openai/error.py b/openai/error.py index 2928ef6aa6..22d5c0f5e1 100644 --- a/openai/error.py +++ b/openai/error.py @@ -1,3 +1,4 @@ +import json import openai @@ -167,3 +168,34 @@ def __reduce__(self): self.sig_header, self.http_body, ) + + +class ContentPolicyError(InvalidRequestError): + + def __init__( + self, + message, + param, + code=None, + http_body=None, + http_status=None, + json_body=None, + headers=None, + ): + super().__init__( + message, + param, + code=code, + http_body=http_body, + http_status=http_status, + json_body=json_body, + headers=headers + ) + self.innererror = self.json_body["error"].get("innererror", {}) + self.content_filter_result = self.innererror.get("content_filter_result") + + + def __str__(self): + if self.innererror: + return f"{self._message}\nInner error: {json.dumps(self.innererror, indent=4)}" + return self._message