Source code for ralph.mcp.multimodal.errors
"""Shared multimodal failure taxonomy for Ralph's managed MCP runtime path.
All code that needs to emit or classify a multimodal failure must use these
types rather than constructing ad hoc error strings. This keeps failure
messages consistent and machine-inspectable across capability detection,
tool handlers, upstream normalization, and invoke-time checks.
"""
from __future__ import annotations
from dataclasses import dataclass
from ralph.mcp.multimodal._failure_kind import MultimodalFailureKind
[docs]
@dataclass(frozen=True)
class MultimodalFailure:
"""A structured description of why a multimodal operation could not complete."""
kind: MultimodalFailureKind
message: str
modality: str | None = None
provider: str | None = None
model_id: str | None = None
[docs]
def user_message(self) -> str:
"""Return a human-readable failure message suitable for tool output."""
parts = [self.message]
if self.modality:
parts.append(f"modality: {self.modality}")
if self.provider:
parts.append(f"provider: {self.provider}")
if self.model_id:
parts.append(f"model: {self.model_id}")
return " | ".join(parts)
__all__ = [
"MultimodalFailure",
"MultimodalFailureKind",
]