in src/nova_act/impl/protocol.py [0:0]
def parse_errors(act: Act, backend_info: BackendInfo):
if not isinstance(act.result, ActFailed) or not act.is_complete:
raise ValueError(f"Expected ActFailed result when attempting to parse, got act: {act}")
result = cast(ActFailed, act.result)
message = result.response
error = message.get("error", "")
if act.did_timeout:
return ActTimeoutError(metadata=act.metadata)
if message.get("subErrorCode") == "AGENT_ERROR":
return ActAgentError(message=error, metadata=act.metadata)
if error == "Canceled.":
return ActCanceledError(metadata=act.metadata)
try:
error_message = json.loads(error)
request_id = error_message.get("requestId", "")
except json.JSONDecodeError:
return ActProtocolError(
metadata=act.metadata,
message="failed to load error message as json",
raw_message=json.dumps(error),
)
if "type" not in error_message:
return ActProtocolError(
metadata=act.metadata,
message="missing type in error message",
failed_request_id=request_id,
raw_message=json.dumps(error),
)
if error_message.get("type") == NOVA_ACT_SERVICE:
return handle_nova_act_service_error(error_message, act, backend_info)
if error_message.get("type") == NOVA_ACT_CLIENT:
return handle_nova_act_client_error(error_message, act)
return ActProtocolError(
metadata=act.metadata,
message="unhandled failure type",
failed_request_id=request_id,
raw_message=error,
)