def handle_nova_act_service_error()

in src/nova_act/impl/protocol.py [0:0]


def handle_nova_act_service_error(error: dict, act: Act, backend_info: BackendInfo):
    request_id = error.get("requestId", "")
    code = error.get("code")

    if not isinstance(code, int) or code == -1:
        return ActProtocolError(
            metadata=act.metadata,
            message="invalid error code in Server Response",
            failed_request_id=request_id,
            raw_message=json.dumps(error),
        )

    message = error.get("message")

    if 400 == code:
        error_dict = check_error_is_json(message)
        if error_dict is None:
            return ActBadRequestError(
                metadata=act.metadata, failed_request_id=request_id, raw_message=json.dumps(error)
            )
        if "AGENT_GUARDRAILS_TRIGGERED" == error_dict.get("reason"):
            return ActGuardrailsError(message=error_dict, metadata=act.metadata)
        if "INVALID_INPUT" == error_dict.get("reason"):
            return ActInvalidInputError(metadata=act.metadata)
        if "MODEL_ERROR" == error_dict.get("reason"):
            return ActModelError(message=error_dict, metadata=act.metadata)
    if 403 == code:
        raise AuthError(backend_info, request_id=request_id)
        # else continue, fall back to generic 4xx
    if 429 == code:
        maybe_error_dict = check_error_is_json(message)
        return ActRateLimitExceededError(
            message=maybe_error_dict,
            metadata=act.metadata,
            failed_request_id=request_id,
            raw_message=json.dumps(error),
        )
    # 4xx
    if code < 500 and code >= 400:
        return ActBadRequestError(metadata=act.metadata, failed_request_id=request_id, raw_message=json.dumps(error))
    if 503 == code:
        return ActServiceUnavailableError(
            metadata=act.metadata, failed_request_id=request_id, raw_message=json.dumps(error)
        )
    # 5xx
    if code < 600 and code >= 500:
        return ActInternalServerError(
            metadata=act.metadata, failed_request_id=request_id, raw_message=json.dumps(error)
        )

    return ActProtocolError(
        message="Unhandled NovaActService error",
        metadata=act.metadata,
        failed_request_id=request_id,
        raw_message=json.dumps(error),
    )