Mintplex-Labs/anything-llm · error · Error
The native whisper model failed to download from the…
Error message
The native whisper model failed to download from the huggingface.co CDN. Your internet connection may be unstable or blocked by Huggingface.co - you will need to download the model manually and place it in the storage/models folder to use local Whisper transcription.
What it means
QDrant.namespace(client, namespace) is the internal helper that fetches collection stats; it throws when the namespace argument is falsy because there is no meaningful stat for an unnamed collection. In practice this fires when an internal caller (e.g., 'namespace-stats' in server/utils/vectorDbProviders/qdrant/index.js) or custom code passes null/undefined/'' instead of a workspace slug.
Solutions
- Pass a non-empty namespace string (the workspace slug) whenever calling namespace().
- Prefer the public surface ('namespace-stats', hasNamespace) which validates input, over the internal two-argument helper.
- Audit custom call sites for destructuring { namespace = null } followed by an unguarded this.namespace(client, namespace).
- Add a tiny wrapper that validates and gives a clearer error before delegating.
Example fix
// before
const stats = await qdrant.namespace(client, undefined);
// after
if (typeof namespace !== 'string' || namespace.length === 0) {
throw new Error('namespace must be a non-empty workspace slug');
}
const stats = await qdrant.namespace(client, namespace); Defensive patterns
Strategy: validation
Validate before calling
function requireNamespace(namespace) {
if (typeof namespace !== 'string' || namespace.trim().length === 0) {
throw new Error('namespace must be a non-empty workspace slug');
}
return namespace;
}
const stats = await qdrant.namespace(client, requireNamespace(namespace)); Type guard
function isNonEmptyNamespace(ns) {
return typeof ns === 'string' && ns.trim().length > 0;
} Try / catch
try {
const stats = await qdrant.namespace(client, namespace);
} catch (e) {
if (/No namespace value provided/.test(e.message)) {
// caller passed null/'' — a programming bug: fix at the call site, don't retry
throw new TypeError(`namespace() called with: ${String(namespace)}`);
}
throw e;
} Prevention
- Call the public API ('namespace-stats') instead of provider internals; it validates for you.
- Centralize a requireNamespace() helper and use it at every call site.
- Default to failing requests with 400s at the route layer before internals are reached.
- Unit-test internal helpers with null/undefined/'' inputs to keep guards honest.
When it happens
Trigger: Calling vectorDB.namespace(client, null) directly; 'namespace-stats' invoked without a namespace already fails earlier with 'namespace required', so reaching this throw means a direct/internal call site skipped validation; passing an empty string after destructuring a default of null.
Common situations: Plugin or script code calling provider internals rather than the public API; refactor that dropped the namespace guard at one call site; default parameter null leaking through when reqBody is empty.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- HTTP
- res.statusText || "Error generating api key."
- Namespace by that name does not exist.
- res.statusText || "Error fetching api keys."
- Empty entry
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/5b66ae02b740499a.
Report an issue: GitHub.
Appendix: source
Thrown at collector/utils/WhisperProviders/localWhisper.js:158
data.file
} ${~~data?.progress}%`
);
},
}
: {}),
});
} catch (error) {
let errMsg = error.message;
if (errMsg.includes("Could not locate file")) {
errMsg =
"The native whisper model failed to download from the huggingface.co CDN. Your internet connection may be unstable or blocked by Huggingface.co - you will need to download the model manually and place it in the storage/models folder to use local Whisper transcription.";
}
this.#log(
`Failed to load the native whisper model: ${errMsg}`,
error.stack
);
throw new Error(errMsg);
}
}
async processFile(fullFilePath, filename) {
try {
const audioDataPromise = new Promise((resolve) =>
this.#convertToWavAudioData(fullFilePath).then((audioData) =>
resolve(audioData)
)
);
const [audioData, transcriber] = await Promise.all([
audioDataPromise,
this.client(),
]);
if (!audioData) {
this.#log(`Failed to parse content from ${filename}.`);
return {View on GitHub (pinned to 3aec848f28)