From eb846c95bf44ec6594fb2dc0ea3f4b3d1830f5e8 Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Sat, 14 Feb 2026 18:53:50 -0800 Subject: [PATCH] fix (agents): classify empty-chunk stream failures as timeout --- src/agents/pi-embedded-helpers/errors.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/agents/pi-embedded-helpers/errors.ts b/src/agents/pi-embedded-helpers/errors.ts index ad079ab911..e2719f4ee4 100644 --- a/src/agents/pi-embedded-helpers/errors.ts +++ b/src/agents/pi-embedded-helpers/errors.ts @@ -480,6 +480,10 @@ export function formatAssistantErrorText( return transientCopy; } + if (isTimeoutErrorMessage(raw)) { + return "LLM request timed out."; + } + if (isBillingErrorMessage(raw)) { return formatBillingErrorMessage(opts?.provider); } @@ -568,7 +572,13 @@ const ERROR_PATTERNS = { "usage limit", ], overloaded: [/overloaded_error|"type"\s*:\s*"overloaded_error"/i, "overloaded"], - timeout: ["timeout", "timed out", "deadline exceeded", "context deadline exceeded"], + timeout: [ + "timeout", + "timed out", + "deadline exceeded", + "context deadline exceeded", + /without sending (?:any )?chunks?/i, + ], billing: [ /["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment/i, "payment required",