@n8n/ai-utilities 0.23.2 → 0.24.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.
- package/dist/cjs/adapters/langchain-chat-model.js +174 -184
- package/dist/cjs/adapters/langchain-chat-model.js.map +1 -1
- package/dist/cjs/adapters/langchain-history.js +23 -33
- package/dist/cjs/adapters/langchain-history.js.map +1 -1
- package/dist/cjs/adapters/langchain-memory.js +32 -42
- package/dist/cjs/adapters/langchain-memory.js.map +1 -1
- package/dist/cjs/agent-config/config-normalization.d.ts +11 -0
- package/dist/cjs/agent-config/config-normalization.js +134 -0
- package/dist/cjs/agent-config/config-normalization.js.map +1 -0
- package/dist/cjs/agent-config/from-ai-node-parameters.d.ts +7 -0
- package/dist/cjs/agent-config/from-ai-node-parameters.js +43 -0
- package/dist/cjs/agent-config/from-ai-node-parameters.js.map +1 -0
- package/dist/cjs/agent-config/index.d.ts +3 -0
- package/dist/cjs/agent-config/index.js +17 -0
- package/dist/cjs/agent-config/index.js.map +1 -0
- package/dist/cjs/agent-config/model-id.d.ts +5 -0
- package/dist/cjs/agent-config/model-id.js +16 -0
- package/dist/cjs/agent-config/model-id.js.map +1 -0
- package/dist/cjs/agent-config/native-web-search-provider-tools.d.ts +7 -0
- package/dist/cjs/agent-config/native-web-search-provider-tools.js +55 -0
- package/dist/cjs/agent-config/native-web-search-provider-tools.js.map +1 -0
- package/dist/cjs/ai-node-sdk-version.js +4 -14
- package/dist/cjs/ai-node-sdk-version.js.map +1 -1
- package/dist/cjs/chat-model/base.js +21 -31
- package/dist/cjs/chat-model/base.js.map +1 -1
- package/dist/cjs/converters/message.js +308 -318
- package/dist/cjs/converters/message.js.map +1 -1
- package/dist/cjs/converters/tool.js +50 -60
- package/dist/cjs/converters/tool.js.map +1 -1
- package/dist/cjs/guards.js +26 -36
- package/dist/cjs/guards.js.map +1 -1
- package/dist/cjs/index.js +99 -108
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/memory/base-chat-history.js +9 -19
- package/dist/cjs/memory/base-chat-history.js.map +1 -1
- package/dist/cjs/memory/base-chat-memory.js +6 -16
- package/dist/cjs/memory/base-chat-memory.js.map +1 -1
- package/dist/cjs/memory/windowed-chat-memory.js +33 -43
- package/dist/cjs/memory/windowed-chat-memory.js.map +1 -1
- package/dist/cjs/model-discovery/index.js +61 -71
- package/dist/cjs/model-discovery/index.js.map +1 -1
- package/dist/cjs/model-discovery/providers/anthropic.js +12 -22
- package/dist/cjs/model-discovery/providers/anthropic.js.map +1 -1
- package/dist/cjs/model-discovery/providers/cohere.js +12 -22
- package/dist/cjs/model-discovery/providers/cohere.js.map +1 -1
- package/dist/cjs/model-discovery/providers/deepseek.js +5 -15
- package/dist/cjs/model-discovery/providers/deepseek.js.map +1 -1
- package/dist/cjs/model-discovery/providers/google.js +15 -25
- package/dist/cjs/model-discovery/providers/google.js.map +1 -1
- package/dist/cjs/model-discovery/providers/groq.js +9 -19
- package/dist/cjs/model-discovery/providers/groq.js.map +1 -1
- package/dist/cjs/model-discovery/providers/mistral.js +11 -21
- package/dist/cjs/model-discovery/providers/mistral.js.map +1 -1
- package/dist/cjs/model-discovery/providers/nvidia.js +21 -31
- package/dist/cjs/model-discovery/providers/nvidia.js.map +1 -1
- package/dist/cjs/model-discovery/providers/openai.js +31 -41
- package/dist/cjs/model-discovery/providers/openai.js.map +1 -1
- package/dist/cjs/model-discovery/providers/openrouter.js +5 -15
- package/dist/cjs/model-discovery/providers/openrouter.js.map +1 -1
- package/dist/cjs/model-discovery/providers/vercel.js +5 -15
- package/dist/cjs/model-discovery/providers/vercel.js.map +1 -1
- package/dist/cjs/model-discovery/providers/xai.js +5 -15
- package/dist/cjs/model-discovery/providers/xai.js.map +1 -1
- package/dist/cjs/model-discovery/request.js +40 -50
- package/dist/cjs/model-discovery/request.js.map +1 -1
- package/dist/cjs/model-discovery/types.js +2 -12
- package/dist/cjs/node-catalog/discriminator-utils.js +75 -85
- package/dist/cjs/node-catalog/discriminator-utils.js.map +1 -1
- package/dist/cjs/node-catalog/dynamic-node-parameters.js +169 -179
- package/dist/cjs/node-catalog/dynamic-node-parameters.js.map +1 -1
- package/dist/cjs/node-catalog/get.js +349 -359
- package/dist/cjs/node-catalog/get.js.map +1 -1
- package/dist/cjs/node-catalog/index.js +42 -52
- package/dist/cjs/node-catalog/index.js.map +1 -1
- package/dist/cjs/node-catalog/lean-node-type.js +46 -56
- package/dist/cjs/node-catalog/lean-node-type.js.map +1 -1
- package/dist/cjs/node-catalog/node-type-parser.js +61 -71
- package/dist/cjs/node-catalog/node-type-parser.js.map +1 -1
- package/dist/cjs/node-catalog/resource-operation-extractor.js +133 -143
- package/dist/cjs/node-catalog/resource-operation-extractor.js.map +1 -1
- package/dist/cjs/node-catalog/search-engine.js +285 -295
- package/dist/cjs/node-catalog/search-engine.js.map +1 -1
- package/dist/cjs/node-catalog/search.js +280 -290
- package/dist/cjs/node-catalog/search.js.map +1 -1
- package/dist/cjs/node-catalog/suggested-nodes-data.js +235 -245
- package/dist/cjs/node-catalog/suggested-nodes-data.js.map +1 -1
- package/dist/cjs/node-catalog/suggested.js +63 -73
- package/dist/cjs/node-catalog/suggested.js.map +1 -1
- package/dist/cjs/node-catalog/types.js +2 -12
- package/dist/cjs/suppliers/supplyMemory.js +13 -23
- package/dist/cjs/suppliers/supplyMemory.js.map +1 -1
- package/dist/cjs/suppliers/supplyModel.js +72 -82
- package/dist/cjs/suppliers/supplyModel.js.map +1 -1
- package/dist/cjs/typecheck.tsbuildinfo +1 -1
- package/dist/cjs/types/chat-model.js +2 -12
- package/dist/cjs/types/json.js +2 -12
- package/dist/cjs/types/memory.js +2 -12
- package/dist/cjs/types/message.js +2 -12
- package/dist/cjs/types/openai.js +2 -12
- package/dist/cjs/types/output.js +2 -12
- package/dist/cjs/types/tool.js +2 -12
- package/dist/cjs/utils/embeddings-input-validation.js +24 -34
- package/dist/cjs/utils/embeddings-input-validation.js.map +1 -1
- package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js +27 -37
- package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
- package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
- package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js +23 -33
- package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
- package/dist/cjs/utils/follow-redirects.js +38 -48
- package/dist/cjs/utils/follow-redirects.js.map +1 -1
- package/dist/cjs/utils/fromai-helpers.js +21 -31
- package/dist/cjs/utils/fromai-helpers.js.map +1 -1
- package/dist/cjs/utils/fromai-tool-factory.js +18 -28
- package/dist/cjs/utils/fromai-tool-factory.js.map +1 -1
- package/dist/cjs/utils/helpers.js +44 -54
- package/dist/cjs/utils/helpers.js.map +1 -1
- package/dist/cjs/utils/http-proxy-agent.js +38 -48
- package/dist/cjs/utils/http-proxy-agent.js.map +1 -1
- package/dist/cjs/utils/lazy-import.d.ts +1 -0
- package/dist/cjs/utils/lazy-import.js +7 -0
- package/dist/cjs/utils/lazy-import.js.map +1 -0
- package/dist/cjs/utils/loaders/n8n-pdf-loader.js +50 -94
- package/dist/cjs/utils/loaders/n8n-pdf-loader.js.map +1 -1
- package/dist/cjs/utils/log-ai-event.js +10 -20
- package/dist/cjs/utils/log-ai-event.js.map +1 -1
- package/dist/cjs/utils/log-wrapper.d.ts +1 -1
- package/dist/cjs/utils/log-wrapper.js +313 -323
- package/dist/cjs/utils/log-wrapper.js.map +1 -1
- package/dist/cjs/utils/n8n-binary-loader.js +143 -153
- package/dist/cjs/utils/n8n-binary-loader.js.map +1 -1
- package/dist/cjs/utils/n8n-json-loader.js +57 -67
- package/dist/cjs/utils/n8n-json-loader.js.map +1 -1
- package/dist/cjs/utils/n8n-llm-tracing.js +164 -174
- package/dist/cjs/utils/n8n-llm-tracing.js.map +1 -1
- package/dist/cjs/utils/redact-headers.js +42 -52
- package/dist/cjs/utils/redact-headers.js.map +1 -1
- package/dist/cjs/utils/shared-fields.js +137 -147
- package/dist/cjs/utils/shared-fields.js.map +1 -1
- package/dist/cjs/utils/sse.js +83 -93
- package/dist/cjs/utils/sse.js.map +1 -1
- package/dist/cjs/utils/text-editor.js +274 -284
- package/dist/cjs/utils/text-editor.js.map +1 -1
- package/dist/cjs/utils/tokenizer/tiktoken.js +38 -48
- package/dist/cjs/utils/tokenizer/tiktoken.js.map +1 -1
- package/dist/cjs/utils/tokenizer/token-estimator.js +86 -96
- package/dist/cjs/utils/tokenizer/token-estimator.js.map +1 -1
- package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js +43 -53
- package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
- package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js +154 -164
- package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
- package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js +82 -92
- package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
- package/dist/cjs/utils/vector-store/MemoryManager/config.js +34 -44
- package/dist/cjs/utils/vector-store/MemoryManager/config.js.map +1 -1
- package/dist/cjs/utils/vector-store/MemoryManager/types.js +2 -12
- package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js +44 -54
- package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +229 -229
- package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js +8 -18
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js +33 -43
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js +41 -51
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js +59 -69
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js +58 -68
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js +26 -36
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js +34 -44
- package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/types.js +2 -12
- package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
- package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js +34 -29
- package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
- package/dist/cjs/utils/vector-store/processDocuments.js +37 -47
- package/dist/cjs/utils/vector-store/processDocuments.js.map +1 -1
- package/dist/cjs/utils/workflow-text-editor.js +50 -60
- package/dist/cjs/utils/workflow-text-editor.js.map +1 -1
- package/dist/cjs/web-search/brave-search.js +38 -48
- package/dist/cjs/web-search/brave-search.js.map +1 -1
- package/dist/cjs/web-search/index.js +7 -17
- package/dist/cjs/web-search/index.js.map +1 -1
- package/dist/cjs/web-search/searxng-search.js +35 -45
- package/dist/cjs/web-search/searxng-search.js.map +1 -1
- package/dist/cjs/web-search/types.js +2 -12
- package/dist/esm/adapters/langchain-chat-model.js.map +1 -1
- package/dist/esm/adapters/langchain-history.js.map +1 -1
- package/dist/esm/adapters/langchain-memory.js.map +1 -1
- package/dist/esm/agent-config/config-normalization.d.ts +11 -0
- package/dist/esm/agent-config/config-normalization.js +134 -0
- package/dist/esm/agent-config/config-normalization.js.map +1 -0
- package/dist/esm/agent-config/from-ai-node-parameters.d.ts +7 -0
- package/dist/esm/agent-config/from-ai-node-parameters.js +43 -0
- package/dist/esm/agent-config/from-ai-node-parameters.js.map +1 -0
- package/dist/esm/agent-config/index.d.ts +3 -0
- package/dist/esm/agent-config/index.js +17 -0
- package/dist/esm/agent-config/index.js.map +1 -0
- package/dist/esm/agent-config/model-id.d.ts +5 -0
- package/dist/esm/agent-config/model-id.js +16 -0
- package/dist/esm/agent-config/model-id.js.map +1 -0
- package/dist/esm/agent-config/native-web-search-provider-tools.d.ts +7 -0
- package/dist/esm/agent-config/native-web-search-provider-tools.js +55 -0
- package/dist/esm/agent-config/native-web-search-provider-tools.js.map +1 -0
- package/dist/esm/chat-model/base.js.map +1 -1
- package/dist/esm/converters/message.js.map +1 -1
- package/dist/esm/converters/tool.js.map +1 -1
- package/dist/esm/guards.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/memory/base-chat-history.js.map +1 -1
- package/dist/esm/memory/base-chat-memory.js.map +1 -1
- package/dist/esm/memory/windowed-chat-memory.js.map +1 -1
- package/dist/esm/model-discovery/index.js.map +1 -1
- package/dist/esm/model-discovery/providers/anthropic.js.map +1 -1
- package/dist/esm/model-discovery/providers/cohere.js.map +1 -1
- package/dist/esm/model-discovery/providers/google.js.map +1 -1
- package/dist/esm/model-discovery/providers/groq.js.map +1 -1
- package/dist/esm/model-discovery/providers/mistral.js.map +1 -1
- package/dist/esm/model-discovery/providers/nvidia.js.map +1 -1
- package/dist/esm/model-discovery/providers/openai.js.map +1 -1
- package/dist/esm/model-discovery/request.js.map +1 -1
- package/dist/esm/node-catalog/discriminator-utils.js.map +1 -1
- package/dist/esm/node-catalog/dynamic-node-parameters.js.map +1 -1
- package/dist/esm/node-catalog/get.js.map +1 -1
- package/dist/esm/node-catalog/lean-node-type.js.map +1 -1
- package/dist/esm/node-catalog/node-type-parser.js.map +1 -1
- package/dist/esm/node-catalog/resource-operation-extractor.js.map +1 -1
- package/dist/esm/node-catalog/search-engine.js.map +1 -1
- package/dist/esm/node-catalog/search.js.map +1 -1
- package/dist/esm/node-catalog/suggested-nodes-data.js.map +1 -1
- package/dist/esm/node-catalog/suggested.js.map +1 -1
- package/dist/esm/suppliers/supplyMemory.js.map +1 -1
- package/dist/esm/suppliers/supplyModel.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/dist/esm/utils/embeddings-input-validation.js.map +1 -1
- package/dist/esm/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
- package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
- package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
- package/dist/esm/utils/follow-redirects.js.map +1 -1
- package/dist/esm/utils/fromai-helpers.js.map +1 -1
- package/dist/esm/utils/fromai-tool-factory.js.map +1 -1
- package/dist/esm/utils/helpers.js.map +1 -1
- package/dist/esm/utils/http-proxy-agent.js.map +1 -1
- package/dist/esm/utils/lazy-import.d.ts +1 -0
- package/dist/esm/utils/lazy-import.js +7 -0
- package/dist/esm/utils/lazy-import.js.map +1 -0
- package/dist/esm/utils/loaders/n8n-pdf-loader.js +2 -35
- package/dist/esm/utils/loaders/n8n-pdf-loader.js.map +1 -1
- package/dist/esm/utils/log-ai-event.js.map +1 -1
- package/dist/esm/utils/log-wrapper.d.ts +1 -1
- package/dist/esm/utils/log-wrapper.js.map +1 -1
- package/dist/esm/utils/n8n-binary-loader.js.map +1 -1
- package/dist/esm/utils/n8n-json-loader.js.map +1 -1
- package/dist/esm/utils/n8n-llm-tracing.js.map +1 -1
- package/dist/esm/utils/redact-headers.js.map +1 -1
- package/dist/esm/utils/shared-fields.js.map +1 -1
- package/dist/esm/utils/sse.js.map +1 -1
- package/dist/esm/utils/text-editor.js.map +1 -1
- package/dist/esm/utils/tokenizer/tiktoken.js.map +1 -1
- package/dist/esm/utils/tokenizer/token-estimator.js.map +1 -1
- package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
- package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
- package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
- package/dist/esm/utils/vector-store/MemoryManager/config.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +43 -33
- package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
- package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js +15 -0
- package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
- package/dist/esm/utils/vector-store/processDocuments.js.map +1 -1
- package/dist/esm/utils/workflow-text-editor.js.map +1 -1
- package/dist/esm/web-search/brave-search.js.map +1 -1
- package/dist/esm/web-search/searxng-search.js.map +1 -1
- package/package.json +22 -7
|
@@ -1,186 +1,176 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryVectorStoreManager = void 0;
|
|
4
|
+
const memory_1 = require("@langchain/classic/vectorstores/memory");
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
const MemoryCalculator_1 = require("./MemoryCalculator");
|
|
7
|
+
const StoreCleanupService_1 = require("./StoreCleanupService");
|
|
8
|
+
class MemoryVectorStoreManager {
|
|
9
|
+
constructor(embeddings, logger) {
|
|
10
|
+
this.embeddings = embeddings;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.memoryUsageBytes = 0;
|
|
13
|
+
this.ttlCleanupIntervalId = null;
|
|
14
|
+
this.vectorStoreBuffer = new Map();
|
|
15
|
+
this.storeMetadata = new Map();
|
|
16
|
+
this.logger = logger;
|
|
17
|
+
const config = (0, config_1.getConfig)();
|
|
18
|
+
this.maxMemorySizeBytes = (0, config_1.mbToBytes)(config.maxMemoryMB);
|
|
19
|
+
this.inactiveTtlMs = (0, config_1.hoursToMs)(config.ttlHours);
|
|
20
|
+
this.memoryCalculator = new MemoryCalculator_1.MemoryCalculator();
|
|
21
|
+
this.cleanupService = new StoreCleanupService_1.StoreCleanupService(this.maxMemorySizeBytes, this.inactiveTtlMs, this.vectorStoreBuffer, this.storeMetadata, this.handleCleanup.bind(this));
|
|
22
|
+
this.setupTtlCleanup();
|
|
5
23
|
}
|
|
6
|
-
|
|
7
|
-
|
|
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();
|
|
24
|
+
static getInstance(embeddings, logger) {
|
|
25
|
+
if (!MemoryVectorStoreManager.instance) {
|
|
26
|
+
MemoryVectorStoreManager.instance = new MemoryVectorStoreManager(embeddings, logger);
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
MemoryVectorStoreManager.instance.embeddings = embeddings;
|
|
39
|
-
MemoryVectorStoreManager.instance.vectorStoreBuffer.forEach((vectorStoreInstance) => {
|
|
40
|
-
vectorStoreInstance.embeddings = embeddings;
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return MemoryVectorStoreManager.instance;
|
|
28
|
+
else {
|
|
29
|
+
MemoryVectorStoreManager.instance.embeddings = embeddings;
|
|
30
|
+
MemoryVectorStoreManager.instance.vectorStoreBuffer.forEach((vectorStoreInstance) => {
|
|
31
|
+
vectorStoreInstance.embeddings = embeddings;
|
|
32
|
+
});
|
|
44
33
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (this.ttlCleanupIntervalId) {
|
|
51
|
-
clearInterval(this.ttlCleanupIntervalId);
|
|
52
|
-
}
|
|
53
|
-
this.ttlCleanupIntervalId = setInterval(() => {
|
|
54
|
-
this.cleanupService.cleanupInactiveStores();
|
|
55
|
-
}, CLEANUP_INTERVAL_MS);
|
|
34
|
+
return MemoryVectorStoreManager.instance;
|
|
35
|
+
}
|
|
36
|
+
setupTtlCleanup() {
|
|
37
|
+
if (this.inactiveTtlMs <= 0) {
|
|
38
|
+
return;
|
|
56
39
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
}
|
|
40
|
+
const CLEANUP_INTERVAL_MS = 60 * 60 * 1000;
|
|
41
|
+
if (this.ttlCleanupIntervalId) {
|
|
42
|
+
clearInterval(this.ttlCleanupIntervalId);
|
|
66
43
|
}
|
|
67
|
-
|
|
68
|
-
|
|
44
|
+
this.ttlCleanupIntervalId = setInterval(() => {
|
|
45
|
+
this.cleanupService.cleanupInactiveStores();
|
|
46
|
+
}, CLEANUP_INTERVAL_MS);
|
|
47
|
+
}
|
|
48
|
+
handleCleanup(removedKeys, freedBytes, reason) {
|
|
49
|
+
this.memoryUsageBytes -= freedBytes;
|
|
50
|
+
if (reason === 'ttl') {
|
|
51
|
+
const ttlHours = Math.round(this.inactiveTtlMs / (60 * 60 * 1000));
|
|
52
|
+
this.logger.info(`TTL cleanup: removed ${removedKeys.length} inactive vector stores (${ttlHours}h TTL) to free ${Math.round(freedBytes / (1024 * 1024))}MB of memory`);
|
|
69
53
|
}
|
|
70
|
-
|
|
71
|
-
|
|
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;
|
|
54
|
+
else {
|
|
55
|
+
this.logger.info(`Memory cleanup: removed ${removedKeys.length} oldest vector stores to free ${Math.round(freedBytes / (1024 * 1024))}MB of memory`);
|
|
88
56
|
}
|
|
89
|
-
|
|
57
|
+
}
|
|
58
|
+
getMemoryKeysList() {
|
|
59
|
+
return Array.from(this.vectorStoreBuffer.keys());
|
|
60
|
+
}
|
|
61
|
+
async getVectorStore(memoryKey) {
|
|
62
|
+
let vectorStoreInstance = this.vectorStoreBuffer.get(memoryKey);
|
|
63
|
+
if (!vectorStoreInstance) {
|
|
64
|
+
vectorStoreInstance = await memory_1.MemoryVectorStore.fromExistingIndex(this.embeddings);
|
|
65
|
+
this.vectorStoreBuffer.set(memoryKey, vectorStoreInstance);
|
|
66
|
+
this.storeMetadata.set(memoryKey, {
|
|
67
|
+
size: 0,
|
|
68
|
+
createdAt: new Date(),
|
|
69
|
+
lastAccessed: new Date(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
90
73
|
const metadata = this.storeMetadata.get(memoryKey);
|
|
91
74
|
if (metadata) {
|
|
92
|
-
this.memoryUsageBytes -= metadata.size;
|
|
93
|
-
metadata.size = 0;
|
|
94
75
|
metadata.lastAccessed = new Date();
|
|
95
76
|
}
|
|
96
77
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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()}`);
|
|
78
|
+
return vectorStoreInstance;
|
|
79
|
+
}
|
|
80
|
+
clearStoreMetadata(memoryKey) {
|
|
81
|
+
const metadata = this.storeMetadata.get(memoryKey);
|
|
82
|
+
if (metadata) {
|
|
83
|
+
this.memoryUsageBytes -= metadata.size;
|
|
84
|
+
metadata.size = 0;
|
|
85
|
+
metadata.lastAccessed = new Date();
|
|
114
86
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const
|
|
87
|
+
}
|
|
88
|
+
getMemoryUsage() {
|
|
89
|
+
return this.memoryUsageBytes;
|
|
90
|
+
}
|
|
91
|
+
getMemoryUsageFormatted() {
|
|
92
|
+
return `${Math.round(this.memoryUsageBytes / (1024 * 1024))}MB`;
|
|
93
|
+
}
|
|
94
|
+
recalculateMemoryUsage() {
|
|
95
|
+
this.memoryUsageBytes = 0;
|
|
96
|
+
for (const [key, vectorStore] of this.vectorStoreBuffer.entries()) {
|
|
97
|
+
const storeSize = this.memoryCalculator.calculateVectorStoreSize(vectorStore);
|
|
98
|
+
const metadata = this.storeMetadata.get(key);
|
|
126
99
|
if (metadata) {
|
|
127
|
-
metadata.size
|
|
128
|
-
|
|
129
|
-
this.memoryUsageBytes += estimatedAddedSize;
|
|
100
|
+
metadata.size = storeSize;
|
|
101
|
+
this.memoryUsageBytes += storeSize;
|
|
130
102
|
}
|
|
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
103
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
104
|
+
this.logger.debug(`Recalculated vector store memory: ${this.getMemoryUsageFormatted()}`);
|
|
105
|
+
}
|
|
106
|
+
async addDocuments(memoryKey, documents, clearStore) {
|
|
107
|
+
if (clearStore) {
|
|
108
|
+
this.clearStoreMetadata(memoryKey);
|
|
109
|
+
this.vectorStoreBuffer.delete(memoryKey);
|
|
110
|
+
}
|
|
111
|
+
const estimatedAddedSize = this.memoryCalculator.estimateBatchSize(documents);
|
|
112
|
+
this.cleanupService.cleanupOldestStores(estimatedAddedSize);
|
|
113
|
+
const vectorStoreInstance = await this.getVectorStore(memoryKey);
|
|
114
|
+
const vectorCountBefore = vectorStoreInstance.memoryVectors?.length || 0;
|
|
115
|
+
await vectorStoreInstance.addDocuments(documents);
|
|
116
|
+
const metadata = this.storeMetadata.get(memoryKey);
|
|
117
|
+
if (metadata) {
|
|
118
|
+
metadata.size += estimatedAddedSize;
|
|
119
|
+
metadata.lastAccessed = new Date();
|
|
120
|
+
this.memoryUsageBytes += estimatedAddedSize;
|
|
121
|
+
}
|
|
122
|
+
const vectorCount = vectorStoreInstance.memoryVectors?.length || 0;
|
|
123
|
+
if ((vectorCount > 0 && vectorCount % 100 === 0) ||
|
|
124
|
+
documents.length > 20 ||
|
|
125
|
+
(vectorCountBefore === 0 && vectorCount > 0)) {
|
|
145
126
|
this.recalculateMemoryUsage();
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
};
|
|
127
|
+
}
|
|
128
|
+
const maxMemoryMB = this.maxMemorySizeBytes > 0
|
|
129
|
+
? (this.maxMemorySizeBytes / (1024 * 1024)).toFixed(0)
|
|
130
|
+
: 'unlimited';
|
|
131
|
+
this.logger.debug(`Vector store memory: ${this.getMemoryUsageFormatted()}/${maxMemoryMB}MB (${vectorCount} vectors in ${this.vectorStoreBuffer.size} stores)`);
|
|
132
|
+
}
|
|
133
|
+
getStats() {
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
let inactiveStoreCount = 0;
|
|
136
|
+
this.recalculateMemoryUsage();
|
|
137
|
+
const stats = {
|
|
138
|
+
totalSizeBytes: this.memoryUsageBytes,
|
|
139
|
+
totalSizeMB: Math.round((this.memoryUsageBytes / (1024 * 1024)) * 100) / 100,
|
|
140
|
+
percentOfLimit: this.maxMemorySizeBytes > 0
|
|
141
|
+
? Math.round((this.memoryUsageBytes / this.maxMemorySizeBytes) * 100)
|
|
142
|
+
: 0,
|
|
143
|
+
maxMemoryMB: this.maxMemorySizeBytes > 0 ? this.maxMemorySizeBytes / (1024 * 1024) : -1,
|
|
144
|
+
storeCount: this.vectorStoreBuffer.size,
|
|
145
|
+
inactiveStoreCount: 0,
|
|
146
|
+
ttlHours: this.inactiveTtlMs > 0 ? this.inactiveTtlMs / (60 * 60 * 1000) : -1,
|
|
147
|
+
stores: {},
|
|
148
|
+
};
|
|
149
|
+
for (const [key, metadata] of this.storeMetadata.entries()) {
|
|
150
|
+
const store = this.vectorStoreBuffer.get(key);
|
|
151
|
+
if (store) {
|
|
152
|
+
const lastAccessedTime = metadata.lastAccessed.getTime();
|
|
153
|
+
const inactiveTimeMs = now - lastAccessedTime;
|
|
154
|
+
const isInactive = this.cleanupService.isStoreInactive(metadata);
|
|
155
|
+
if (isInactive) {
|
|
156
|
+
inactiveStoreCount++;
|
|
177
157
|
}
|
|
158
|
+
stats.stores[key] = {
|
|
159
|
+
sizeBytes: metadata.size,
|
|
160
|
+
sizeMB: Math.round((metadata.size / (1024 * 1024)) * 100) / 100,
|
|
161
|
+
percentOfTotal: Math.round((metadata.size / this.memoryUsageBytes) * 100) || 0,
|
|
162
|
+
vectors: store.memoryVectors?.length || 0,
|
|
163
|
+
createdAt: metadata.createdAt.toISOString(),
|
|
164
|
+
lastAccessed: metadata.lastAccessed.toISOString(),
|
|
165
|
+
inactive: isInactive,
|
|
166
|
+
inactiveForHours: Math.round(inactiveTimeMs / (60 * 60 * 1000)),
|
|
167
|
+
};
|
|
178
168
|
}
|
|
179
|
-
stats.inactiveStoreCount = inactiveStoreCount;
|
|
180
|
-
return stats;
|
|
181
169
|
}
|
|
170
|
+
stats.inactiveStoreCount = inactiveStoreCount;
|
|
171
|
+
return stats;
|
|
182
172
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
173
|
+
}
|
|
174
|
+
exports.MemoryVectorStoreManager = MemoryVectorStoreManager;
|
|
175
|
+
MemoryVectorStoreManager.instance = null;
|
|
186
176
|
//# sourceMappingURL=MemoryVectorStoreManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryVectorStoreManager.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/MemoryVectorStoreManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryVectorStoreManager.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/MemoryVectorStoreManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,105 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoreCleanupService = void 0;
|
|
4
|
+
class StoreCleanupService {
|
|
5
|
+
constructor(maxMemorySizeBytes, inactiveTtlMs, vectorStores, storeMetadata, onCleanup) {
|
|
6
|
+
this.maxMemorySizeBytes = maxMemorySizeBytes;
|
|
7
|
+
this.inactiveTtlMs = inactiveTtlMs;
|
|
8
|
+
this.vectorStores = vectorStores;
|
|
9
|
+
this.storeMetadata = storeMetadata;
|
|
10
|
+
this.onCleanup = onCleanup;
|
|
11
|
+
this.oldestStoreKeys = [];
|
|
12
|
+
this.lastSortTime = 0;
|
|
13
|
+
this.CACHE_TTL_MS = 5000;
|
|
5
14
|
}
|
|
6
|
-
|
|
7
|
-
|
|
15
|
+
isStoreInactive(metadata) {
|
|
16
|
+
if (this.inactiveTtlMs <= 0) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
const lastAccessedTime = metadata.lastAccessed.getTime();
|
|
21
|
+
return now - lastAccessedTime > this.inactiveTtlMs;
|
|
8
22
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.StoreCleanupService = void 0;
|
|
13
|
-
class StoreCleanupService {
|
|
14
|
-
constructor(maxMemorySizeBytes, inactiveTtlMs, vectorStores, storeMetadata, onCleanup) {
|
|
15
|
-
this.maxMemorySizeBytes = maxMemorySizeBytes;
|
|
16
|
-
this.inactiveTtlMs = inactiveTtlMs;
|
|
17
|
-
this.vectorStores = vectorStores;
|
|
18
|
-
this.storeMetadata = storeMetadata;
|
|
19
|
-
this.onCleanup = onCleanup;
|
|
20
|
-
this.oldestStoreKeys = [];
|
|
21
|
-
this.lastSortTime = 0;
|
|
22
|
-
this.CACHE_TTL_MS = 5000;
|
|
23
|
+
cleanupInactiveStores() {
|
|
24
|
+
if (this.inactiveTtlMs <= 0) {
|
|
25
|
+
return;
|
|
23
26
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
let freedBytes = 0;
|
|
28
|
+
const removedStores = [];
|
|
29
|
+
for (const [key, metadata] of this.storeMetadata.entries()) {
|
|
30
|
+
if (this.isStoreInactive(metadata)) {
|
|
31
|
+
this.vectorStores.delete(key);
|
|
32
|
+
freedBytes += metadata.size;
|
|
33
|
+
removedStores.push(key);
|
|
27
34
|
}
|
|
28
|
-
const now = Date.now();
|
|
29
|
-
const lastAccessedTime = metadata.lastAccessed.getTime();
|
|
30
|
-
return now - lastAccessedTime > this.inactiveTtlMs;
|
|
31
35
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
for (const key of removedStores) {
|
|
37
|
+
this.storeMetadata.delete(key);
|
|
38
|
+
}
|
|
39
|
+
if (removedStores.length > 0) {
|
|
40
|
+
this.oldestStoreKeys = [];
|
|
41
|
+
this.onCleanup(removedStores, freedBytes, 'ttl');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
cleanupOldestStores(requiredBytes) {
|
|
45
|
+
if (this.maxMemorySizeBytes <= 0) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let currentMemoryUsage = 0;
|
|
49
|
+
for (const metadata of this.storeMetadata.values()) {
|
|
50
|
+
currentMemoryUsage += metadata.size;
|
|
51
|
+
}
|
|
52
|
+
this.cleanupInactiveStores();
|
|
53
|
+
currentMemoryUsage = 0;
|
|
54
|
+
for (const metadata of this.storeMetadata.values()) {
|
|
55
|
+
currentMemoryUsage += metadata.size;
|
|
56
|
+
}
|
|
57
|
+
if (currentMemoryUsage + requiredBytes <= this.maxMemorySizeBytes) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const now = Date.now();
|
|
61
|
+
if (this.oldestStoreKeys.length === 0 || now - this.lastSortTime > this.CACHE_TTL_MS) {
|
|
62
|
+
const stores = [];
|
|
38
63
|
for (const [key, metadata] of this.storeMetadata.entries()) {
|
|
39
|
-
|
|
40
|
-
this.vectorStores.delete(key);
|
|
41
|
-
freedBytes += metadata.size;
|
|
42
|
-
removedStores.push(key);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
for (const key of removedStores) {
|
|
46
|
-
this.storeMetadata.delete(key);
|
|
47
|
-
}
|
|
48
|
-
if (removedStores.length > 0) {
|
|
49
|
-
this.oldestStoreKeys = [];
|
|
50
|
-
this.onCleanup(removedStores, freedBytes, 'ttl');
|
|
64
|
+
stores.push([key, metadata.createdAt.getTime()]);
|
|
51
65
|
}
|
|
66
|
+
stores.sort((a, b) => a[1] - b[1]);
|
|
67
|
+
this.oldestStoreKeys = stores.map(([key]) => key);
|
|
68
|
+
this.lastSortTime = now;
|
|
52
69
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
this.cleanupInactiveStores();
|
|
62
|
-
currentMemoryUsage = 0;
|
|
63
|
-
for (const metadata of this.storeMetadata.values()) {
|
|
64
|
-
currentMemoryUsage += metadata.size;
|
|
65
|
-
}
|
|
66
|
-
if (currentMemoryUsage + requiredBytes <= this.maxMemorySizeBytes) {
|
|
67
|
-
return;
|
|
70
|
+
let freedBytes = 0;
|
|
71
|
+
const removedStores = [];
|
|
72
|
+
for (const key of this.oldestStoreKeys) {
|
|
73
|
+
if (!this.storeMetadata.has(key))
|
|
74
|
+
continue;
|
|
75
|
+
if (currentMemoryUsage - freedBytes + requiredBytes <= this.maxMemorySizeBytes) {
|
|
76
|
+
break;
|
|
68
77
|
}
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
stores.sort((a, b) => a[1] - b[1]);
|
|
76
|
-
this.oldestStoreKeys = stores.map(([key]) => key);
|
|
77
|
-
this.lastSortTime = now;
|
|
78
|
-
}
|
|
79
|
-
let freedBytes = 0;
|
|
80
|
-
const removedStores = [];
|
|
81
|
-
for (const key of this.oldestStoreKeys) {
|
|
82
|
-
if (!this.storeMetadata.has(key))
|
|
83
|
-
continue;
|
|
84
|
-
if (currentMemoryUsage - freedBytes + requiredBytes <= this.maxMemorySizeBytes) {
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
const metadata = this.storeMetadata.get(key);
|
|
88
|
-
if (metadata) {
|
|
89
|
-
this.vectorStores.delete(key);
|
|
90
|
-
freedBytes += metadata.size;
|
|
91
|
-
removedStores.push(key);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
for (const key of removedStores) {
|
|
95
|
-
this.storeMetadata.delete(key);
|
|
96
|
-
}
|
|
97
|
-
if (removedStores.length > 0) {
|
|
98
|
-
this.oldestStoreKeys = this.oldestStoreKeys.filter((key) => !removedStores.includes(key));
|
|
99
|
-
this.onCleanup(removedStores, freedBytes, 'memory');
|
|
78
|
+
const metadata = this.storeMetadata.get(key);
|
|
79
|
+
if (metadata) {
|
|
80
|
+
this.vectorStores.delete(key);
|
|
81
|
+
freedBytes += metadata.size;
|
|
82
|
+
removedStores.push(key);
|
|
100
83
|
}
|
|
101
84
|
}
|
|
85
|
+
for (const key of removedStores) {
|
|
86
|
+
this.storeMetadata.delete(key);
|
|
87
|
+
}
|
|
88
|
+
if (removedStores.length > 0) {
|
|
89
|
+
this.oldestStoreKeys = this.oldestStoreKeys.filter((key) => !removedStores.includes(key));
|
|
90
|
+
this.onCleanup(removedStores, freedBytes, 'memory');
|
|
91
|
+
}
|
|
102
92
|
}
|
|
103
|
-
|
|
104
|
-
|
|
93
|
+
}
|
|
94
|
+
exports.StoreCleanupService = StoreCleanupService;
|
|
105
95
|
//# sourceMappingURL=StoreCleanupService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreCleanupService.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/StoreCleanupService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StoreCleanupService.js","sourceRoot":"","sources":["../../../../../src/utils/vector-store/MemoryManager/StoreCleanupService.ts"],"names":[],"mappings":"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"}
|