code: def _image_name(self) -> str:
      if self.run_spec.configuration.image is not None:
          return self.run_spec.configuration.image
      # TODO: non-cuda image
      return f"dstackai/base:py{self._python()}-{version.base_image}-cuda-12.1"
  
imports: import shlex
  import sys
  from abc import ABC, abstractmethod
  from typing import Dict, List, Optional
  import dstack.version
  from dstack._internal.core.models.configurations import ConfigurationType, PortMapping, PythonVersion, RegistryAuth
  from dstack._internal.core.models.profiles import SpotPolicy
  from dstack._internal.core.models.runs import AppSpec, DiskRequirements, Gateway, GpusRequirements, JobSpec, Requirements, RetryPolicy, RunSpec
  from dstack._internal.core.services.ssh.ports import filter_reserved_ports
label_desc: Use image node_id 14 for calling the JobConfigurator obj's underlying member method code with example usage: obj._image_name() and returns: str, self, str, version, str, self