@smythos/sre 1.5.53 → 1.5.55
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 +161 -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,107 +1,107 @@
|
|
|
1
|
-
import { IVectorDataSourceDto, Source } from '@sre/types/VectorDB.types';
|
|
2
|
-
import { isUrl } from '@sre/utils/index';
|
|
3
|
-
import { SupportedProviders, SupportedModels } from './index';
|
|
4
|
-
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
5
|
-
|
|
6
|
-
export type TEmbeddings = {
|
|
7
|
-
provider: SupportedProviders;
|
|
8
|
-
model: SupportedModels[SupportedProviders];
|
|
9
|
-
|
|
10
|
-
credentials?: {
|
|
11
|
-
apiKey: string;
|
|
12
|
-
};
|
|
13
|
-
params?: {
|
|
14
|
-
dimensions?: number;
|
|
15
|
-
timeout?: number;
|
|
16
|
-
chunkSize?: number;
|
|
17
|
-
stripNewLines?: boolean;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
type SupportedSources = 'text' | 'vector' | 'url';
|
|
22
|
-
|
|
23
|
-
export abstract class BaseEmbedding {
|
|
24
|
-
model: string;
|
|
25
|
-
modelName: string;
|
|
26
|
-
chunkSize = 512;
|
|
27
|
-
stripNewLines = true;
|
|
28
|
-
dimensions?: number;
|
|
29
|
-
timeout?: number;
|
|
30
|
-
|
|
31
|
-
constructor(fields?: Partial<TEmbeddings>) {
|
|
32
|
-
this.model = fields?.model ?? this.model;
|
|
33
|
-
this.chunkSize = fields?.params?.chunkSize ?? this.chunkSize;
|
|
34
|
-
this.stripNewLines = fields?.params?.stripNewLines ?? this.stripNewLines;
|
|
35
|
-
this.timeout = fields?.params?.timeout;
|
|
36
|
-
this.dimensions = fields?.params?.dimensions;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Embed multiple texts and return their vector representations
|
|
41
|
-
*/
|
|
42
|
-
abstract embedTexts(texts: string[], candidate: AccessCandidate): Promise<number[][]>;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Embed a single text and return its vector representation
|
|
46
|
-
*/
|
|
47
|
-
abstract embedText(text: string, candidate: AccessCandidate): Promise<number[]>;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Utility method to chunk arrays into smaller batches
|
|
51
|
-
*/
|
|
52
|
-
protected chunkArr<T>(arr: T[], sizePerChunk: number): T[][] {
|
|
53
|
-
return arr.reduce((chunks, elem, index) => {
|
|
54
|
-
const chunkIndex = Math.floor(index / sizePerChunk);
|
|
55
|
-
const chunk = chunks[chunkIndex] || [];
|
|
56
|
-
chunks[chunkIndex] = chunk.concat([elem]);
|
|
57
|
-
return chunks;
|
|
58
|
-
}, [] as T[][]);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Utility method to process multiple texts based on stripNewLines setting
|
|
63
|
-
*/
|
|
64
|
-
protected processTexts(texts: string[]): string[] {
|
|
65
|
-
return this.stripNewLines ? texts.map((t) => t.replace(/\n/g, ' ')) : texts;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
public detectSourceType(source: Source): SupportedSources | 'unknown' {
|
|
69
|
-
if (typeof source === 'string') {
|
|
70
|
-
return isUrl(source) ? 'url' : 'text';
|
|
71
|
-
} else if (Array.isArray(source) && source.every((v) => typeof v === 'number')) {
|
|
72
|
-
return 'vector';
|
|
73
|
-
} else {
|
|
74
|
-
return 'unknown';
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
public transformSource(source: IVectorDataSourceDto[], sourceType: SupportedSources, candidate: AccessCandidate) {
|
|
79
|
-
//* as the accepted sources increases, you will need to implement the strategy pattern instead of a switch case
|
|
80
|
-
switch (sourceType) {
|
|
81
|
-
case 'text': {
|
|
82
|
-
const texts = source.map((s) => s.source as string);
|
|
83
|
-
|
|
84
|
-
return this.embedTexts(texts, candidate).then((vectors) => {
|
|
85
|
-
return source.map((s, i) => ({
|
|
86
|
-
...s,
|
|
87
|
-
source: vectors[i],
|
|
88
|
-
metadata: { ...s.metadata, text: texts[i] },
|
|
89
|
-
}));
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
case 'vector': {
|
|
93
|
-
return source;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// this is a dummy vector used to maximize search distance
|
|
99
|
-
// we use it to create reserved vectors that store namespace data
|
|
100
|
-
public get dummyVector(): number[] {
|
|
101
|
-
//This is good for cosine similarity, but not for euclidean distance
|
|
102
|
-
//TODO: detect current similarity metric and use the appropriate vector (e.g for euclidean distance, use a vector with all large values like [1e6, 1e6, ..., 1e6])
|
|
103
|
-
return Array(this.dimensions - 1)
|
|
104
|
-
.fill(0)
|
|
105
|
-
.concat([1]);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
1
|
+
import { IVectorDataSourceDto, Source } from '@sre/types/VectorDB.types';
|
|
2
|
+
import { isUrl } from '@sre/utils/index';
|
|
3
|
+
import { SupportedProviders, SupportedModels } from './index';
|
|
4
|
+
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
5
|
+
|
|
6
|
+
export type TEmbeddings = {
|
|
7
|
+
provider: SupportedProviders;
|
|
8
|
+
model: SupportedModels[SupportedProviders];
|
|
9
|
+
|
|
10
|
+
credentials?: {
|
|
11
|
+
apiKey: string;
|
|
12
|
+
};
|
|
13
|
+
params?: {
|
|
14
|
+
dimensions?: number;
|
|
15
|
+
timeout?: number;
|
|
16
|
+
chunkSize?: number;
|
|
17
|
+
stripNewLines?: boolean;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type SupportedSources = 'text' | 'vector' | 'url';
|
|
22
|
+
|
|
23
|
+
export abstract class BaseEmbedding {
|
|
24
|
+
model: string;
|
|
25
|
+
modelName: string;
|
|
26
|
+
chunkSize = 512;
|
|
27
|
+
stripNewLines = true;
|
|
28
|
+
dimensions?: number;
|
|
29
|
+
timeout?: number;
|
|
30
|
+
|
|
31
|
+
constructor(fields?: Partial<TEmbeddings>) {
|
|
32
|
+
this.model = fields?.model ?? this.model;
|
|
33
|
+
this.chunkSize = fields?.params?.chunkSize ?? this.chunkSize;
|
|
34
|
+
this.stripNewLines = fields?.params?.stripNewLines ?? this.stripNewLines;
|
|
35
|
+
this.timeout = fields?.params?.timeout;
|
|
36
|
+
this.dimensions = fields?.params?.dimensions;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Embed multiple texts and return their vector representations
|
|
41
|
+
*/
|
|
42
|
+
abstract embedTexts(texts: string[], candidate: AccessCandidate): Promise<number[][]>;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Embed a single text and return its vector representation
|
|
46
|
+
*/
|
|
47
|
+
abstract embedText(text: string, candidate: AccessCandidate): Promise<number[]>;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Utility method to chunk arrays into smaller batches
|
|
51
|
+
*/
|
|
52
|
+
protected chunkArr<T>(arr: T[], sizePerChunk: number): T[][] {
|
|
53
|
+
return arr.reduce((chunks, elem, index) => {
|
|
54
|
+
const chunkIndex = Math.floor(index / sizePerChunk);
|
|
55
|
+
const chunk = chunks[chunkIndex] || [];
|
|
56
|
+
chunks[chunkIndex] = chunk.concat([elem]);
|
|
57
|
+
return chunks;
|
|
58
|
+
}, [] as T[][]);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Utility method to process multiple texts based on stripNewLines setting
|
|
63
|
+
*/
|
|
64
|
+
protected processTexts(texts: string[]): string[] {
|
|
65
|
+
return this.stripNewLines ? texts.map((t) => t.replace(/\n/g, ' ')) : texts;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public detectSourceType(source: Source): SupportedSources | 'unknown' {
|
|
69
|
+
if (typeof source === 'string') {
|
|
70
|
+
return isUrl(source) ? 'url' : 'text';
|
|
71
|
+
} else if (Array.isArray(source) && source.every((v) => typeof v === 'number')) {
|
|
72
|
+
return 'vector';
|
|
73
|
+
} else {
|
|
74
|
+
return 'unknown';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public transformSource(source: IVectorDataSourceDto[], sourceType: SupportedSources, candidate: AccessCandidate) {
|
|
79
|
+
//* as the accepted sources increases, you will need to implement the strategy pattern instead of a switch case
|
|
80
|
+
switch (sourceType) {
|
|
81
|
+
case 'text': {
|
|
82
|
+
const texts = source.map((s) => s.source as string);
|
|
83
|
+
|
|
84
|
+
return this.embedTexts(texts, candidate).then((vectors) => {
|
|
85
|
+
return source.map((s, i) => ({
|
|
86
|
+
...s,
|
|
87
|
+
source: vectors[i],
|
|
88
|
+
metadata: { ...s.metadata, text: texts[i] },
|
|
89
|
+
}));
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
case 'vector': {
|
|
93
|
+
return source;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// this is a dummy vector used to maximize search distance
|
|
99
|
+
// we use it to create reserved vectors that store namespace data
|
|
100
|
+
public get dummyVector(): number[] {
|
|
101
|
+
//This is good for cosine similarity, but not for euclidean distance
|
|
102
|
+
//TODO: detect current similarity metric and use the appropriate vector (e.g for euclidean distance, use a vector with all large values like [1e6, 1e6, ..., 1e6])
|
|
103
|
+
return Array(this.dimensions - 1)
|
|
104
|
+
.fill(0)
|
|
105
|
+
.concat([1]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import OpenAI, { type ClientOptions, OpenAI as OpenAIClient } from 'openai';
|
|
2
|
-
import { BaseEmbedding, TEmbeddings } from './BaseEmbedding';
|
|
3
|
-
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
4
|
-
import { getLLMCredentials } from '@sre/LLMManager/LLM.service/LLMCredentials.helper';
|
|
5
|
-
import { TLLMCredentials, TLLMModel } from '@sre/types/LLM.types';
|
|
6
|
-
|
|
7
|
-
// Helper function to create OpenAI API errors
|
|
8
|
-
const createOpenAIError = (statusCode: number, error: any) => {
|
|
9
|
-
return new OpenAI.APIError(
|
|
10
|
-
statusCode,
|
|
11
|
-
{
|
|
12
|
-
code: error?.errKey || error?.code,
|
|
13
|
-
message: error?.message,
|
|
14
|
-
type: error?.name,
|
|
15
|
-
},
|
|
16
|
-
error?.message,
|
|
17
|
-
null
|
|
18
|
-
);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
const DEFAULT_MODEL = 'text-embedding-ada-002';
|
|
22
|
-
|
|
23
|
-
export class OpenAIEmbeds extends BaseEmbedding {
|
|
24
|
-
protected client: OpenAIClient;
|
|
25
|
-
protected clientConfig: ClientOptions;
|
|
26
|
-
|
|
27
|
-
public static models = ['text-embedding-ada-002', 'text-embedding-3-large'];
|
|
28
|
-
public canSpecifyDimensions = true;
|
|
29
|
-
|
|
30
|
-
constructor(private settings?: Partial<TEmbeddings>) {
|
|
31
|
-
super({ model: settings?.model ?? DEFAULT_MODEL, ...settings });
|
|
32
|
-
|
|
33
|
-
this.clientConfig = {
|
|
34
|
-
//apiKey: fields?.credentials?.apiKey || process.env.OPENAI_API_KEY || '',
|
|
35
|
-
dangerouslyAllowBrowser: true,
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
if (this.model === 'text-embedding-ada-002') {
|
|
39
|
-
this.canSpecifyDimensions = false; // special case for ada-002, it doesn't support dimensions passing
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async embedTexts(texts: string[], candidate: AccessCandidate): Promise<number[][]> {
|
|
44
|
-
const batches = this.chunkArr(this.processTexts(texts), this.chunkSize);
|
|
45
|
-
|
|
46
|
-
const batchRequests = batches.map((batch) => {
|
|
47
|
-
const params: OpenAIClient.EmbeddingCreateParams = {
|
|
48
|
-
model: this.model,
|
|
49
|
-
input: batch,
|
|
50
|
-
};
|
|
51
|
-
if (this.dimensions && this.canSpecifyDimensions) {
|
|
52
|
-
params.dimensions = this.dimensions;
|
|
53
|
-
}
|
|
54
|
-
return this.embed(params, candidate);
|
|
55
|
-
});
|
|
56
|
-
const batchResponses = await Promise.all(batchRequests);
|
|
57
|
-
|
|
58
|
-
const embeddings: number[][] = [];
|
|
59
|
-
for (let i = 0; i < batchResponses.length; i += 1) {
|
|
60
|
-
const batch = batches[i];
|
|
61
|
-
const { data: batchResponse } = batchResponses[i];
|
|
62
|
-
for (let j = 0; j < batch.length; j += 1) {
|
|
63
|
-
embeddings.push(batchResponse[j].embedding);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return embeddings;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async embedText(text: string, candidate: AccessCandidate): Promise<number[]> {
|
|
70
|
-
const params: OpenAIClient.EmbeddingCreateParams = {
|
|
71
|
-
model: this.model,
|
|
72
|
-
input: this.processTexts([text])[0],
|
|
73
|
-
};
|
|
74
|
-
if (this.dimensions && this.canSpecifyDimensions) {
|
|
75
|
-
params.dimensions = this.dimensions;
|
|
76
|
-
}
|
|
77
|
-
const { data } = await this.embed(params, candidate);
|
|
78
|
-
return data[0].embedding;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
protected async embed(request: OpenAIClient.EmbeddingCreateParams, candidate: AccessCandidate) {
|
|
82
|
-
const modelInfo: TLLMModel = {
|
|
83
|
-
provider: 'OpenAI',
|
|
84
|
-
modelId: this.model,
|
|
85
|
-
credentials: this.settings?.credentials as unknown as TLLMCredentials,
|
|
86
|
-
};
|
|
87
|
-
const credentials = await getLLMCredentials(candidate, modelInfo);
|
|
88
|
-
|
|
89
|
-
if (!this.client) {
|
|
90
|
-
const params: ClientOptions = {
|
|
91
|
-
...this.clientConfig,
|
|
92
|
-
apiKey: credentials.apiKey,
|
|
93
|
-
timeout: this.timeout,
|
|
94
|
-
maxRetries: 0,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
this.client = new OpenAIClient(params);
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
const res = await this.client.embeddings.create(request);
|
|
101
|
-
return res;
|
|
102
|
-
} catch (e) {
|
|
103
|
-
// const error = wrapOpenAIClientError(e);
|
|
104
|
-
// import openapi error from openai and throw it
|
|
105
|
-
const error = createOpenAIError(e.statusCode, e);
|
|
106
|
-
throw error;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
import OpenAI, { type ClientOptions, OpenAI as OpenAIClient } from 'openai';
|
|
2
|
+
import { BaseEmbedding, TEmbeddings } from './BaseEmbedding';
|
|
3
|
+
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
4
|
+
import { getLLMCredentials } from '@sre/LLMManager/LLM.service/LLMCredentials.helper';
|
|
5
|
+
import { TLLMCredentials, TLLMModel } from '@sre/types/LLM.types';
|
|
6
|
+
|
|
7
|
+
// Helper function to create OpenAI API errors
|
|
8
|
+
const createOpenAIError = (statusCode: number, error: any) => {
|
|
9
|
+
return new OpenAI.APIError(
|
|
10
|
+
statusCode,
|
|
11
|
+
{
|
|
12
|
+
code: error?.errKey || error?.code,
|
|
13
|
+
message: error?.message,
|
|
14
|
+
type: error?.name,
|
|
15
|
+
},
|
|
16
|
+
error?.message,
|
|
17
|
+
null
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const DEFAULT_MODEL = 'text-embedding-ada-002';
|
|
22
|
+
|
|
23
|
+
export class OpenAIEmbeds extends BaseEmbedding {
|
|
24
|
+
protected client: OpenAIClient;
|
|
25
|
+
protected clientConfig: ClientOptions;
|
|
26
|
+
|
|
27
|
+
public static models = ['text-embedding-ada-002', 'text-embedding-3-large'];
|
|
28
|
+
public canSpecifyDimensions = true;
|
|
29
|
+
|
|
30
|
+
constructor(private settings?: Partial<TEmbeddings>) {
|
|
31
|
+
super({ model: settings?.model ?? DEFAULT_MODEL, ...settings });
|
|
32
|
+
|
|
33
|
+
this.clientConfig = {
|
|
34
|
+
//apiKey: fields?.credentials?.apiKey || process.env.OPENAI_API_KEY || '',
|
|
35
|
+
dangerouslyAllowBrowser: true,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (this.model === 'text-embedding-ada-002') {
|
|
39
|
+
this.canSpecifyDimensions = false; // special case for ada-002, it doesn't support dimensions passing
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async embedTexts(texts: string[], candidate: AccessCandidate): Promise<number[][]> {
|
|
44
|
+
const batches = this.chunkArr(this.processTexts(texts), this.chunkSize);
|
|
45
|
+
|
|
46
|
+
const batchRequests = batches.map((batch) => {
|
|
47
|
+
const params: OpenAIClient.EmbeddingCreateParams = {
|
|
48
|
+
model: this.model,
|
|
49
|
+
input: batch,
|
|
50
|
+
};
|
|
51
|
+
if (this.dimensions && this.canSpecifyDimensions) {
|
|
52
|
+
params.dimensions = this.dimensions;
|
|
53
|
+
}
|
|
54
|
+
return this.embed(params, candidate);
|
|
55
|
+
});
|
|
56
|
+
const batchResponses = await Promise.all(batchRequests);
|
|
57
|
+
|
|
58
|
+
const embeddings: number[][] = [];
|
|
59
|
+
for (let i = 0; i < batchResponses.length; i += 1) {
|
|
60
|
+
const batch = batches[i];
|
|
61
|
+
const { data: batchResponse } = batchResponses[i];
|
|
62
|
+
for (let j = 0; j < batch.length; j += 1) {
|
|
63
|
+
embeddings.push(batchResponse[j].embedding);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return embeddings;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async embedText(text: string, candidate: AccessCandidate): Promise<number[]> {
|
|
70
|
+
const params: OpenAIClient.EmbeddingCreateParams = {
|
|
71
|
+
model: this.model,
|
|
72
|
+
input: this.processTexts([text])[0],
|
|
73
|
+
};
|
|
74
|
+
if (this.dimensions && this.canSpecifyDimensions) {
|
|
75
|
+
params.dimensions = this.dimensions;
|
|
76
|
+
}
|
|
77
|
+
const { data } = await this.embed(params, candidate);
|
|
78
|
+
return data[0].embedding;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
protected async embed(request: OpenAIClient.EmbeddingCreateParams, candidate: AccessCandidate) {
|
|
82
|
+
const modelInfo: TLLMModel = {
|
|
83
|
+
provider: 'OpenAI',
|
|
84
|
+
modelId: this.model,
|
|
85
|
+
credentials: this.settings?.credentials as unknown as TLLMCredentials,
|
|
86
|
+
};
|
|
87
|
+
const credentials = await getLLMCredentials(candidate, modelInfo);
|
|
88
|
+
|
|
89
|
+
if (!this.client) {
|
|
90
|
+
const params: ClientOptions = {
|
|
91
|
+
...this.clientConfig,
|
|
92
|
+
apiKey: credentials.apiKey,
|
|
93
|
+
timeout: this.timeout,
|
|
94
|
+
maxRetries: 0,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
this.client = new OpenAIClient(params);
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const res = await this.client.embeddings.create(request);
|
|
101
|
+
return res;
|
|
102
|
+
} catch (e) {
|
|
103
|
+
// const error = wrapOpenAIClientError(e);
|
|
104
|
+
// import openapi error from openai and throw it
|
|
105
|
+
const error = createOpenAIError(e.statusCode, e);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { OpenAIEmbeds } from './OpenAIEmbedding';
|
|
2
|
-
import { TEmbeddings } from './BaseEmbedding';
|
|
3
|
-
|
|
4
|
-
// a factory to get the correct embedding provider based on the provider name
|
|
5
|
-
const supportedProviders = {
|
|
6
|
-
OpenAI: {
|
|
7
|
-
embedder: OpenAIEmbeds,
|
|
8
|
-
models: OpenAIEmbeds.models,
|
|
9
|
-
},
|
|
10
|
-
} as const;
|
|
11
|
-
|
|
12
|
-
export type SupportedProviders = keyof typeof supportedProviders;
|
|
13
|
-
export type SupportedModels = {
|
|
14
|
-
[K in SupportedProviders]: (typeof supportedProviders)[K]['models'][number];
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export class EmbeddingsFactory {
|
|
18
|
-
public static create(provider: SupportedProviders, config: TEmbeddings) {
|
|
19
|
-
return new supportedProviders[provider].embedder(config);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
1
|
+
import { OpenAIEmbeds } from './OpenAIEmbedding';
|
|
2
|
+
import { TEmbeddings } from './BaseEmbedding';
|
|
3
|
+
|
|
4
|
+
// a factory to get the correct embedding provider based on the provider name
|
|
5
|
+
const supportedProviders = {
|
|
6
|
+
OpenAI: {
|
|
7
|
+
embedder: OpenAIEmbeds,
|
|
8
|
+
models: OpenAIEmbeds.models,
|
|
9
|
+
},
|
|
10
|
+
} as const;
|
|
11
|
+
|
|
12
|
+
export type SupportedProviders = keyof typeof supportedProviders;
|
|
13
|
+
export type SupportedModels = {
|
|
14
|
+
[K in SupportedProviders]: (typeof supportedProviders)[K]['models'][number];
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class EmbeddingsFactory {
|
|
18
|
+
public static create(provider: SupportedProviders, config: TEmbeddings) {
|
|
19
|
+
return new supportedProviders[provider].embedder(config);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
//==[ SRE: Storage ]======================
|
|
2
|
-
|
|
3
|
-
import { ConnectorService, ConnectorServiceProvider } from '@sre/Core/ConnectorsService';
|
|
4
|
-
import { TConnectorService } from '@sre/types/SRE.types';
|
|
5
|
-
import { PineconeVectorDB } from './connectors/PineconeVectorDB.class';
|
|
6
|
-
import { MilvusVectorDB } from './connectors/MilvusVectorDB.class';
|
|
7
|
-
import { RAMVectorDB } from './connectors/RAMVecrtorDB.class';
|
|
8
|
-
export class VectorDBService extends ConnectorServiceProvider {
|
|
9
|
-
public register() {
|
|
10
|
-
ConnectorService.register(TConnectorService.VectorDB, 'Pinecone', PineconeVectorDB);
|
|
11
|
-
ConnectorService.register(TConnectorService.VectorDB, 'RAMVec', RAMVectorDB);
|
|
12
|
-
ConnectorService.register(TConnectorService.VectorDB, 'Milvus', MilvusVectorDB);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
//==[ SRE: Storage ]======================
|
|
2
|
+
|
|
3
|
+
import { ConnectorService, ConnectorServiceProvider } from '@sre/Core/ConnectorsService';
|
|
4
|
+
import { TConnectorService } from '@sre/types/SRE.types';
|
|
5
|
+
import { PineconeVectorDB } from './connectors/PineconeVectorDB.class';
|
|
6
|
+
import { MilvusVectorDB } from './connectors/MilvusVectorDB.class';
|
|
7
|
+
import { RAMVectorDB } from './connectors/RAMVecrtorDB.class';
|
|
8
|
+
export class VectorDBService extends ConnectorServiceProvider {
|
|
9
|
+
public register() {
|
|
10
|
+
ConnectorService.register(TConnectorService.VectorDB, 'Pinecone', PineconeVectorDB);
|
|
11
|
+
ConnectorService.register(TConnectorService.VectorDB, 'RAMVec', RAMVectorDB);
|
|
12
|
+
ConnectorService.register(TConnectorService.VectorDB, 'Milvus', MilvusVectorDB);
|
|
13
|
+
}
|
|
14
|
+
}
|