from typing import override


class InvokeError(Exception):
    """Base class for all LLM exceptions."""

    description: str = ""

    def __init__(self, description: str = ""):
        self.description = description

    @override
    def __str__(self):
        return self.description or self.__class__.__name__


class InvokeRateLimitError(InvokeError):
    """Raised when the Invoke returns rate limit error."""

    description = "Rate Limit Error"
