From bd877282159962cbd5bb2a7e8bb3df777b774fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Mon, 3 Mar 2025 13:48:28 +0100 Subject: [PATCH] fix(OpenAI Node): Do not report openai RateLimitErrors to Sentry (no-changelog) (#13637) --- .../OpenAi/helpers/error-handling.test.ts | 5 ++++- .../vendors/OpenAi/helpers/error-handling.ts | 16 ++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.test.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.test.ts index 97aee1d943..13fcf0877d 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.test.ts @@ -1,3 +1,4 @@ +import { OperationalError } from 'n8n-workflow'; import { RateLimitError } from 'openai'; import { OpenAIError } from 'openai/error'; @@ -41,7 +42,9 @@ describe('error-handling', () => { try { openAiFailedAttemptHandler(error); } catch (e) { - expect(e).toBe(error); + expect(e).toBeInstanceOf(OperationalError); + expect(e.level).toBe('warning'); + expect(e.cause).toBe(error); expect(e.message).toBe('OpenAI: Rate limit reached'); } }); diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.ts index 4fbb140def..011d59a095 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.ts @@ -1,3 +1,4 @@ +import { OperationalError } from 'n8n-workflow'; import { RateLimitError } from 'openai'; import { OpenAIError } from 'openai/error'; @@ -20,17 +21,8 @@ export const openAiFailedAttemptHandler = (error: any) => { // If the error is a rate limit error, we want to handle it differently // because OpenAI has multiple different rate limit errors const errorCode = error?.code; - if (errorCode) { - const customErrorMessage = getCustomErrorMessage(errorCode); - - if (customErrorMessage) { - if (error.error) { - (error.error as { message: string }).message = customErrorMessage; - error.message = customErrorMessage; - } - } - } - - throw error; + const errorMessage = + getCustomErrorMessage(errorCode ?? 'rate_limit_exceeded') ?? errorMap.rate_limit_exceeded; + throw new OperationalError(errorMessage, { cause: error }); } };