diff --git a/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts b/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts index 74c78417b3..2661559af1 100644 --- a/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts +++ b/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts @@ -405,6 +405,11 @@ export const createVectorStoreNode = (args: VectorStoreNodeConstructorArgs) => const toolDescription = this.getNodeParameter('toolDescription', itemIndex) as string; const toolName = this.getNodeParameter('toolName', itemIndex) as string; const topK = this.getNodeParameter('topK', itemIndex, 4) as number; + const includeDocumentMetadata = this.getNodeParameter( + 'includeDocumentMetadata', + itemIndex, + false, + ) as boolean; const vectorStoreTool = new DynamicTool({ name: toolName, @@ -426,11 +431,11 @@ export const createVectorStoreNode = (args: VectorStoreNodeConstructorArgs) => return documents .map((document) => { - // Tools can only return a string or array of objects with type text - // todo return concatenated strings instead? Or just without metadata? - // return { type: 'text', text: document[0].pageContent }; - // todo with metadata? - return { type: 'text', text: JSON.stringify(document[0]) }; + if (includeDocumentMetadata) { + return { type: 'text', text: JSON.stringify(document[0]) }; + } + + return { type: 'text', text: document[0].pageContent }; }) .filter((document) => !!document); }, diff --git a/packages/workflow/src/NodeHelpers.ts b/packages/workflow/src/NodeHelpers.ts index 698444d771..92a9e7dd7f 100644 --- a/packages/workflow/src/NodeHelpers.ts +++ b/packages/workflow/src/NodeHelpers.ts @@ -400,6 +400,18 @@ export function convertNodeToAiTool< default: 'auto', }; + if (isVectorStore) { + const metadataProp: INodeProperties = { + displayName: 'Include metadata', + name: 'includeDocumentMetadata', + type: 'boolean', + default: false, + description: 'Whether or not to include document metadata', + }; + + item.description.properties.unshift(metadataProp); + } + const descProp: INodeProperties = { displayName: 'Description', name: 'toolDescription',