From 0d3ed461996bbad06015c455f133baab6506437f Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:59:50 +0300 Subject: [PATCH] fix(OpenAI Node): Throw node operations error in case of openAi client error (#10448) Co-authored-by: Shireen Missi --- .../actions/assistant/message.operation.ts | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/message.operation.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/message.operation.ts index 134e8a116..3ec2e46ee 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/message.operation.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/message.operation.ts @@ -4,7 +4,12 @@ import { OpenAIAssistantRunnable } from 'langchain/experimental/openai_assistant import type { OpenAIToolType } from 'langchain/dist/experimental/openai_assistant/schema'; import { OpenAI as OpenAIClient } from 'openai'; -import { NodeConnectionType, NodeOperationError, updateDisplayOptions } from 'n8n-workflow'; +import { + ApplicationError, + NodeConnectionType, + NodeOperationError, + updateDisplayOptions, +} from 'n8n-workflow'; import type { IDataObject, IExecuteFunctions, @@ -228,25 +233,36 @@ export async function execute(this: IExecuteFunctions, i: number): Promise= 1.3 && + (assistantTools ?? [])?.length + ) { + await client.beta.assistants.update(assistantId, { + tools: assistantTools, + }); + } + filteredResponse = omit(response, ['signal', 'timeout']) as IDataObject; + } catch (error) { + if (!(error instanceof ApplicationError)) { + throw new NodeOperationError(this.getNode(), error.message, { itemIndex: i }); } } - if ( - options.preserveOriginalTools !== false && - nodeVersion >= 1.3 && - (assistantTools ?? [])?.length - ) { - await client.beta.assistants.update(assistantId, { - tools: assistantTools, - }); - } - const filteredResponse = omit(response, ['signal', 'timeout']); return [{ json: filteredResponse, pairedItem: { item: i } }]; }