code: def save_best_model_with_metadata(self, val_metrics_dict):
      save_model_with_metadata(
          model_or_state_dict=self.best_state_dict,
          output_dir=self.output_dir,
          file_name="best_model",
          metadata={
              "val_state": self.best_val_state.to_dict(),
              "val_metrics": self.best_val_state.metrics,
          },
      )
  
imports: from dataclasses import dataclass
  from typing import Dict
  import torch.nn
  import jiant.proj.main.runner
  import jiant.proj.main.components.task_sampler
  from jiant.shared.runner import save_model_with_metadata, compare_steps_max_steps
  from jiant.utils.python.datastructures import ExtendedDataClassMixin
  from jiant.utils.python.functional import always_false
  from jiant.utils.torch_utils import copy_state_dict, CPU_DEVICE, get_model_for_saving
  from jiant.utils.zlog import BaseZLogger, PRINT_LOGGER
  from jiant.shared.metarunner import AbstractMetarunner
label_desc: Use image node_id 7 for calling the JiantMetarunner obj's underlying member method code with example usage: obj.save_best_model_with_metadata(val_metrics_dict) without return types