different-ai/openwork · error
Failed to load the provider catalog (${response.status}).
Error message
Failed to load the provider catalog (${response.status}). What it means
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.
Source
Thrown at ee/apps/den-web/app/(den)/dashboard/_components/llm-provider-data.tsx:468
if (!response.ok) {
throw new Error(getErrorMessage(payload, `Endpoint test failed (${response.status}).`));
}
const result = isRecord(payload) ? asProbeResult(payload.result) : null;
if (!result) {
throw new Error("Endpoint test returned an unexpected response.");
}
const verifications = isRecord(payload) && Array.isArray(payload.verifications)
? payload.verifications
.map(asModelVerification)
.filter((entry): entry is LlmProviderModelVerification => entry !== null)
: [];
return { ...result, verifications };
}
export async function requestLlmProviderCatalog(orgId: string) {
const { response, payload } = await requestJson(`/v1/llm-provider-catalog`, { method: "GET" }, 20000);
if (!response.ok) {
throw new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`));
}
return isRecord(payload) && Array.isArray(payload.providers)
? payload.providers.map(asCatalogProviderSummary).filter((entry): entry is DenModelsDevProviderSummary => entry !== null)
: [];
}
export async function requestLlmProviderCatalogDetail(orgId: string, providerId: string) {
const { response, payload } = await requestJson(
`/v1/llm-provider-catalog/${encodeURIComponent(providerId)}`,
{ method: "GET" },
20000,
);
if (!response.ok) {
throw new Error(getErrorMessage(payload, `Failed to load provider details (${response.status}).`));
}
View on GitHub (pinned to 2b7df46e8a)
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.
Example fix
// before
throw new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`));
// after (retry transient failures once)
if (response.status >= 500) {
const retry = await requestJson(`/v1/llm-provider-catalog`, { method: "GET" }, 20000);
if (retry.response.ok) return parseCatalog(retry.payload);
}
throw new Error(getErrorMessage(payload, `Failed to load the provider catalog (${response.status}).`)); Defensive patterns
Strategy: try-catch
Try / catch
try {
const catalog = await requestLlmProviderCatalog(orgId);
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
if (/\((401|403)\)/.test(msg)) promptReauth();
else showCatalogError(`${msg} — retry shortly`);
} Prevention
- 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.
When it happens
Trigger: 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).
Common situations: 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.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- Failed to load provider details (${response.status}).
- Failed to load library (${response.status}).
- Endpoint test failed (${response.status}).
- Failed to load providers (${response.status}).
- Library response was incomplete.
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/9f137ad7c046bf0a.
Report an issue: GitHub.