chatboxai/chatbox · error · Error

Knowledge base name is required

Error message

Knowledge base name is required

What it means

Thrown by getProviderSettings() when `setting.provider` is falsy (empty string, null, undefined). This is a precondition check: a session must have a provider id before its settings can be resolved. It fires before any registry lookup, so it indicates an uninitialised or corrupted session settings object rather than a missing provider registration.

Source

Thrown at src/main/knowledge-base/ipc-handlers.ts:103

        documentParser,
        providerMode,
      }: {
        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,
          ],
        })

View on GitHub (pinned to 81571269ad)

Solutions

  1. Ensure every SessionSettings instance is created with a non-empty `provider` — set a sensible default (e.g. the first builtin provider id from getBuiltinProviderIds()).
  2. Validate the settings file after schema migrations and backfill a default `provider` for legacy sessions.
  3. Guard UI entry points that call getProviderSettings/getModel so they no-op when no provider is selected.
  4. If migrating settings, run a repair step that writes `provider` from `globalSettings.defaultModelProvider` when missing.

Example fix

// before
const { providerSetting } = getProviderSettings(session, globals)  // throws if session.provider is ''

// after
if (!session.provider) session.provider = globals.defaultModelProvider || getBuiltinProviderIds()[0]
const { providerSetting } = getProviderSettings(session, globals)
Defensive patterns

Strategy: validation

Validate before calling

function ensureProvider(session: SessionSettings, globals: Settings): string {
  if (!session.provider) session.provider = (globals as any).defaultModelProvider || getBuiltinProviderIds()[0]
  return session.provider
}

Type guard

function hasProvider(s: { provider?: string }): s is { provider: string } {
  return typeof s.provider === 'string' && s.provider.length > 0
}

Try / catch

if (!hasProvider(session)) throw new UserFacingError('Select a provider before starting a chat')
const { providerSetting } = getProviderSettings(session, globals)

Prevention

When it happens

Trigger: A SessionSettings object constructed without setting `provider`; deserialised session whose `provider` field was renamed/removed across a schema migration; UI calls getModel-related code paths before the user has selected a provider; default session template lacks a provider default; programmatic call passes a partial settings object.

Common situations: First-run with no default provider configured; settings file from an older app version missing the `provider` key after an upgrade; a new chat session was created but the model picker was never interacted with; downstream code reads `settings.provider` off a draft/clone that lost the field.

Related errors


AI-assisted analysis of chatboxai/chatbox@81571269ad (2026-08-12). Data as JSON: /api/errors/5147639edc8ced41. Report an issue: GitHub.