mlflow/mlflow · error · MlflowException

INTERNAL_ERROR

INTERNAL_ERROR

Error message

Artifact destination was not resolved for artifact {artifact.names[0]!r}.

What it means

Internal invariant failure during _move_downloaded_artifacts: every downloaded artifact must have a resolved final destination (final_root), but this one is None. This indicates an MLflow bug, not user error.

Source

Thrown at mlflow/pyfunc/model.py:208

        raise MlflowException.invalid_parameter_value(
            f"The artifact repository returned a missing path for artifact {artifact_name!r}."
        )
    if ".." in flat_root.parts:
        raise MlflowException.invalid_parameter_value(
            "The artifact repository returned a non-normalized path containing '..' for "
            f"artifact {artifact_name!r}."
        )
    return flat_root


def _move_downloaded_artifacts(
    model_path: Path, artifacts: list[_DownloadedArtifact]
) -> dict[str, dict[str, str]]:
    artifacts_dir = model_path / "artifacts"
    saved_artifacts_config = {}
    for artifact in artifacts:
        if artifact.final_root is None:
            raise MlflowException(
                f"Artifact destination was not resolved for artifact {artifact.names[0]!r}."
            )
        destination = artifacts_dir / artifact.final_root
        validate_path_within_directory(str(artifacts_dir), str(destination))

        if artifact.final_root.parts:
            destination.parent.mkdir(parents=True, exist_ok=True)
        if os.path.lexists(destination):
            raise MlflowException.invalid_parameter_value(
                f"Cannot save artifact {artifact.names[0]!r} because destination "
                f"{destination.relative_to(model_path).as_posix()!r} already exists."
            )
        shutil.move(str(artifact.source_root), str(destination))

        saved_artifact_subpath = destination.relative_to(model_path).as_posix()
        for artifact_name in artifact.names:
            saved_artifacts_config[artifact_name] = {
                CONFIG_KEY_ARTIFACT_RELATIVE_PATH: saved_artifact_subpath,

View on GitHub (pinned to 6a27f2decc)

Solutions

  1. Upgrade MLflow to the latest patch version
  2. File a bug report with a reproduction script
  3. As a workaround, log the model without class artifacts and attach artifacts separately
Defensive patterns

Strategy: try-catch

Try / catch

from mlflow.exceptions import MlflowException
try:
    mlflow.pyfunc.save_model(...)
except MlflowException as e:
    if "was not resolved" in str(e):
        report_mlflow_bug(e)
    else:
        raise

Prevention

When it happens

Trigger: Calling mlflow.pyfunc.save_model/log_model with class artifacts when a downloaded artifact never got its destination resolved by _validate_downloaded_artifact (unexpected code path).

Common situations: Should not occur in normal use; if it does, it points to a custom PythonModel/artifact hook that skipped validation or an MLflow version bug.

Related errors


AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29). Data as JSON: /api/errors/6012f894a5f46e87. Report an issue: GitHub.