@n8n/ai-utilities 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/cjs/index.d.ts +6 -0
  2. package/dist/cjs/index.js +18 -2
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  5. package/dist/cjs/utils/fromai-tool-factory.d.ts +14 -0
  6. package/dist/cjs/utils/fromai-tool-factory.js +45 -0
  7. package/dist/cjs/utils/fromai-tool-factory.js.map +1 -0
  8. package/dist/cjs/utils/shared-fields.d.ts +8 -0
  9. package/dist/cjs/utils/shared-fields.js +159 -0
  10. package/dist/cjs/utils/shared-fields.js.map +1 -0
  11. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.d.ts +7 -0
  12. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js +60 -0
  13. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -0
  14. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.d.ts +34 -0
  15. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js +186 -0
  16. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -0
  17. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.d.ts +16 -0
  18. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js +105 -0
  19. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -0
  20. package/dist/cjs/utils/vector-store/MemoryManager/config.d.ts +4 -0
  21. package/dist/cjs/utils/vector-store/MemoryManager/config.js +48 -0
  22. package/dist/cjs/utils/vector-store/MemoryManager/config.js.map +1 -0
  23. package/dist/cjs/utils/vector-store/MemoryManager/types.d.ts +39 -0
  24. package/dist/cjs/utils/vector-store/MemoryManager/types.js +13 -0
  25. package/dist/cjs/utils/vector-store/MemoryManager/types.js.map +1 -0
  26. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.d.ts +4 -0
  27. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js +55 -0
  28. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js.map +1 -0
  29. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.d.ts +18 -0
  30. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +294 -0
  31. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -0
  32. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.d.ts +6 -0
  33. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js +33 -0
  34. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js.map +1 -0
  35. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.d.ts +5 -0
  36. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js +48 -0
  37. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -0
  38. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.d.ts +5 -0
  39. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js +55 -0
  40. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -0
  41. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.d.ts +5 -0
  42. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js +74 -0
  43. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -0
  44. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.d.ts +5 -0
  45. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js +70 -0
  46. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -0
  47. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.d.ts +5 -0
  48. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js +39 -0
  49. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -0
  50. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.d.ts +5 -0
  51. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js +49 -0
  52. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -0
  53. package/dist/cjs/utils/vector-store/createVectorStoreNode/types.d.ts +39 -0
  54. package/dist/cjs/utils/vector-store/createVectorStoreNode/types.js +13 -0
  55. package/dist/cjs/utils/vector-store/createVectorStoreNode/types.js.map +1 -0
  56. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.d.ts +6 -0
  57. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js +30 -0
  58. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js.map +1 -0
  59. package/dist/cjs/utils/vector-store/processDocuments.d.ts +25 -0
  60. package/dist/cjs/utils/vector-store/processDocuments.js +52 -0
  61. package/dist/cjs/utils/vector-store/processDocuments.js.map +1 -0
  62. package/dist/esm/index.d.ts +6 -0
  63. package/dist/esm/index.js +17 -1
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/typecheck.tsbuildinfo +1 -1
  66. package/dist/esm/utils/fromai-tool-factory.d.ts +14 -0
  67. package/dist/esm/utils/fromai-tool-factory.js +35 -0
  68. package/dist/esm/utils/fromai-tool-factory.js.map +1 -0
  69. package/dist/esm/utils/shared-fields.d.ts +8 -0
  70. package/dist/esm/utils/shared-fields.js +149 -0
  71. package/dist/esm/utils/shared-fields.js.map +1 -0
  72. package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.d.ts +7 -0
  73. package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.js +50 -0
  74. package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -0
  75. package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.d.ts +34 -0
  76. package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js +176 -0
  77. package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -0
  78. package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.d.ts +16 -0
  79. package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.js +95 -0
  80. package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -0
  81. package/dist/esm/utils/vector-store/MemoryManager/config.d.ts +4 -0
  82. package/dist/esm/utils/vector-store/MemoryManager/config.js +38 -0
  83. package/dist/esm/utils/vector-store/MemoryManager/config.js.map +1 -0
  84. package/dist/esm/utils/vector-store/MemoryManager/types.d.ts +39 -0
  85. package/dist/esm/utils/vector-store/MemoryManager/types.js +3 -0
  86. package/dist/esm/utils/vector-store/MemoryManager/types.js.map +1 -0
  87. package/dist/esm/utils/vector-store/createVectorStoreNode/constants.d.ts +4 -0
  88. package/dist/esm/utils/vector-store/createVectorStoreNode/constants.js +45 -0
  89. package/dist/esm/utils/vector-store/createVectorStoreNode/constants.js.map +1 -0
  90. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.d.ts +18 -0
  91. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +284 -0
  92. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -0
  93. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/index.d.ts +6 -0
  94. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/index.js +23 -0
  95. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/index.js.map +1 -0
  96. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.d.ts +5 -0
  97. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.js +38 -0
  98. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -0
  99. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.d.ts +5 -0
  100. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.js +45 -0
  101. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -0
  102. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.d.ts +5 -0
  103. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js +64 -0
  104. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -0
  105. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.d.ts +5 -0
  106. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js +60 -0
  107. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -0
  108. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.d.ts +5 -0
  109. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js +29 -0
  110. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -0
  111. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.d.ts +5 -0
  112. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.js +39 -0
  113. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -0
  114. package/dist/esm/utils/vector-store/createVectorStoreNode/types.d.ts +39 -0
  115. package/dist/esm/utils/vector-store/createVectorStoreNode/types.js +3 -0
  116. package/dist/esm/utils/vector-store/createVectorStoreNode/types.js.map +1 -0
  117. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.d.ts +6 -0
  118. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js +20 -0
  119. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js.map +1 -0
  120. package/dist/esm/utils/vector-store/processDocuments.d.ts +25 -0
  121. package/dist/esm/utils/vector-store/processDocuments.js +42 -0
  122. package/dist/esm/utils/vector-store/processDocuments.js.map +1 -0
  123. package/package.json +8 -5
