def parse_errors()

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