# retoor from __future__ import annotations import json from typing import Any class DeviiError(Exception): code: str = "error" def __init__(self, message: str, **details: Any) -> None: super().__init__(message) self.message = message self.details = details def as_payload(self) -> dict[str, Any]: payload: dict[str, Any] = {"error": self.code, "message": self.message} payload.update(self.details) return payload class AuthRequiredError(DeviiError): code = "auth_required" class NetworkError(DeviiError): code = "network_error" class UpstreamError(DeviiError): code = "upstream_error" class ToolInputError(DeviiError): code = "tool_input_error" class LLMError(DeviiError): code = "llm_error" def error_result(error: DeviiError) -> str: return json.dumps(error.as_payload(), ensure_ascii=False) def unexpected_result(exc: Exception) -> str: return json.dumps( {"error": "unexpected", "message": str(exc), "type": type(exc).__name__}, ensure_ascii=False, )