Budibase/budibase · warning · HTTPError

Config id not found

Error message

Config id not found

What it means

Thrown by createLLM when the configId argument is falsy (empty string, undefined, null). An AI config id is mandatory to resolve which LLM provider/model to use, so calls without one are rejected immediately with HTTPError 422 before any lookup.

Source

Thrown at packages/server/src/sdk/workspace/ai/llm/index.ts:20

import { quotas } from "@budibase/pro"
import { BUDIBASE_AI_PROVIDER_ID, LLMResponse } from "@budibase/types"
import tracer from "dd-trace"
import sdk from "../../.."
import { createBBAIClient } from "./bbai"
import { createLiteLLMOpenAI } from "./litellm"

export * as bbai from "./bbai"
export * from "./utils"
export * from "./messages"

export async function createLLM(
  configId: string,
  sessionId?: string,
  span?: tracer.Span,
  agentId?: string
): Promise<LLMResponse> {
  if (!configId) {
    throw new HTTPError("Config id not found", 422)
  }
  const aiConfig = await sdk.ai.configs.find(configId)
  if (!aiConfig) {
    throw new HTTPError(`Config id "${configId}" not found`, 422)
  }

  if (aiConfig.provider === BUDIBASE_AI_PROVIDER_ID) {
    await quotas.throwIfBudibaseAICreditsExceeded()
  }

  if (aiConfig.provider === BUDIBASE_AI_PROVIDER_ID && !env.SELF_HOSTED) {
    return createBBAIClient(
      aiConfig.model,
      sessionId,
      span,
      aiConfig.reasoningEffort,
      agentId
    )

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Verify the AI config exists in the workspace and copy its id into the call
  2. Fix the caller (automation step, API request) to pass a non-empty configId
  3. If the config was deleted, recreate it and update references
  4. Add validation at the entry point of your integration to reject empty config ids early

Example fix

// before
await llm({ configId: options.configId })
// after
if (!options.configId) {
  throw new HTTPError("configId is required", 422)
}
await llm({ configId: options.configId })
Defensive patterns

Strategy: validation

Validate before calling

function requireConfigId(id: string | undefined): string {
  if (!id) throw new HTTPError("AI configId is required", 422)
  return id
}
await createLLM(requireConfigId(options.configId), sessionId)

Try / catch

try {
  await createLLM(configId, sessionId)
} catch (e) {
  if (e instanceof HTTPError && e.message === "Config id not found") {
    return { error: "No AI configuration was provided — select an AI config" }
  }
  throw e
}

Prevention

When it happens

Trigger: Calling createLLM (directly or via chat/agent helpers) with a configId parameter that is empty or undefined — e.g. an AI config variable that was never set, a deleted config referenced by id, or a caller passing an unset options field.

Common situations: Automations or apps referencing an AI configuration that was deleted; environment/app variables for AI config ids left blank; API integrations omitting the configId field in the request body.

Understand the failure class

Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/1292c41c81cb222b. Report an issue: GitHub.