class_docstr: Execute fast ACUTE runs.
class_docstr_tok: ["Execute","fast","ACUTE","runs","."]
docstr: Generate self.models and self.combos from self.args.
docstr_tok: ["Generate","self.models","and","self.combos","from","self.args","."]
code: def _build_model_pairs(self):
      """
      Generate self.models and self.combos from self.args.
      """
      choices = self.model_config.keys()
      combos: Set[Tuple[str, str]] = set()
      models: Set[str] = set()
      if (
          self.fast_acute_args.models is None
          and self.fast_acute_args.model_pairs is None
      ):
          raise RuntimeError(
              "Either models or model-pairs should be set for comparison."
          )
      if self.fast_acute_args.model_pairs is not None:
          model_pairs = self.fast_acute_args.model_pairs.split(",")
          combos = [model_pair.split(":") for model_pair in model_pairs]
          for model_pair in combos:
              models.add(model_pair[0])
              models.add(model_pair[1])
      else:
          models = set(self.fast_acute_args.models.split(","))
          combos = set(combinations(models, 2))
      self.models: List[str] = list(models)
      self.models.sort()
      self.combos: List[Tuple[str, str]] = []
      for combo in combos:
          # Sort the two model names for consistency
          self.combos.append(tuple(sorted(combo)))
      # verify that models are contained in the config:
      for model in self.models:
          if model not in choices:
              raise RuntimeError(
                  f"Model {model} not specified in the config."
              )
      assert len(self.models) > 1, "Must specify least 2 models"
  
imports: import datetime
  import json
  import os
  import random
  import time
  from dataclasses import dataclass, field
  from itertools import combinations
  from typing import Any, Dict, List, Optional, Set, Tuple
  import hydra
  import torch
  from mephisto.operations.hydra_config import register_script_config
  from mephisto.operations.operator import Operator
  from mephisto.tools.scripts import load_db_and_process_config
  from omegaconf import DictConfig, OmegaConf
  from parlai.crowdsourcing.tasks.acute_eval.analysis import AcuteAnalyzer, setup_args
  from parlai.crowdsourcing.tasks.acute_eval.dump_task_to_acute_format import dump_data, setup_args
  from parlai.crowdsourcing.tasks.acute_eval.fast_acute_blueprint import FAST_ACUTE_BLUEPRINT_TYPE
  from parlai.crowdsourcing.tasks.acute_eval.util import get_hashed_combo_path, TASK_DIRECTORY
  from parlai.crowdsourcing.utils.mturk import MTurkRunScriptConfig
  from parlai.scripts.self_chat import self_chat, setup_args
  from parlai.utils.strings import normalize_reply
  from parlai.utils.testing import capture_output
label_desc: Use image node_id 2 for calling the FastAcuteExecutor obj's underlying member method code with example usage: obj._build_model_pairs() without return types