code: def upload_artifact_files_metadata(
      swagger_client: SwaggerClientWrapper,
      project_id: str,
      artifact_hash: str,
      files: List[ArtifactFileData],
      default_request_params: Dict,
  ) -> ArtifactModel:
      params = {
          "projectIdentifier": project_id,
          "hash": artifact_hash,
          "artifactFilesDTO": {
              "files": [ArtifactFileData.to_dto(a) for a in files]
          },
          **add_artifact_version_to_request_params(
              default_request_params
          ),
      }
      try:
          result = (
              swagger_client.api.uploadArtifactFilesMetadata(**params)
              .response()
              .result
          )
          return ArtifactModel(
              hash=result.artifactHash,
              size=result.size,
              received_metadata=result.receivedMetadata,
          )
      except HTTPNotFound:
          raise ArtifactNotFoundException(artifact_hash)
  
imports: from typing import Dict, List, Optional, Tuple, Type
  from bravado.exception import HTTPNotFound
  from neptune.common.backends.utils import with_api_exceptions_handler
  from neptune.exceptions import ArtifactNotFoundException, ArtifactUploadingError, FetchAttributeNotFoundException, NeptuneEmptyLocationException
  from neptune.internal.artifacts.file_hasher import FileHasher
  from neptune.internal.artifacts.types import ArtifactDriver, ArtifactDriversMap, ArtifactFileData
  from neptune.internal.backends.api_model import ArtifactAttribute, ArtifactModel
  from neptune.internal.backends.swagger_client_wrapper import SwaggerClientWrapper
  from neptune.internal.operation import AssignArtifact, Operation
  from neptune.internal.utils.paths import path_to_str
label_desc: Use image node_id 10 for calling a global function with example usage: upload_artifact_files_metadata(swagger_client, project_id, artifact_hash, files, default_request_params) and returns: ArtifactModel