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),
)