diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/create.operation.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/create.operation.ts
index aa511a3ca44f8..185e0d94f917e 100644
--- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/create.operation.ts
+++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/assistant/create.operation.ts
@@ -120,7 +120,8 @@ const properties: INodeProperties[] = [
},
},
{
- displayName: "Add custom n8n tools when using the 'Message Assistant' operation",
+ displayName:
+ 'Add custom n8n tools when you message your assistant (rather than when creating it)',
name: 'noticeTools',
type: 'notice',
default: '',
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 3623c18fd4e0c..6d7e669e3923b 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
@@ -84,6 +84,19 @@ const properties: INodeProperties[] = [
description: 'Maximum amount of time a request is allowed to take in milliseconds',
type: 'number',
},
+ {
+ displayName: 'Preserve Original Tools',
+ name: 'preserveOriginalTools',
+ type: 'boolean',
+ default: true,
+ description:
+ 'Whether to preserve the original tools of the assistant after the execution of this node, otherwise the tools will be replaced with the connected tools, if any, default is true',
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { gte: 1.3 } }],
+ },
+ },
+ },
],
},
];
@@ -123,6 +136,7 @@ export async function execute(this: IExecuteFunctions, i: number): Promise 1);
+ let assistantTools;
if (tools.length) {
const transformedConnectedTools = tools?.map(formatToOpenAIAssistantTool) ?? [];
const nativeToolsParsed: OpenAIToolType = [];
- const assistant = await client.beta.assistants.retrieve(assistantId);
+ assistantTools = (await client.beta.assistants.retrieve(assistantId)).tools;
- const useCodeInterpreter = assistant.tools.some((tool) => tool.type === 'code_interpreter');
+ const useCodeInterpreter = assistantTools.some((tool) => tool.type === 'code_interpreter');
if (useCodeInterpreter) {
nativeToolsParsed.push({
type: 'code_interpreter',
});
}
- const useRetrieval = assistant.tools.some((tool) => tool.type === 'retrieval');
+ const useRetrieval = assistantTools.some((tool) => tool.type === 'retrieval');
if (useRetrieval) {
nativeToolsParsed.push({
type: 'retrieval',
@@ -166,11 +181,21 @@ export async function execute(this: IExecuteFunctions, i: number): Promise= 1.3 &&
+ (assistantTools ?? [])?.length
+ ) {
+ await client.beta.assistants.update(assistantId, {
+ tools: assistantTools,
+ });
+ }
+
return [{ json: response, pairedItem: { item: i } }];
}
diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts
index 778b42c26d727..080680b776604 100644
--- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts
+++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts
@@ -68,7 +68,7 @@ export const versionDescription: INodeTypeDescription = {
name: 'openAi',
icon: 'file:openAi.svg',
group: ['transform'],
- version: [1, 1.1, 1.2],
+ version: [1, 1.1, 1.2, 1.3],
subtitle: `={{(${prettifyOperation})($parameter.resource, $parameter.operation)}}`,
description: 'Message an assistant or GPT, analyze images, generate audio, etc.',
defaults: {