chatboxai/chatbox · error · Error
Invalid knowledge base ID
Error message
Invalid knowledge base ID
What it means
Thrown at the bottom of getModel() after both code paths (builtin registry via getProviderDefinition, and custom provider via getProviderSettings + isCustom) have been exhausted without returning a ModelInterface. It is the fallthrough for a provider id that exists in getProviderSettings (so providerBaseInfo was found) but is neither registered in the new registry nor flagged `isCustom` — an inconsistent state where the provider is known but has no factory.
Source
Thrown at src/main/knowledge-base/ipc-handlers.ts:157
scope.setExtra('documentParser', documentParser?.type)
sentry.captureException(error)
})
throw error
}
}
)
ipcMain.handle(
'kb:update',
async (
_event,
{ id, name, rerankModel, visionModel }: { id: number; name?: string; rerankModel?: string; visionModel?: string }
) => {
try {
log.info(`ipcMain: kb:update, id=${id}, name=${name}, rerankModel=${rerankModel}, visionModel=${visionModel}`)
if (!id || id <= 0) {
throw new Error('Invalid knowledge base ID')
}
if (!name && rerankModel === undefined && visionModel === undefined) {
return 0
}
const db = getDatabase()
let sql = 'UPDATE knowledge_base SET '
const args: (string | number)[] = []
if (name !== undefined) {
if (!name.trim()) {
throw new Error('Knowledge base name cannot be empty')
}
sql += 'name = ?'
args.push(name.trim())
}
if (rerankModel !== undefined) {View on GitHub (pinned to 81571269ad)
Solutions
- Confirm the provider is either registered via defineProvider (check `getProviderDefinition(provider)` returns truthy) OR present in globalSettings.customProviders with `isCustom: true`.
- Re-register the provider through the normal UI flow (add custom provider) so the `isCustom` flag is set, instead of hand-editing settings.json.
- On settings load, validate that every provider referenced by sessions satisfies one of the two conditions and repair/migrate orphaned entries.
- If a builtin provider was removed by an upgrade, remap its id to a current one during migration.
Example fix
// before const model = getModel(session, globals, config, deps) // throws 'Cannot find model with provider: x' even though x is in globals // after: ensure custom provider has the isCustom flag const cp = globals.customProviders?.find(p => p.id === session.provider) if (cp && !cp.isCustom) cp.isCustom = true const model = getModel(session, globals, config, deps)
Defensive patterns
Strategy: validation
Validate before calling
function providerIsResolvable(provider: string, globals: Settings): boolean {
if (getProviderDefinition(provider)) return true
const cp = (globals.customProviders || []).find(p => p.id === provider)
return !!cp && cp.isCustom === true
} Type guard
function isResolvableProvider(provider: string, globals: Settings): boolean {
return getProviderDefinition(provider) !== undefined
|| (globals.customProviders || []).some(p => p.id === provider && p.isCustom === true)
} Try / catch
try { return getModel(settings, globals, config, deps) }
catch (e) {
if (e instanceof Error && e.message.startsWith('Cannot find model with provider')) {
const cp = (globals.customProviders || []).find(p => p.id === settings.provider)
if (cp) cp.isCustom = true // repair missing flag
return getModel(settings, globals, config, deps)
}
throw e
} Prevention
- Never hand-edit settings.json to add custom providers — use the UI so isCustom is set.
- On load, validate that every provider referenced by sessions is resolvable.
- Add a registry-vs-customProviders reconciliation step after migrations.
When it happens
Trigger: A provider id exists in globalSettings but is not in the builtin registry and is not marked `isCustom: true` (e.g. a half-migrated or hand-edited custom provider entry); a builtin provider was de-registered at runtime via clearProviderRegistry but its settings entry remains; the providerBaseInfo came from a stale source (e.g. old customProviders list) that lacks the `isCustom` flag; race between registry clear and model resolution.
Common situations: Manual edits to settings.json adding a provider object without `isCustom`; app version downgrade where a builtin provider id exists in the session but the older codebase lacks its registry entry; a custom provider import dropped the `isCustom` flag; plugin/provider extension unloaded but session still references it.
Related errors
- Embedding model is required
- Failed to create knowledge base
- knowledge_base_parsed_content_too_large
- Knowledge base name is required
- local_parser_file_too_large
AI-assisted analysis of chatboxai/chatbox@81571269ad (2026-08-12).
Data as JSON: /api/errors/d04144e6dea8c035.
Report an issue: GitHub.