|
# retoor <retoor@molodetz.nl>
|
|
|
|
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,
|
|
)
|