Files

49 lines
1.7 KiB
Python

"""Adapter exceptions and OpenAI-shaped error responses."""
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
class AdapterError(Exception):
"""Base class; renders as an OpenAI error body."""
def __init__(self, status: int, message: str, err_type: str, code: str | None = None):
self.status = status
self.message = message
self.err_type = err_type
self.code = code
super().__init__(message)
class InvalidRequest(AdapterError):
def __init__(self, message: str, code: str | None = None):
super().__init__(400, message, "invalid_request_error", code)
class Unauthorized(AdapterError):
def __init__(self, message: str = "Invalid API key provided"):
super().__init__(401, message, "invalid_request_error", "invalid_api_key")
class ComfyUIError(AdapterError):
"""ComfyUI rejected validation, failed execution, or timed out."""
def __init__(self, message: str, code: str = "comfyui_error"):
super().__init__(502, message, "server_error", code)
class ConfigError(AdapterError):
"""Invalid model registry configuration; blocks startup."""
def __init__(self, message: str):
super().__init__(500, message, "server_error", "config_error")
def error_body(message: str, err_type: str, code: str | None = None) -> dict:
return {"error": {"message": message, "type": err_type, "param": None, "code": code}}
def install_error_handlers(app: FastAPI) -> None:
@app.exception_handler(AdapterError)
async def adapter_error_handler(request: Request, exc: AdapterError) -> JSONResponse:
return JSONResponse(status_code=exc.status, content=error_body(exc.message, exc.err_type, exc.code))