@jerome-benoit/sap-ai-provider 4.4.15 → 4.4.16
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/README.md +10 -0
- package/dist/{chunk-JV2ULRVE.js → chunk-U5TGXMXL.js} +69 -69
- package/dist/{chunk-JV2ULRVE.js.map → chunk-U5TGXMXL.js.map} +1 -1
- package/dist/{chunk-3JJ7OXMW.js → chunk-X3RVS75R.js} +2 -2
- package/dist/chunk-YWOWXJGS.js +54 -0
- package/dist/chunk-YWOWXJGS.js.map +1 -0
- package/dist/{chunk-CXZSTU4M.js → chunk-ZTTUNOQ4.js} +3 -3
- package/dist/foundation-models-embedding-model-strategy-3AL3KDCE.js +58 -0
- package/dist/foundation-models-embedding-model-strategy-3AL3KDCE.js.map +1 -0
- package/dist/{foundation-models-language-model-strategy-ZCRPVWAV.js → foundation-models-language-model-strategy-X6RMOTAL.js} +4 -4
- package/dist/index.cjs +169 -150
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -5
- package/dist/orchestration-embedding-model-strategy-VCSK76HX.js +60 -0
- package/dist/orchestration-embedding-model-strategy-VCSK76HX.js.map +1 -0
- package/dist/{orchestration-language-model-strategy-NEW76M3M.js → orchestration-language-model-strategy-YFINEDMS.js} +4 -4
- package/package.json +5 -5
- package/dist/foundation-models-embedding-model-strategy-OEKTLGZN.js +0 -69
- package/dist/foundation-models-embedding-model-strategy-OEKTLGZN.js.map +0 -1
- package/dist/orchestration-embedding-model-strategy-QRHQIEEK.js +0 -79
- package/dist/orchestration-embedding-model-strategy-QRHQIEEK.js.map +0 -1
- /package/dist/{chunk-3JJ7OXMW.js.map → chunk-X3RVS75R.js.map} +0 -0
- /package/dist/{chunk-CXZSTU4M.js.map → chunk-ZTTUNOQ4.js.map} +0 -0
- /package/dist/{foundation-models-language-model-strategy-ZCRPVWAV.js.map → foundation-models-language-model-strategy-X6RMOTAL.js.map} +0 -0
- /package/dist/{orchestration-language-model-strategy-NEW76M3M.js.map → orchestration-language-model-strategy-YFINEDMS.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
sapAILanguageModelProviderOptions,
|
|
17
17
|
validateEmbeddingModelParamsSettings,
|
|
18
18
|
validateModelParamsSettings
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-U5TGXMXL.js";
|
|
20
20
|
|
|
21
21
|
// src/sap-ai-embedding-model.ts
|
|
22
22
|
import { parseProviderOptions } from "@ai-sdk/provider-utils";
|
|
@@ -51,21 +51,21 @@ function getOrCreateLanguageModelStrategy(api) {
|
|
|
51
51
|
async function createEmbeddingModelStrategy(api) {
|
|
52
52
|
if (api === "foundation-models") {
|
|
53
53
|
const { AzureOpenAiEmbeddingClient } = await import("@sap-ai-sdk/foundation-models");
|
|
54
|
-
const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-
|
|
54
|
+
const { FoundationModelsEmbeddingModelStrategy } = await import("./foundation-models-embedding-model-strategy-3AL3KDCE.js");
|
|
55
55
|
return new FoundationModelsEmbeddingModelStrategy(AzureOpenAiEmbeddingClient);
|
|
56
56
|
}
|
|
57
57
|
const { OrchestrationEmbeddingClient: OrchestrationEmbeddingClient2 } = await import("@sap-ai-sdk/orchestration");
|
|
58
|
-
const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-
|
|
58
|
+
const { OrchestrationEmbeddingModelStrategy } = await import("./orchestration-embedding-model-strategy-VCSK76HX.js");
|
|
59
59
|
return new OrchestrationEmbeddingModelStrategy(OrchestrationEmbeddingClient2);
|
|
60
60
|
}
|
|
61
61
|
async function createLanguageModelStrategy(api) {
|
|
62
62
|
if (api === "foundation-models") {
|
|
63
63
|
const { AzureOpenAiChatClient } = await import("@sap-ai-sdk/foundation-models");
|
|
64
|
-
const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-
|
|
64
|
+
const { FoundationModelsLanguageModelStrategy } = await import("./foundation-models-language-model-strategy-X6RMOTAL.js");
|
|
65
65
|
return new FoundationModelsLanguageModelStrategy(AzureOpenAiChatClient);
|
|
66
66
|
}
|
|
67
67
|
const { OrchestrationClient: OrchestrationClient2 } = await import("@sap-ai-sdk/orchestration");
|
|
68
|
-
const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-
|
|
68
|
+
const { OrchestrationLanguageModelStrategy } = await import("./orchestration-language-model-strategy-YFINEDMS.js");
|
|
69
69
|
return new OrchestrationLanguageModelStrategy(OrchestrationClient2);
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
BaseEmbeddingModelStrategy
|
|
4
|
+
} from "./chunk-YWOWXJGS.js";
|
|
5
|
+
import {
|
|
6
|
+
hasKeys,
|
|
7
|
+
normalizeEmbedding
|
|
8
|
+
} from "./chunk-X3RVS75R.js";
|
|
9
|
+
import {
|
|
10
|
+
deepMerge
|
|
11
|
+
} from "./chunk-U5TGXMXL.js";
|
|
12
|
+
|
|
13
|
+
// src/orchestration-embedding-model-strategy.ts
|
|
14
|
+
var OrchestrationEmbeddingModelStrategy = class extends BaseEmbeddingModelStrategy {
|
|
15
|
+
ClientClass;
|
|
16
|
+
constructor(ClientClass) {
|
|
17
|
+
super();
|
|
18
|
+
this.ClientClass = ClientClass;
|
|
19
|
+
}
|
|
20
|
+
createClient(config, settings, embeddingOptions) {
|
|
21
|
+
const mergedParams = deepMerge(
|
|
22
|
+
settings.modelParams ?? {},
|
|
23
|
+
embeddingOptions?.modelParams ?? {}
|
|
24
|
+
);
|
|
25
|
+
const embeddingConfig = {
|
|
26
|
+
model: {
|
|
27
|
+
name: config.modelId,
|
|
28
|
+
...hasKeys(mergedParams) ? { params: mergedParams } : {},
|
|
29
|
+
...settings.modelVersion ? { version: settings.modelVersion } : {}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const moduleConfig = {
|
|
33
|
+
embeddings: embeddingConfig,
|
|
34
|
+
...settings.masking && hasKeys(settings.masking) ? { masking: settings.masking } : {}
|
|
35
|
+
};
|
|
36
|
+
return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);
|
|
37
|
+
}
|
|
38
|
+
async executeCall(client, values, embeddingType, abortSignal) {
|
|
39
|
+
return client.embed(
|
|
40
|
+
{ input: values, type: embeddingType },
|
|
41
|
+
abortSignal ? { signal: abortSignal } : void 0
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
extractEmbeddings(response) {
|
|
45
|
+
const embeddingData = response.getEmbeddings();
|
|
46
|
+
const sortedEmbeddings = [...embeddingData].sort((a, b) => a.index - b.index);
|
|
47
|
+
return sortedEmbeddings.map((data) => normalizeEmbedding(data.embedding));
|
|
48
|
+
}
|
|
49
|
+
extractTokenCount(response) {
|
|
50
|
+
const tokenUsage = response.getTokenUsage();
|
|
51
|
+
return tokenUsage.total_tokens;
|
|
52
|
+
}
|
|
53
|
+
getUrl() {
|
|
54
|
+
return "sap-ai:orchestration/embeddings";
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
export {
|
|
58
|
+
OrchestrationEmbeddingModelStrategy
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=orchestration-embedding-model-strategy-VCSK76HX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/orchestration-embedding-model-strategy.ts"],"sourcesContent":["/** Orchestration embedding model strategy using `@sap-ai-sdk/orchestration`. */\nimport type { EmbeddingModelV3Embedding } from \"@ai-sdk/provider\";\nimport type {\n EmbeddingModelConfig,\n EmbeddingModuleConfig,\n OrchestrationEmbeddingClient,\n OrchestrationEmbeddingResponse,\n} from \"@sap-ai-sdk/orchestration\";\n\nimport type { SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\nimport type { EmbeddingModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { BaseEmbeddingModelStrategy } from \"./base-embedding-model-strategy.js\";\nimport { deepMerge } from \"./deep-merge.js\";\nimport { type EmbeddingProviderOptions, hasKeys, normalizeEmbedding } from \"./strategy-utils.js\";\n\n/** @internal */\ntype OrchestrationEmbeddingClientClass = typeof OrchestrationEmbeddingClient;\n\n/**\n * Embedding model strategy for the Orchestration API.\n *\n * Provides support for:\n * - Data masking\n * - Model parameters configuration\n * @internal\n */\nexport class OrchestrationEmbeddingModelStrategy extends BaseEmbeddingModelStrategy<\n OrchestrationEmbeddingClient,\n OrchestrationEmbeddingResponse\n> {\n private readonly ClientClass: OrchestrationEmbeddingClientClass;\n\n constructor(ClientClass: OrchestrationEmbeddingClientClass) {\n super();\n this.ClientClass = ClientClass;\n }\n\n protected createClient(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n embeddingOptions: EmbeddingProviderOptions | undefined,\n ): OrchestrationEmbeddingClient {\n const mergedParams = deepMerge(\n (settings.modelParams as Record<string, unknown> | undefined) ?? {},\n embeddingOptions?.modelParams ?? {},\n );\n\n const embeddingConfig: EmbeddingModelConfig = {\n model: {\n name: config.modelId,\n ...(hasKeys(mergedParams) ? { params: mergedParams } : {}),\n ...(settings.modelVersion ? { version: settings.modelVersion } : {}),\n },\n };\n\n const moduleConfig: EmbeddingModuleConfig = {\n embeddings: embeddingConfig,\n ...(settings.masking && hasKeys(settings.masking as object)\n ? { masking: settings.masking }\n : {}),\n };\n\n return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);\n }\n\n protected async executeCall(\n client: OrchestrationEmbeddingClient,\n values: string[],\n embeddingType: \"document\" | \"query\" | \"text\" | undefined,\n abortSignal?: AbortSignal,\n ): Promise<OrchestrationEmbeddingResponse> {\n return client.embed(\n { input: values, type: embeddingType },\n abortSignal ? { signal: abortSignal } : undefined,\n );\n }\n\n protected extractEmbeddings(\n response: OrchestrationEmbeddingResponse,\n ): EmbeddingModelV3Embedding[] {\n const embeddingData = response.getEmbeddings();\n const sortedEmbeddings = [...embeddingData].sort((a, b) => a.index - b.index);\n return sortedEmbeddings.map((data) => normalizeEmbedding(data.embedding));\n }\n\n protected extractTokenCount(response: OrchestrationEmbeddingResponse): number {\n const tokenUsage = response.getTokenUsage();\n return tokenUsage.total_tokens;\n }\n\n protected getUrl(): string {\n return \"sap-ai:orchestration/embeddings\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA2BO,IAAM,sCAAN,cAAkD,2BAGvD;AAAA,EACiB;AAAA,EAEjB,YAAY,aAAgD;AAC1D,UAAM;AACN,SAAK,cAAc;AAAA,EACrB;AAAA,EAEU,aACR,QACA,UACA,kBAC8B;AAC9B,UAAM,eAAe;AAAA,MAClB,SAAS,eAAuD,CAAC;AAAA,MAClE,kBAAkB,eAAe,CAAC;AAAA,IACpC;AAEA,UAAM,kBAAwC;AAAA,MAC5C,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,GAAI,QAAQ,YAAY,IAAI,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,QACxD,GAAI,SAAS,eAAe,EAAE,SAAS,SAAS,aAAa,IAAI,CAAC;AAAA,MACpE;AAAA,IACF;AAEA,UAAM,eAAsC;AAAA,MAC1C,YAAY;AAAA,MACZ,GAAI,SAAS,WAAW,QAAQ,SAAS,OAAiB,IACtD,EAAE,SAAS,SAAS,QAAQ,IAC5B,CAAC;AAAA,IACP;AAEA,WAAO,IAAI,KAAK,YAAY,cAAc,OAAO,kBAAkB,OAAO,WAAW;AAAA,EACvF;AAAA,EAEA,MAAgB,YACd,QACA,QACA,eACA,aACyC;AACzC,WAAO,OAAO;AAAA,MACZ,EAAE,OAAO,QAAQ,MAAM,cAAc;AAAA,MACrC,cAAc,EAAE,QAAQ,YAAY,IAAI;AAAA,IAC1C;AAAA,EACF;AAAA,EAEU,kBACR,UAC6B;AAC7B,UAAM,gBAAgB,SAAS,cAAc;AAC7C,UAAM,mBAAmB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC5E,WAAO,iBAAiB,IAAI,CAAC,SAAS,mBAAmB,KAAK,SAAS,CAAC;AAAA,EAC1E;AAAA,EAEU,kBAAkB,UAAkD;AAC5E,UAAM,aAAa,SAAS,cAAc;AAC1C,WAAO,WAAW;AAAA,EACpB;AAAA,EAEU,SAAiB;AACzB,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
BaseLanguageModelStrategy
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZTTUNOQ4.js";
|
|
5
5
|
import {
|
|
6
6
|
convertToSAPMessages
|
|
7
7
|
} from "./chunk-SD6CRCHX.js";
|
|
@@ -11,13 +11,13 @@ import {
|
|
|
11
11
|
convertToolsToSAPFormat,
|
|
12
12
|
hasKeys,
|
|
13
13
|
mapToolChoice
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-X3RVS75R.js";
|
|
15
15
|
import {
|
|
16
16
|
deepMerge,
|
|
17
17
|
getProviderName,
|
|
18
18
|
orchestrationConfigRefSchema,
|
|
19
19
|
sapAILanguageModelProviderOptions
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-U5TGXMXL.js";
|
|
21
21
|
|
|
22
22
|
// src/orchestration-language-model-strategy.ts
|
|
23
23
|
import { parseProviderOptions } from "@ai-sdk/provider-utils";
|
|
@@ -488,4 +488,4 @@ var OrchestrationLanguageModelStrategy = class extends BaseLanguageModelStrategy
|
|
|
488
488
|
export {
|
|
489
489
|
OrchestrationLanguageModelStrategy
|
|
490
490
|
};
|
|
491
|
-
//# sourceMappingURL=orchestration-language-model-strategy-
|
|
491
|
+
//# sourceMappingURL=orchestration-language-model-strategy-YFINEDMS.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jerome-benoit/sap-ai-provider",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "SAP AI Provider for Vercel AI SDK (powered by @sap-ai-sdk/orchestration and @sap-ai-sdk/foundation-models)",
|
|
6
6
|
"keywords": [
|
|
@@ -84,12 +84,12 @@
|
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@edge-runtime/vm": "^5.0.0",
|
|
87
|
-
"@eslint/js": "^
|
|
88
|
-
"@types/node": "^25.
|
|
87
|
+
"@eslint/js": "^10.0.1",
|
|
88
|
+
"@types/node": "^25.3.0",
|
|
89
89
|
"@vitest/coverage-v8": "^4.0.18",
|
|
90
90
|
"dotenv": "^17.3.1",
|
|
91
|
-
"eslint": "^
|
|
92
|
-
"eslint-plugin-jsdoc": "^62.
|
|
91
|
+
"eslint": "^10.0.1",
|
|
92
|
+
"eslint-plugin-jsdoc": "^62.7.0",
|
|
93
93
|
"eslint-plugin-perfectionist": "^5.6.0",
|
|
94
94
|
"globals": "^17.3.0",
|
|
95
95
|
"markdown-link-check": "^3.14.2",
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
buildEmbeddingResult,
|
|
4
|
-
buildModelDeployment,
|
|
5
|
-
hasKeys,
|
|
6
|
-
normalizeEmbedding,
|
|
7
|
-
prepareEmbeddingCall
|
|
8
|
-
} from "./chunk-3JJ7OXMW.js";
|
|
9
|
-
import {
|
|
10
|
-
VERSION,
|
|
11
|
-
convertToAISDKError,
|
|
12
|
-
deepMerge
|
|
13
|
-
} from "./chunk-JV2ULRVE.js";
|
|
14
|
-
|
|
15
|
-
// src/foundation-models-embedding-model-strategy.ts
|
|
16
|
-
var FoundationModelsEmbeddingModelStrategy = class {
|
|
17
|
-
ClientClass;
|
|
18
|
-
constructor(ClientClass) {
|
|
19
|
-
this.ClientClass = ClientClass;
|
|
20
|
-
}
|
|
21
|
-
async doEmbed(config, settings, options, maxEmbeddingsPerCall) {
|
|
22
|
-
const { abortSignal, values } = options;
|
|
23
|
-
const { embeddingOptions, providerName } = await prepareEmbeddingCall(
|
|
24
|
-
{ maxEmbeddingsPerCall, modelId: config.modelId, provider: config.provider },
|
|
25
|
-
options
|
|
26
|
-
);
|
|
27
|
-
try {
|
|
28
|
-
const client = this.createClient(config, settings.modelVersion);
|
|
29
|
-
const request = this.buildRequest(values, settings, embeddingOptions);
|
|
30
|
-
const response = await client.run(request, abortSignal ? { signal: abortSignal } : void 0);
|
|
31
|
-
const embeddingData = response.getEmbeddings();
|
|
32
|
-
const tokenUsage = response._data.usage;
|
|
33
|
-
const embeddings = embeddingData.map(
|
|
34
|
-
(embedding) => normalizeEmbedding(embedding)
|
|
35
|
-
);
|
|
36
|
-
return buildEmbeddingResult({
|
|
37
|
-
embeddings,
|
|
38
|
-
modelId: config.modelId,
|
|
39
|
-
providerName,
|
|
40
|
-
totalTokens: tokenUsage.total_tokens,
|
|
41
|
-
version: VERSION
|
|
42
|
-
});
|
|
43
|
-
} catch (error) {
|
|
44
|
-
throw convertToAISDKError(error, {
|
|
45
|
-
operation: "doEmbed",
|
|
46
|
-
requestBody: { values: values.length },
|
|
47
|
-
url: "sap-ai:foundation-models/embeddings"
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
buildRequest(values, settings, embeddingOptions) {
|
|
52
|
-
const mergedParams = deepMerge(
|
|
53
|
-
settings.modelParams,
|
|
54
|
-
embeddingOptions?.modelParams
|
|
55
|
-
);
|
|
56
|
-
return {
|
|
57
|
-
input: values,
|
|
58
|
-
...hasKeys(mergedParams) ? mergedParams : {}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
createClient(config, modelVersion) {
|
|
62
|
-
const modelDeployment = buildModelDeployment(config, modelVersion);
|
|
63
|
-
return new this.ClientClass(modelDeployment, config.destination);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
export {
|
|
67
|
-
FoundationModelsEmbeddingModelStrategy
|
|
68
|
-
};
|
|
69
|
-
//# sourceMappingURL=foundation-models-embedding-model-strategy-OEKTLGZN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/foundation-models-embedding-model-strategy.ts"],"sourcesContent":["/** Foundation Models embedding model strategy using `@sap-ai-sdk/foundation-models`. */\nimport type {\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Embedding,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport type {\n AzureOpenAiEmbeddingClient,\n AzureOpenAiEmbeddingParameters,\n} from \"@sap-ai-sdk/foundation-models\";\n\nimport type { SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\nimport type { EmbeddingModelAPIStrategy, EmbeddingModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { deepMerge } from \"./deep-merge.js\";\nimport { convertToAISDKError } from \"./sap-ai-error.js\";\nimport {\n buildEmbeddingResult,\n buildModelDeployment,\n hasKeys,\n normalizeEmbedding,\n prepareEmbeddingCall,\n} from \"./strategy-utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * @internal\n */\ntype AzureOpenAiEmbeddingClientClass = typeof AzureOpenAiEmbeddingClient;\n\n/**\n * @internal\n */\nexport class FoundationModelsEmbeddingModelStrategy implements EmbeddingModelAPIStrategy {\n private readonly ClientClass: AzureOpenAiEmbeddingClientClass;\n\n constructor(ClientClass: AzureOpenAiEmbeddingClientClass) {\n this.ClientClass = ClientClass;\n }\n\n async doEmbed(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n options: EmbeddingModelV3CallOptions,\n maxEmbeddingsPerCall: number,\n ): Promise<EmbeddingModelV3Result> {\n const { abortSignal, values } = options;\n\n const { embeddingOptions, providerName } = await prepareEmbeddingCall(\n { maxEmbeddingsPerCall, modelId: config.modelId, provider: config.provider },\n options,\n );\n\n try {\n const client = this.createClient(config, settings.modelVersion);\n const request = this.buildRequest(values, settings, embeddingOptions);\n const response = await client.run(request, abortSignal ? { signal: abortSignal } : undefined);\n\n const embeddingData = response.getEmbeddings();\n const tokenUsage = response._data.usage;\n const embeddings: EmbeddingModelV3Embedding[] = embeddingData.map((embedding) =>\n normalizeEmbedding(embedding),\n );\n\n return buildEmbeddingResult({\n embeddings,\n modelId: config.modelId,\n providerName,\n totalTokens: tokenUsage.total_tokens,\n version: VERSION,\n });\n } catch (error) {\n throw convertToAISDKError(error, {\n operation: \"doEmbed\",\n requestBody: { values: values.length },\n url: \"sap-ai:foundation-models/embeddings\",\n });\n }\n }\n\n private buildRequest(\n values: string[],\n settings: SAPAIEmbeddingSettings,\n embeddingOptions: undefined | { modelParams?: Record<string, unknown> },\n ): AzureOpenAiEmbeddingParameters {\n const mergedParams = deepMerge(\n settings.modelParams as Record<string, unknown> | undefined,\n embeddingOptions?.modelParams,\n );\n\n return {\n input: values,\n ...(hasKeys(mergedParams) ? mergedParams : {}),\n } as AzureOpenAiEmbeddingParameters;\n }\n\n private createClient(\n config: EmbeddingModelStrategyConfig,\n modelVersion?: string,\n ): InstanceType<AzureOpenAiEmbeddingClientClass> {\n const modelDeployment = buildModelDeployment(config, modelVersion);\n return new this.ClientClass(modelDeployment, config.destination);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiCO,IAAM,yCAAN,MAAkF;AAAA,EACtE;AAAA,EAEjB,YAAY,aAA8C;AACxD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAM,QACJ,QACA,UACA,SACA,sBACiC;AACjC,UAAM,EAAE,aAAa,OAAO,IAAI;AAEhC,UAAM,EAAE,kBAAkB,aAAa,IAAI,MAAM;AAAA,MAC/C,EAAE,sBAAsB,SAAS,OAAO,SAAS,UAAU,OAAO,SAAS;AAAA,MAC3E;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,KAAK,aAAa,QAAQ,SAAS,YAAY;AAC9D,YAAM,UAAU,KAAK,aAAa,QAAQ,UAAU,gBAAgB;AACpE,YAAM,WAAW,MAAM,OAAO,IAAI,SAAS,cAAc,EAAE,QAAQ,YAAY,IAAI,MAAS;AAE5F,YAAM,gBAAgB,SAAS,cAAc;AAC7C,YAAM,aAAa,SAAS,MAAM;AAClC,YAAM,aAA0C,cAAc;AAAA,QAAI,CAAC,cACjE,mBAAmB,SAAS;AAAA,MAC9B;AAEA,aAAO,qBAAqB;AAAA,QAC1B;AAAA,QACA,SAAS,OAAO;AAAA,QAChB;AAAA,QACA,aAAa,WAAW;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,oBAAoB,OAAO;AAAA,QAC/B,WAAW;AAAA,QACX,aAAa,EAAE,QAAQ,OAAO,OAAO;AAAA,QACrC,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,aACN,QACA,UACA,kBACgC;AAChC,UAAM,eAAe;AAAA,MACnB,SAAS;AAAA,MACT,kBAAkB;AAAA,IACpB;AAEA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,GAAI,QAAQ,YAAY,IAAI,eAAe,CAAC;AAAA,IAC9C;AAAA,EACF;AAAA,EAEQ,aACN,QACA,cAC+C;AAC/C,UAAM,kBAAkB,qBAAqB,QAAQ,YAAY;AACjE,WAAO,IAAI,KAAK,YAAY,iBAAiB,OAAO,WAAW;AAAA,EACjE;AACF;","names":[]}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
buildEmbeddingResult,
|
|
4
|
-
hasKeys,
|
|
5
|
-
normalizeEmbedding,
|
|
6
|
-
prepareEmbeddingCall
|
|
7
|
-
} from "./chunk-3JJ7OXMW.js";
|
|
8
|
-
import {
|
|
9
|
-
VERSION,
|
|
10
|
-
convertToAISDKError,
|
|
11
|
-
deepMerge
|
|
12
|
-
} from "./chunk-JV2ULRVE.js";
|
|
13
|
-
|
|
14
|
-
// src/orchestration-embedding-model-strategy.ts
|
|
15
|
-
var OrchestrationEmbeddingModelStrategy = class {
|
|
16
|
-
ClientClass;
|
|
17
|
-
constructor(ClientClass) {
|
|
18
|
-
this.ClientClass = ClientClass;
|
|
19
|
-
}
|
|
20
|
-
async doEmbed(config, settings, options, maxEmbeddingsPerCall) {
|
|
21
|
-
const { abortSignal, values } = options;
|
|
22
|
-
const { embeddingOptions, providerName } = await prepareEmbeddingCall(
|
|
23
|
-
{ maxEmbeddingsPerCall, modelId: config.modelId, provider: config.provider },
|
|
24
|
-
options
|
|
25
|
-
);
|
|
26
|
-
const embeddingType = embeddingOptions?.type ?? settings.type ?? "text";
|
|
27
|
-
try {
|
|
28
|
-
const client = this.createClient(
|
|
29
|
-
config,
|
|
30
|
-
settings.modelParams,
|
|
31
|
-
embeddingOptions?.modelParams,
|
|
32
|
-
settings.modelVersion,
|
|
33
|
-
settings.masking
|
|
34
|
-
);
|
|
35
|
-
const response = await client.embed(
|
|
36
|
-
{ input: values, type: embeddingType },
|
|
37
|
-
abortSignal ? { signal: abortSignal } : void 0
|
|
38
|
-
);
|
|
39
|
-
const embeddingData = response.getEmbeddings();
|
|
40
|
-
const tokenUsage = response.getTokenUsage();
|
|
41
|
-
const sortedEmbeddings = [...embeddingData].sort((a, b) => a.index - b.index);
|
|
42
|
-
const embeddings = sortedEmbeddings.map(
|
|
43
|
-
(data) => normalizeEmbedding(data.embedding)
|
|
44
|
-
);
|
|
45
|
-
return buildEmbeddingResult({
|
|
46
|
-
embeddings,
|
|
47
|
-
modelId: config.modelId,
|
|
48
|
-
providerName,
|
|
49
|
-
totalTokens: tokenUsage.total_tokens,
|
|
50
|
-
version: VERSION
|
|
51
|
-
});
|
|
52
|
-
} catch (error) {
|
|
53
|
-
throw convertToAISDKError(error, {
|
|
54
|
-
operation: "doEmbed",
|
|
55
|
-
requestBody: { values: values.length },
|
|
56
|
-
url: "sap-ai:orchestration/embeddings"
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
createClient(config, settingsModelParams, perCallModelParams, modelVersion, masking) {
|
|
61
|
-
const mergedParams = deepMerge(settingsModelParams ?? {}, perCallModelParams ?? {});
|
|
62
|
-
const embeddingConfig = {
|
|
63
|
-
model: {
|
|
64
|
-
name: config.modelId,
|
|
65
|
-
...hasKeys(mergedParams) ? { params: mergedParams } : {},
|
|
66
|
-
...modelVersion ? { version: modelVersion } : {}
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
const moduleConfig = {
|
|
70
|
-
embeddings: embeddingConfig,
|
|
71
|
-
...masking && hasKeys(masking) ? { masking } : {}
|
|
72
|
-
};
|
|
73
|
-
return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
export {
|
|
77
|
-
OrchestrationEmbeddingModelStrategy
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=orchestration-embedding-model-strategy-QRHQIEEK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/orchestration-embedding-model-strategy.ts"],"sourcesContent":["/** Orchestration embedding model strategy using `@sap-ai-sdk/orchestration`. */\nimport type {\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Embedding,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport type {\n EmbeddingModelConfig,\n EmbeddingModuleConfig,\n MaskingModule,\n OrchestrationEmbeddingClient,\n} from \"@sap-ai-sdk/orchestration\";\n\nimport type { SAPAIEmbeddingSettings } from \"./sap-ai-settings.js\";\nimport type { EmbeddingModelAPIStrategy, EmbeddingModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { deepMerge } from \"./deep-merge.js\";\nimport { convertToAISDKError } from \"./sap-ai-error.js\";\nimport {\n buildEmbeddingResult,\n hasKeys,\n normalizeEmbedding,\n prepareEmbeddingCall,\n} from \"./strategy-utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * @internal\n */\ntype OrchestrationEmbeddingClientClass = typeof OrchestrationEmbeddingClient;\n\n/**\n * @internal\n */\nexport class OrchestrationEmbeddingModelStrategy implements EmbeddingModelAPIStrategy {\n private readonly ClientClass: OrchestrationEmbeddingClientClass;\n\n constructor(ClientClass: OrchestrationEmbeddingClientClass) {\n this.ClientClass = ClientClass;\n }\n\n async doEmbed(\n config: EmbeddingModelStrategyConfig,\n settings: SAPAIEmbeddingSettings,\n options: EmbeddingModelV3CallOptions,\n maxEmbeddingsPerCall: number,\n ): Promise<EmbeddingModelV3Result> {\n const { abortSignal, values } = options;\n\n const { embeddingOptions, providerName } = await prepareEmbeddingCall(\n { maxEmbeddingsPerCall, modelId: config.modelId, provider: config.provider },\n options,\n );\n\n const embeddingType = embeddingOptions?.type ?? settings.type ?? \"text\";\n\n try {\n const client = this.createClient(\n config,\n settings.modelParams as Record<string, unknown> | undefined,\n embeddingOptions?.modelParams,\n settings.modelVersion,\n settings.masking,\n );\n\n const response = await client.embed(\n { input: values, type: embeddingType },\n abortSignal ? { signal: abortSignal } : undefined,\n );\n\n const embeddingData = response.getEmbeddings();\n const tokenUsage = response.getTokenUsage();\n const sortedEmbeddings = [...embeddingData].sort((a, b) => a.index - b.index);\n\n const embeddings: EmbeddingModelV3Embedding[] = sortedEmbeddings.map((data) =>\n normalizeEmbedding(data.embedding),\n );\n\n return buildEmbeddingResult({\n embeddings,\n modelId: config.modelId,\n providerName,\n totalTokens: tokenUsage.total_tokens,\n version: VERSION,\n });\n } catch (error) {\n throw convertToAISDKError(error, {\n operation: \"doEmbed\",\n requestBody: { values: values.length },\n url: \"sap-ai:orchestration/embeddings\",\n });\n }\n }\n\n private createClient(\n config: EmbeddingModelStrategyConfig,\n settingsModelParams?: Record<string, unknown>,\n perCallModelParams?: Record<string, unknown>,\n modelVersion?: string,\n masking?: MaskingModule,\n ): OrchestrationEmbeddingClient {\n const mergedParams = deepMerge(settingsModelParams ?? {}, perCallModelParams ?? {});\n\n const embeddingConfig: EmbeddingModelConfig = {\n model: {\n name: config.modelId,\n ...(hasKeys(mergedParams) ? { params: mergedParams } : {}),\n ...(modelVersion ? { version: modelVersion } : {}),\n },\n };\n\n const moduleConfig: EmbeddingModuleConfig = {\n embeddings: embeddingConfig,\n ...(masking && hasKeys(masking as object) ? { masking } : {}),\n };\n\n return new this.ClientClass(moduleConfig, config.deploymentConfig, config.destination);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAkCO,IAAM,sCAAN,MAA+E;AAAA,EACnE;AAAA,EAEjB,YAAY,aAAgD;AAC1D,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAM,QACJ,QACA,UACA,SACA,sBACiC;AACjC,UAAM,EAAE,aAAa,OAAO,IAAI;AAEhC,UAAM,EAAE,kBAAkB,aAAa,IAAI,MAAM;AAAA,MAC/C,EAAE,sBAAsB,SAAS,OAAO,SAAS,UAAU,OAAO,SAAS;AAAA,MAC3E;AAAA,IACF;AAEA,UAAM,gBAAgB,kBAAkB,QAAQ,SAAS,QAAQ;AAEjE,QAAI;AACF,YAAM,SAAS,KAAK;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,QACT,kBAAkB;AAAA,QAClB,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAEA,YAAM,WAAW,MAAM,OAAO;AAAA,QAC5B,EAAE,OAAO,QAAQ,MAAM,cAAc;AAAA,QACrC,cAAc,EAAE,QAAQ,YAAY,IAAI;AAAA,MAC1C;AAEA,YAAM,gBAAgB,SAAS,cAAc;AAC7C,YAAM,aAAa,SAAS,cAAc;AAC1C,YAAM,mBAAmB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAE5E,YAAM,aAA0C,iBAAiB;AAAA,QAAI,CAAC,SACpE,mBAAmB,KAAK,SAAS;AAAA,MACnC;AAEA,aAAO,qBAAqB;AAAA,QAC1B;AAAA,QACA,SAAS,OAAO;AAAA,QAChB;AAAA,QACA,aAAa,WAAW;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,oBAAoB,OAAO;AAAA,QAC/B,WAAW;AAAA,QACX,aAAa,EAAE,QAAQ,OAAO,OAAO;AAAA,QACrC,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,aACN,QACA,qBACA,oBACA,cACA,SAC8B;AAC9B,UAAM,eAAe,UAAU,uBAAuB,CAAC,GAAG,sBAAsB,CAAC,CAAC;AAElF,UAAM,kBAAwC;AAAA,MAC5C,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,GAAI,QAAQ,YAAY,IAAI,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,QACxD,GAAI,eAAe,EAAE,SAAS,aAAa,IAAI,CAAC;AAAA,MAClD;AAAA,IACF;AAEA,UAAM,eAAsC;AAAA,MAC1C,YAAY;AAAA,MACZ,GAAI,WAAW,QAAQ,OAAiB,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7D;AAEA,WAAO,IAAI,KAAK,YAAY,cAAc,OAAO,kBAAkB,OAAO,WAAW;AAAA,EACvF;AACF;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|