unslothai/unsloth · error · RecipeDatasetPublishError

Execution artifacts are no longer available.

Error message

Execution artifacts are no longer available.

What it means

RecipeDatasetPublishError raised when the artifact path resolves inside the datasets root but no longer exists on disk (resolved.exists() is False). It typically means the execution outputs were cleaned up (retention/GC) or deleted between run completion and the publish call.

Source

Thrown at studio/backend/core/data_recipe/huggingface.py:37

class RecipeDatasetPublishError(ValueError):
    """Raised when a recipe dataset cannot be published to Hugging Face."""


def _resolve_recipe_artifact_path(artifact_path: str) -> Path:
    root = recipe_datasets_root().expanduser().resolve()
    candidate = resolve_dataset_path(artifact_path).expanduser()
    resolved = candidate.resolve(strict = False)

    try:
        resolved.relative_to(root)
    except ValueError as exc:
        raise RecipeDatasetPublishError(
            "This execution artifact is outside the Recipe Studio dataset storage."
        ) from exc

    if not resolved.exists():
        raise RecipeDatasetPublishError("Execution artifacts are no longer available.")
    if not resolved.is_dir():
        raise RecipeDatasetPublishError("Execution artifact path is not a dataset folder.")

    return resolved


def publish_recipe_dataset(
    *,
    artifact_path: str,
    repo_id: str,
    description: str,
    hf_token: str | None = None,
    private: bool = False,
) -> str:
    dataset_path = _resolve_recipe_artifact_path(artifact_path)

    try:
        from data_designer.engine.storage.artifact_storage import (

View on GitHub (pinned to 203007d190)

Solutions

  1. Re-run the recipe to regenerate the artifact, then publish promptly.
  2. Increase or disable artifact retention if publishing happens long after runs.
  3. Put the datasets root on persistent storage (not a container tmpfs) in deployments that publish later.
  4. Publish immediately after execution completes rather than from an old run history entry.

Example fix

# before
publish_recipe_dataset(artifact_path=old_artifact, ...)

# after
# re-execute the recipe first, then publish the fresh artifact
run = service.run_recipe(recipe)
publish_recipe_dataset(artifact_path=run.artifact_path, ...)
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
def artifact_available(artifact_path: str) -> bool:
    return Path(artifact_path).expanduser().resolve().exists()

Try / catch

try:
    publish_recipe_dataset(artifact_path=p, repo_id=r)
except RecipeDatasetPublishError as e:
    if 'no longer available' in str(e):
        run = rerun_recipe(recipe); publish_recipe_dataset(artifact_path=run.artifact_path, repo_id=r)

Prevention

When it happens

Trigger: Publishing long after the recipe ran, with a retention job having purged old artifacts; manually deleting the artifact directory; container restarts wiping ephemeral storage that hosted the datasets root.

Common situations: RetentionPolicy/GC deleting old run outputs; studio deployed with the datasets root on a tmpfs or ephemeral volume; users cleaning disk space to free quota.

Related errors


AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15). Data as JSON: /api/errors/f56be38b1eaeed22. Report an issue: GitHub.