code: def from_api_response(config) -> "ClientConfig":
      missing_features = []
  
      version_info_obj = getattr(config, "pyLibVersions", None)
      if version_info_obj is None:
          missing_features.append(OptionalFeatures.VERSION_INFO)
          min_recommended = min_compatible = max_compatible = None
      else:
          min_recommended = getattr(
              version_info_obj, "minRecommendedVersion", None
          )
          min_compatible = getattr(
              version_info_obj, "minCompatibleVersion", None
          )
          max_compatible = getattr(
              version_info_obj, "maxCompatibleVersion", None
          )
  
      multipart_upload_config_obj = getattr(
          config, "multiPartUpload", None
      )
      has_multipart_upload = getattr(
          multipart_upload_config_obj, "enabled", False
      )
      if not has_multipart_upload:
          missing_features.append(OptionalFeatures.MULTIPART_UPLOAD)
          multipart_upload_config = None
      else:
          min_chunk_size = getattr(
              multipart_upload_config_obj, "minChunkSize"
          )
          max_chunk_size = getattr(
              multipart_upload_config_obj, "maxChunkSize"
          )
          max_chunk_count = getattr(
              multipart_upload_config_obj, "maxChunkCount"
          )
          max_single_part_size = getattr(
              multipart_upload_config_obj, "maxSinglePartSize"
          )
          multipart_upload_config = MultipartConfig(
              min_chunk_size,
              max_chunk_size,
              max_chunk_count,
              max_single_part_size,
          )
  
      artifacts_config_obj = getattr(config, "artifacts", None)
      has_artifacts = getattr(artifacts_config_obj, "enabled", False)
      if not has_artifacts:
          missing_features.append(OptionalFeatures.ARTIFACTS)
  
      artifacts_api_version = getattr(
          artifacts_config_obj, "apiVersion", 1
      )
      if artifacts_api_version == 1:
          missing_features.append(
              OptionalFeatures.ARTIFACTS_HASH_EXCLUDE_METADATA
          )
          missing_features.append(
              OptionalFeatures.ARTIFACTS_EXCLUDE_DIRECTORY_FILES
          )
  
      return ClientConfig(
          api_url=config.apiUrl,
          display_url=config.applicationUrl,
          _missing_features=frozenset(missing_features),
          version_info=VersionInfo.build(
              min_recommended, min_compatible, max_compatible
          ),
          multipart_config=multipart_upload_config,
      )
  
imports: from dataclasses import dataclass
  from datetime import datetime
  from enum import Enum
  from typing import Any, FrozenSet, List, Optional, Set
  from packaging import version
  from neptune.common.backends.api_model import MultipartConfig
  from neptune.internal.container_type import ContainerType
  from neptune.internal.id_formats import SysId, UniqueId
label_desc: Use image node_id 2 for calling the ClientConfig obj's underlying member method code with example usage: obj.from_api_response(config) and returns: ClientConfig