code: def on_core_metadata_event(self, event):
      
      core_metadata = json.loads(event.log_message.message)
      input_names = ','.join(core_metadata['input_names'])
      output_names = ','.join(core_metadata['output_names'])
      target_nodes = ','.join(core_metadata['target_nodes'])
  
      self._run_key = RunKey(input_names, output_names, target_nodes)
      if not self._graph_defs:
        self._graph_defs_arrive_first = False
      else:
        for device_name in self._graph_defs:
          self._add_graph_def(device_name, self._graph_defs[device_name])
  
      self._outgoing_channel.put(_comm_metadata(self._run_key, event.wall_time))
  
      # Wait for acknowledgement from client. Blocks until an item is got.
      logger.info('on_core_metadata_event() waiting for client ack (meta)...')
      self._incoming_channel.get()
      logger.info('on_core_metadata_event() client ack received (meta).')
docs: Implementation of the core metadata-carrying Event proto callback.
  
      Args:
        event: An Event proto that contains core metadata about the debugged
          Session::Run() in its log_message.message field, as a JSON string.
          See the doc string of debug_data.DebugDumpDir.core_metadata for details.