mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-07-30 12:20:57 +08:00
Initial commit: OpenRouter Python SDK
Auto-generated Python SDK for OpenRouter API, providing comprehensive client library with: - Chat completions and streaming support - Embeddings API - Model and provider information - API key management - Analytics and usage tracking - OAuth authentication flows - Full type hints and error handling
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from .openroutererror import OpenRouterError
|
||||
from typing import TYPE_CHECKING
|
||||
from importlib import import_module
|
||||
import builtins
|
||||
import sys
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .badgatewayresponse_error import (
|
||||
BadGatewayResponseError,
|
||||
BadGatewayResponseErrorData,
|
||||
)
|
||||
from .badrequestresponse_error import (
|
||||
BadRequestResponseError,
|
||||
BadRequestResponseErrorData,
|
||||
)
|
||||
from .chaterror import ChatError, ChatErrorData
|
||||
from .edgenetworktimeoutresponse_error import (
|
||||
EdgeNetworkTimeoutResponseError,
|
||||
EdgeNetworkTimeoutResponseErrorData,
|
||||
)
|
||||
from .forbiddenresponse_error import (
|
||||
ForbiddenResponseError,
|
||||
ForbiddenResponseErrorData,
|
||||
)
|
||||
from .internalserverresponse_error import (
|
||||
InternalServerResponseError,
|
||||
InternalServerResponseErrorData,
|
||||
)
|
||||
from .no_response_error import NoResponseError
|
||||
from .notfoundresponse_error import NotFoundResponseError, NotFoundResponseErrorData
|
||||
from .openrouterdefaulterror import OpenRouterDefaultError
|
||||
from .payloadtoolargeresponse_error import (
|
||||
PayloadTooLargeResponseError,
|
||||
PayloadTooLargeResponseErrorData,
|
||||
)
|
||||
from .paymentrequiredresponse_error import (
|
||||
PaymentRequiredResponseError,
|
||||
PaymentRequiredResponseErrorData,
|
||||
)
|
||||
from .provideroverloadedresponse_error import (
|
||||
ProviderOverloadedResponseError,
|
||||
ProviderOverloadedResponseErrorData,
|
||||
)
|
||||
from .requesttimeoutresponse_error import (
|
||||
RequestTimeoutResponseError,
|
||||
RequestTimeoutResponseErrorData,
|
||||
)
|
||||
from .responsevalidationerror import ResponseValidationError
|
||||
from .serviceunavailableresponse_error import (
|
||||
ServiceUnavailableResponseError,
|
||||
ServiceUnavailableResponseErrorData,
|
||||
)
|
||||
from .toomanyrequestsresponse_error import (
|
||||
TooManyRequestsResponseError,
|
||||
TooManyRequestsResponseErrorData,
|
||||
)
|
||||
from .unauthorizedresponse_error import (
|
||||
UnauthorizedResponseError,
|
||||
UnauthorizedResponseErrorData,
|
||||
)
|
||||
from .unprocessableentityresponse_error import (
|
||||
UnprocessableEntityResponseError,
|
||||
UnprocessableEntityResponseErrorData,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"BadGatewayResponseError",
|
||||
"BadGatewayResponseErrorData",
|
||||
"BadRequestResponseError",
|
||||
"BadRequestResponseErrorData",
|
||||
"ChatError",
|
||||
"ChatErrorData",
|
||||
"EdgeNetworkTimeoutResponseError",
|
||||
"EdgeNetworkTimeoutResponseErrorData",
|
||||
"ForbiddenResponseError",
|
||||
"ForbiddenResponseErrorData",
|
||||
"InternalServerResponseError",
|
||||
"InternalServerResponseErrorData",
|
||||
"NoResponseError",
|
||||
"NotFoundResponseError",
|
||||
"NotFoundResponseErrorData",
|
||||
"OpenRouterDefaultError",
|
||||
"OpenRouterError",
|
||||
"PayloadTooLargeResponseError",
|
||||
"PayloadTooLargeResponseErrorData",
|
||||
"PaymentRequiredResponseError",
|
||||
"PaymentRequiredResponseErrorData",
|
||||
"ProviderOverloadedResponseError",
|
||||
"ProviderOverloadedResponseErrorData",
|
||||
"RequestTimeoutResponseError",
|
||||
"RequestTimeoutResponseErrorData",
|
||||
"ResponseValidationError",
|
||||
"ServiceUnavailableResponseError",
|
||||
"ServiceUnavailableResponseErrorData",
|
||||
"TooManyRequestsResponseError",
|
||||
"TooManyRequestsResponseErrorData",
|
||||
"UnauthorizedResponseError",
|
||||
"UnauthorizedResponseErrorData",
|
||||
"UnprocessableEntityResponseError",
|
||||
"UnprocessableEntityResponseErrorData",
|
||||
]
|
||||
|
||||
_dynamic_imports: dict[str, str] = {
|
||||
"BadGatewayResponseError": ".badgatewayresponse_error",
|
||||
"BadGatewayResponseErrorData": ".badgatewayresponse_error",
|
||||
"BadRequestResponseError": ".badrequestresponse_error",
|
||||
"BadRequestResponseErrorData": ".badrequestresponse_error",
|
||||
"ChatError": ".chaterror",
|
||||
"ChatErrorData": ".chaterror",
|
||||
"EdgeNetworkTimeoutResponseError": ".edgenetworktimeoutresponse_error",
|
||||
"EdgeNetworkTimeoutResponseErrorData": ".edgenetworktimeoutresponse_error",
|
||||
"ForbiddenResponseError": ".forbiddenresponse_error",
|
||||
"ForbiddenResponseErrorData": ".forbiddenresponse_error",
|
||||
"InternalServerResponseError": ".internalserverresponse_error",
|
||||
"InternalServerResponseErrorData": ".internalserverresponse_error",
|
||||
"NoResponseError": ".no_response_error",
|
||||
"NotFoundResponseError": ".notfoundresponse_error",
|
||||
"NotFoundResponseErrorData": ".notfoundresponse_error",
|
||||
"OpenRouterDefaultError": ".openrouterdefaulterror",
|
||||
"PayloadTooLargeResponseError": ".payloadtoolargeresponse_error",
|
||||
"PayloadTooLargeResponseErrorData": ".payloadtoolargeresponse_error",
|
||||
"PaymentRequiredResponseError": ".paymentrequiredresponse_error",
|
||||
"PaymentRequiredResponseErrorData": ".paymentrequiredresponse_error",
|
||||
"ProviderOverloadedResponseError": ".provideroverloadedresponse_error",
|
||||
"ProviderOverloadedResponseErrorData": ".provideroverloadedresponse_error",
|
||||
"RequestTimeoutResponseError": ".requesttimeoutresponse_error",
|
||||
"RequestTimeoutResponseErrorData": ".requesttimeoutresponse_error",
|
||||
"ResponseValidationError": ".responsevalidationerror",
|
||||
"ServiceUnavailableResponseError": ".serviceunavailableresponse_error",
|
||||
"ServiceUnavailableResponseErrorData": ".serviceunavailableresponse_error",
|
||||
"TooManyRequestsResponseError": ".toomanyrequestsresponse_error",
|
||||
"TooManyRequestsResponseErrorData": ".toomanyrequestsresponse_error",
|
||||
"UnauthorizedResponseError": ".unauthorizedresponse_error",
|
||||
"UnauthorizedResponseErrorData": ".unauthorizedresponse_error",
|
||||
"UnprocessableEntityResponseError": ".unprocessableentityresponse_error",
|
||||
"UnprocessableEntityResponseErrorData": ".unprocessableentityresponse_error",
|
||||
}
|
||||
|
||||
|
||||
def dynamic_import(modname, retries=3):
|
||||
for attempt in range(retries):
|
||||
try:
|
||||
return import_module(modname, __package__)
|
||||
except KeyError:
|
||||
# Clear any half-initialized module and retry
|
||||
sys.modules.pop(modname, None)
|
||||
if attempt == retries - 1:
|
||||
break
|
||||
raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
|
||||
|
||||
|
||||
def __getattr__(attr_name: str) -> object:
|
||||
module_name = _dynamic_imports.get(attr_name)
|
||||
if module_name is None:
|
||||
raise AttributeError(
|
||||
f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
|
||||
)
|
||||
|
||||
try:
|
||||
module = dynamic_import(module_name)
|
||||
result = getattr(module, attr_name)
|
||||
return result
|
||||
except ImportError as e:
|
||||
raise ImportError(
|
||||
f"Failed to import {attr_name} from {module_name}: {e}"
|
||||
) from e
|
||||
except AttributeError as e:
|
||||
raise AttributeError(
|
||||
f"Failed to get {attr_name} from {module_name}: {e}"
|
||||
) from e
|
||||
|
||||
|
||||
def __dir__():
|
||||
lazy_attrs = builtins.list(_dynamic_imports.keys())
|
||||
return builtins.sorted(lazy_attrs)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
badgatewayresponseerrordata as models_badgatewayresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class BadGatewayResponseErrorData(BaseModel):
|
||||
error: models_badgatewayresponseerrordata.BadGatewayResponseErrorData
|
||||
r"""Error data for BadGatewayResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class BadGatewayResponseError(OpenRouterError):
|
||||
r"""Bad Gateway - Provider/upstream API failure"""
|
||||
|
||||
data: BadGatewayResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: BadGatewayResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
badrequestresponseerrordata as models_badrequestresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class BadRequestResponseErrorData(BaseModel):
|
||||
error: models_badrequestresponseerrordata.BadRequestResponseErrorData
|
||||
r"""Error data for BadRequestResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class BadRequestResponseError(OpenRouterError):
|
||||
r"""Bad Request - Invalid request parameters or malformed input"""
|
||||
|
||||
data: BadRequestResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: BadRequestResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,29 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import chaterror as models_chaterror
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ChatErrorData(BaseModel):
|
||||
error: models_chaterror.ChatErrorError
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class ChatError(OpenRouterError):
|
||||
data: ChatErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: ChatErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,38 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
edgenetworktimeoutresponseerrordata as models_edgenetworktimeoutresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class EdgeNetworkTimeoutResponseErrorData(BaseModel):
|
||||
error: (
|
||||
models_edgenetworktimeoutresponseerrordata.EdgeNetworkTimeoutResponseErrorData
|
||||
)
|
||||
r"""Error data for EdgeNetworkTimeoutResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class EdgeNetworkTimeoutResponseError(OpenRouterError):
|
||||
r"""Infrastructure Timeout - Provider request timed out at edge network"""
|
||||
|
||||
data: EdgeNetworkTimeoutResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: EdgeNetworkTimeoutResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
forbiddenresponseerrordata as models_forbiddenresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ForbiddenResponseErrorData(BaseModel):
|
||||
error: models_forbiddenresponseerrordata.ForbiddenResponseErrorData
|
||||
r"""Error data for ForbiddenResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class ForbiddenResponseError(OpenRouterError):
|
||||
r"""Forbidden - Authentication successful but insufficient permissions"""
|
||||
|
||||
data: ForbiddenResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: ForbiddenResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
internalserverresponseerrordata as models_internalserverresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class InternalServerResponseErrorData(BaseModel):
|
||||
error: models_internalserverresponseerrordata.InternalServerResponseErrorData
|
||||
r"""Error data for InternalServerResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class InternalServerResponseError(OpenRouterError):
|
||||
r"""Internal Server Error - Unexpected server error"""
|
||||
|
||||
data: InternalServerResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: InternalServerResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,17 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class NoResponseError(Exception):
|
||||
"""Error raised when no HTTP response is received from the server."""
|
||||
|
||||
message: str
|
||||
|
||||
def __init__(self, message: str = "No response received"):
|
||||
object.__setattr__(self, "message", message)
|
||||
super().__init__(message)
|
||||
|
||||
def __str__(self):
|
||||
return self.message
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
notfoundresponseerrordata as models_notfoundresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class NotFoundResponseErrorData(BaseModel):
|
||||
error: models_notfoundresponseerrordata.NotFoundResponseErrorData
|
||||
r"""Error data for NotFoundResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class NotFoundResponseError(OpenRouterError):
|
||||
r"""Not Found - Resource does not exist"""
|
||||
|
||||
data: NotFoundResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: NotFoundResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,40 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
import httpx
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass
|
||||
|
||||
from openrouter.errors import OpenRouterError
|
||||
|
||||
MAX_MESSAGE_LEN = 10_000
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class OpenRouterDefaultError(OpenRouterError):
|
||||
"""The fallback error class if no more specific error class is matched."""
|
||||
|
||||
def __init__(
|
||||
self, message: str, raw_response: httpx.Response, body: Optional[str] = None
|
||||
):
|
||||
body_display = body or raw_response.text or '""'
|
||||
|
||||
if message:
|
||||
message += ": "
|
||||
message += f"Status {raw_response.status_code}"
|
||||
|
||||
headers = raw_response.headers
|
||||
content_type = headers.get("content-type", '""')
|
||||
if content_type != "application/json":
|
||||
if " " in content_type:
|
||||
content_type = f'"{content_type}"'
|
||||
message += f" Content-Type {content_type}"
|
||||
|
||||
if len(body_display) > MAX_MESSAGE_LEN:
|
||||
truncated = body_display[:MAX_MESSAGE_LEN]
|
||||
remaining = len(body_display) - MAX_MESSAGE_LEN
|
||||
body_display = f"{truncated}...and {remaining} more chars"
|
||||
|
||||
message += f". Body: {body_display}"
|
||||
message = message.strip()
|
||||
|
||||
super().__init__(message, raw_response, body)
|
||||
@@ -0,0 +1,30 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
import httpx
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class OpenRouterError(Exception):
|
||||
"""The base class for all HTTP error responses."""
|
||||
|
||||
message: str
|
||||
status_code: int
|
||||
body: str
|
||||
headers: httpx.Headers = field(hash=False)
|
||||
raw_response: httpx.Response = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self, message: str, raw_response: httpx.Response, body: Optional[str] = None
|
||||
):
|
||||
object.__setattr__(self, "message", message)
|
||||
object.__setattr__(self, "status_code", raw_response.status_code)
|
||||
object.__setattr__(
|
||||
self, "body", body if body is not None else raw_response.text
|
||||
)
|
||||
object.__setattr__(self, "headers", raw_response.headers)
|
||||
object.__setattr__(self, "raw_response", raw_response)
|
||||
|
||||
def __str__(self):
|
||||
return self.message
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
payloadtoolargeresponseerrordata as models_payloadtoolargeresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class PayloadTooLargeResponseErrorData(BaseModel):
|
||||
error: models_payloadtoolargeresponseerrordata.PayloadTooLargeResponseErrorData
|
||||
r"""Error data for PayloadTooLargeResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class PayloadTooLargeResponseError(OpenRouterError):
|
||||
r"""Payload Too Large - Request payload exceeds size limits"""
|
||||
|
||||
data: PayloadTooLargeResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: PayloadTooLargeResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
paymentrequiredresponseerrordata as models_paymentrequiredresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class PaymentRequiredResponseErrorData(BaseModel):
|
||||
error: models_paymentrequiredresponseerrordata.PaymentRequiredResponseErrorData
|
||||
r"""Error data for PaymentRequiredResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class PaymentRequiredResponseError(OpenRouterError):
|
||||
r"""Payment Required - Insufficient credits or quota to complete request"""
|
||||
|
||||
data: PaymentRequiredResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: PaymentRequiredResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,38 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
provideroverloadedresponseerrordata as models_provideroverloadedresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProviderOverloadedResponseErrorData(BaseModel):
|
||||
error: (
|
||||
models_provideroverloadedresponseerrordata.ProviderOverloadedResponseErrorData
|
||||
)
|
||||
r"""Error data for ProviderOverloadedResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class ProviderOverloadedResponseError(OpenRouterError):
|
||||
r"""Provider Overloaded - Provider is temporarily overloaded"""
|
||||
|
||||
data: ProviderOverloadedResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: ProviderOverloadedResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
requesttimeoutresponseerrordata as models_requesttimeoutresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class RequestTimeoutResponseErrorData(BaseModel):
|
||||
error: models_requesttimeoutresponseerrordata.RequestTimeoutResponseErrorData
|
||||
r"""Error data for RequestTimeoutResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class RequestTimeoutResponseError(OpenRouterError):
|
||||
r"""Request Timeout - Operation exceeded time limit"""
|
||||
|
||||
data: RequestTimeoutResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: RequestTimeoutResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,27 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
import httpx
|
||||
from typing import Optional
|
||||
from dataclasses import dataclass
|
||||
|
||||
from openrouter.errors import OpenRouterError
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class ResponseValidationError(OpenRouterError):
|
||||
"""Error raised when there is a type mismatch between the response data and the expected Pydantic model."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
message: str,
|
||||
raw_response: httpx.Response,
|
||||
cause: Exception,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
message = f"{message}: {cause}"
|
||||
super().__init__(message, raw_response, body)
|
||||
|
||||
@property
|
||||
def cause(self):
|
||||
"""Normally the Pydantic ValidationError"""
|
||||
return self.__cause__
|
||||
@@ -0,0 +1,38 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
serviceunavailableresponseerrordata as models_serviceunavailableresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ServiceUnavailableResponseErrorData(BaseModel):
|
||||
error: (
|
||||
models_serviceunavailableresponseerrordata.ServiceUnavailableResponseErrorData
|
||||
)
|
||||
r"""Error data for ServiceUnavailableResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class ServiceUnavailableResponseError(OpenRouterError):
|
||||
r"""Service Unavailable - Service temporarily unavailable"""
|
||||
|
||||
data: ServiceUnavailableResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: ServiceUnavailableResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
toomanyrequestsresponseerrordata as models_toomanyrequestsresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class TooManyRequestsResponseErrorData(BaseModel):
|
||||
error: models_toomanyrequestsresponseerrordata.TooManyRequestsResponseErrorData
|
||||
r"""Error data for TooManyRequestsResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class TooManyRequestsResponseError(OpenRouterError):
|
||||
r"""Too Many Requests - Rate limit exceeded"""
|
||||
|
||||
data: TooManyRequestsResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: TooManyRequestsResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
unauthorizedresponseerrordata as models_unauthorizedresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class UnauthorizedResponseErrorData(BaseModel):
|
||||
error: models_unauthorizedresponseerrordata.UnauthorizedResponseErrorData
|
||||
r"""Error data for UnauthorizedResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class UnauthorizedResponseError(OpenRouterError):
|
||||
r"""Unauthorized - Authentication required or invalid credentials"""
|
||||
|
||||
data: UnauthorizedResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: UnauthorizedResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
@@ -0,0 +1,38 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
import httpx
|
||||
from openrouter.errors import OpenRouterError
|
||||
from openrouter.models import (
|
||||
unprocessableentityresponseerrordata as models_unprocessableentityresponseerrordata,
|
||||
)
|
||||
from openrouter.types import BaseModel, OptionalNullable, UNSET
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class UnprocessableEntityResponseErrorData(BaseModel):
|
||||
error: (
|
||||
models_unprocessableentityresponseerrordata.UnprocessableEntityResponseErrorData
|
||||
)
|
||||
r"""Error data for UnprocessableEntityResponse"""
|
||||
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
|
||||
@dataclass(unsafe_hash=True)
|
||||
class UnprocessableEntityResponseError(OpenRouterError):
|
||||
r"""Unprocessable Entity - Semantic validation failure"""
|
||||
|
||||
data: UnprocessableEntityResponseErrorData = field(hash=False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
data: UnprocessableEntityResponseErrorData,
|
||||
raw_response: httpx.Response,
|
||||
body: Optional[str] = None,
|
||||
):
|
||||
fallback = body or raw_response.text
|
||||
message = str(data.error.message) or fallback
|
||||
super().__init__(message, raw_response, body)
|
||||
object.__setattr__(self, "data", data)
|
||||
Reference in New Issue
Block a user