## LiteLLM versions of the OpenAI Exception Types
from openai.error import AuthenticationError, InvalidRequestError, RateLimitError, ServiceUnavailableError, OpenAIError

class AuthenticationError(AuthenticationError):
    def __init__(self, message, llm_provider):
        self.status_code = 401
        self.message = message
        self.llm_provider = llm_provider
        super().__init__(self.message) # Call the base class constructor with the parameters it needs


class InvalidRequestError(InvalidRequestError):
    def __init__(self, message, model, llm_provider):
        self.status_code = 400
        self.message = message
        self.model = model
        self.llm_provider = llm_provider
        super().__init__(self.message, f"{self.model}") # Call the base class constructor with the parameters it needs


class RateLimitError(RateLimitError):
    def __init__(self, message, llm_provider):
        self.status_code = 429
        self.message = message
        self.llm_provider = llm_provider
        super().__init__(self.message) # Call the base class constructor with the parameters it needs

class ServiceUnavailableError(ServiceUnavailableError):
    def __init__(self, message, llm_provider):
        self.status_code = 500
        self.message = message
        self.llm_provider = llm_provider
        super().__init__(self.message) # Call the base class constructor with the parameters it needs

class OpenAIError(OpenAIError):
    def __init__(self, original_exception):
        self.status_code = original_exception.http_status
        super().__init__(http_body=original_exception.http_body,
                         http_status=original_exception.http_status,
                         json_body=original_exception.json_body,
                         headers=original_exception.headers,
                         code=original_exception.code)
        self.llm_provider = "openai"