From b9626a7eff2cee95451e40d87c5156e80a08819e Mon Sep 17 00:00:00 2001 From: Murilo Pires <50873657+MuriloFP@users.noreply.github.com> Date: Mon, 30 Jun 2025 11:56:34 -0300 Subject: [PATCH] fix: cap API retry exponential backoff at 10 minutes (#5171) Co-authored-by: Daniel Riccio --- src/core/task/Task.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index bc7cd31f26..4f0d32c8c1 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -86,6 +86,9 @@ import { ApiMessage } from "../task-persistence/apiMessages" import { getMessagesSinceLastSummary, summarizeConversation } from "../condense" import { maybeRemoveImageBlocks } from "../../api/transform/image-cleaning" +// Constants +const MAX_EXPONENTIAL_BACKOFF_SECONDS = 600 // 10 minutes + export type ClineEvents = { message: [{ action: "created" | "updated"; message: ClineMessage }] taskStarted: [] @@ -1799,7 +1802,10 @@ export class Task extends EventEmitter { } const baseDelay = requestDelaySeconds || 5 - let exponentialDelay = Math.ceil(baseDelay * Math.pow(2, retryAttempt)) + let exponentialDelay = Math.min( + Math.ceil(baseDelay * Math.pow(2, retryAttempt)), + MAX_EXPONENTIAL_BACKOFF_SECONDS, + ) // If the error is a 429, and the error details contain a retry delay, use that delay instead of exponential backoff if (error.status === 429) {