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
- Upgrade MLflow to the latest patch version
- File a bug report with a reproduction script
- 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
- Keep MLflow up to date
- Avoid overriding internal artifact-handling hooks
- File a reproducible bug if it occurs
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
- INTERNAL_ERROR
- INTERNAL_ERROR
- INTERNAL_ERROR
- INTERNAL_ERROR
- File {steps_conf_file} must exist in order to load runnable
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/6012f894a5f46e87.
Report an issue: GitHub.