@@ -0,0 +1,14 @@
1
+ import type { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';
2
+ import { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools';
3
+ import type { FromAIArgument, IDataObject, INode, INodeParameters } from 'n8n-workflow';
4
+ import { z } from 'zod';
5
+ export type ToolFunc = (query: string | IDataObject, runManager?: CallbackManagerForToolRun) => Promise<string | IDataObject | IDataObject[]>;
6
+ export interface CreateToolOptions {
7
+ name: string;
8
+ description: string;
9
+ func: ToolFunc;
10
+ extraArgs?: FromAIArgument[];
11
+ }
12
+ export declare function extractFromAIParameters(nodeParameters: INodeParameters): FromAIArgument[];
13
+ export declare function createZodSchemaFromArgs(args: FromAIArgument[]): z.ZodObject<z.ZodRawShape>;
14
+ export declare function createToolFromNode(node: INode, options: CreateToolOptions): DynamicStructuredTool | DynamicTool;
@@ -0,0 +1,45 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "@langchain/core/tools", "n8n-workflow", "zod"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.extractFromAIParameters = extractFromAIParameters;
13
+ exports.createZodSchemaFromArgs = createZodSchemaFromArgs;
14
+ exports.createToolFromNode = createToolFromNode;
15
+ const tools_1 = require("@langchain/core/tools");
16
+ const n8n_workflow_1 = require("n8n-workflow");
17
+ const zod_1 = require("zod");
18
+ function extractFromAIParameters(nodeParameters) {
19
+ const collectedArguments = [];
20
+ (0, n8n_workflow_1.traverseNodeParameters)(nodeParameters, collectedArguments);
21
+ const uniqueArgsMap = new Map();
22
+ for (const arg of collectedArguments) {
23
+ uniqueArgsMap.set(arg.key, arg);
24
+ }
25
+ return Array.from(uniqueArgsMap.values());
26
+ }
27
+ function createZodSchemaFromArgs(args) {
28
+ const schemaObj = args.reduce((acc, placeholder) => {
29
+ acc[placeholder.key] = (0, n8n_workflow_1.generateZodSchema)(placeholder);
30
+ return acc;
31
+ }, {});
32
+ return zod_1.z.object(schemaObj).required();
33
+ }
34
+ function createToolFromNode(node, options) {
35
+ const { name, description, func, extraArgs = [] } = options;
36
+ const collectedArguments = extractFromAIParameters(node.parameters);
37
+ if (collectedArguments.length === 0 && extraArgs.length === 0) {
38
+ return new tools_1.DynamicTool({ name, description, func });
39
+ }
40
+ const allArguments = [...collectedArguments, ...extraArgs];
41
+ const schema = createZodSchemaFromArgs(allArguments);
42
+ return new tools_1.DynamicStructuredTool({ schema, name, description, func });
43
+ }
44
+ });
45
+ //# sourceMappingURL=fromai-tool-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromai-tool-factory.js","sourceRoot":"","sources":["../../../src/utils/fromai-tool-factory.ts"],"names":[],"mappings":";;;;;;;;;;;IAyBA,0DAUC;IAKD,0DAOC;IASD,gDAkBC;IAzED,iDAA2E;IAE3E,+CAAyE;IACzE,6BAAwB;IAqBxB,SAAgB,uBAAuB,CAAC,cAA+B;QACtE,MAAM,kBAAkB,GAAqB,EAAE,CAAC;QAChD,IAAA,qCAAsB,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAE3D,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACtC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAKD,SAAgB,uBAAuB,CAAC,IAAsB;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAiC,EAAE,WAAW,EAAE,EAAE;YAChF,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAA,gCAAiB,EAAC,WAAW,CAAC,CAAC;YACtD,OAAO,GAAG,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,OAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IASD,SAAgB,kBAAkB,CACjC,IAAW,EACX,OAA0B;QAE1B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGpE,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,mBAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAGD,MAAM,YAAY,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAErD,OAAO,IAAI,6BAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { NodeConnectionTypes } from 'n8n-workflow';
2
+ import type { IDisplayOptions, INodeProperties } from 'n8n-workflow';
3
+ export declare const metadataFilterField: INodeProperties;
4
+ export declare function getTemplateNoticeField(templateId: number): INodeProperties;
5
+ export declare function getBatchingOptionFields(displayOptions: IDisplayOptions | undefined, defaultBatchSize?: number): INodeProperties;
6
+ type AllowedConnectionTypes = typeof NodeConnectionTypes.AiAgent | typeof NodeConnectionTypes.AiChain | typeof NodeConnectionTypes.AiDocument | typeof NodeConnectionTypes.AiVectorStore | typeof NodeConnectionTypes.AiRetriever;
7
+ export declare function getConnectionHintNoticeField(connectionTypes: AllowedConnectionTypes[]): INodeProperties;
8
+ export {};
@@ -0,0 +1,159 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "n8n-workflow"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.metadataFilterField = void 0;
13
+ exports.getTemplateNoticeField = getTemplateNoticeField;
14
+ exports.getBatchingOptionFields = getBatchingOptionFields;
15
+ exports.getConnectionHintNoticeField = getConnectionHintNoticeField;
16
+ const n8n_workflow_1 = require("n8n-workflow");
17
+ exports.metadataFilterField = {
18
+ displayName: 'Metadata Filter',
19
+ name: 'metadata',
20
+ type: 'fixedCollection',
21
+ description: 'Metadata to filter the document by',
22
+ typeOptions: {
23
+ multipleValues: true,
24
+ },
25
+ default: {},
26
+ placeholder: 'Add filter field',
27
+ options: [
28
+ {
29
+ name: 'metadataValues',
30
+ displayName: 'Fields to Set',
31
+ values: [
32
+ {
33
+ displayName: 'Name',
34
+ name: 'name',
35
+ type: 'string',
36
+ default: '',
37
+ required: true,
38
+ },
39
+ {
40
+ displayName: 'Value',
41
+ name: 'value',
42
+ type: 'string',
43
+ default: '',
44
+ },
45
+ ],
46
+ },
47
+ ],
48
+ };
49
+ function getTemplateNoticeField(templateId) {
50
+ return {
51
+ displayName: `Save time with an <a href="/templates/${templateId}" target="_blank">example</a> of how this node works`,
52
+ name: 'notice',
53
+ type: 'notice',
54
+ default: '',
55
+ };
56
+ }
57
+ function getBatchingOptionFields(displayOptions, defaultBatchSize = 5) {
58
+ return {
59
+ displayName: 'Batch Processing',
60
+ name: 'batching',
61
+ type: 'collection',
62
+ placeholder: 'Add Batch Processing Option',
63
+ description: 'Batch processing options for rate limiting',
64
+ default: {},
65
+ options: [
66
+ {
67
+ displayName: 'Batch Size',
68
+ name: 'batchSize',
69
+ default: defaultBatchSize,
70
+ type: 'number',
71
+ description: 'How many items to process in parallel. This is useful for rate limiting, but might impact the log output ordering.',
72
+ },
73
+ {
74
+ displayName: 'Delay Between Batches',
75
+ name: 'delayBetweenBatches',
76
+ default: 0,
77
+ type: 'number',
78
+ description: 'Delay in milliseconds between batches. This is useful for rate limiting.',
79
+ },
80
+ ],
81
+ displayOptions,
82
+ };
83
+ }
84
+ const connectionsString = {
85
+ [n8n_workflow_1.NodeConnectionTypes.AiAgent]: {
86
+ connection: '',
87
+ locale: 'AI Agent',
88
+ },
89
+ [n8n_workflow_1.NodeConnectionTypes.AiChain]: {
90
+ connection: '',
91
+ locale: 'AI Chain',
92
+ },
93
+ [n8n_workflow_1.NodeConnectionTypes.AiDocument]: {
94
+ connection: n8n_workflow_1.NodeConnectionTypes.AiDocument,
95
+ locale: 'Document Loader',
96
+ },
97
+ [n8n_workflow_1.NodeConnectionTypes.AiVectorStore]: {
98
+ connection: n8n_workflow_1.NodeConnectionTypes.AiVectorStore,
99
+ locale: 'Vector Store',
100
+ },
101
+ [n8n_workflow_1.NodeConnectionTypes.AiRetriever]: {
102
+ connection: n8n_workflow_1.NodeConnectionTypes.AiRetriever,
103
+ locale: 'Vector Store Retriever',
104
+ },
105
+ };
106
+ function determineArticle(nextWord) {
107
+ const vowels = /^[aeiouAEIOU]/;
108
+ return vowels.test(nextWord) ? 'an' : 'a';
109
+ }
110
+ const getConnectionParameterString = (connectionType) => {
111
+ if (connectionType === '')
112
+ return "data-action-parameter-creatorview='AI'";
113
+ return `data-action-parameter-connectiontype='${connectionType}'`;
114
+ };
115
+ const getAhref = (connectionType) => `<a class="test" data-action='openSelectiveNodeCreator'${getConnectionParameterString(connectionType.connection)}'>${connectionType.locale}</a>`;
116
+ function getConnectionHintNoticeField(connectionTypes) {
117
+ const groupedConnections = new Map();
118
+ connectionTypes.forEach((connectionType) => {
119
+ const connectionString = connectionsString[connectionType].connection;
120
+ const localeString = connectionsString[connectionType].locale;
121
+ if (!groupedConnections.has(connectionString)) {
122
+ groupedConnections.set(connectionString, [localeString]);
123
+ return;
124
+ }
125
+ groupedConnections.get(connectionString)?.push(localeString);
126
+ });
127
+ let displayName;
128
+ if (groupedConnections.size === 1) {
129
+ const [[connection, locales]] = Array.from(groupedConnections);
130
+ displayName = `This node must be connected to ${determineArticle(locales[0])} ${locales[0]
131
+ .toLowerCase()
132
+ .replace(/^ai /, 'AI ')}. <a data-action='openSelectiveNodeCreator' ${getConnectionParameterString(connection)}>Insert one</a>`;
133
+ }
134
+ else {
135
+ const ahrefs = Array.from(groupedConnections, ([connection, locales]) => {
136
+ const locale = locales.length > 1
137
+ ? locales
138
+ .map((localeString, index, { length }) => {
139
+ return ((index === 0 ? `${determineArticle(localeString)} ` : '') +
140
+ (index < length - 1 ? `${localeString} or ` : localeString));
141
+ })
142
+ .join('')
143
+ : `${determineArticle(locales[0])} ${locales[0]}`;
144
+ return getAhref({ connection, locale });
145
+ });
146
+ displayName = `This node needs to be connected to ${ahrefs.join(' or ')}.`;
147
+ }
148
+ return {
149
+ displayName,
150
+ name: 'notice',
151
+ type: 'notice',
152
+ default: '',
153
+ typeOptions: {
154
+ containerClass: 'ndv-connection-hint-notice',
155
+ },
156
+ };
157
+ }
158
+ });
159
+ //# sourceMappingURL=shared-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-fields.js","sourceRoot":"","sources":["../../../src/utils/shared-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
2
+ import type { Document } from '@langchain/core/documents';
3
+ import type { IMemoryCalculator } from './types';
4
+ export declare class MemoryCalculator implements IMemoryCalculator {
5
+ estimateBatchSize(documents: Document[]): number;
6
+ calculateVectorStoreSize(vectorStore: MemoryVectorStore): number;
7
+ }
@@ -0,0 +1,60 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MemoryCalculator = void 0;
13
+ const FLOAT_SIZE_BYTES = 8;
14
+ const CHAR_SIZE_BYTES = 2;
15
+ const VECTOR_OVERHEAD_BYTES = 200;
16
+ const EMBEDDING_DIMENSIONS = 1536;
17
+ const EMBEDDING_SIZE_BYTES = EMBEDDING_DIMENSIONS * FLOAT_SIZE_BYTES;
18
+ const AVG_METADATA_SIZE_BYTES = 100;
19
+ class MemoryCalculator {
20
+ estimateBatchSize(documents) {
21
+ if (documents.length === 0)
22
+ return 0;
23
+ let totalContentSize = 0;
24
+ let totalMetadataSize = 0;
25
+ for (const doc of documents) {
26
+ if (doc.pageContent) {
27
+ totalContentSize += doc.pageContent.length * CHAR_SIZE_BYTES;
28
+ }
29
+ if (doc.metadata) {
30
+ const metadataKeys = Object.keys(doc.metadata).length;
31
+ if (metadataKeys > 0) {
32
+ totalMetadataSize += metadataKeys * AVG_METADATA_SIZE_BYTES;
33
+ }
34
+ }
35
+ }
36
+ const embeddingSize = documents.length * EMBEDDING_SIZE_BYTES;
37
+ const overhead = documents.length * VECTOR_OVERHEAD_BYTES;
38
+ const calculatedSize = totalContentSize + totalMetadataSize + embeddingSize + overhead;
39
+ return Math.ceil(calculatedSize);
40
+ }
41
+ calculateVectorStoreSize(vectorStore) {
42
+ if (!vectorStore.memoryVectors || vectorStore.memoryVectors.length === 0) {
43
+ return 0;
44
+ }
45
+ let storeSize = 0;
46
+ for (const vector of vectorStore.memoryVectors) {
47
+ storeSize += vector.embedding.length * FLOAT_SIZE_BYTES;
48
+ storeSize += vector.content ? vector.content.length * CHAR_SIZE_BYTES : 0;
49
+ if (vector.metadata) {
50
+ const metadataStr = JSON.stringify(vector.metadata);
51
+ storeSize += metadataStr.length * CHAR_SIZE_BYTES;
52
+ }
53
+ storeSize += VECTOR_OVERHEAD_BYTES;
54
+ }
55
+ return Math.ceil(storeSize);
56
+ }
57
+ }
58
+ exports.MemoryCalculator = MemoryCalculator;
59
+ });
60
+ //# sourceMappingURL=MemoryCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryCalculator.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/MemoryCalculator.ts"],"names":[],"mappings":";;;;;;;;;;;;IAMA,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,MAAM,qBAAqB,GAAG,GAAG,CAAC;IAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC;IAClC,MAAM,oBAAoB,GAAG,oBAAoB,GAAG,gBAAgB,CAAC;IACrE,MAAM,uBAAuB,GAAG,GAAG,CAAC;IAKpC,MAAa,gBAAgB;QAI5B,iBAAiB,CAAC,SAAqB;YACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAErC,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAG1B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACrB,gBAAgB,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC;gBAC9D,CAAC;gBAGD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAElB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;oBACtD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBAGtB,iBAAiB,IAAI,YAAY,GAAG,uBAAuB,CAAC;oBAC7D,CAAC;gBACF,CAAC;YACF,CAAC;YAID,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC;YAG9D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,qBAAqB,CAAC;YAG1D,MAAM,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,aAAa,GAAG,QAAQ,CAAC;YAEvF,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAKD,wBAAwB,CAAC,WAA8B;YACtD,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,CAAC;YACV,CAAC;YAED,IAAI,SAAS,GAAG,CAAC,CAAC;YAGlB,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;gBAEhD,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBAGxD,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAG1E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAErB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACpD,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC;gBACnD,CAAC;gBAGD,SAAS,IAAI,qBAAqB,CAAC;YACpC,CAAC;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;KACD;IAxED,4CAwEC"}
@@ -0,0 +1,34 @@
1
+ import { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
2
+ import type { Document } from '@langchain/core/documents';
3
+ import type { Embeddings } from '@langchain/core/embeddings';
4
+ import type { OpenAIEmbeddings, AzureOpenAIEmbeddings } from '@langchain/openai';
5
+ import type { Logger } from 'n8n-workflow';
6
+ import { MemoryCalculator } from './MemoryCalculator';
7
+ import { StoreCleanupService } from './StoreCleanupService';
8
+ import type { VectorStoreMetadata, VectorStoreStats } from './types';
9
+ export declare class MemoryVectorStoreManager {
10
+ protected embeddings: Embeddings | OpenAIEmbeddings | AzureOpenAIEmbeddings;
11
+ protected logger: Logger;
12
+ private static instance;
13
+ protected vectorStoreBuffer: Map<string, MemoryVectorStore>;
14
+ protected storeMetadata: Map<string, VectorStoreMetadata>;
15
+ protected memoryUsageBytes: number;
16
+ protected memoryCalculator: MemoryCalculator;
17
+ protected cleanupService: StoreCleanupService;
18
+ protected static logger: Logger;
19
+ protected maxMemorySizeBytes: number;
20
+ protected inactiveTtlMs: number;
21
+ protected ttlCleanupIntervalId: NodeJS.Timeout | null;
22
+ protected constructor(embeddings: Embeddings | OpenAIEmbeddings | AzureOpenAIEmbeddings, logger: Logger);
23
+ static getInstance(embeddings: Embeddings | OpenAIEmbeddings | AzureOpenAIEmbeddings, logger: Logger): MemoryVectorStoreManager;
24
+ private setupTtlCleanup;
25
+ private handleCleanup;
26
+ getMemoryKeysList(): string[];
27
+ getVectorStore(memoryKey: string): Promise<MemoryVectorStore>;
28
+ protected clearStoreMetadata(memoryKey: string): void;
29
+ getMemoryUsage(): number;
30
+ getMemoryUsageFormatted(): string;
31
+ recalculateMemoryUsage(): void;
32
+ addDocuments(memoryKey: string, documents: Document[], clearStore?: boolean): Promise<void>;
33
+ getStats(): VectorStoreStats;
34
+ }
@@ -0,0 +1,186 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "@langchain/classic/vectorstores/memory", "./config", "./MemoryCalculator", "./StoreCleanupService"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MemoryVectorStoreManager = void 0;
13
+ const memory_1 = require("@langchain/classic/vectorstores/memory");
14
+ const config_1 = require("./config");
15
+ const MemoryCalculator_1 = require("./MemoryCalculator");
16
+ const StoreCleanupService_1 = require("./StoreCleanupService");
17
+ class MemoryVectorStoreManager {
18
+ constructor(embeddings, logger) {
19
+ this.embeddings = embeddings;
20
+ this.logger = logger;
21
+ this.memoryUsageBytes = 0;
22
+ this.ttlCleanupIntervalId = null;
23
+ this.vectorStoreBuffer = new Map();
24
+ this.storeMetadata = new Map();
25
+ this.logger = logger;
26
+ const config = (0, config_1.getConfig)();
27
+ this.maxMemorySizeBytes = (0, config_1.mbToBytes)(config.maxMemoryMB);
28
+ this.inactiveTtlMs = (0, config_1.hoursToMs)(config.ttlHours);
29
+ this.memoryCalculator = new MemoryCalculator_1.MemoryCalculator();
30
+ this.cleanupService = new StoreCleanupService_1.StoreCleanupService(this.maxMemorySizeBytes, this.inactiveTtlMs, this.vectorStoreBuffer, this.storeMetadata, this.handleCleanup.bind(this));
31
+ this.setupTtlCleanup();
32
+ }
33
+ static getInstance(embeddings, logger) {
34
+ if (!MemoryVectorStoreManager.instance) {
35
+ MemoryVectorStoreManager.instance = new MemoryVectorStoreManager(embeddings, logger);
36
+ }
37
+ else {
38
+ MemoryVectorStoreManager.instance.embeddings = embeddings;
39
+ MemoryVectorStoreManager.instance.vectorStoreBuffer.forEach((vectorStoreInstance) => {
40
+ vectorStoreInstance.embeddings = embeddings;
41
+ });
42
+ }
43
+ return MemoryVectorStoreManager.instance;
44
+ }
45
+ setupTtlCleanup() {
46
+ if (this.inactiveTtlMs <= 0) {
47
+ return;
48
+ }
49
+ const CLEANUP_INTERVAL_MS = 60 * 60 * 1000;
50
+ if (this.ttlCleanupIntervalId) {
51
+ clearInterval(this.ttlCleanupIntervalId);
52
+ }
53
+ this.ttlCleanupIntervalId = setInterval(() => {
54
+ this.cleanupService.cleanupInactiveStores();
55
+ }, CLEANUP_INTERVAL_MS);
56
+ }
57
+ handleCleanup(removedKeys, freedBytes, reason) {
58
+ this.memoryUsageBytes -= freedBytes;
59
+ if (reason === 'ttl') {
60
+ const ttlHours = Math.round(this.inactiveTtlMs / (60 * 60 * 1000));
61
+ this.logger.info(`TTL cleanup: removed ${removedKeys.length} inactive vector stores (${ttlHours}h TTL) to free ${Math.round(freedBytes / (1024 * 1024))}MB of memory`);
62
+ }
63
+ else {
64
+ this.logger.info(`Memory cleanup: removed ${removedKeys.length} oldest vector stores to free ${Math.round(freedBytes / (1024 * 1024))}MB of memory`);
65
+ }
66
+ }
67
+ getMemoryKeysList() {
68
+ return Array.from(this.vectorStoreBuffer.keys());
69
+ }
70
+ async getVectorStore(memoryKey) {
71
+ let vectorStoreInstance = this.vectorStoreBuffer.get(memoryKey);
72
+ if (!vectorStoreInstance) {
73
+ vectorStoreInstance = await memory_1.MemoryVectorStore.fromExistingIndex(this.embeddings);
74
+ this.vectorStoreBuffer.set(memoryKey, vectorStoreInstance);
75
+ this.storeMetadata.set(memoryKey, {
76
+ size: 0,
77
+ createdAt: new Date(),
78
+ lastAccessed: new Date(),
79
+ });
80
+ }
81
+ else {
82
+ const metadata = this.storeMetadata.get(memoryKey);
83
+ if (metadata) {
84
+ metadata.lastAccessed = new Date();
85
+ }
86
+ }
87
+ return vectorStoreInstance;
88
+ }
89
+ clearStoreMetadata(memoryKey) {
90
+ const metadata = this.storeMetadata.get(memoryKey);
91
+ if (metadata) {
92
+ this.memoryUsageBytes -= metadata.size;
93
+ metadata.size = 0;
94
+ metadata.lastAccessed = new Date();
95
+ }
96
+ }
97
+ getMemoryUsage() {
98
+ return this.memoryUsageBytes;
99
+ }
100
+ getMemoryUsageFormatted() {
101
+ return `${Math.round(this.memoryUsageBytes / (1024 * 1024))}MB`;
102
+ }
103
+ recalculateMemoryUsage() {
104
+ this.memoryUsageBytes = 0;
105
+ for (const [key, vectorStore] of this.vectorStoreBuffer.entries()) {
106
+ const storeSize = this.memoryCalculator.calculateVectorStoreSize(vectorStore);
107
+ const metadata = this.storeMetadata.get(key);
108
+ if (metadata) {
109
+ metadata.size = storeSize;
110
+ this.memoryUsageBytes += storeSize;
111
+ }
112
+ }
113
+ this.logger.debug(`Recalculated vector store memory: ${this.getMemoryUsageFormatted()}`);
114
+ }
115
+ async addDocuments(memoryKey, documents, clearStore) {
116
+ if (clearStore) {
117
+ this.clearStoreMetadata(memoryKey);
118
+ this.vectorStoreBuffer.delete(memoryKey);
119
+ }
120
+ const estimatedAddedSize = this.memoryCalculator.estimateBatchSize(documents);
121
+ this.cleanupService.cleanupOldestStores(estimatedAddedSize);
122
+ const vectorStoreInstance = await this.getVectorStore(memoryKey);
123
+ const vectorCountBefore = vectorStoreInstance.memoryVectors?.length || 0;
124
+ await vectorStoreInstance.addDocuments(documents);
125
+ const metadata = this.storeMetadata.get(memoryKey);
126
+ if (metadata) {
127
+ metadata.size += estimatedAddedSize;
128
+ metadata.lastAccessed = new Date();
129
+ this.memoryUsageBytes += estimatedAddedSize;
130
+ }
131
+ const vectorCount = vectorStoreInstance.memoryVectors?.length || 0;
132
+ if ((vectorCount > 0 && vectorCount % 100 === 0) ||
133
+ documents.length > 20 ||
134
+ (vectorCountBefore === 0 && vectorCount > 0)) {
135
+ this.recalculateMemoryUsage();
136
+ }
137
+ const maxMemoryMB = this.maxMemorySizeBytes > 0
138
+ ? (this.maxMemorySizeBytes / (1024 * 1024)).toFixed(0)
139
+ : 'unlimited';
140
+ this.logger.debug(`Vector store memory: ${this.getMemoryUsageFormatted()}/${maxMemoryMB}MB (${vectorCount} vectors in ${this.vectorStoreBuffer.size} stores)`);
141
+ }
142
+ getStats() {
143
+ const now = Date.now();
144
+ let inactiveStoreCount = 0;
145
+ this.recalculateMemoryUsage();
146
+ const stats = {
147
+ totalSizeBytes: this.memoryUsageBytes,
148
+ totalSizeMB: Math.round((this.memoryUsageBytes / (1024 * 1024)) * 100) / 100,
149
+ percentOfLimit: this.maxMemorySizeBytes > 0
150
+ ? Math.round((this.memoryUsageBytes / this.maxMemorySizeBytes) * 100)
151
+ : 0,
152
+ maxMemoryMB: this.maxMemorySizeBytes > 0 ? this.maxMemorySizeBytes / (1024 * 1024) : -1,
153
+ storeCount: this.vectorStoreBuffer.size,
154
+ inactiveStoreCount: 0,
155
+ ttlHours: this.inactiveTtlMs > 0 ? this.inactiveTtlMs / (60 * 60 * 1000) : -1,
156
+ stores: {},
157
+ };
158
+ for (const [key, metadata] of this.storeMetadata.entries()) {
159
+ const store = this.vectorStoreBuffer.get(key);
160
+ if (store) {
161
+ const lastAccessedTime = metadata.lastAccessed.getTime();
162
+ const inactiveTimeMs = now - lastAccessedTime;
163
+ const isInactive = this.cleanupService.isStoreInactive(metadata);
164
+ if (isInactive) {
165
+ inactiveStoreCount++;
166
+ }
167
+ stats.stores[key] = {
168
+ sizeBytes: metadata.size,
169
+ sizeMB: Math.round((metadata.size / (1024 * 1024)) * 100) / 100,
170
+ percentOfTotal: Math.round((metadata.size / this.memoryUsageBytes) * 100) || 0,
171
+ vectors: store.memoryVectors?.length || 0,
172
+ createdAt: metadata.createdAt.toISOString(),
173
+ lastAccessed: metadata.lastAccessed.toISOString(),
174
+ inactive: isInactive,
175
+ inactiveForHours: Math.round(inactiveTimeMs / (60 * 60 * 1000)),
176
+ };
177
+ }
178
+ }
179
+ stats.inactiveStoreCount = inactiveStoreCount;
180
+ return stats;
181
+ }
182
+ }
183
+ exports.MemoryVectorStoreManager = MemoryVectorStoreManager;
184
+ MemoryVectorStoreManager.instance = null;
185
+ });
186
+ //# sourceMappingURL=MemoryVectorStoreManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryVectorStoreManager.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/MemoryVectorStoreManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
2
+ import type { VectorStoreMetadata, IStoreCleanupService } from './types';
3
+ export declare class StoreCleanupService implements IStoreCleanupService {
4
+ private readonly maxMemorySizeBytes;
5
+ private readonly inactiveTtlMs;
6
+ private readonly vectorStores;
7
+ private readonly storeMetadata;
8
+ private readonly onCleanup;
9
+ private oldestStoreKeys;
10
+ private lastSortTime;
11
+ private readonly CACHE_TTL_MS;
12
+ constructor(maxMemorySizeBytes: number, inactiveTtlMs: number, vectorStores: Map<string, MemoryVectorStore>, storeMetadata: Map<string, VectorStoreMetadata>, onCleanup: (removedKeys: string[], freedBytes: number, reason: 'ttl' | 'memory') => void);
13
+ isStoreInactive(metadata: VectorStoreMetadata): boolean;
14
+ cleanupInactiveStores(): void;
15
+ cleanupOldestStores(requiredBytes: number): void;
16
+ }