class ProviderError(Exception): """Base provider exception.""" class ProviderTransientError(ProviderError): """Temporary provider failure that can be retried.""" class ProviderRateLimitError(ProviderTransientError): """Raised when provider rate limit is hit.""" def __init__(self, message: str, retry_after_seconds: int = 30): super().__init__(message) self.retry_after_seconds = retry_after_seconds class ProviderNotFoundError(ProviderError): """Raised when an unknown provider namespace is requested."""