Errors
The error hierarchy in the BimpeAI Python SDK and the extra fields on each error type.
Every error raised by the SDK subclasses BimpeAIError. A UserError means the SDK rejected something before sending it, such as an empty API key. A connection that never produced a response raises APIConnectionError, and a timeout raises APITimeoutError, which is a subclass of it. Everything the server returned as an error subclasses APIError.
from bimpeai import RateLimitError, ValidationError
try:
client.agents.create(name="")
except ValidationError as err:
for field in err.field_errors:
print(field["path"], field["message"])
except RateLimitError as err:
print("retry after", err.retry_after, "seconds")Hierarchy
BimpeAIError
├── UserError
├── APIConnectionError
│ └── APITimeoutError
└── APIError
├── BadRequestError
│ └── ValidationError
├── AuthenticationError
├── PermissionDeniedError
├── NotFoundError
├── ConflictError
├── RateLimitError
├── InternalServerError
└── APINotImplementedErrorAPIError fields
Every APIError carries status, code, request_id, headers, and the raw body. code is one of the ErrorCode values (validation_error, bad_request, unauthorized, api_key_missing, api_key_invalid, api_key_expired, insufficient_scope, forbidden, not_found, conflict, rate_limited, too_many_requests, not_implemented, agent_limit_reached, internal_error).
ValidationError
ValidationError adds field_errors, a list of {"path", "message"} dicts.
RateLimitError
RateLimitError adds retry_after (seconds until the window resets), limit, remaining, and reset_at, read from the Retry-After and X-RateLimit-* response headers.