| """ |
| Unified MCP tool error response format. |
| |
| Error code enumeration: |
| - INVALID_PARAMS: Parameter validation failed (missing required fields, type errors, value out of range) |
| - MODEL_NOT_FOUND: The specified model name does not exist |
| - ARCHITECTURE_NOT_FOUND: The specified architecture name does not exist |
| - CHAIN_TYPE_NOT_FOUND: The specified chain/injector type is invalid |
| - FEATURE_NOT_SUPPORTED: The current model does not support the requested feature |
| - TASK_NOT_FOUND: The async task ID does not exist |
| - MODEL_OOM: GPU out of memory |
| - INTERNAL_ERROR: Internal server error |
| """ |
|
|
|
|
| def make_error(code: str, message: str, details: dict = None) -> dict: |
| """ |
| Construct a unified MCP tool error response. |
| |
| Args: |
| code: Error code (UPPER_SNAKE_CASE format) |
| message: Human-readable error description |
| details: Optional details dictionary |
| |
| Returns: |
| Standardized error response dictionary |
| """ |
| error = { |
| "error": { |
| "code": code, |
| "message": message, |
| } |
| } |
| if details: |
| error["error"]["details"] = details |
| return error |
|
|
|
|
| def make_validation_error( |
| message: str = "Request validation failed.", |
| missing_fields: list = None, |
| invalid_fields: dict = None, |
| ) -> dict: |
| """ |
| Construct a parameter validation failure error response. |
| |
| Args: |
| message: Error description |
| missing_fields: List of missing required field names |
| invalid_fields: Key-value pairs of invalid fields, key=field name, value=reason description |
| |
| Returns: |
| Standardized INVALID_PARAMS error response |
| """ |
| details = {} |
| if missing_fields: |
| details["missing_fields"] = missing_fields |
| if invalid_fields: |
| details["invalid_fields"] = invalid_fields |
| return make_error("INVALID_PARAMS", message, details if details else None) |
|
|
|
|
| def make_not_found_error(resource_type: str, resource_id: str) -> dict: |
| """ |
| Construct a resource-not-found error response. |
| |
| Args: |
| resource_type: Resource type (e.g., "model", "architecture", "chain_type", "task") |
| resource_id: Resource identifier |
| |
| Returns: |
| Standardized *_NOT_FOUND error response |
| """ |
| code_map = { |
| "model": "MODEL_NOT_FOUND", |
| "architecture": "ARCHITECTURE_NOT_FOUND", |
| "chain_type": "CHAIN_TYPE_NOT_FOUND", |
| "task": "TASK_NOT_FOUND", |
| } |
| code = code_map.get(resource_type, f"{resource_type.upper()}_NOT_FOUND") |
| return make_error( |
| code, |
| f"The specified {resource_type} '{resource_id}' was not found.", |
| {"resource_type": resource_type, "resource_id": resource_id}, |
| ) |
|
|