Files
cdsl-cad/backend/app/cad_agent/domain/errors.py
T

51 lines
1.8 KiB
Python

"""Typed, serializable failures used across the single-stage workflow."""
from __future__ import annotations
from dataclasses import dataclass, field
from enum import StrEnum
from typing import Any
class ErrorCode(StrEnum):
CANCELLED = "CANCELLED"
RUNTIME_CONTRACT_INVALID = "RUNTIME_CONTRACT_INVALID"
MODEL_STRUCTURED_OUTPUT_UNSUPPORTED = "MODEL_STRUCTURED_OUTPUT_UNSUPPORTED"
AUTHOR_TRANSPORT_UNAVAILABLE = "AUTHOR_TRANSPORT_UNAVAILABLE"
RENDER_SERVICE_UNAVAILABLE = "RENDER_SERVICE_UNAVAILABLE"
STORAGE_FAILURE = "STORAGE_FAILURE"
RUNTIME_EXECUTION_FAILURE = "RUNTIME_EXECUTION_FAILURE"
BEST_EFFORT_COMPLETED = "BEST_EFFORT_COMPLETED"
FAILED_INTERNAL = "FAILED_INTERNAL"
WAITING_FOR_USER = "WAITING_FOR_USER"
AUTHOR_FORBIDDEN_FIELD = "AUTHOR_FORBIDDEN_FIELD"
AUTHOR_SCHEMA_INVALID = "AUTHOR_SCHEMA_INVALID"
AUTHOR_REFERENCE_INVALID = "AUTHOR_REFERENCE_INVALID"
AUTHOR_CYCLE = "AUTHOR_CYCLE"
OPERATION_UNSUPPORTED = "OPERATION_UNSUPPORTED"
SELECTOR_NOT_FOUND = "SELECTOR_NOT_FOUND"
SELECTOR_AMBIGUOUS = "SELECTOR_AMBIGUOUS"
SELECTOR_DEPENDENCY_UNAVAILABLE = "SELECTOR_DEPENDENCY_UNAVAILABLE"
SELECTOR_KIND_MISMATCH = "SELECTOR_KIND_MISMATCH"
ENGINE_EXECUTION_FAILED = "ENGINE_EXECUTION_FAILED"
@dataclass(frozen=True, slots=True)
class WorkflowError:
"""An expected domain rejection, never a free-form exception channel."""
code: ErrorCode
message: str
field_errors: tuple[dict[str, Any], ...] = ()
retryable: bool = False
details: dict[str, Any] = field(default_factory=dict)
def payload(self) -> dict[str, Any]:
return {
"code": self.code.value,
"message": self.message,
"field_errors": list(self.field_errors),
"retryable": self.retryable,
"details": self.details,
}