Jack1808/Claude_Code
0
1"""Unified exception hierarchy for providers."""2 3from typing import Any4 5 6class ProviderError(Exception):7 """Base exception for all provider errors."""8 9 def __init__(10 self,11 message: str,12 status_code: int = 500,13 error_type: str = "api_error",14 raw_error: Any = None,15 ):16 super().__init__(message)17 self.message = message18 self.status_code = status_code19 self.error_type = error_type20 self.raw_error = raw_error21 22 def to_anthropic_format(self) -> dict:23 """Convert to Anthropic-compatible error response."""24 return {25 "type": "error",26 "error": {27 "type": self.error_type,28 "message": self.message,29 },30 }31 32 33class AuthenticationError(ProviderError):34 """Raised when API key is invalid or missing."""35 36 def __init__(self, message: str, raw_error: Any = None):37 super().__init__(38 message,39 status_code=401,40 error_type="authentication_error",41 raw_error=raw_error,42 )43 44 45class InvalidRequestError(ProviderError):46 """Raised when the request parameters are invalid."""47 48 def __init__(self, message: str, raw_error: Any = None):49 super().__init__(50 message,51 status_code=400,52 error_type="invalid_request_error",53 raw_error=raw_error,54 )55 56 57class RateLimitError(ProviderError):58 """Raised when rate limit is exceeded."""59 60 def __init__(self, message: str, raw_error: Any = None):61 super().__init__(62 message,63 status_code=429,64 error_type="rate_limit_error",65 raw_error=raw_error,66 )67 68 69class OverloadedError(ProviderError):70 """Raised when the provider is overloaded."""71 72 def __init__(self, message: str, raw_error: Any = None):73 super().__init__(74 message,75 status_code=529,76 error_type="overloaded_error",77 raw_error=raw_error,78 )79 80 81class APIError(ProviderError):82 """Raised when the provider returns a generic API error."""83 84 def __init__(self, message: str, status_code: int = 500, raw_error: Any = None):85 super().__init__(86 message,87 status_code=status_code,88 error_type="api_error",89 raw_error=raw_error,90 )91 