def METHOD_NAME(
    args: DictConfig, model_opts: Dict[str, str], no_cuda=False
) -> Dict[str, dict]:
    """
    Return shared bot agents.
    Pass in model opts with the `model_opts` arg, where `model_opts` is a dictionary
    whose keys are model names and whose values are strings that specify model
    params (i.e. `--model image_seq2seq`).
    """
    # Set up overrides
    model_overrides = {'model_parallel': args.blueprint.task_model_parallel}
    if no_cuda:
        # If we load many models at once, we have to keep it on CPU
        model_overrides['no_cuda'] = no_cuda
    else:
        logging.warning(
            'WARNING: MTurk task has no_cuda FALSE. Models will run on GPU. Will '
            'not work if loading many models at once.'
        )
    # Convert opt strings to Opt objects
    processed_opts = {}
    for name, opt_string in model_opts.items():
        parser = ParlaiParser(True, True)
        parser.set_params(**model_overrides)
        processed_opts[name] = parser.parse_args(opt_string.split())
    # Load and share all model agents
    logging.info(
        f'Got {len(list(processed_opts.keys()))} models: {processed_opts.keys()}.'
    )
    shared_bot_agents = {}
    for model_name, model_opt in processed_opts.items():
        logging.info('\n\n--------------------------------')
        logging.info(f'model_name: {model_name}, opt_dict: {model_opt}')
        model_agent = create_agent(model_opt, requireModelExists=True)
        shared_bot_agents[model_name] = model_agent.share()
    return shared_bot_agents