@mcp-abap-adt/sap-aicore-embedder 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # @mcp-abap-adt/sap-aicore-embedder
2
+
3
+ SAP AI Core embedding provider (IEmbedderBatch) for @mcp-abap-adt/llm-agent.
4
+
5
+ Generates text embeddings via SAP AI Core embedding model deployments using the @sap-ai-sdk/orchestration client.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @mcp-abap-adt/sap-aicore-embedder
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```typescript
16
+ import { SapAiCoreEmbedder } from '@mcp-abap-adt/sap-aicore-embedder';
17
+
18
+ const embedder = new SapAiCoreEmbedder({
19
+ model: 'text-embedding-3-small',
20
+ resourceGroup: 'default', // optional
21
+ });
22
+
23
+ // Embed a single text
24
+ const result = await embedder.embed('Hello, world!');
25
+ console.log(result.vector);
26
+
27
+ // Batch embed multiple texts
28
+ const results = await embedder.embedBatch(['Text 1', 'Text 2', 'Text 3']);
29
+ console.log(results.map(r => r.vector));
30
+ ```
31
+
32
+ ## Configuration
33
+
34
+ ### SapAiCoreEmbedderConfig
35
+
36
+ - `model` (required): Embedding model name (e.g., 'text-embedding-3-small')
37
+ - `resourceGroup` (optional): SAP AI Core resource group
38
+
39
+ ## Authentication
40
+
41
+ Authentication uses the `AICORE_SERVICE_KEY` environment variable, which is read automatically by the SAP AI SDK orchestration client.
42
+
43
+ ## License
44
+
45
+ MIT
@@ -0,0 +1,3 @@
1
+ export type { SapAiCoreEmbedderConfig } from './sap-ai-core-embedder.js';
2
+ export { SapAiCoreEmbedder } from './sap-ai-core-embedder.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { SapAiCoreEmbedder } from './sap-ai-core-embedder.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SAP AI Core Embedder — IEmbedderBatch implementation using @sap-ai-sdk/orchestration.
3
+ *
4
+ * Generates text embeddings via SAP AI Core embedding model deployments.
5
+ * Authentication: reads AICORE_SERVICE_KEY env var automatically (same as LLM provider).
6
+ */
7
+ import type { IEmbedderBatch, IEmbedResult } from '@mcp-abap-adt/llm-agent';
8
+ import { type CallOptions } from '@mcp-abap-adt/llm-agent';
9
+ export interface SapAiCoreEmbedderConfig {
10
+ /** Embedding model name (e.g. 'text-embedding-3-small') */
11
+ model: string;
12
+ /** SAP AI Core resource group (optional) */
13
+ resourceGroup?: string;
14
+ }
15
+ export declare class SapAiCoreEmbedder implements IEmbedderBatch {
16
+ private readonly model;
17
+ private readonly resourceGroup?;
18
+ constructor(config: SapAiCoreEmbedderConfig);
19
+ embed(text: string, _options?: CallOptions): Promise<IEmbedResult>;
20
+ embedBatch(texts: string[], _options?: CallOptions): Promise<IEmbedResult[]>;
21
+ }
22
+ //# sourceMappingURL=sap-ai-core-embedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-ai-core-embedder.d.ts","sourceRoot":"","sources":["../src/sap-ai-core-embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,yBAAyB,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;gBAE5B,MAAM,EAAE,uBAAuB;IAKrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAmClE,UAAU,CACd,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC;CAmC3B"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * SAP AI Core Embedder — IEmbedderBatch implementation using @sap-ai-sdk/orchestration.
3
+ *
4
+ * Generates text embeddings via SAP AI Core embedding model deployments.
5
+ * Authentication: reads AICORE_SERVICE_KEY env var automatically (same as LLM provider).
6
+ */
7
+ import { RagError } from '@mcp-abap-adt/llm-agent';
8
+ export class SapAiCoreEmbedder {
9
+ model;
10
+ resourceGroup;
11
+ constructor(config) {
12
+ this.model = config.model;
13
+ this.resourceGroup = config.resourceGroup;
14
+ }
15
+ async embed(text, _options) {
16
+ const { OrchestrationEmbeddingClient } = await import('@sap-ai-sdk/orchestration');
17
+ const modelName = this
18
+ .model;
19
+ const client = new OrchestrationEmbeddingClient({ embeddings: { model: { name: modelName } } }, this.resourceGroup ? { resourceGroup: this.resourceGroup } : undefined);
20
+ const response = await client.embed({ input: text });
21
+ const embeddings = response.getEmbeddings();
22
+ if (!embeddings || embeddings.length === 0) {
23
+ throw new RagError('No embeddings returned from SAP AI Core');
24
+ }
25
+ const embedding = embeddings[0].embedding;
26
+ // Handle base64-encoded embeddings
27
+ if (typeof embedding === 'string') {
28
+ const buffer = Buffer.from(embedding, 'base64');
29
+ const float32 = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
30
+ return { vector: Array.from(float32) };
31
+ }
32
+ return { vector: embedding };
33
+ }
34
+ async embedBatch(texts, _options) {
35
+ if (texts.length === 0)
36
+ return [];
37
+ const { OrchestrationEmbeddingClient } = await import('@sap-ai-sdk/orchestration');
38
+ const modelName = this
39
+ .model;
40
+ const client = new OrchestrationEmbeddingClient({ embeddings: { model: { name: modelName } } }, this.resourceGroup ? { resourceGroup: this.resourceGroup } : undefined);
41
+ const response = await client.embed({ input: texts });
42
+ const embeddings = response.getEmbeddings();
43
+ if (!embeddings || embeddings.length === 0) {
44
+ throw new RagError('No embeddings returned from SAP AI Core batch');
45
+ }
46
+ const sorted = [...embeddings].sort((a, b) => a.index - b.index);
47
+ return sorted.map((e) => {
48
+ if (typeof e.embedding === 'string') {
49
+ const buffer = Buffer.from(e.embedding, 'base64');
50
+ const float32 = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
51
+ return { vector: Array.from(float32) };
52
+ }
53
+ return { vector: e.embedding };
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=sap-ai-core-embedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-ai-core-embedder.js","sourceRoot":"","sources":["../src/sap-ai-core-embedder.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@mcp-abap-adt/sap-aicore-embedder",
3
+ "version": "11.0.0",
4
+ "description": "SAP AI Core embedding provider (IEmbedder) for @mcp-abap-adt/llm-agent.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "clean": "tsc -p tsconfig.json --clean",
23
+ "test": "node --import tsx/esm --test --test-reporter=spec 'src/**/*.test.ts'"
24
+ },
25
+ "dependencies": {
26
+ "@mcp-abap-adt/llm-agent": "*",
27
+ "@sap-ai-sdk/orchestration": "^2.9.0"
28
+ },
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/fr0ster/llm-agent.git"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ }
37
+ }