@smythos/sre 1.5.53 → 1.5.54
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/CHANGELOG +98 -98
- package/LICENSE +18 -18
- package/README.md +135 -135
- package/dist/bundle-analysis-lazy.html +4949 -0
- package/dist/bundle-analysis.html +4949 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +1 -6
- package/dist/types/utils/package-manager.utils.d.ts +26 -0
- package/package.json +1 -1
- package/src/Components/APICall/APICall.class.ts +157 -157
- package/src/Components/APICall/AccessTokenManager.ts +166 -166
- package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
- package/src/Components/APICall/OAuth.helper.ts +447 -447
- package/src/Components/APICall/mimeTypeCategories.ts +46 -46
- package/src/Components/APICall/parseData.ts +167 -167
- package/src/Components/APICall/parseHeaders.ts +41 -41
- package/src/Components/APICall/parseProxy.ts +68 -68
- package/src/Components/APICall/parseUrl.ts +91 -91
- package/src/Components/APIEndpoint.class.ts +234 -234
- package/src/Components/APIOutput.class.ts +58 -58
- package/src/Components/AgentPlugin.class.ts +102 -102
- package/src/Components/Async.class.ts +155 -155
- package/src/Components/Await.class.ts +90 -90
- package/src/Components/Classifier.class.ts +158 -158
- package/src/Components/Component.class.ts +132 -132
- package/src/Components/ComponentHost.class.ts +38 -38
- package/src/Components/DataSourceCleaner.class.ts +92 -92
- package/src/Components/DataSourceIndexer.class.ts +181 -181
- package/src/Components/DataSourceLookup.class.ts +161 -161
- package/src/Components/ECMASandbox.class.ts +71 -71
- package/src/Components/FEncDec.class.ts +29 -29
- package/src/Components/FHash.class.ts +33 -33
- package/src/Components/FSign.class.ts +80 -80
- package/src/Components/FSleep.class.ts +25 -25
- package/src/Components/FTimestamp.class.ts +25 -25
- package/src/Components/FileStore.class.ts +78 -78
- package/src/Components/ForEach.class.ts +97 -97
- package/src/Components/GPTPlugin.class.ts +70 -70
- package/src/Components/GenAILLM.class.ts +586 -586
- package/src/Components/HuggingFace.class.ts +314 -314
- package/src/Components/Image/imageSettings.config.ts +70 -70
- package/src/Components/ImageGenerator.class.ts +502 -502
- package/src/Components/JSONFilter.class.ts +54 -54
- package/src/Components/LLMAssistant.class.ts +213 -213
- package/src/Components/LogicAND.class.ts +28 -28
- package/src/Components/LogicAtLeast.class.ts +85 -85
- package/src/Components/LogicAtMost.class.ts +86 -86
- package/src/Components/LogicOR.class.ts +29 -29
- package/src/Components/LogicXOR.class.ts +34 -34
- package/src/Components/MCPClient.class.ts +138 -138
- package/src/Components/MemoryDeleteKeyVal.class.ts +70 -70
- package/src/Components/MemoryReadKeyVal.class.ts +66 -66
- package/src/Components/MemoryWriteKeyVal.class.ts +62 -62
- package/src/Components/MemoryWriteObject.class.ts +97 -97
- package/src/Components/MultimodalLLM.class.ts +128 -128
- package/src/Components/OpenAPI.class.ts +72 -72
- package/src/Components/PromptGenerator.class.ts +122 -122
- package/src/Components/ScrapflyWebScrape.class.ts +159 -159
- package/src/Components/ServerlessCode.class.ts +123 -123
- package/src/Components/TavilyWebSearch.class.ts +98 -98
- package/src/Components/VisionLLM.class.ts +104 -104
- package/src/Components/ZapierAction.class.ts +127 -127
- package/src/Components/index.ts +97 -97
- package/src/Core/AgentProcess.helper.ts +240 -240
- package/src/Core/Connector.class.ts +123 -123
- package/src/Core/ConnectorsService.ts +197 -197
- package/src/Core/DummyConnector.ts +49 -49
- package/src/Core/HookService.ts +105 -105
- package/src/Core/SmythRuntime.class.ts +235 -235
- package/src/Core/SystemEvents.ts +16 -16
- package/src/Core/boot.ts +56 -56
- package/src/config.ts +15 -15
- package/src/constants.ts +126 -126
- package/src/data/hugging-face.params.json +579 -579
- package/src/helpers/AWSLambdaCode.helper.ts +590 -590
- package/src/helpers/BinaryInput.helper.ts +331 -331
- package/src/helpers/Conversation.helper.ts +1119 -1119
- package/src/helpers/ECMASandbox.helper.ts +54 -54
- package/src/helpers/JsonContent.helper.ts +97 -97
- package/src/helpers/LocalCache.helper.ts +97 -97
- package/src/helpers/Log.helper.ts +274 -274
- package/src/helpers/OpenApiParser.helper.ts +150 -150
- package/src/helpers/S3Cache.helper.ts +147 -147
- package/src/helpers/SmythURI.helper.ts +5 -5
- package/src/helpers/Sysconfig.helper.ts +77 -77
- package/src/helpers/TemplateString.helper.ts +243 -243
- package/src/helpers/TypeChecker.helper.ts +329 -329
- package/src/index.ts +3 -3
- package/src/index.ts.bak +3 -3
- package/src/subsystems/AgentManager/Agent.class.ts +1114 -1114
- package/src/subsystems/AgentManager/Agent.helper.ts +3 -3
- package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -230
- package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -66
- package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +142 -142
- package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -39
- package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -18
- package/src/subsystems/AgentManager/AgentLogger.class.ts +301 -297
- package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -51
- package/src/subsystems/AgentManager/AgentRuntime.class.ts +559 -559
- package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -101
- package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -52
- package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -32
- package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +60 -60
- package/src/subsystems/AgentManager/Component.service/index.ts +11 -11
- package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -47
- package/src/subsystems/AgentManager/ForkedAgent.class.ts +154 -154
- package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -77
- package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +98 -98
- package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +172 -172
- package/src/subsystems/ComputeManager/Code.service/connectors/ECMASandbox.class.ts +131 -131
- package/src/subsystems/ComputeManager/Code.service/index.ts +13 -13
- package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -47
- package/src/subsystems/IO/CLI.service/index.ts +9 -9
- package/src/subsystems/IO/Log.service/LogConnector.ts +32 -32
- package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -28
- package/src/subsystems/IO/Log.service/index.ts +13 -13
- package/src/subsystems/IO/NKV.service/NKVConnector.ts +43 -43
- package/src/subsystems/IO/NKV.service/connectors/NKVLocalStorage.class.ts +234 -234
- package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -204
- package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -182
- package/src/subsystems/IO/NKV.service/index.ts +14 -14
- package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -21
- package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -48
- package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -40
- package/src/subsystems/IO/Router.service/index.ts +11 -11
- package/src/subsystems/IO/Storage.service/SmythFS.class.ts +489 -489
- package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -66
- package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +327 -327
- package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +482 -482
- package/src/subsystems/IO/Storage.service/index.ts +13 -13
- package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -108
- package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +454 -454
- package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +384 -384
- package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +421 -421
- package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +107 -107
- package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -109
- package/src/subsystems/IO/VectorDB.service/embed/index.ts +21 -21
- package/src/subsystems/IO/VectorDB.service/index.ts +14 -14
- package/src/subsystems/LLMManager/LLM.helper.ts +251 -251
- package/src/subsystems/LLMManager/LLM.inference.ts +339 -339
- package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +489 -489
- package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +171 -171
- package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +659 -659
- package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +400 -400
- package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +77 -77
- package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +757 -757
- package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +304 -304
- package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +250 -250
- package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +423 -423
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +488 -488
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +524 -524
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterface.ts +100 -100
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterfaceFactory.ts +81 -81
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +1145 -1145
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -13
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/index.ts +4 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +11 -11
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/types.ts +32 -32
- package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +471 -471
- package/src/subsystems/LLMManager/LLM.service/index.ts +44 -44
- package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +300 -300
- package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +252 -252
- package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -11
- package/src/subsystems/LLMManager/custom-models.ts +854 -854
- package/src/subsystems/LLMManager/models.ts +2540 -2540
- package/src/subsystems/LLMManager/paramMappings.ts +69 -69
- package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -86
- package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -297
- package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +201 -201
- package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -252
- package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -373
- package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -15
- package/src/subsystems/MemoryManager/LLMCache.ts +72 -72
- package/src/subsystems/MemoryManager/LLMContext.ts +124 -124
- package/src/subsystems/MemoryManager/LLMMemory.service/LLMMemoryConnector.ts +26 -26
- package/src/subsystems/MemoryManager/RuntimeContext.ts +266 -266
- package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -208
- package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +82 -82
- package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -52
- package/src/subsystems/Security/Account.service/AccountConnector.ts +44 -44
- package/src/subsystems/Security/Account.service/connectors/AWSAccount.class.ts +76 -76
- package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -130
- package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +159 -159
- package/src/subsystems/Security/Account.service/index.ts +14 -14
- package/src/subsystems/Security/Credentials.helper.ts +62 -62
- package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +38 -38
- package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +53 -53
- package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -154
- package/src/subsystems/Security/ManagedVault.service/index.ts +12 -12
- package/src/subsystems/Security/SecureConnector.class.ts +110 -110
- package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -30
- package/src/subsystems/Security/Vault.service/VaultConnector.ts +29 -29
- package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -46
- package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +221 -221
- package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -54
- package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -140
- package/src/subsystems/Security/Vault.service/index.ts +12 -12
- package/src/types/ACL.types.ts +104 -104
- package/src/types/AWS.types.ts +10 -10
- package/src/types/Agent.types.ts +61 -61
- package/src/types/AgentLogger.types.ts +17 -17
- package/src/types/Cache.types.ts +1 -1
- package/src/types/Common.types.ts +2 -2
- package/src/types/LLM.types.ts +496 -496
- package/src/types/Redis.types.ts +8 -8
- package/src/types/SRE.types.ts +64 -64
- package/src/types/Security.types.ts +14 -14
- package/src/types/Storage.types.ts +5 -5
- package/src/types/VectorDB.types.ts +86 -86
- package/src/utils/base64.utils.ts +275 -275
- package/src/utils/cli.utils.ts +68 -68
- package/src/utils/data.utils.ts +322 -322
- package/src/utils/date-time.utils.ts +22 -22
- package/src/utils/general.utils.ts +238 -238
- package/src/utils/index.ts +12 -12
- package/src/utils/lazy-client.ts +261 -261
- package/src/utils/numbers.utils.ts +13 -13
- package/src/utils/oauth.utils.ts +35 -35
- package/src/utils/string.utils.ts +414 -414
- package/src/utils/url.utils.ts +19 -19
- package/src/utils/validation.utils.ts +74 -74
- package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +0 -39
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import Joi from 'joi';
|
|
2
|
-
|
|
3
|
-
import { IAgent as Agent } from '@sre/types/Agent.types';
|
|
4
|
-
import { Component } from './Component.class';
|
|
5
|
-
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
6
|
-
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
7
|
-
import { ICacheRequest } from '@sre/MemoryManager/Cache.service/CacheConnector';
|
|
8
|
-
|
|
9
|
-
const memory = {};
|
|
10
|
-
export class MemoryWriteKeyVal extends Component {
|
|
11
|
-
protected configSchema = Joi.object({
|
|
12
|
-
memoryName: Joi.string().max(255).allow('').label('Memory Name'),
|
|
13
|
-
key: Joi.string().max(255).allow('').label('Key'),
|
|
14
|
-
value: Joi.string().max(100000).allow('').label('Value'),
|
|
15
|
-
scope: Joi.string().max(20).allow('').label('Scope'),
|
|
16
|
-
ttl: Joi.number().min(300).max(604800).allow('').label('TTL'),
|
|
17
|
-
});
|
|
18
|
-
constructor() {
|
|
19
|
-
super();
|
|
20
|
-
}
|
|
21
|
-
init() {}
|
|
22
|
-
async process(input, config, agent: Agent) {
|
|
23
|
-
await super.process(input, config, agent);
|
|
24
|
-
|
|
25
|
-
const logger = this.createComponentLogger(agent, config);
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const cacheConnector = ConnectorService.getCacheConnector();
|
|
29
|
-
const connectorRequester: ICacheRequest = cacheConnector.agent(agent.id);
|
|
30
|
-
const teamId = agent.teamId;
|
|
31
|
-
const agentId = agent.id;
|
|
32
|
-
|
|
33
|
-
const memoryName = config.data.memoryName;
|
|
34
|
-
const key = TemplateString(config.data.key).parse(input).result;
|
|
35
|
-
const value = TemplateString(config.data.value).parse(input).result;
|
|
36
|
-
const scope = config.data.scope;
|
|
37
|
-
const ttl = scope === 'ttl' ? config?.data?.ttl : 3 * 60 * 60; // 3 hours default ttl
|
|
38
|
-
|
|
39
|
-
const sessionId = agent.sessionId;
|
|
40
|
-
const workflowId = agent.agentRuntime.workflowReqId;
|
|
41
|
-
|
|
42
|
-
let scopeKey = '';
|
|
43
|
-
if (scope === 'session') {
|
|
44
|
-
scopeKey = sessionId;
|
|
45
|
-
} else if (scope === 'request') {
|
|
46
|
-
scopeKey = workflowId;
|
|
47
|
-
} else if (scope === 'ttl') {
|
|
48
|
-
scopeKey = 'ttl';
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const scopeKeyId = `${agentId}:${memoryName}:${key}_scope`;
|
|
52
|
-
await connectorRequester.set(scopeKeyId, JSON.stringify({ scope, value: scopeKey }), null, null, ttl);
|
|
53
|
-
|
|
54
|
-
const fullKey = `${agentId}:${scopeKey}:${memoryName}:${key}`;
|
|
55
|
-
await connectorRequester.set(fullKey, value, null, null, ttl);
|
|
56
|
-
|
|
57
|
-
return { Key: key, _debug: logger.output };
|
|
58
|
-
} catch (error: any) {
|
|
59
|
-
return { _error: error.message, _debug: logger.output };
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
|
|
3
|
+
import { IAgent as Agent } from '@sre/types/Agent.types';
|
|
4
|
+
import { Component } from './Component.class';
|
|
5
|
+
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
6
|
+
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
7
|
+
import { ICacheRequest } from '@sre/MemoryManager/Cache.service/CacheConnector';
|
|
8
|
+
|
|
9
|
+
const memory = {};
|
|
10
|
+
export class MemoryWriteKeyVal extends Component {
|
|
11
|
+
protected configSchema = Joi.object({
|
|
12
|
+
memoryName: Joi.string().max(255).allow('').label('Memory Name'),
|
|
13
|
+
key: Joi.string().max(255).allow('').label('Key'),
|
|
14
|
+
value: Joi.string().max(100000).allow('').label('Value'),
|
|
15
|
+
scope: Joi.string().max(20).allow('').label('Scope'),
|
|
16
|
+
ttl: Joi.number().min(300).max(604800).allow('').label('TTL'),
|
|
17
|
+
});
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
}
|
|
21
|
+
init() {}
|
|
22
|
+
async process(input, config, agent: Agent) {
|
|
23
|
+
await super.process(input, config, agent);
|
|
24
|
+
|
|
25
|
+
const logger = this.createComponentLogger(agent, config);
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const cacheConnector = ConnectorService.getCacheConnector();
|
|
29
|
+
const connectorRequester: ICacheRequest = cacheConnector.agent(agent.id);
|
|
30
|
+
const teamId = agent.teamId;
|
|
31
|
+
const agentId = agent.id;
|
|
32
|
+
|
|
33
|
+
const memoryName = config.data.memoryName;
|
|
34
|
+
const key = TemplateString(config.data.key).parse(input).result;
|
|
35
|
+
const value = TemplateString(config.data.value).parse(input).result;
|
|
36
|
+
const scope = config.data.scope;
|
|
37
|
+
const ttl = scope === 'ttl' ? config?.data?.ttl : 3 * 60 * 60; // 3 hours default ttl
|
|
38
|
+
|
|
39
|
+
const sessionId = agent.sessionId;
|
|
40
|
+
const workflowId = agent.agentRuntime.workflowReqId;
|
|
41
|
+
|
|
42
|
+
let scopeKey = '';
|
|
43
|
+
if (scope === 'session') {
|
|
44
|
+
scopeKey = sessionId;
|
|
45
|
+
} else if (scope === 'request') {
|
|
46
|
+
scopeKey = workflowId;
|
|
47
|
+
} else if (scope === 'ttl') {
|
|
48
|
+
scopeKey = 'ttl';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const scopeKeyId = `${agentId}:${memoryName}:${key}_scope`;
|
|
52
|
+
await connectorRequester.set(scopeKeyId, JSON.stringify({ scope, value: scopeKey }), null, null, ttl);
|
|
53
|
+
|
|
54
|
+
const fullKey = `${agentId}:${scopeKey}:${memoryName}:${key}`;
|
|
55
|
+
await connectorRequester.set(fullKey, value, null, null, ttl);
|
|
56
|
+
|
|
57
|
+
return { Key: key, _debug: logger.output };
|
|
58
|
+
} catch (error: any) {
|
|
59
|
+
return { _error: error.message, _debug: logger.output };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import Joi from 'joi';
|
|
2
|
-
|
|
3
|
-
import { IAgent as Agent } from '@sre/types/Agent.types';
|
|
4
|
-
import { Component } from './Component.class';
|
|
5
|
-
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
6
|
-
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
7
|
-
import { ICacheRequest } from '@sre/MemoryManager/Cache.service/CacheConnector';
|
|
8
|
-
|
|
9
|
-
export class MemoryWriteObject extends Component {
|
|
10
|
-
protected configSchema = Joi.object({
|
|
11
|
-
memoryName: Joi.string().max(255).allow('').label('Memory Name'),
|
|
12
|
-
scope: Joi.string().max(20).allow('').label('Scope'),
|
|
13
|
-
ttl: Joi.number().min(300).max(604800).allow('').label('TTL'),
|
|
14
|
-
});
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
}
|
|
18
|
-
init() {}
|
|
19
|
-
async process(input, config, agent: Agent) {
|
|
20
|
-
await super.process(input, config, agent);
|
|
21
|
-
|
|
22
|
-
const logger = this.createComponentLogger(agent, config);
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
const cacheConnector = ConnectorService.getCacheConnector();
|
|
26
|
-
const connectorRequester: ICacheRequest = cacheConnector.agent(agent.id);
|
|
27
|
-
const teamId = agent.teamId;
|
|
28
|
-
const agentId = agent.id;
|
|
29
|
-
|
|
30
|
-
const memoryName = config.data.memoryName;
|
|
31
|
-
const dataString = input.Data;
|
|
32
|
-
const scope = config.data.scope;
|
|
33
|
-
const ttl = scope === 'ttl' ? config?.data?.ttl : 3 * 60 * 60; // 3 hours default ttl
|
|
34
|
-
|
|
35
|
-
// Parse the JSON data
|
|
36
|
-
let dataObject;
|
|
37
|
-
try {
|
|
38
|
-
dataObject = JSON.parse(dataString);
|
|
39
|
-
} catch (parseError) {
|
|
40
|
-
return { _error: 'Invalid JSON data provided', _debug: logger.output };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Validate that the parsed data is an object
|
|
44
|
-
if (typeof dataObject !== 'object' || dataObject === null || Array.isArray(dataObject)) {
|
|
45
|
-
return { _error: 'Data must be a valid JSON object', _debug: logger.output };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const sessionId = agent.sessionId;
|
|
49
|
-
const workflowId = agent.agentRuntime.workflowReqId;
|
|
50
|
-
|
|
51
|
-
let scopeKey = '';
|
|
52
|
-
if (scope === 'session') {
|
|
53
|
-
scopeKey = sessionId;
|
|
54
|
-
} else if (scope === 'request') {
|
|
55
|
-
scopeKey = workflowId;
|
|
56
|
-
} else if (scope === 'ttl') {
|
|
57
|
-
scopeKey = 'ttl';
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Get all keys from the data object
|
|
61
|
-
const keys = Object.keys(dataObject);
|
|
62
|
-
logger.debug(`Writing ${keys.length} key-value pairs to memory`);
|
|
63
|
-
|
|
64
|
-
// Create promises for parallel execution
|
|
65
|
-
const writePromises = keys.map(async (key) => {
|
|
66
|
-
const value = String(dataObject[key]); // Convert value to string
|
|
67
|
-
|
|
68
|
-
// Write scope metadata
|
|
69
|
-
const scopeKeyId = `${agentId}:${memoryName}:${key}_scope`;
|
|
70
|
-
const scopePromise = connectorRequester.set(scopeKeyId, JSON.stringify({ scope, value: scopeKey }), null, null, ttl);
|
|
71
|
-
|
|
72
|
-
// Write actual value
|
|
73
|
-
const fullKey = `${agentId}:${scopeKey}:${memoryName}:${key}`;
|
|
74
|
-
const valuePromise = connectorRequester.set(fullKey, value, null, null, ttl);
|
|
75
|
-
|
|
76
|
-
// Wait for both operations to complete for this key
|
|
77
|
-
await Promise.all([scopePromise, valuePromise]);
|
|
78
|
-
|
|
79
|
-
return { key, success: true };
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// Execute all write operations in parallel
|
|
83
|
-
const results = await Promise.all(writePromises);
|
|
84
|
-
const successfulKeys = results.filter((result) => result.success).map((result) => result.key);
|
|
85
|
-
|
|
86
|
-
logger.debug(`Successfully wrote ${successfulKeys.length} keys to memory`);
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
Keys: successfulKeys,
|
|
90
|
-
Count: successfulKeys.length,
|
|
91
|
-
_debug: logger.output,
|
|
92
|
-
};
|
|
93
|
-
} catch (error: any) {
|
|
94
|
-
return { _error: error.message, _debug: logger.output };
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
|
|
3
|
+
import { IAgent as Agent } from '@sre/types/Agent.types';
|
|
4
|
+
import { Component } from './Component.class';
|
|
5
|
+
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
6
|
+
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
7
|
+
import { ICacheRequest } from '@sre/MemoryManager/Cache.service/CacheConnector';
|
|
8
|
+
|
|
9
|
+
export class MemoryWriteObject extends Component {
|
|
10
|
+
protected configSchema = Joi.object({
|
|
11
|
+
memoryName: Joi.string().max(255).allow('').label('Memory Name'),
|
|
12
|
+
scope: Joi.string().max(20).allow('').label('Scope'),
|
|
13
|
+
ttl: Joi.number().min(300).max(604800).allow('').label('TTL'),
|
|
14
|
+
});
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
}
|
|
18
|
+
init() {}
|
|
19
|
+
async process(input, config, agent: Agent) {
|
|
20
|
+
await super.process(input, config, agent);
|
|
21
|
+
|
|
22
|
+
const logger = this.createComponentLogger(agent, config);
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const cacheConnector = ConnectorService.getCacheConnector();
|
|
26
|
+
const connectorRequester: ICacheRequest = cacheConnector.agent(agent.id);
|
|
27
|
+
const teamId = agent.teamId;
|
|
28
|
+
const agentId = agent.id;
|
|
29
|
+
|
|
30
|
+
const memoryName = config.data.memoryName;
|
|
31
|
+
const dataString = input.Data;
|
|
32
|
+
const scope = config.data.scope;
|
|
33
|
+
const ttl = scope === 'ttl' ? config?.data?.ttl : 3 * 60 * 60; // 3 hours default ttl
|
|
34
|
+
|
|
35
|
+
// Parse the JSON data
|
|
36
|
+
let dataObject;
|
|
37
|
+
try {
|
|
38
|
+
dataObject = JSON.parse(dataString);
|
|
39
|
+
} catch (parseError) {
|
|
40
|
+
return { _error: 'Invalid JSON data provided', _debug: logger.output };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Validate that the parsed data is an object
|
|
44
|
+
if (typeof dataObject !== 'object' || dataObject === null || Array.isArray(dataObject)) {
|
|
45
|
+
return { _error: 'Data must be a valid JSON object', _debug: logger.output };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const sessionId = agent.sessionId;
|
|
49
|
+
const workflowId = agent.agentRuntime.workflowReqId;
|
|
50
|
+
|
|
51
|
+
let scopeKey = '';
|
|
52
|
+
if (scope === 'session') {
|
|
53
|
+
scopeKey = sessionId;
|
|
54
|
+
} else if (scope === 'request') {
|
|
55
|
+
scopeKey = workflowId;
|
|
56
|
+
} else if (scope === 'ttl') {
|
|
57
|
+
scopeKey = 'ttl';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Get all keys from the data object
|
|
61
|
+
const keys = Object.keys(dataObject);
|
|
62
|
+
logger.debug(`Writing ${keys.length} key-value pairs to memory`);
|
|
63
|
+
|
|
64
|
+
// Create promises for parallel execution
|
|
65
|
+
const writePromises = keys.map(async (key) => {
|
|
66
|
+
const value = String(dataObject[key]); // Convert value to string
|
|
67
|
+
|
|
68
|
+
// Write scope metadata
|
|
69
|
+
const scopeKeyId = `${agentId}:${memoryName}:${key}_scope`;
|
|
70
|
+
const scopePromise = connectorRequester.set(scopeKeyId, JSON.stringify({ scope, value: scopeKey }), null, null, ttl);
|
|
71
|
+
|
|
72
|
+
// Write actual value
|
|
73
|
+
const fullKey = `${agentId}:${scopeKey}:${memoryName}:${key}`;
|
|
74
|
+
const valuePromise = connectorRequester.set(fullKey, value, null, null, ttl);
|
|
75
|
+
|
|
76
|
+
// Wait for both operations to complete for this key
|
|
77
|
+
await Promise.all([scopePromise, valuePromise]);
|
|
78
|
+
|
|
79
|
+
return { key, success: true };
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Execute all write operations in parallel
|
|
83
|
+
const results = await Promise.all(writePromises);
|
|
84
|
+
const successfulKeys = results.filter((result) => result.success).map((result) => result.key);
|
|
85
|
+
|
|
86
|
+
logger.debug(`Successfully wrote ${successfulKeys.length} keys to memory`);
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
Keys: successfulKeys,
|
|
90
|
+
Count: successfulKeys.length,
|
|
91
|
+
_debug: logger.output,
|
|
92
|
+
};
|
|
93
|
+
} catch (error: any) {
|
|
94
|
+
return { _error: error.message, _debug: logger.output };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
import Joi from 'joi';
|
|
2
|
-
import { Component } from './Component.class';
|
|
3
|
-
import { LLMInference } from '@sre/LLMManager/LLM.inference';
|
|
4
|
-
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
5
|
-
|
|
6
|
-
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
7
|
-
|
|
8
|
-
export class MultimodalLLM extends Component {
|
|
9
|
-
protected configSchema = Joi.object({
|
|
10
|
-
prompt: Joi.string().required().max(8_000_000).label('Prompt'), // 2M tokens is around 8M characters
|
|
11
|
-
maxTokens: Joi.number().min(1).label('Maximum Tokens'),
|
|
12
|
-
model: Joi.string().max(200).required(),
|
|
13
|
-
passthrough: Joi.boolean().optional().label('Passthrough'),
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
constructor() {
|
|
17
|
-
super();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
init() {}
|
|
21
|
-
|
|
22
|
-
async process(input, config, agent) {
|
|
23
|
-
await super.process(input, config, agent);
|
|
24
|
-
|
|
25
|
-
const logger = this.createComponentLogger(agent, config);
|
|
26
|
-
|
|
27
|
-
logger.debug(`=== Multimodal LLM Log ===`);
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
const passThrough: boolean = config.data.passthrough || false;
|
|
31
|
-
const model: string = config.data.model || 'gpt-4o-mini';
|
|
32
|
-
const llmInference: LLMInference = await LLMInference.getInstance(model, AccessCandidate.agent(agent.id));
|
|
33
|
-
|
|
34
|
-
if (!llmInference.connector) {
|
|
35
|
-
return {
|
|
36
|
-
_error: `The model '${model}' is not available. Please try a different one.`,
|
|
37
|
-
_debug: logger.output,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const modelId = await agent.modelsProvider.getModelId(model);
|
|
42
|
-
logger.debug(` Model : ${modelId || model}`);
|
|
43
|
-
|
|
44
|
-
let prompt: any = TemplateString(config.data.prompt).parse(input).result;
|
|
45
|
-
|
|
46
|
-
logger.debug(` Prompt\n`, prompt, '\n');
|
|
47
|
-
|
|
48
|
-
const outputs = {};
|
|
49
|
-
for (let con of config.outputs) {
|
|
50
|
-
if (con.default) continue;
|
|
51
|
-
outputs[con.name] = con?.description ? `<${con?.description}>` : '';
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const excludedKeys = ['_debug', '_error'];
|
|
55
|
-
const outputKeys = Object.keys(outputs).filter((key) => !excludedKeys.includes(key));
|
|
56
|
-
|
|
57
|
-
if (outputKeys.length > 0) {
|
|
58
|
-
const outputFormat = {};
|
|
59
|
-
outputKeys.forEach((key) => (outputFormat[key] = '<value>'));
|
|
60
|
-
|
|
61
|
-
prompt +=
|
|
62
|
-
'\n\nExpected output format = ' +
|
|
63
|
-
JSON.stringify(outputFormat) +
|
|
64
|
-
'\n\n The output JSON should only use the entries from the output format.';
|
|
65
|
-
|
|
66
|
-
logger.debug(`[Component enhanced prompt]\n${prompt}\n\n`);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const files = Array.isArray(input.Input) ? input.Input : [input.Input];
|
|
70
|
-
|
|
71
|
-
let response: any;
|
|
72
|
-
if (passThrough) {
|
|
73
|
-
const contentPromise = new Promise(async (resolve, reject) => {
|
|
74
|
-
let _content = '';
|
|
75
|
-
const eventEmitter: any = await llmInference.multimodalStreamRequestLegacy(prompt, files, config, agent).catch((error) => {
|
|
76
|
-
console.error('Error on multimodalStreamRequest: ', error);
|
|
77
|
-
reject(error);
|
|
78
|
-
});
|
|
79
|
-
eventEmitter.on('content', (content) => {
|
|
80
|
-
if (typeof agent.callback === 'function') {
|
|
81
|
-
agent.callback({ content });
|
|
82
|
-
}
|
|
83
|
-
agent.sse.send('llm/passthrough/content', content);
|
|
84
|
-
_content += content;
|
|
85
|
-
});
|
|
86
|
-
eventEmitter.on('thinking', (thinking) => {
|
|
87
|
-
if (typeof agent.callback === 'function') {
|
|
88
|
-
agent.callback({ thinking });
|
|
89
|
-
}
|
|
90
|
-
agent.sse.send('llm/passthrough/thinking', thinking);
|
|
91
|
-
});
|
|
92
|
-
eventEmitter.on('end', () => {
|
|
93
|
-
console.log('end');
|
|
94
|
-
resolve(_content);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
response = await contentPromise;
|
|
98
|
-
} else {
|
|
99
|
-
response = await llmInference.prompt({ query: prompt, files, params: { ...config, agentId: agent.id } });
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// in case we have the response but it's empty string, undefined or null
|
|
103
|
-
if (!response) {
|
|
104
|
-
return { _error: ' LLM Error = Empty Response!', _debug: logger.output };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (response?.error) {
|
|
108
|
-
const error = response?.error + ' ' + (response?.details || '');
|
|
109
|
-
logger.error(` LLM Error=`, error);
|
|
110
|
-
return { Reply: response?.data, _error: error, _debug: logger.output };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
logger.debug(' Response \n', response);
|
|
114
|
-
|
|
115
|
-
const result = { Reply: response };
|
|
116
|
-
result['_debug'] = logger.output;
|
|
117
|
-
|
|
118
|
-
return result;
|
|
119
|
-
} catch (error: any) {
|
|
120
|
-
const _error = `${error?.error || ''} ${error?.details || ''}`.trim() || error?.message || 'Something went wrong!';
|
|
121
|
-
logger.error(`Error processing File(s)!`, _error);
|
|
122
|
-
return {
|
|
123
|
-
_error,
|
|
124
|
-
_debug: logger.output,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
import { Component } from './Component.class';
|
|
3
|
+
import { LLMInference } from '@sre/LLMManager/LLM.inference';
|
|
4
|
+
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
5
|
+
|
|
6
|
+
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
7
|
+
|
|
8
|
+
export class MultimodalLLM extends Component {
|
|
9
|
+
protected configSchema = Joi.object({
|
|
10
|
+
prompt: Joi.string().required().max(8_000_000).label('Prompt'), // 2M tokens is around 8M characters
|
|
11
|
+
maxTokens: Joi.number().min(1).label('Maximum Tokens'),
|
|
12
|
+
model: Joi.string().max(200).required(),
|
|
13
|
+
passthrough: Joi.boolean().optional().label('Passthrough'),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
init() {}
|
|
21
|
+
|
|
22
|
+
async process(input, config, agent) {
|
|
23
|
+
await super.process(input, config, agent);
|
|
24
|
+
|
|
25
|
+
const logger = this.createComponentLogger(agent, config);
|
|
26
|
+
|
|
27
|
+
logger.debug(`=== Multimodal LLM Log ===`);
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const passThrough: boolean = config.data.passthrough || false;
|
|
31
|
+
const model: string = config.data.model || 'gpt-4o-mini';
|
|
32
|
+
const llmInference: LLMInference = await LLMInference.getInstance(model, AccessCandidate.agent(agent.id));
|
|
33
|
+
|
|
34
|
+
if (!llmInference.connector) {
|
|
35
|
+
return {
|
|
36
|
+
_error: `The model '${model}' is not available. Please try a different one.`,
|
|
37
|
+
_debug: logger.output,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const modelId = await agent.modelsProvider.getModelId(model);
|
|
42
|
+
logger.debug(` Model : ${modelId || model}`);
|
|
43
|
+
|
|
44
|
+
let prompt: any = TemplateString(config.data.prompt).parse(input).result;
|
|
45
|
+
|
|
46
|
+
logger.debug(` Prompt\n`, prompt, '\n');
|
|
47
|
+
|
|
48
|
+
const outputs = {};
|
|
49
|
+
for (let con of config.outputs) {
|
|
50
|
+
if (con.default) continue;
|
|
51
|
+
outputs[con.name] = con?.description ? `<${con?.description}>` : '';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const excludedKeys = ['_debug', '_error'];
|
|
55
|
+
const outputKeys = Object.keys(outputs).filter((key) => !excludedKeys.includes(key));
|
|
56
|
+
|
|
57
|
+
if (outputKeys.length > 0) {
|
|
58
|
+
const outputFormat = {};
|
|
59
|
+
outputKeys.forEach((key) => (outputFormat[key] = '<value>'));
|
|
60
|
+
|
|
61
|
+
prompt +=
|
|
62
|
+
'\n\nExpected output format = ' +
|
|
63
|
+
JSON.stringify(outputFormat) +
|
|
64
|
+
'\n\n The output JSON should only use the entries from the output format.';
|
|
65
|
+
|
|
66
|
+
logger.debug(`[Component enhanced prompt]\n${prompt}\n\n`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const files = Array.isArray(input.Input) ? input.Input : [input.Input];
|
|
70
|
+
|
|
71
|
+
let response: any;
|
|
72
|
+
if (passThrough) {
|
|
73
|
+
const contentPromise = new Promise(async (resolve, reject) => {
|
|
74
|
+
let _content = '';
|
|
75
|
+
const eventEmitter: any = await llmInference.multimodalStreamRequestLegacy(prompt, files, config, agent).catch((error) => {
|
|
76
|
+
console.error('Error on multimodalStreamRequest: ', error);
|
|
77
|
+
reject(error);
|
|
78
|
+
});
|
|
79
|
+
eventEmitter.on('content', (content) => {
|
|
80
|
+
if (typeof agent.callback === 'function') {
|
|
81
|
+
agent.callback({ content });
|
|
82
|
+
}
|
|
83
|
+
agent.sse.send('llm/passthrough/content', content);
|
|
84
|
+
_content += content;
|
|
85
|
+
});
|
|
86
|
+
eventEmitter.on('thinking', (thinking) => {
|
|
87
|
+
if (typeof agent.callback === 'function') {
|
|
88
|
+
agent.callback({ thinking });
|
|
89
|
+
}
|
|
90
|
+
agent.sse.send('llm/passthrough/thinking', thinking);
|
|
91
|
+
});
|
|
92
|
+
eventEmitter.on('end', () => {
|
|
93
|
+
console.log('end');
|
|
94
|
+
resolve(_content);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
response = await contentPromise;
|
|
98
|
+
} else {
|
|
99
|
+
response = await llmInference.prompt({ query: prompt, files, params: { ...config, agentId: agent.id } });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// in case we have the response but it's empty string, undefined or null
|
|
103
|
+
if (!response) {
|
|
104
|
+
return { _error: ' LLM Error = Empty Response!', _debug: logger.output };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (response?.error) {
|
|
108
|
+
const error = response?.error + ' ' + (response?.details || '');
|
|
109
|
+
logger.error(` LLM Error=`, error);
|
|
110
|
+
return { Reply: response?.data, _error: error, _debug: logger.output };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
logger.debug(' Response \n', response);
|
|
114
|
+
|
|
115
|
+
const result = { Reply: response };
|
|
116
|
+
result['_debug'] = logger.output;
|
|
117
|
+
|
|
118
|
+
return result;
|
|
119
|
+
} catch (error: any) {
|
|
120
|
+
const _error = `${error?.error || ''} ${error?.details || ''}`.trim() || error?.message || 'Something went wrong!';
|
|
121
|
+
logger.error(`Error processing File(s)!`, _error);
|
|
122
|
+
return {
|
|
123
|
+
_error,
|
|
124
|
+
_debug: logger.output,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|