class PipelineError(Exception): """Base class for pipeline failures. `stage` and `message` are shown to the user directly; the original exception (if any) is kept for logs only.""" def __init__(self, stage: str, message: str, cause: Exception | None = None): self.stage = stage self.message = message self.cause = cause super().__init__(f"[{stage}] {message}") class AudioExtractionError(PipelineError): def __init__(self, message: str, cause: Exception | None = None): super().__init__("audio_extraction", message, cause) class TranscriptionError(PipelineError): def __init__(self, message: str, cause: Exception | None = None): super().__init__("transcription", message, cause) class DiarizationError(PipelineError): def __init__(self, message: str, cause: Exception | None = None): super().__init__("diarization", message, cause) class SummarizationError(PipelineError): def __init__(self, message: str, cause: Exception | None = None): super().__init__("summarization", message, cause)