aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/openai/_exceptions.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/openai/_exceptions.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-4a52a71956a8d46fcb7294ac71734504bb09bcc2.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/openai/_exceptions.py')
-rw-r--r--.venv/lib/python3.12/site-packages/openai/_exceptions.py156
1 files changed, 156 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/openai/_exceptions.py b/.venv/lib/python3.12/site-packages/openai/_exceptions.py
new file mode 100644
index 00000000..e326ed95
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/openai/_exceptions.py
@@ -0,0 +1,156 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any, Optional, cast
+from typing_extensions import Literal
+
+import httpx
+
+from ._utils import is_dict
+from ._models import construct_type
+
+if TYPE_CHECKING:
+ from .types.chat import ChatCompletion
+
+__all__ = [
+ "BadRequestError",
+ "AuthenticationError",
+ "PermissionDeniedError",
+ "NotFoundError",
+ "ConflictError",
+ "UnprocessableEntityError",
+ "RateLimitError",
+ "InternalServerError",
+ "LengthFinishReasonError",
+ "ContentFilterFinishReasonError",
+]
+
+
+class OpenAIError(Exception):
+ pass
+
+
+class APIError(OpenAIError):
+ message: str
+ request: httpx.Request
+
+ body: object | None
+ """The API response body.
+
+ If the API responded with a valid JSON structure then this property will be the
+ decoded result.
+
+ If it isn't a valid JSON structure then this will be the raw response.
+
+ If there was no response associated with this error then it will be `None`.
+ """
+
+ code: Optional[str] = None
+ param: Optional[str] = None
+ type: Optional[str]
+
+ def __init__(self, message: str, request: httpx.Request, *, body: object | None) -> None:
+ super().__init__(message)
+ self.request = request
+ self.message = message
+ self.body = body
+
+ if is_dict(body):
+ self.code = cast(Any, construct_type(type_=Optional[str], value=body.get("code")))
+ self.param = cast(Any, construct_type(type_=Optional[str], value=body.get("param")))
+ self.type = cast(Any, construct_type(type_=str, value=body.get("type")))
+ else:
+ self.code = None
+ self.param = None
+ self.type = None
+
+
+class APIResponseValidationError(APIError):
+ response: httpx.Response
+ status_code: int
+
+ def __init__(self, response: httpx.Response, body: object | None, *, message: str | None = None) -> None:
+ super().__init__(message or "Data returned by API invalid for expected schema.", response.request, body=body)
+ self.response = response
+ self.status_code = response.status_code
+
+
+class APIStatusError(APIError):
+ """Raised when an API response has a status code of 4xx or 5xx."""
+
+ response: httpx.Response
+ status_code: int
+ request_id: str | None
+
+ def __init__(self, message: str, *, response: httpx.Response, body: object | None) -> None:
+ super().__init__(message, response.request, body=body)
+ self.response = response
+ self.status_code = response.status_code
+ self.request_id = response.headers.get("x-request-id")
+
+
+class APIConnectionError(APIError):
+ def __init__(self, *, message: str = "Connection error.", request: httpx.Request) -> None:
+ super().__init__(message, request, body=None)
+
+
+class APITimeoutError(APIConnectionError):
+ def __init__(self, request: httpx.Request) -> None:
+ super().__init__(message="Request timed out.", request=request)
+
+
+class BadRequestError(APIStatusError):
+ status_code: Literal[400] = 400 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class AuthenticationError(APIStatusError):
+ status_code: Literal[401] = 401 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class PermissionDeniedError(APIStatusError):
+ status_code: Literal[403] = 403 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class NotFoundError(APIStatusError):
+ status_code: Literal[404] = 404 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class ConflictError(APIStatusError):
+ status_code: Literal[409] = 409 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class UnprocessableEntityError(APIStatusError):
+ status_code: Literal[422] = 422 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class RateLimitError(APIStatusError):
+ status_code: Literal[429] = 429 # pyright: ignore[reportIncompatibleVariableOverride]
+
+
+class InternalServerError(APIStatusError):
+ pass
+
+
+class LengthFinishReasonError(OpenAIError):
+ completion: ChatCompletion
+ """The completion that caused this error.
+
+ Note: this will *not* be a complete `ChatCompletion` object when streaming as `usage`
+ will not be included.
+ """
+
+ def __init__(self, *, completion: ChatCompletion) -> None:
+ msg = "Could not parse response content as the length limit was reached"
+ if completion.usage:
+ msg += f" - {completion.usage}"
+
+ super().__init__(msg)
+ self.completion = completion
+
+
+class ContentFilterFinishReasonError(OpenAIError):
+ def __init__(self) -> None:
+ super().__init__(
+ f"Could not parse response content as the request was rejected by the content filter",
+ )