{"record":{"id":"da0c3ebaf16411d6","repo":"aaif-goose/goose","slug":"mlx-model-has-no-downloadable-files","errorCode":null,"errorMessage":"MLX model {} has no downloadable files","messagePattern":"MLX model (.+?) has no downloadable files","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/goose-local-inference/src/hf_models.rs","lineNumber":2168,"sourceCode":"            .progress(progress.clone())\n            .send()\n            .await\n            .map_err(anyhow::Error::from)\n        {\n            Ok(path) => path,\n            Err(error) => {\n                progress.fail(&error);\n                return Err(error);\n            }\n        };\n        if snapshot_path.is_none() {\n            snapshot_path = snapshot_root_for_file(&path, &filename);\n        }\n        progress.finish_file(file_size);\n    }\n    progress.complete();\n    let snapshot_path = snapshot_path\n        .ok_or_else(|| anyhow::anyhow!(\"MLX model {} has no downloadable files\", repo_id))?;\n    let total_size = if total_size > 0 {\n        total_size\n    } else {\n        dir_size(&snapshot_path)\n    };\n    Ok(ResolvedLocalModel::Mlx {\n        repo_id: repo_id.to_string(),\n        variant_id: variant_id.to_string(),\n        snapshot_path,\n        total_size,\n    })\n}\n\n#[derive(Clone)]\nstruct HfDownloadProgress {\n    model_id: String,\n    total_bytes: u64,\n    completed_bytes: Arc<Mutex<u64>>,","sourceCodeStart":2150,"sourceCodeEnd":2186,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose-local-inference/src/hf_models.rs#L2150-L2186","documentation":"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.","triggerScenarios":"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.","commonSituations":"Selecting a newly created or emptied mlx-community repo; repository restructure removing the expected files; upstream deletions.","solutions":["Open the repo on huggingface.co and confirm it actually contains files","Choose a known-good mlx-community repo with recent commits","Re-run the model search and reselect to pick up the current file list"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before resolving, confirm the repo exposes files via the HF API\n// (any cheap siblings listing works)\nlet siblings = list_repo_siblings(&repo_id).await?;\nanyhow::ensure!(!siblings.is_empty(), \"repo {repo_id} has no files to download\");","typeGuard":null,"tryCatchPattern":"if err.to_string().contains(\"has no downloadable files\") {\n    // the MLX file list came back empty: pick a real mlx-community repo and retry\n}","preventionTips":["Curate MLX model choices from repos with recent commits and real weight files","Handle empty-API-response as a hard error at selection time, not after download","Cache the file list at selection time and revalidate before large downloads"],"tags":["rust","huggingface","mlx","local-inference","download"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}