{"record":{"id":"ee3070922633a801","repo":"usebruno/bruno","slug":"unknown-ai-provider-providerid","errorCode":null,"errorMessage":"Unknown AI provider: ${providerId}","messagePattern":"Unknown AI provider: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/bruno-electron/src/ipc/ai/index.js","lineNumber":97,"sourceCode":"  return getModel(modelId, {\n    aiPreferences: getAiPrefs(),\n    getApiKey: (providerId) => aiKeyStore.getKey(providerId)\n  });\n};\n\nconst pickDefaultModelId = () => {\n  const aiPreferences = getAiPrefs();\n  const hasApiKey = (providerId) => aiKeyStore.hasKey(providerId);\n  const available = getAvailableModels({ aiPreferences, hasApiKey });\n  if (available.length === 0) return null;\n  const preferred = aiPreferences.defaultModel;\n  if (preferred && available.some((m) => m.id === preferred)) return preferred;\n  return available[0].id;\n};\n\nconst assertKnownProvider = (providerId) => {\n  if (!isKnownProviderId(providerId, getAiPrefs())) {\n    throw new Error(`Unknown AI provider: ${providerId}`);\n  }\n};\n\nconst registerAiIpc = (mainWindow) => {\n  const broadcastStatus = (status) => {\n    if (mainWindow?.webContents && !mainWindow.webContents.isDestroyed()) {\n      mainWindow.webContents.send('main:ai-status-changed', status);\n    }\n  };\n\n  ipcMain.handle('renderer:get-ai-status', async () => buildStatus());\n\n  ipcMain.handle('renderer:set-ai-api-key', async (_event, { providerId, apiKey }) => {\n    assertKnownProvider(providerId);\n    const trimmed = typeof apiKey === 'string' ? apiKey.trim() : '';\n    if (!trimmed) {\n      if (isOpenAiCompatibleProviderId(providerId)) {\n        aiKeyStore.clearKey(providerId);","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/usebruno/bruno/blob/9bdd81c7bdc57006e5f5ebffb79321a8d979f712/packages/bruno-electron/src/ipc/ai/index.js#L79-L115","documentation":"Error \"Unknown AI provider: ${providerId}\" thrown in usebruno/bruno.","triggerScenarios":"Thrown at packages/bruno-electron/src/ipc/ai/index.js:97 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Select one of the supported AI providers in Preferences > AI.","Update Bruno if the provider was added in a newer version."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9bdd81c7bdc57006e5f5ebffb79321a8d979f712","analyzedAt":"2026-08-13T04:09:25.751Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}