different-ai/openwork · error · Error

Failed to update inference settings (${response.status}).

Error message

Failed to update inference settings (${response.status}).

What it means

Thrown by toggleEnabled when PATCH /v1/inference/settings (enabling/disabling inference with the current tier) returns non-OK. getRequestError throws ReauthRequiredError for 403 reauth payloads or the server message / this fallback otherwise. It means the inference enable/disable change was rejected server-side.

Source

Thrown at ee/apps/den-web/app/(den)/dashboard/_components/inference-screen.tsx:397

    if (status.enabled || !status.subscribed) {
      router.push(getBillingRoute(activeOrg?.slug));
      return;
    }
    setError(null);
    try {
      await runReauthableAction("update-inference", async () => {
        setSaving(true);
        try {
          const { response, payload } = await requestJson(
            "/v1/inference",
            {
              method: "PATCH",
              body: JSON.stringify({ enabled: !status.enabled, tier: status.tier }),
            },
            20000,
          );
          if (!response.ok) {
            throw getRequestError(payload, response, `Failed to update inference settings (${response.status}).`);
          }
          const parsed = parseInferencePayload(payload);
          if (!parsed) {
            throw new Error("Inference settings response was incomplete.");
          }
          setStatus(parsed);
          await refreshOrgData();
        } finally {
          setSaving(false);
        }
      });
    } catch (saveError) {
      setError(saveError instanceof Error ? saveError.message : "Failed to update inference settings.");
    }
  }

  if (isSelfHosted) {
    return null;

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Check the surfaced server message; a payment-required message means subscribe first (startSubscribeCheckout).
  2. Retry the toggle after re-authenticating if the error is reauth-required.
  3. Confirm the selected tier is allowed for the org's plan; switch tiers if not.
  4. Refresh status via GET before retrying to avoid toggling against stale state.
  5. On 5xx/timeout, check Den inference provisioning logs.

Example fix

// before
if (!response.ok) {
  throw getRequestError(payload, response, `Failed to update inference settings (${response.status}).`);
}
// after
if (!response.ok) {
  const err = getRequestError(payload, response, `Failed to update inference settings (${response.status}).`);
  if (getOrgPaymentRequiredError(payload)) throw new Error("Subscribe to inference before enabling it.");
  throw err;
}
Defensive patterns

Strategy: try-catch

Validate before calling

const { response, payload } = await requestJson("/v1/inference/status", {}, 10000);
if (!response.ok) return; // cannot toggle against unknown state
const paymentRequired = getOrgPaymentRequiredError(payload);
if (paymentRequired) { showSubscribePrompt(); return; }

Type guard

function isPaymentRequired(p: unknown): boolean { return getOrgPaymentRequiredError(p) !== null; }

Try / catch

try {
  await toggleEnabled();
} catch (error) {
  if (isReauthRequiredError(error)) { promptReauth(); return; }
  setStatus((prev) => prev); // revert optimistic switch
  showToast(error instanceof Error ? error.message : "Could not update inference settings.");
}

Prevention

When it happens

Trigger: PATCH /v1/inference/settings fails: org payment/subscription required for the tier (402-style), tier not available on the plan (400/403), session expired (401), or 5xx. 20s timeout because provisioning can be slow.

Common situations: Enabling inference without an active subscription; requesting a tier unavailable to the org's plan; admin session expiring between loading status and toggling; server-side provisioning failing (timeout/5xx).

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


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/e7cfd477e6656f65. Report an issue: GitHub.