from __future__ import annotations class OcrServiceError(Exception): """Base exception for OCR service failures.""" class OcrProviderError(OcrServiceError): """Raised when the upstream OCR provider cannot complete the request.""" def __init__( self, message: str, *, status_code: int | None = None, response_body: str | None = None, ) -> None: super().__init__(message) self.status_code = status_code self.response_body = response_body class InvalidImageError(OcrServiceError): """Raised when an uploaded payload is empty, too large, or unsupported."""