From 86a7ecb45ebf0be61dce9261398000524fd9fab6 Mon Sep 17 00:00:00 2001 From: Vladimir Peshekhonov Date: Wed, 11 Feb 2026 15:22:31 +0100 Subject: [PATCH] fix: avoid rate-limit false positives in likely overflow detection --- ...i-embedded-helpers.islikelycontextoverflowerror.test.ts | 2 ++ src/agents/pi-embedded-helpers/errors.ts | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/agents/pi-embedded-helpers.islikelycontextoverflowerror.test.ts b/src/agents/pi-embedded-helpers.islikelycontextoverflowerror.test.ts index 148f3b95785..e9ff9e457c3 100644 --- a/src/agents/pi-embedded-helpers.islikelycontextoverflowerror.test.ts +++ b/src/agents/pi-embedded-helpers.islikelycontextoverflowerror.test.ts @@ -30,6 +30,8 @@ describe("isLikelyContextOverflowError", () => { "too many requests", "429 Too Many Requests", "exceeded your current quota", + "This request would exceed your account's rate limit", + "429 Too Many Requests: request exceeds rate limit", ]; for (const sample of samples) { expect(isLikelyContextOverflowError(sample)).toBe(false); diff --git a/src/agents/pi-embedded-helpers/errors.ts b/src/agents/pi-embedded-helpers/errors.ts index 09e26e5f0e9..d4d0f34e40a 100644 --- a/src/agents/pi-embedded-helpers/errors.ts +++ b/src/agents/pi-embedded-helpers/errors.ts @@ -38,7 +38,9 @@ export function isContextOverflowError(errorMessage?: string): boolean { const CONTEXT_WINDOW_TOO_SMALL_RE = /context window.*(too small|minimum is)/i; const CONTEXT_OVERFLOW_HINT_RE = - /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|(?:prompt|request|input).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i; + /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|prompt.*(too (?:large|long)|exceed|over|limit|max(?:imum)?)|(?:request|input).*(?:context|window|length|token).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i; +const RATE_LIMIT_HINT_RE = + /rate limit|too many requests|requests per (?:minute|hour|day)|quota|throttl|429\b/i; export function isLikelyContextOverflowError(errorMessage?: string): boolean { if (!errorMessage) { @@ -56,6 +58,9 @@ export function isLikelyContextOverflowError(errorMessage?: string): boolean { if (isContextOverflowError(errorMessage)) { return true; } + if (RATE_LIMIT_HINT_RE.test(errorMessage)) { + return false; + } return CONTEXT_OVERFLOW_HINT_RE.test(errorMessage); }