microsoft/autogen · error · Error

Failed to delete session

Error message

Failed to delete session

What it means

Thrown by SessionAPI.deleteSession when DELETE /sessions/{id}?user_id=... returns falsy status. The method has no return value; failure means the backend declined the delete — usually the session does not exist or belongs to a different user_id.

Source

Thrown at python/packages/autogen-studio/frontend/src/components/views/playground/api.ts:103

      }
    );
    const data = await response.json();
    if (!data.status)
      throw new Error(data.message || "Failed to fetch session runs");
    return data.data; // Returns { runs: RunMessage[] }
  }

  async deleteSession(sessionId: number, userId: string): Promise<void> {
    const response = await fetch(
      `${this.getBaseUrl()}/sessions/${sessionId}?user_id=${userId}`,
      {
        method: "DELETE",
        headers: this.getHeaders(),
      }
    );
    const data = await response.json();
    if (!data.status)
      throw new Error(data.message || "Failed to delete session");
  }

  // Adding messages endpoint
  async listSessionMessages(sessionId: number, userId: string): Promise<any[]> {
    // Replace 'any' with proper message type
    const response = await fetch(
      `${this.getBaseUrl()}/sessions/${sessionId}/messages?user_id=${userId}`,
      {
        headers: this.getHeaders(),
      }
    );
    const data = await response.json();
    if (!data.status)
      throw new Error(data.message || "Failed to fetch messages");
    return data.data;
  }

  // New method to create a run

View on GitHub (pinned to 027ecf0a37)

Solutions

  1. Make delete idempotent in the UI: treat 'not found' as success or refresh the list before allowing delete
  2. Check data.message for the backend reason
  3. Confirm the sessionId in state matches a row in the currently rendered list
  4. Refresh sessions after any delete to resync state

Example fix

// before
await sessionAPI.deleteSession(sessionId, userId);
// after
try {
  await sessionAPI.deleteSession(sessionId, userId);
} catch (e) {
  const sessions = await sessionAPI.listSessions(userId);
  if (!sessions.some(s => s.id === sessionId)) return; // already gone — treat as success
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

null

Try / catch

try {
  await sessionAPI.deleteSession(sessionId, userId);
} catch (e) {
  const sessions = await sessionAPI.listSessions(userId);
  if (!sessions.some(s => s.id === sessionId)) return; // already deleted — success
  throw e;
}
await refreshSessions();

Prevention

When it happens

Trigger: DELETE on an already-deleted session id (double delete, stale UI list), sessionId owned by another user, or DB error during deletion.

Common situations: Two components both reacting to a delete action, list not refreshed after first delete, user switched but old sessionId still selected.

Related errors


AI-assisted analysis of microsoft/autogen@027ecf0a37 (2026-08-15). Data as JSON: /api/errors/f422067b664f7b49. Report an issue: GitHub.