Fucius's picture
Upload 422 files
df6c67d verified
import json
from datetime import date, datetime
from enum import Enum
from typing import Any, Optional
from inference.enterprise.stream_management.manager.entities import (
ENCODING,
ERROR_TYPE_KEY,
PIPELINE_ID_KEY,
REQUEST_ID_KEY,
RESPONSE_KEY,
STATUS_KEY,
ErrorType,
OperationStatus,
)
def serialise_to_json(obj: Any) -> Any:
if isinstance(obj, (datetime, date)):
return obj.isoformat()
if issubclass(type(obj), Enum):
return obj.value
raise TypeError(f"Type {type(obj)} not serializable")
def describe_error(
exception: Optional[Exception] = None,
error_type: ErrorType = ErrorType.INTERNAL_ERROR,
) -> dict:
payload = {
STATUS_KEY: OperationStatus.FAILURE,
ERROR_TYPE_KEY: error_type,
}
if exception is not None:
payload["error_class"] = exception.__class__.__name__
payload["error_message"] = str(exception)
return payload
def prepare_error_response(
request_id: str, error: Exception, error_type: ErrorType, pipeline_id: Optional[str]
) -> bytes:
error_description = describe_error(exception=error, error_type=error_type)
return prepare_response(
request_id=request_id, response=error_description, pipeline_id=pipeline_id
)
def prepare_response(
request_id: str, response: dict, pipeline_id: Optional[str]
) -> bytes:
payload = json.dumps(
{
REQUEST_ID_KEY: request_id,
RESPONSE_KEY: response,
PIPELINE_ID_KEY: pipeline_id,
},
default=serialise_to_json,
)
return payload.encode(ENCODING)