code: def _update_searcher(
      self, state: TrainerState, control: TrainerControl
  ) -> None:
      if self._metrics_reported(state.global_step) is False:
          self._wait_for_metrics(control)
          return
  
      if state.is_world_process_zero:
          if self.last_metrics is None:
              logger.warning(
                  "No training or evaluation metrics has been recorded. Please "
                  "check your settings for training metrics "
                  "(--logging_strategy and --logging_steps) or "
                  "evaluation metrics (--evaluation_strategy and --eval_steps). "
                  "Reporting trainer_state.best_metric to the searcher."
              )
              searcher_metric = state.best_metric
          elif self.searcher_metric not in self.last_metrics:
              logger.warning(
                  f"Searcher metric {self.searcher_metric} from the yaml config file does "
                  "not match any of the recorded metrics "
                  f"in {self.last_metrics}. "
                  "Reporting trainer_state.best_metric to the searcher."
              )
              searcher_metric = state.best_metric
          else:
              searcher_metric = self.last_metrics[self.searcher_metric]
  
          logger.info(f"Metric reported to searcher: {searcher_metric}")
          self.current_op.report_completed(searcher_metric)
  
      self.updating_searcher = False
  
      try:
          self.current_op = next(self.searcher_ops)
      except StopIteration:
          control.should_training_stop = True
  
imports: import json
  import logging
  import os
  from typing import Any, Dict, List, Optional, Tuple
  from transformers import TrainerCallback, TrainerControl, TrainerState, TrainingArguments
  from transformers.trainer_utils import get_last_checkpoint
  import determined
label_desc: Use image node_id 9 for calling the DetCallback obj's underlying member method code with example usage: obj._update_searcher(state, control) without return types