aaif-goose/goose · error

MLX model {} has no downloadable files

Error message

MLX model {} has no downloadable files

What it means

resolve_mlx_model downloads each filename in its computed list and derives the snapshot root with snapshot_root_for_file, which always returns Some. So this error fires only when the download loop never executed - the repo resolved to zero downloadable filenames (empty repo, all siblings filtered out, or an API response with no matching files), leaving snapshot_path None.

Source

Thrown at crates/goose-local-inference/src/hf_models.rs:2168

            .progress(progress.clone())
            .send()
            .await
            .map_err(anyhow::Error::from)
        {
            Ok(path) => path,
            Err(error) => {
                progress.fail(&error);
                return Err(error);
            }
        };
        if snapshot_path.is_none() {
            snapshot_path = snapshot_root_for_file(&path, &filename);
        }
        progress.finish_file(file_size);
    }
    progress.complete();
    let snapshot_path = snapshot_path
        .ok_or_else(|| anyhow::anyhow!("MLX model {} has no downloadable files", repo_id))?;
    let total_size = if total_size > 0 {
        total_size
    } else {
        dir_size(&snapshot_path)
    };
    Ok(ResolvedLocalModel::Mlx {
        repo_id: repo_id.to_string(),
        variant_id: variant_id.to_string(),
        snapshot_path,
        total_size,
    })
}

#[derive(Clone)]
struct HfDownloadProgress {
    model_id: String,
    total_bytes: u64,
    completed_bytes: Arc<Mutex<u64>>,

View on GitHub (pinned to 3810898a74)

Solutions

  1. Open the repo on huggingface.co and confirm it actually contains files
  2. Choose a known-good mlx-community repo with recent commits
  3. Re-run the model search and reselect to pick up the current file list
Defensive patterns

Strategy: validation

Validate before calling

// before resolving, confirm the repo exposes files via the HF API
// (any cheap siblings listing works)
let siblings = list_repo_siblings(&repo_id).await?;
anyhow::ensure!(!siblings.is_empty(), "repo {repo_id} has no files to download");

Try / catch

if err.to_string().contains("has no downloadable files") {
    // the MLX file list came back empty: pick a real mlx-community repo and retry
}

Prevention

When it happens

Trigger: Resolving an MLX model whose filename list is empty: mistyped repo id that still resolved, a repo with no weight files, or a non-MLX repo routed to the MLX resolver.

Common situations: Selecting a newly created or emptied mlx-community repo; repository restructure removing the expected files; upstream deletions.

Related errors


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/da0c3ebaf16411d6. Report an issue: GitHub.