Mintplex-Labs/anything-llm · error · Error

Failed to toggle flow

Error message

Failed to toggle flow

What it means

FlowPanel's toggle handler calls AgentFlows.toggleFlow(flow.uuid, !enabled) and throws when the response's success flag is false; the catch converts any failure into a 'Failed to toggle flow' toast. It fires when the backend rejects the enable/disable request for that flow uuid.

Source

Thrown at frontend/src/pages/Admin/Agents/AgentFlows/FlowPanel.jsx:84

            onClick={deleteFlow}
            className="border-none flex items-center rounded-lg gap-x-2 hover:bg-theme-action-menu-item-hover py-1.5 px-2 transition-colors duration-200 w-full text-left"
          >
            <span className="text-sm whitespace-nowrap">Delete Flow</span>
          </button>
        </div>
      )}
    </div>
  );
}

export default function FlowPanel({ flow, toggleFlow, enabled, onDelete }) {
  const handleToggle = async () => {
    try {
      const { success, error } = await AgentFlows.toggleFlow(
        flow.uuid,
        !enabled
      );
      if (!success) throw new Error(error);
      toggleFlow(flow.uuid);
    } catch (error) {
      console.error("Failed to toggle flow:", error);
      showToast("Failed to toggle flow", "error", { clear: true });
    }
  };

  return (
    <>
      <div className="p-2">
        <div className="flex flex-col gap-y-[18px] max-w-[500px]">
          <div className="flex w-full justify-between items-center">
            <div className="flex items-center gap-x-2">
              <FlowArrow size={24} weight="bold" className="text-white" />
              <label htmlFor="name" className="text-white text-md font-bold">
                {flow.name}
              </label>
            </div>

View on GitHub (pinned to 3aec848f28)

Solutions

  1. Reload the agent flows list and toggle again on the fresh uuid.
  2. Inspect the Network tab response for the exact status: 401 means re-login, 404 means the flow is gone.
  3. Re-authenticate if the request returned 401/403.
  4. Check backend logs if a flow that visibly exists still fails to toggle.

Example fix

// before
const { success, error } = await AgentFlows.toggleFlow(flow.uuid, !enabled);
if (!success) throw new Error(error);

// after — treat a vanished flow as a list-refresh, not a hard error
const { success, error } = await AgentFlows.toggleFlow(flow.uuid, !enabled);
if (!success) {
  showToast('Failed to toggle flow — refreshing list', 'error', { clear: true });
  await loadFlows(); // re-sync uuids
  return;
}
Defensive patterns

Strategy: fallback

Validate before calling

// Before toggling, confirm the flow still exists in the freshly loaded list
const flows = await loadAvailableFlows();
if (!flows.some((f) => f.uuid === flow.uuid)) {
  showToast('This flow no longer exists — list refreshed.', 'warning');
  return;
}

Try / catch

try {
  const { success, error } = await AgentFlows.toggleFlow(flow.uuid, !enabled);
  if (!success) throw new Error(error);
  toggleFlow(flow.uuid);
} catch (error) {
  console.error('Failed to toggle flow:', error);
  showToast('Failed to toggle flow', 'error', { clear: true });
  await loadAvailableFlows(); // fallback: resync uuids, the old one may be stale
}

Prevention

When it happens

Trigger: Clicking the enable/disable switch for a flow whose uuid no longer exists server-side (deleted from another tab or by another admin), an expired or missing admin token returning 401/403, or a backend validation error for the flow being toggled.

Common situations: Stale admin page listing flows that were removed elsewhere; session token expired mid-session; backend restarting at the moment the switch is clicked.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18). Data as JSON: /api/errors/82bc4a96455cc54c. Report an issue: GitHub.