class ChirppyError(Exception):
    """Base exception for all chirppy errors."""


class ConfigurationError(ChirppyError):
    """Raised when required configuration is missing."""


class ProviderError(ChirppyError):
    """Raised when a provider fails to send a message."""


class DeliveryError(ProviderError):
    """Raised when an HTTP request fails or returns an error response."""


class RetryableDeliveryError(DeliveryError):
    """Raised when an HTTP Request fails or returns a status code >= 500."""
