{"record":{"id":"d53078848ec99dc0","repo":"janhq/jan","slug":"model-modelid-does-not-exist","errorCode":null,"errorMessage":"Model ${modelId} does not exist","messagePattern":"Model (.+?) does not exist","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"extensions/llamacpp-extension/src/index.ts","lineNumber":2555,"sourceCode":"          errorData\n        )}`\n      )\n    }\n\n    const completionResponse = (await response.json()) as chatCompletion\n\n    return completionResponse\n  }\n\n  override async delete(modelId: string): Promise<void> {\n    const modelDir = await joinPath([\n      await this.getProviderPath(),\n      'models',\n      modelId,\n    ])\n\n    if (!(await fs.existsSync(await joinPath([modelDir, 'model.yml'])))) {\n      throw new Error(`Model ${modelId} does not exist`)\n    }\n\n    await fs.rm(modelDir)\n\n    try {\n      await this.refreshEnginePreset()\n    } catch (e) {\n      logger.warn(`Router refresh after delete(${modelId}) failed:`, e)\n    }\n  }\n\n  override async getLoadedModels(): Promise<string[]> {\n    try {\n      let models: string[] = await pluginGetLoadedModels()\n      return models\n    } catch (e) {\n      logger.error(e)\n      throw new Error(e)","sourceCodeStart":2537,"sourceCodeEnd":2573,"githubUrl":"https://github.com/janhq/jan/blob/7205d770c1e097c3daf35a911176410e93bc5564/extensions/llamacpp-extension/src/index.ts#L2537-L2573","documentation":"Thrown by the model-delete path when the models/<modelId>/model.yml file does not exist, meaning the extension has no record of this model under its provider directory. The extension refuses to delete rather than removing an unknown directory.","triggerScenarios":"Calling deleteModel(modelId) where models/<modelId>/model.yml is absent — wrong model ID, model imported by a different extension/provider, partial/corrupted import, or model already deleted.","commonSituations":"Stale UI cache listing models from another provider; user manually deleted files; modelId containing different casing or a provider prefix; import failed midway leaving a directory without model.yml.","solutions":["Verify the exact modelId via listModels / the app's model catalog before deleting.","Check that models/<modelId>/model.yml exists under the llamacpp provider's data dir.","If the directory is orphaned, remove it manually and refresh the model list.","Re-import the model if the download/import was interrupted."],"exampleFix":"// before\nawait deleteModel(modelId)\n// after\nconst models = await extension.listModels()\nif (!models.some(m => m.id === modelId)) {\n  console.warn(`Model ${modelId} not found; skipping delete`)\n  return\n}\nawait deleteModel(modelId)","handlingStrategy":"validation","validationCode":"const catalog = await listModels()\nif (!catalog.includes(modelId)) {\n  console.warn(`Skipping delete: ${modelId} is not registered with llamacpp provider`)\n  return\n}","typeGuard":"null","tryCatchPattern":"try {\n  await deleteModel(modelId)\n} catch (e) {\n  if (String(e).includes('does not exist')) {\n    await refreshModelCatalog() // clear stale entry from UI\n    return // treat as already deleted\n  }\n  throw e\n}","preventionTips":["Only pass model IDs obtained from listModels to deleteModel.","Refresh the model catalog after external file changes.","Never manually delete files under the provider's models/ directory; use the API.","Distinguish 'already deleted' from real failures in your error handling."],"tags":["model-management","file-not-found","llamacpp"],"backgroundTag":"file-not-found","analyzedSha":"7205d770c1e097c3daf35a911176410e93bc5564","analyzedAt":"2026-09-17T14:27:30.100Z","contentChangedAt":"2026-09-17T14:27:30.100Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}