Mintplex-Labs/anything-llm · error · Error

data.message || "Could not update slash command preset."

Error message

data.message || "Could not update slash command preset."

What it means

Thrown by updateSlashCommandPreset in the AnythingLLM frontend when POST /api/system/slash-command-presets/:presetId responds non-2xx, preferring the server's data.message over the generic fallback. The route updates a preset the caller owns, so it fails on unknown ids, non-owner access, and validation problems.

Source

Thrown at frontend/src/models/system.js:749

        return data;
      })
      .then((res) => ({ preset: res.preset, error: null }))
      .catch((e) => {
        console.error(e);
        return { preset: null, error: e.message };
      });
  },

  updateSlashCommandPreset: async function (presetId, presetData) {
    return await fetch(`${API_BASE}/system/slash-command-presets/${presetId}`, {
      method: "POST",
      headers: baseHeaders(),
      body: JSON.stringify(presetData),
    })
      .then(async (res) => {
        const data = await res.json();
        if (!res.ok)
          throw new Error(
            data.message || "Could not update slash command preset."
          );
        return data;
      })
      .then((res) => ({ preset: res.preset, error: null }))
      .catch((e) => {
        console.error(e);
        return { preset: null, error: e.message };
      });
  },

  deleteSlashCommandPreset: async function (presetId) {
    return await fetch(`${API_BASE}/system/slash-command-presets/${presetId}`, {
      method: "DELETE",
      headers: baseHeaders(),
    })
      .then((res) => {
        if (!res.ok) throw new Error("Could not delete slash command preset.");

View on GitHub (pinned to 3aec848f28)

Solutions

  1. Re-fetch the preset list and retry with a presetId that still exists.
  2. Keep the edited command unique among the user's presets.
  3. Read the returned `error` for the server's field-level validation message.
  4. Check server logs if the status looks like a 500 rather than 4xx.
Defensive patterns

Strategy: validation

Validate before calling

// run before System.updateSlashCommandPreset
if (!presetId) throw new Error('Preset id is required');
if (!validPreset(presetData)) throw new Error('Command and name are required');
if (!presets.some((p) => p.id === presetId)) {
  throw new Error('Preset no longer exists — refresh the list');
}

Try / catch

const { preset, error } = await System.updateSlashCommandPreset(presetId, presetData);
if (error) {
  if (/not found/i.test(error)) await refreshPresets(); // stale id — reload and retry once
  else showPresetError(error);
  return;
}

Prevention

When it happens

Trigger: Posting to a presetId that was deleted in another session (404); validation failure on the updated fields; a user editing a preset that belongs to someone else (403); database errors during the update.

Common situations: Stale preset list after edits in another tab; renamed command colliding with another preset; shared accounts editing the same preset concurrently.

Related errors


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