class_docstr: A default model selection implementation.
  
  .. versionadded:: 1.1.0
code: def add_model(
      self, model_id, model_path, measured_values, fields=dict()
  ):
      if (self.models["model_id"] == model_id).sum() > 0:
          raise ValueError(f'Duplicate model_id "{model_id}')
      elif (self.models["model_path"] == model_path).sum() > 0:
          raise ValueError(f'Duplicate model_path "{model_path}')
  
      for metric_name in self.required:
          if metric_name not in measured_values:
              raise ValueError(
                  f'Required measured values missing for metric "{metric_name}"'
              )
  
      tuple_measured_values = tuple(
          [
              measured_values.get(metric.name, None)
              for metric in self.metrics
          ]
          + [fields.get(key, None) for key in self._fields_config]
      )
  
      row = np.array(
          (model_id, model_path) + tuple_measured_values,
          dtype=self.dtype,
      )
      self.models = np.append(self.models, row)
      self.last_model_id = model_id
  
      return model_id
  
imports: import numpy
  from abc import ABC
  from small_text.training.metrics import Metric
label_desc: Use image node_id 4 for calling the ModelSelection obj's underlying member method code with example usage: obj.add_model(model_id, model_path, measured_values, fields) and returns: model_id