{"record":{"id":"9f137ad7c046bf0a","repo":"different-ai/openwork","slug":"failed-to-load-the-provider-catalog-response-st","errorCode":null,"errorMessage":"Failed to load the provider catalog (${response.status}).","messagePattern":"Failed to load the provider catalog \\((.+?)\\)\\.","errorType":"http","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ee/apps/den-web/app/(den)/dashboard/_components/llm-provider-data.tsx","lineNumber":468,"sourceCode":"  if (!response.ok) {\n    throw new Error(getErrorMessage(payload, `Endpoint test failed (${response.status}).`));\n  }\n  const result = isRecord(payload) ? asProbeResult(payload.result) : null;\n  if (!result) {\n    throw new Error(\"Endpoint test returned an unexpected response.\");\n  }\n  const verifications = isRecord(payload) && Array.isArray(payload.verifications)\n    ? payload.verifications\n        .map(asModelVerification)\n        .filter((entry): entry is LlmProviderModelVerification => entry !== null)\n    : [];\n  return { ...result, verifications };\n}\n\nexport async function requestLlmProviderCatalog(orgId: string) {\n  const { response, payload } = await requestJson(`/v1/llm-provider-catalog`, { method: \"GET\" }, 20000);\n  if (!response.ok) {\n    throw new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`));\n  }\n\n  return isRecord(payload) && Array.isArray(payload.providers)\n    ? payload.providers.map(asCatalogProviderSummary).filter((entry): entry is DenModelsDevProviderSummary => entry !== null)\n    : [];\n}\n\nexport async function requestLlmProviderCatalogDetail(orgId: string, providerId: string) {\n  const { response, payload } = await requestJson(\n    `/v1/llm-provider-catalog/${encodeURIComponent(providerId)}`,\n    { method: \"GET\" },\n    20000,\n  );\n\n  if (!response.ok) {\n    throw new Error(getErrorMessage(payload, `Failed to load provider details (${response.status}).`));\n  }\n","sourceCodeStart":450,"sourceCodeEnd":486,"githubUrl":"https://github.com/different-ai/openwork/blob/2b7df46e8ae1517d64c896c7793d2d52ec845669/ee/apps/den-web/app/(den)/dashboard/_components/llm-provider-data.tsx#L450-L486","documentation":"requestLlmProviderCatalog performs GET /v1/llm-provider-catalog and throws this error when the response status is not ok, preferring a server-provided message via getErrorMessage. It guards the catalog fetch that populates the provider picker in the editor screen.","triggerScenarios":"GET /v1/llm-provider-catalog returns 401 (no session), 403, 404 (route not deployed), 429, or 5xx; the 20s requestJson timeout elapsed so requestJson itself throws before this (note: this error is only for non-ok responses that do return).","commonSituations":"Expired dashboard session; server deployment older than the catalog endpoint; models.dev-backed catalog service failing upstream causing 502/503; rate limiting after repeated catalog refreshes.","solutions":["Check response.status: 401 → re-authenticate; 404 → verify server version has the catalog route; 5xx → inspect backend/upstream models.dev fetch logs.","Retry the request after confirming backend health.","Verify auth headers/org context are sent with the GET.","If upstream (models.dev) is down, check the server's caching/fallback for catalog data."],"exampleFix":"// before\nthrow new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`));\n// after (retry transient failures once)\nif (response.status >= 500) {\n  const retry = await requestJson(`/v1/llm-provider-catalog`, { method: \"GET\" }, 20000);\n  if (retry.response.ok) return parseCatalog(retry.payload);\n}\nthrow new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`));","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const catalog = await requestLlmProviderCatalog(orgId);\n} catch (err) {\n  const msg = err instanceof Error ? err.message : String(err);\n  if (/\\((401|403)\\)/.test(msg)) promptReauth();\n  else showCatalogError(`${msg} — retry shortly`);\n}","preventionTips":["Cache the catalog server-side so upstream (models.dev) outages don't 5xx clients.","Handle session expiry globally before catalog queries run.","Add a retry-with-backoff wrapper for read-only catalog GETs.","Alert on /v1/llm-provider-catalog non-2xx rates."],"tags":["network","http-status","llm-provider-catalog","den-web"],"backgroundTag":"http-request-failed","analyzedSha":"2b7df46e8ae1517d64c896c7793d2d52ec845669","analyzedAt":"2026-09-01T07:59:23.713Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}