fix(AI Agent Node): Improve Tools agent empty tool input message (#9622)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
This commit is contained in:
oleg 2024-06-05 14:39:20 +02:00 committed by GitHub
parent a8bb53f4e3
commit e7f616290f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 8 deletions

View file

@ -190,7 +190,14 @@ const agentTypeProperty: INodeProperties = {
name: 'agent', name: 'agent',
type: 'options', type: 'options',
noDataExpression: true, noDataExpression: true,
// eslint-disable-next-line n8n-nodes-base/node-param-options-type-unsorted-items
options: [ options: [
{
name: 'Tools Agent',
value: 'toolsAgent',
description:
'Utilized unified Tool calling interface to select the appropriate tools and argument for execution',
},
{ {
name: 'Conversational Agent', name: 'Conversational Agent',
value: 'conversationalAgent', value: 'conversationalAgent',
@ -219,12 +226,6 @@ const agentTypeProperty: INodeProperties = {
value: 'sqlAgent', value: 'sqlAgent',
description: 'Answers questions about data in an SQL database', description: 'Answers questions about data in an SQL database',
}, },
{
name: 'Tools Agent',
value: 'toolsAgent',
description:
'Utilized unified Tool calling interface to select the appropriate tools and argument for execution',
},
], ],
default: '', default: '',
}; };

View file

@ -155,11 +155,19 @@ export async function toolsAgentExecute(this: IExecuteFunctions): Promise<INodeE
throw new NodeOperationError(this.getNode(), 'The text parameter is empty.'); throw new NodeOperationError(this.getNode(), 'The text parameter is empty.');
} }
// OpenAI doesn't allow empty tools array so we will provide a more user-friendly error message
if (model.lc_namespace.includes('openai') && tools.length === 0) {
throw new NodeOperationError(
this.getNode(),
"Please connect at least one tool. If you don't need any, try the conversational agent instead",
);
}
const response = await executor.invoke({ const response = await executor.invoke({
input, input,
system_message: options.systemMessage ?? SYSTEM_MESSAGE, system_message: options.systemMessage ?? SYSTEM_MESSAGE,
formatting_instructions: formatting_instructions:
'IMPORTANT: Always call `format_final_response` to format your final response!', //outputParser?.getFormatInstructions(), 'IMPORTANT: Always call `format_final_response` to format your final response!',
}); });
returnData.push({ returnData.push({
@ -174,7 +182,10 @@ export async function toolsAgentExecute(this: IExecuteFunctions): Promise<INodeE
}); });
} catch (error) { } catch (error) {
if (this.continueOnFail()) { if (this.continueOnFail()) {
returnData.push({ json: { error: error.message }, pairedItem: { item: itemIndex } }); returnData.push({
json: { error: error?.message },
pairedItem: { item: itemIndex },
});
continue; continue;
} }