@smythos/sre 1.5.44 → 1.5.45
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 +90 -90
- package/LICENSE +18 -18
- package/README.md +135 -135
- 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 +13 -1
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.d.ts +46 -27
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.d.ts +4 -2
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/types.d.ts +0 -4
- package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +39 -0
- package/dist/types/types/LLM.types.d.ts +1 -0
- package/package.json +1 -1
- package/src/Components/APICall/APICall.class.ts +156 -156
- package/src/Components/APICall/AccessTokenManager.ts +130 -130
- package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
- package/src/Components/APICall/OAuth.helper.ts +294 -294
- 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 +112 -112
- 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 +587 -587
- 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 +196 -196
- package/src/index.ts.bak +196 -196
- 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 +297 -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 -455
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +528 -528
- 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 +1168 -862
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -37
- 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 -37
- 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 -495
- 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/bundle-analysis-lazy.html +0 -4949
- package/dist/bundle-analysis.html +0 -4949
- package/dist/types/utils/package-manager.utils.d.ts +0 -26
|
@@ -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
|
+
}
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
import Joi from 'joi';
|
|
2
|
-
|
|
3
|
-
import { Agent } from '@sre/AgentManager/Agent.class';
|
|
4
|
-
import { Conversation } from '@sre/helpers/Conversation.helper';
|
|
5
|
-
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
6
|
-
|
|
7
|
-
import { Component } from './Component.class';
|
|
8
|
-
|
|
9
|
-
export class OpenAPI extends Component {
|
|
10
|
-
protected configSchema = Joi.object({
|
|
11
|
-
model: Joi.string().optional(),
|
|
12
|
-
openAiModel: Joi.string().optional(), // for backward compatibility
|
|
13
|
-
specUrl: Joi.string().max(2048).uri().required().description('URL of the OpenAPI specification'),
|
|
14
|
-
descForModel: Joi.string().max(5000).required().allow('').label('Description for Model'),
|
|
15
|
-
name: Joi.string().max(500).required().allow(''),
|
|
16
|
-
desc: Joi.string().max(5000).required().allow('').label('Description'),
|
|
17
|
-
logoUrl: Joi.string().max(8192).allow(''),
|
|
18
|
-
id: Joi.string().max(200),
|
|
19
|
-
version: Joi.string().max(100).allow(''),
|
|
20
|
-
domain: Joi.string().max(253).allow(''),
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
constructor() {
|
|
24
|
-
super();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
init() {}
|
|
28
|
-
|
|
29
|
-
async process(input, config, agent: Agent) {
|
|
30
|
-
await super.process(input, config, agent);
|
|
31
|
-
const logger = this.createComponentLogger(agent, config);
|
|
32
|
-
|
|
33
|
-
logger.debug(`=== Open API Log ===`);
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
const specUrl = config?.data?.specUrl;
|
|
37
|
-
|
|
38
|
-
if (!specUrl) {
|
|
39
|
-
return { _error: 'Please provide a Open API Specification URL!', _debug: logger.output };
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const model = config?.data?.model || config?.data?.openAiModel;
|
|
43
|
-
const descForModel = TemplateString(config?.data?.descForModel).parse(input).result;
|
|
44
|
-
let prompt = '';
|
|
45
|
-
|
|
46
|
-
if (input?.Prompt) {
|
|
47
|
-
prompt = typeof input?.Prompt === 'string' ? input?.Prompt : JSON.stringify(input?.Prompt);
|
|
48
|
-
} else if (input?.Query) {
|
|
49
|
-
prompt = typeof input?.Query === 'string' ? input?.Query : JSON.stringify(input?.Query);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (!prompt) {
|
|
53
|
-
return { _error: 'Please provide a prompt', _debug: logger.output };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// TODO [Forhad]: Need to check and validate input prompt token
|
|
57
|
-
|
|
58
|
-
const conv = new Conversation(model, specUrl, { systemPrompt: descForModel, agentId: agent?.id });
|
|
59
|
-
|
|
60
|
-
const result = await conv.prompt(prompt);
|
|
61
|
-
|
|
62
|
-
logger.debug(`Response:\n`, result, '\n');
|
|
63
|
-
|
|
64
|
-
return { Output: result, _debug: logger.output };
|
|
65
|
-
} catch (error: any) {
|
|
66
|
-
console.error('Error on running Open API: ', error);
|
|
67
|
-
return { _error: `Error on running Open API!\n${error?.message || JSON.stringify(error)}`, _debug: logger.output };
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export default OpenAPI;
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
|
|
3
|
+
import { Agent } from '@sre/AgentManager/Agent.class';
|
|
4
|
+
import { Conversation } from '@sre/helpers/Conversation.helper';
|
|
5
|
+
import { TemplateString } from '@sre/helpers/TemplateString.helper';
|
|
6
|
+
|
|
7
|
+
import { Component } from './Component.class';
|
|
8
|
+
|
|
9
|
+
export class OpenAPI extends Component {
|
|
10
|
+
protected configSchema = Joi.object({
|
|
11
|
+
model: Joi.string().optional(),
|
|
12
|
+
openAiModel: Joi.string().optional(), // for backward compatibility
|
|
13
|
+
specUrl: Joi.string().max(2048).uri().required().description('URL of the OpenAPI specification'),
|
|
14
|
+
descForModel: Joi.string().max(5000).required().allow('').label('Description for Model'),
|
|
15
|
+
name: Joi.string().max(500).required().allow(''),
|
|
16
|
+
desc: Joi.string().max(5000).required().allow('').label('Description'),
|
|
17
|
+
logoUrl: Joi.string().max(8192).allow(''),
|
|
18
|
+
id: Joi.string().max(200),
|
|
19
|
+
version: Joi.string().max(100).allow(''),
|
|
20
|
+
domain: Joi.string().max(253).allow(''),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
init() {}
|
|
28
|
+
|
|
29
|
+
async process(input, config, agent: Agent) {
|
|
30
|
+
await super.process(input, config, agent);
|
|
31
|
+
const logger = this.createComponentLogger(agent, config);
|
|
32
|
+
|
|
33
|
+
logger.debug(`=== Open API Log ===`);
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const specUrl = config?.data?.specUrl;
|
|
37
|
+
|
|
38
|
+
if (!specUrl) {
|
|
39
|
+
return { _error: 'Please provide a Open API Specification URL!', _debug: logger.output };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const model = config?.data?.model || config?.data?.openAiModel;
|
|
43
|
+
const descForModel = TemplateString(config?.data?.descForModel).parse(input).result;
|
|
44
|
+
let prompt = '';
|
|
45
|
+
|
|
46
|
+
if (input?.Prompt) {
|
|
47
|
+
prompt = typeof input?.Prompt === 'string' ? input?.Prompt : JSON.stringify(input?.Prompt);
|
|
48
|
+
} else if (input?.Query) {
|
|
49
|
+
prompt = typeof input?.Query === 'string' ? input?.Query : JSON.stringify(input?.Query);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!prompt) {
|
|
53
|
+
return { _error: 'Please provide a prompt', _debug: logger.output };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// TODO [Forhad]: Need to check and validate input prompt token
|
|
57
|
+
|
|
58
|
+
const conv = new Conversation(model, specUrl, { systemPrompt: descForModel, agentId: agent?.id });
|
|
59
|
+
|
|
60
|
+
const result = await conv.prompt(prompt);
|
|
61
|
+
|
|
62
|
+
logger.debug(`Response:\n`, result, '\n');
|
|
63
|
+
|
|
64
|
+
return { Output: result, _debug: logger.output };
|
|
65
|
+
} catch (error: any) {
|
|
66
|
+
console.error('Error on running Open API: ', error);
|
|
67
|
+
return { _error: `Error on running Open API!\n${error?.message || JSON.stringify(error)}`, _debug: logger.output };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default OpenAPI;
|