diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/execute.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/execute.ts index 1a99bc1d79..826059ab78 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/execute.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/execute.ts @@ -365,7 +365,11 @@ export async function prepareMessages( const hasBinaryData = ctx.getInputData()?.[itemIndex]?.binary !== undefined; if (hasBinaryData && options.passthroughBinaryImages) { const binaryMessage = await extractBinaryMessages(ctx, itemIndex); - messages.push(binaryMessage); + if (binaryMessage.content.length !== 0) { + messages.push(binaryMessage); + } else { + ctx.logger.debug('Not attaching binary message, since its content was empty'); + } } // We add the agent scratchpad last, so that the agent will not run in loops diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/test/ToolsAgent.test.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/test/ToolsAgent.test.ts index 532a176226..338e605b22 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/test/ToolsAgent.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/test/ToolsAgent.test.ts @@ -233,6 +233,33 @@ describe('prepareMessages', () => { expect(hasHumanMessage).toBe(false); }); + it('should not include a binary message if no image data is present', async () => { + const fakeItem = { + json: {}, + binary: { + img1: { + mimeType: 'application/pdf', + data: 'data:application/pdf;base64,sampledata', + }, + }, + }; + mockContext.getInputData.mockReturnValue([fakeItem]); + mockContext.logger = { + debug: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + }; + + const messages = await prepareMessages(mockContext, 0, { + systemMessage: 'Test system', + passthroughBinaryImages: true, + }); + const hasHumanMessage = messages.some((m) => m instanceof HumanMessage); + expect(hasHumanMessage).toBe(false); + expect(mockContext.logger.debug).toHaveBeenCalledTimes(1); + }); + it('should not include system_message in prompt templates if not provided after version 1.9', async () => { const fakeItem = { json: {} }; const mockNode = mock();