janhq/jan · error
Import of " " did not complete
Error message
Import of "${FALLBACK_EMBEDDING_MODEL_ID}" did not complete What it means
bootstrapDefaultEmbedder() in the llamacpp extension downloads the fallback embedding model (via downloadAll with modelPath FALLBACK_EMBEDDING_MODEL_URL) and then verifies the install with hasEmbedderInstalled(). Because a cancelled or stopped download resolves without throwing, this check is the real guard: if the install cannot be confirmed, the import is considered incomplete and this error is thrown so bootstrap does not record the one-shot done flag.
Solutions
- Check disk space and network connectivity, then restart the app so bootstrap retries the download
- Verify the model files under the provider's models directory; delete any partial download so it re-downloads cleanly
- Confirm the extension's data folder is not being wiped between runs (the one-shot flag must not be recorded before install)
- Download the model manually via the UI/CLI and re-run bootstrap
Example fix
// before (silently resolves on cancel)
await downloadAll({ modelPath: FALLBACK_EMBEDDING_MODEL_URL })
// after (check completion before recording done)
await downloadAll({ modelPath: FALLBACK_EMBEDDING_MODEL_URL })
if (!(await this.hasEmbedderInstalled())) throw new Error('Import incomplete') Defensive patterns
Strategy: retry
Validate before calling
// before relying on bootstrap if (!(await extension.hasEmbedderInstalled())) await bootstrapDefaultEmbedder()
Try / catch
try {
await bootstrapDefaultEmbedder()
} catch (e) {
if (e.message.includes('did not complete')) {
await cleanPartialDownload(); await bootstrapDefaultEmbedder() // retry once
} else throw e
} Prevention
- Stable network required for first-run model download
- Ensure sufficient disk space before bootstrap
- Never delete the provider models directory mid-install
- Wrap bootstrap in a retry with backoff
When it happens
Trigger: The fallback embedding model download was cancelled, stopped, or failed mid-transfer, then hasEmbedderInstalled() still returns false; disk was full; the model files were deleted after download but before the check; a network interruption aborted the download silently.
Common situations: User quits the app during first-run model pre-install; flaky network kills the GGUF download; antivirus quarantines the downloaded model file; the models directory was cleared manually between runs.
Related errors
- Backend update failed
- Checksum mismatch for
- Folder not found
- Invalid modelId: . Only alphanumeric and / _ - . characters…
- Model already exists
AI-assisted analysis of janhq/jan@7205d770c1 (2026-09-17).
Data as JSON: /api/errors/1654811b2378c7b9.
Report an issue: GitHub.
Appendix: source
Thrown at extensions/llamacpp-extension/src/index.ts:582
* resizes models_max via an idle restart (nothing is loaded yet at startup).
* The persisted flag keeps this from resurrecting a model the user deleted,
* and is only set on success so a failed download retries next launch.
*/
private async bootstrapDefaultEmbedder(): Promise<void> {
try {
if (await getBackendSetting(EMBEDDER_BOOTSTRAP_KEY)) return
if (!(await this.hasEmbedderInstalled())) {
// Set only around the actual fetch, and only when there is one to do:
// an install that is already present must not flash a pending state.
this.embedderBootstrapping = true
await this.import(FALLBACK_EMBEDDING_MODEL_ID, {
modelPath: FALLBACK_EMBEDDING_MODEL_URL,
})
// A stopped or cancelled download resolves without throwing, so the
// install has to be confirmed before the one-shot flag is recorded --
// otherwise bootstrap marks itself done and never retries.
if (!(await this.hasEmbedderInstalled())) {
throw new Error(
`Import of "${FALLBACK_EMBEDDING_MODEL_ID}" did not complete`
)
}
logger.info(
`Pre-installed fallback embedding model "${FALLBACK_EMBEDDING_MODEL_ID}" at startup`
)
}
await setBackendSetting(EMBEDDER_BOOTSTRAP_KEY, 'true')
this.embedderBootstrapError = undefined
} catch (e) {
this.embedderBootstrapError = e instanceof Error ? e.message : String(e)
logger.warn(
'Fallback embedder bootstrap failed (will import on demand):',
e
)
} finally {
// In `finally` so a thrown import cannot leave the checklist reporting
// "downloading" for the rest of the session.View on GitHub (pinned to 7205d770c1)