chatboxai/chatbox · error · Error
Embedding model is required
Error message
Embedding model is required
What it means
Thrown by getProviderSettings() when `setting.provider` is non-empty but no matching provider base info is found in the combined list of system (builtin registry) providers plus user `customProviders`. This means the provider id refers to something that is neither registered as a builtin nor defined as a custom provider in global settings — an orphaned reference.
Source
Thrown at src/main/knowledge-base/ipc-handlers.ts:106
name: string
embeddingModel: string
rerankModel: string
visionModel?: string
documentParser?: { type: string; mineru?: { apiToken: string } }
providerMode?: 'chatbox-ai' | 'custom'
}
) => {
try {
log.info(
`ipcMain: kb:create, name=${name}, embeddingModel=${embeddingModel}, rerankModel=${rerankModel}, visionModel=${visionModel}, documentParser=${documentParser?.type || 'default'}, providerMode=${providerMode || 'not specified'}`
)
// Validate required fields
if (!name || !name.trim()) {
throw new Error('Knowledge base name is required')
}
if (!embeddingModel || !embeddingModel.trim()) {
throw new Error('Embedding model is required')
}
const db = getDatabase()
const documentParserJson = documentParser ? JSON.stringify(documentParser) : null
const rs = await db.execute({
sql: 'INSERT INTO knowledge_base (name, embedding_model, rerank_model, vision_model, document_parser, provider_mode) VALUES (?, ?, ?, ?, ?, ?)',
args: [
name.trim(),
embeddingModel,
rerankModel || null,
visionModel || null,
documentParserJson,
providerMode || null,
],
})
const id = rs.lastInsertRowid
if (!id) {View on GitHub (pinned to 81571269ad)
Solutions
- Check `getBuiltinProviderIds()` and `globalSettings.customProviders` for the exact id in `setting.provider` — a mismatch (whitespace, case, stale id) is the usual cause.
- If the provider was deleted, re-add it (recreate the custom provider or re-enable the builtin) or switch the session to a current provider.
- Add a settings-repair step on load that maps retired provider ids to their successors and resets orphaned sessions to the default provider.
- If importing sessions, also import the matching customProviders so the reference resolves.
Example fix
// before
const { providerSetting } = getProviderSettings(session, globals)
// throws 'Cannot find model with provider: old-provider'
// after: repair orphaned references before resolving
const known = new Set([...getBuiltinProviderIds(), ...(globals.customProviders||[]).map(p=>p.id)])
if (!known.has(session.provider)) session.provider = getBuiltinProviderIds()[0]
const { providerSetting } = getProviderSettings(session, globals) Defensive patterns
Strategy: validation
Validate before calling
function knownProviderIds(globals: Settings): Set<string> {
return new Set([...getBuiltinProviderIds(), ...(globals.customProviders || []).map(p => p.id)])
}
if (session.provider && !knownProviderIds(globals).has(session.provider)) session.provider = getBuiltinProviderIds()[0] Type guard
function isKnownProvider(provider: string, globals: Settings): boolean {
return getBuiltinProviderIds().includes(provider) || (globals.customProviders || []).some(p => p.id === provider)
} Try / catch
try { return getProviderSettings(session, globals) }
catch (e) {
if (e instanceof Error && e.message.startsWith('Cannot find model with provider')) {
session.provider = getBuiltinProviderIds()[0]
return getProviderSettings(session, globals)
}
throw e
} Prevention
- On settings load, validate every session's provider against known ids and remap orphans.
- When deleting a custom provider, also rewrite sessions that referenced it.
- Sync customProviders alongside sessions across devices.
When it happens
Trigger: A saved session references a provider id that was removed in an app update (builtin deleted); a custom provider was deleted from globalSettings.customProviders but a session still references it; the provider id is misspelled or has trailing whitespace; settings imported from another installation that had different custom providers; provider id case mismatch (registry is case-sensitive).
Common situations: Downgrade or upgrade removed/renamed a builtin provider; user syncs sessions across devices without syncing customProviders; manually edited settings.json introduced a typo; a custom provider export/import lost the provider definitions; migration renamed a provider id without a back-compat alias.
Related errors
- Knowledge base name is required
- Failed to create knowledge base
- Invalid knowledge base ID
- local_parser_file_too_large
- knowledge_base_parsed_content_too_large
AI-assisted analysis of chatboxai/chatbox@81571269ad (2026-08-12).
Data as JSON: /api/errors/39dab6d218bd62fb.
Report an issue: GitHub.