code: def download_artifacts(
      bench_config_path: str,
      base_experiment: str,
      experimental_experiment: str,
      download_base_path: str,
      local_dir: str = "benchmarking_summaries",
  ) -> Tuple[str, List[str]]:
      """Download benchmarking artifacts for two experiments.
  
      Args:
          bench_config_path: bench config file path. Can be the same one that was used to run
              these experiments.
          base_experiment: name of the experiment we're comparing against.
          experimental_experiment: name of the experiment we're comparing.
          download_base_path: base path under which live the stored artifacts of
              the benchmarking experiments.
      """
      bench_config = load_yaml(bench_config_path)
      protocol, _ = fsspec.core.split_protocol(download_base_path)
      fs, _ = get_fs_and_path(download_base_path)
      os.makedirs(local_dir, exist_ok=True)
  
      coroutines = []
      for experiment in bench_config["experiments"]:
          dataset_name = experiment["dataset_name"]
          for experiment_name in [
              base_experiment,
              experimental_experiment,
          ]:
              coroutines.append(
                  download_one(
                      fs,
                      download_base_path,
                      dataset_name,
                      experiment_name,
                      local_dir,
                  )
              )
      loop = asyncio.get_event_loop()
      futures = asyncio.gather(*coroutines, return_exceptions=True)
      downloaded_names = loop.run_until_complete(futures)
  
      dataset_names = [
          experiment_tuple[0]
          for experiment_tuple in set(downloaded_names)
          if experiment_tuple[0]
      ]
      assert (
          len(
              {
                  experiment_tuple[1]
                  for experiment_tuple in downloaded_names
              }
          )
          == 1
          and downloaded_names[0][1] == local_dir
      ), "Experiments not downloaded to the same path"
  
      return local_dir, dataset_names
  
imports: import asyncio
  import functools
  import logging
  import os
  import shutil
  import uuid
  from concurrent.futures import ThreadPoolExecutor
  from types import ModuleType
  from typing import Any, Dict, List, Tuple, Union
  import fsspec
  import pandas
  import yaml
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import BINARY, CATEGORY
  from ludwig.datasets import model_configs_for_dataset
  from ludwig.datasets.loaders.dataset_loader import DatasetLoader
  from ludwig.globals import CONFIG_YAML
  from ludwig.utils.data_utils import load_yaml
  from ludwig.utils.dataset_utils import get_repeatable_train_val_test_split
  from ludwig.utils.defaults import default_random_seed
  from ludwig.utils.fs_utils import get_fs_and_path
label_desc: Use image node_id 3 for calling a global function with example usage: download_artifacts(bench_config_path, base_experiment, experimental_experiment, download_base_path, local_dir) and returns: local_dir,  dataset_names