code: def run(
      uri,
      entry_point,
      version,
      param_list,
      docker_args,
      experiment_name,
      experiment_id,
      backend,
      backend_config,
      env_manager,
      storage_dir,
      run_id,
      run_name,
      build_image,
  ):
      """
      Run an MLflow project from the given URI.
  
      For local runs, the run will block until it completes.
      Otherwise, the project will run asynchronously.
  
      If running locally (the default), the URI can be either a Git repository URI or a local path.
      If running on Databricks, the URI must be a Git repository.
  
      By default, Git projects run in a new working directory with the given parameters, while
      local projects run from the project's root directory.
      """
      if experiment_id is not None and experiment_name is not None:
          eprint(
              "Specify only one of 'experiment-name' or 'experiment-id' options."
          )
          sys.exit(1)
  
      param_dict = _user_args_to_dict(param_list)
      args_dict = _user_args_to_dict(docker_args, argument_type="A")
  
      if (
          backend_config is not None
          and os.path.splitext(backend_config)[-1] != ".json"
      ):
          try:
              backend_config = json.loads(backend_config)
          except ValueError as e:
              eprint(f"Invalid backend config JSON. Parse error: {e}")
              raise
      if backend == "kubernetes":
          if backend_config is None:
              eprint(
                  "Specify 'backend_config' when using kubernetes mode."
              )
              sys.exit(1)
      try:
          projects.run(
              uri,
              entry_point,
              version,
              experiment_name=experiment_name,
              experiment_id=experiment_id,
              parameters=param_dict,
              docker_args=args_dict,
              backend=backend,
              backend_config=backend_config,
              env_manager=env_manager,
              storage_dir=storage_dir,
              synchronous=backend in ("local", "kubernetes")
              or backend is None,
              run_id=run_id,
              run_name=run_name,
              build_image=build_image,
          )
      except projects.ExecutionException as e:
          _logger.error("=== %s ===", e)
          sys.exit(1)
  
imports: import contextlib
  import importlib.metadata
  import json
  import logging
  import os
  import re
  import sys
  import warnings
  from datetime import timedelta
  import click
  from click import UsageError
  import mlflow.db
  import mlflow.deployments.cli
  import mlflow.experiments
  import mlflow.runs
  import mlflow.store.artifact.cli
  from mlflow import projects, version
  from mlflow.entities import ViewType
  from mlflow.entities.lifecycle_stage import LifecycleStage
  from mlflow.environment_variables import MLFLOW_EXPERIMENT_ID, MLFLOW_EXPERIMENT_NAME
  from mlflow.exceptions import InvalidUrlException, MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
  from mlflow.store.artifact.artifact_repository_registry import get_artifact_repository
  from mlflow.store.tracking import DEFAULT_ARTIFACTS_URI, DEFAULT_LOCAL_FILE_AND_ARTIFACT_PATH
  from mlflow.tracking import _get_store
  from mlflow.utils import cli_args
  from mlflow.utils.logging_utils import eprint
  from mlflow.utils.os import is_windows
  from mlflow.utils.process import ShellCommandException
  from mlflow.utils.server_cli_utils import artifacts_only_config_validation, resolve_default_artifact_root
label_desc: Use image node_id 2 for calling a global function with example usage: run(uri, entry_point, version, param_list, docker_args, experiment_name, experiment_id, backend, backend_config, env_manager, storage_dir, run_id, run_name, build_image) without return types