code: def get_preset_models_softclass(
      hyperparameters, invalid_model_names: list = None, **kwargs
  ):
      from autogluon.core.metrics.softclass_metrics import soft_log_loss
  
      model_types_standard = ["GBM", "NN_TORCH", "CAT", "ENS_WEIGHTED"]
      hyperparameters = copy.deepcopy(hyperparameters)
  
      hyperparameters_standard = {
          key: hyperparameters[key]
          for key in hyperparameters
          if key in model_types_standard
      }
      hyperparameters_rf = {
          key: hyperparameters[key]
          for key in hyperparameters
          if key == "RF"
      }
  
      # Swap RF criterion for MSE:
      if "RF" in hyperparameters_rf:
          rf_params = hyperparameters_rf["RF"]
          rf_newparams = {
              "criterion": "squared_error",
              "ag_args": {"name_suffix": "MSE"},
          }
          for i in range(len(rf_params)):
              rf_params[i].update(rf_newparams)
          rf_params = [
              j
              for n, j in enumerate(rf_params)
              if j not in rf_params[(n + 1) :]
          ]  # Remove duplicates which may arise after overwriting criterion
          hyperparameters_standard["RF"] = rf_params
      models, model_args_fit = get_preset_models(
          problem_type=SOFTCLASS,
          eval_metric=soft_log_loss,
          hyperparameters=hyperparameters_standard,
          default_priorities=DEFAULT_SOFTCLASS_PRIORITY,
          invalid_model_names=invalid_model_names,
          **kwargs,
      )
      if len(models) == 0:
          raise ValueError(
              "At least one of the following model-types must be present in hyperparameters: ['GBM','CAT','RF'], "
              "These are the only supported models for softclass prediction problems. "
              "Softclass problems are also not yet supported for fit() with per-stack level hyperparameters."
          )
      for model in models:
          model.normalize_pred_probas = (
              True  # FIXME: Do we need to do this for child models too?
          )
  
      return models, model_args_fit
  
file_path: autogluon/tabular/src/autogluon/tabular/trainer/model_presets/presets.py
imports: import copy
  import inspect
  import logging
  from collections import defaultdict
  from autogluon.common.model_filter import ModelFilter
  from autogluon.core.constants import AG_ARGS, AG_ARGS_ENSEMBLE, AG_ARGS_FIT, BINARY, MULTICLASS, QUANTILE, REGRESSION, SOFTCLASS
  from autogluon.core.models import AbstractModel, DummyModel, GreedyWeightedEnsembleModel, SimpleWeightedEnsembleModel, StackerEnsembleModel
  from autogluon.core.trainer.utils import process_hyperparameters
  from ...models import BoostedRulesModel, CatBoostModel, FastTextModel, FigsModel, FTTransformerModel, GreedyTreeModel, HSTreeModel, ImagePredictorModel, KNNModel, LGBModel, LinearModel, MultiModalPredictorModel, NNFastAiTabularModel, RFModel, RuleFitModel, TabPFNModel, TabularNeuralNetTorchModel, TextPredictorModel, VowpalWabbitModel, XGBoostModel, XTModel
  from ...models.tab_transformer.tab_transformer_model import TabTransformerModel
  from .presets_custom import get_preset_custom
label_desc: Use image node_id 5 for calling a global function with example usage: get_preset_models_softclass(hyperparameters, invalid_model_names) and returns: models,  model_args_fit