docs: def SendReply(self, response, tag=None):
      """Allows this flow to send a message to its parent flow.
  
      If this flow does not have a parent, the message is ignored.
  
      Args:
        response: An RDFValue() instance to be sent to the parent.
        tag: If specified, tag the result with the following tag. NOTE: supported
          in REL_DB implementation only.
  
      Raises:
        ValueError: If responses is not of the correct type.
      """
      del tag
  
      if not isinstance(response, rdfvalue.RDFValue):
        raise ValueError("SendReply can only send a Semantic Value")
  
      # Only send the reply if we have a parent, indicated by knowing our parent's
      # request state.
      if self.runner_args.request_state.session_id:
  
        request_state = self.runner_args.request_state
  
        request_state.response_count += 1
  
        # Make a response message
        msg = rdf_flows.GrrMessage(
            session_id=request_state.session_id,
            request_id=request_state.id,
            response_id=request_state.response_count,
            auth_state=rdf_flows.GrrMessage.AuthorizationState.AUTHENTICATED,
            type=rdf_flows.GrrMessage.Type.MESSAGE,
            payload=response,
            args_rdf_name=response.__class__.__name__,
            args_age=int(response.age))
  
        # Queue the response now
        self.queue_manager.QueueResponse(msg)
  
        if self.runner_args.write_intermediate_results:
          self.QueueReplyForResultCollection(response)
  
      else:
        # Only write the reply to the collection if we are the parent flow.
        self.QueueReplyForResultCollection(response)