@mcp-abap-adt/llm-agent 12.0.2 → 12.0.3

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.
Files changed (74) hide show
  1. package/dist/interfaces/agent-contracts.d.ts +25 -0
  2. package/dist/interfaces/agent-contracts.d.ts.map +1 -1
  3. package/dist/interfaces/agent-contracts.js.map +1 -1
  4. package/dist/interfaces/builder.d.ts +55 -0
  5. package/dist/interfaces/builder.d.ts.map +1 -0
  6. package/dist/interfaces/builder.js +2 -0
  7. package/dist/interfaces/builder.js.map +1 -0
  8. package/dist/interfaces/health.d.ts +25 -0
  9. package/dist/interfaces/health.d.ts.map +1 -0
  10. package/dist/interfaces/health.js +2 -0
  11. package/dist/interfaces/health.js.map +1 -0
  12. package/dist/interfaces/index.d.ts +13 -2
  13. package/dist/interfaces/index.d.ts.map +1 -1
  14. package/dist/interfaces/index.js +1 -0
  15. package/dist/interfaces/index.js.map +1 -1
  16. package/dist/interfaces/mcp-connection-strategy.d.ts +26 -0
  17. package/dist/interfaces/mcp-connection-strategy.d.ts.map +1 -0
  18. package/dist/interfaces/mcp-connection-strategy.js +2 -0
  19. package/dist/interfaces/mcp-connection-strategy.js.map +1 -0
  20. package/dist/interfaces/metrics.d.ts +58 -0
  21. package/dist/interfaces/metrics.d.ts.map +1 -0
  22. package/dist/interfaces/metrics.js +9 -0
  23. package/dist/interfaces/metrics.js.map +1 -0
  24. package/dist/interfaces/model-resolver.d.ts +9 -0
  25. package/dist/interfaces/model-resolver.d.ts.map +1 -0
  26. package/dist/interfaces/model-resolver.js +2 -0
  27. package/dist/interfaces/model-resolver.js.map +1 -0
  28. package/dist/interfaces/pipeline.d.ts +52 -0
  29. package/dist/interfaces/pipeline.d.ts.map +1 -0
  30. package/dist/interfaces/pipeline.js +9 -0
  31. package/dist/interfaces/pipeline.js.map +1 -0
  32. package/dist/interfaces/plugin.d.ts +81 -1
  33. package/dist/interfaces/plugin.d.ts.map +1 -1
  34. package/dist/interfaces/reranker.d.ts +5 -0
  35. package/dist/interfaces/reranker.d.ts.map +1 -0
  36. package/dist/interfaces/reranker.js +2 -0
  37. package/dist/interfaces/reranker.js.map +1 -0
  38. package/dist/interfaces/session.d.ts +7 -0
  39. package/dist/interfaces/session.d.ts.map +1 -0
  40. package/dist/interfaces/session.js +2 -0
  41. package/dist/interfaces/session.js.map +1 -0
  42. package/dist/interfaces/tracer.d.ts +17 -0
  43. package/dist/interfaces/tracer.d.ts.map +1 -0
  44. package/dist/interfaces/tracer.js +2 -0
  45. package/dist/interfaces/tracer.js.map +1 -0
  46. package/dist/interfaces/validator.d.ts +18 -0
  47. package/dist/interfaces/validator.d.ts.map +1 -0
  48. package/dist/interfaces/validator.js +8 -0
  49. package/dist/interfaces/validator.js.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/rag/embedder-factories.d.ts +0 -9
  52. package/dist/rag/embedder-factories.d.ts.map +0 -1
  53. package/dist/rag/embedder-factories.js +0 -33
  54. package/dist/rag/embedder-factories.js.map +0 -1
  55. package/dist/rag/ollama-rag.d.ts +0 -26
  56. package/dist/rag/ollama-rag.d.ts.map +0 -1
  57. package/dist/rag/ollama-rag.js +0 -93
  58. package/dist/rag/ollama-rag.js.map +0 -1
  59. package/dist/rag/openai-embedder.d.ts +0 -22
  60. package/dist/rag/openai-embedder.d.ts.map +0 -1
  61. package/dist/rag/openai-embedder.js +0 -122
  62. package/dist/rag/openai-embedder.js.map +0 -1
  63. package/dist/rag/providers/qdrant-rag-provider.d.ts +0 -39
  64. package/dist/rag/providers/qdrant-rag-provider.d.ts.map +0 -1
  65. package/dist/rag/providers/qdrant-rag-provider.js +0 -93
  66. package/dist/rag/providers/qdrant-rag-provider.js.map +0 -1
  67. package/dist/rag/qdrant-rag.d.ts +0 -31
  68. package/dist/rag/qdrant-rag.d.ts.map +0 -1
  69. package/dist/rag/qdrant-rag.js +0 -300
  70. package/dist/rag/qdrant-rag.js.map +0 -1
  71. package/dist/rag/sap-ai-core-embedder.d.ts +0 -22
  72. package/dist/rag/sap-ai-core-embedder.d.ts.map +0 -1
  73. package/dist/rag/sap-ai-core-embedder.js +0 -56
  74. package/dist/rag/sap-ai-core-embedder.js.map +0 -1
@@ -1,300 +0,0 @@
1
- import { RagError, } from '../interfaces/types.js';
2
- import { FallbackQueryEmbedding } from './query-embedding.js';
3
- /**
4
- * Derive a deterministic UUID from a stable string key using SHA-256.
5
- * The first 16 bytes of the hash are formatted as a UUID v5-style string.
6
- */
7
- async function deterministicUUID(key) {
8
- const data = new TextEncoder().encode(key);
9
- const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', data);
10
- const bytes = new Uint8Array(hashBuffer, 0, 16);
11
- const hex = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');
12
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
13
- }
14
- export class QdrantRag {
15
- url;
16
- collectionName;
17
- embedder;
18
- apiKey;
19
- timeoutMs;
20
- collectionEnsured = false;
21
- constructor(config) {
22
- this.url = config.url.replace(/\/+$/, '');
23
- this.collectionName = config.collectionName;
24
- this.embedder = config.embedder;
25
- this.apiKey = config.apiKey;
26
- this.timeoutMs = config.timeoutMs ?? 30_000;
27
- }
28
- _headers() {
29
- const h = { 'Content-Type': 'application/json' };
30
- if (this.apiKey)
31
- h['api-key'] = this.apiKey;
32
- return h;
33
- }
34
- async _fetch(path, init, signal) {
35
- const ctrl = new AbortController();
36
- const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);
37
- if (signal) {
38
- signal.addEventListener('abort', () => ctrl.abort(signal.reason), {
39
- once: true,
40
- });
41
- }
42
- try {
43
- return await fetch(`${this.url}${path}`, {
44
- ...init,
45
- signal: ctrl.signal,
46
- headers: { ...this._headers(), ...(init.headers ?? {}) },
47
- });
48
- }
49
- finally {
50
- clearTimeout(timer);
51
- }
52
- }
53
- async _ensureCollection(vectorSize, signal) {
54
- if (this.collectionEnsured)
55
- return;
56
- const res = await this._fetch(`/collections/${this.collectionName}`, { method: 'GET' }, signal);
57
- if (res.ok) {
58
- this.collectionEnsured = true;
59
- return;
60
- }
61
- // Collection doesn't exist — create it
62
- const createRes = await this._fetch(`/collections/${this.collectionName}`, {
63
- method: 'PUT',
64
- body: JSON.stringify({
65
- vectors: { size: vectorSize, distance: 'Cosine' },
66
- }),
67
- }, signal);
68
- if (!createRes.ok) {
69
- const text = await createRes.text();
70
- throw new RagError(`Failed to create collection: ${text}`, 'UPSERT_ERROR');
71
- }
72
- this.collectionEnsured = true;
73
- }
74
- async upsertKnownVector(text, vector, metadata, options) {
75
- try {
76
- await this._ensureCollection(vector.length, options?.signal);
77
- const pointId = metadata?.id
78
- ? await deterministicUUID(metadata.id)
79
- : crypto.randomUUID();
80
- const payload = {
81
- text,
82
- ...metadata,
83
- };
84
- const res = await this._fetch(`/collections/${this.collectionName}/points`, {
85
- method: 'PUT',
86
- body: JSON.stringify({
87
- points: [{ id: pointId, vector, payload }],
88
- }),
89
- }, options?.signal);
90
- if (!res.ok) {
91
- const body = await res.text();
92
- return {
93
- ok: false,
94
- error: new RagError(`Qdrant upsert failed: ${body}`, 'UPSERT_ERROR'),
95
- };
96
- }
97
- return { ok: true, value: undefined };
98
- }
99
- catch (err) {
100
- if (err instanceof RagError)
101
- return { ok: false, error: err };
102
- return { ok: false, error: new RagError(String(err), 'UPSERT_ERROR') };
103
- }
104
- }
105
- async upsert(text, metadata, options) {
106
- if (options?.signal?.aborted) {
107
- return { ok: false, error: new RagError('Aborted', 'ABORTED') };
108
- }
109
- try {
110
- const { vector } = await this.embedder.embed(text, options);
111
- return this.upsertKnownVector(text, vector, metadata, options);
112
- }
113
- catch (err) {
114
- if (err instanceof RagError)
115
- return { ok: false, error: err };
116
- return { ok: false, error: new RagError(String(err), 'UPSERT_ERROR') };
117
- }
118
- }
119
- async upsertPrecomputed(text, vector, metadata, options) {
120
- if (options?.signal?.aborted) {
121
- return { ok: false, error: new RagError('Aborted', 'ABORTED') };
122
- }
123
- return this.upsertKnownVector(text, vector, metadata, options);
124
- }
125
- async query(embedding, k, options) {
126
- if (options?.signal?.aborted) {
127
- return { ok: false, error: new RagError('Aborted', 'ABORTED') };
128
- }
129
- try {
130
- const safe = new FallbackQueryEmbedding(embedding, this.embedder);
131
- const vector = await safe.toVector();
132
- const must = [];
133
- const targetNamespace = options?.ragFilter?.namespace;
134
- if (targetNamespace !== undefined) {
135
- must.push({ key: 'namespace', match: { value: targetNamespace } });
136
- }
137
- const nowSecs = Math.floor(Date.now() / 1000);
138
- must.push({ key: 'ttl', range: { gt: nowSecs } });
139
- const body = {
140
- vector,
141
- limit: k,
142
- with_payload: true,
143
- };
144
- if (must.length > 0) {
145
- body.filter = {
146
- should: [
147
- { must },
148
- // Also match points without TTL set (no ttl field)
149
- {
150
- must_not: [{ key: 'ttl', range: { gte: 0 } }],
151
- ...(targetNamespace !== undefined
152
- ? {
153
- must: [
154
- { key: 'namespace', match: { value: targetNamespace } },
155
- ],
156
- }
157
- : {}),
158
- },
159
- ],
160
- };
161
- }
162
- const res = await this._fetch(`/collections/${this.collectionName}/points/search`, { method: 'POST', body: JSON.stringify(body) }, options?.signal);
163
- if (!res.ok) {
164
- const errBody = await res.text();
165
- return {
166
- ok: false,
167
- error: new RagError(`Qdrant query failed: ${errBody}`, 'QUERY_ERROR'),
168
- };
169
- }
170
- const json = (await res.json());
171
- const results = (json.result ?? []).map((hit) => {
172
- const { text: hitText, ...rest } = hit.payload;
173
- return {
174
- text: String(hitText ?? ''),
175
- metadata: rest,
176
- score: hit.score,
177
- };
178
- });
179
- return { ok: true, value: results };
180
- }
181
- catch (err) {
182
- if (err instanceof RagError)
183
- return { ok: false, error: err };
184
- return { ok: false, error: new RagError(String(err), 'QUERY_ERROR') };
185
- }
186
- }
187
- async getById(id, options) {
188
- if (options?.signal?.aborted) {
189
- return { ok: false, error: new RagError('Aborted', 'ABORTED') };
190
- }
191
- try {
192
- const pointId = await deterministicUUID(id);
193
- const res = await this._fetch(`/collections/${this.collectionName}/points`, {
194
- method: 'POST',
195
- body: JSON.stringify({ ids: [pointId], with_payload: true }),
196
- }, options?.signal);
197
- if (!res.ok) {
198
- const body = await res.text();
199
- return {
200
- ok: false,
201
- error: new RagError(`Qdrant retrieve failed: ${body}`, 'QUERY_ERROR'),
202
- };
203
- }
204
- const json = (await res.json());
205
- const hit = json.result?.[0];
206
- if (!hit)
207
- return { ok: true, value: null };
208
- const { text: hitText, ...rest } = hit.payload;
209
- return {
210
- ok: true,
211
- value: {
212
- text: String(hitText ?? ''),
213
- metadata: rest,
214
- score: 1,
215
- },
216
- };
217
- }
218
- catch (err) {
219
- if (err instanceof RagError)
220
- return { ok: false, error: err };
221
- return { ok: false, error: new RagError(String(err), 'QUERY_ERROR') };
222
- }
223
- }
224
- async healthCheck(options) {
225
- try {
226
- const res = await this._fetch(`/collections/${this.collectionName}`, { method: 'GET' }, options?.signal);
227
- if (!res.ok) {
228
- return {
229
- ok: false,
230
- error: new RagError(`Qdrant collection not accessible: HTTP ${res.status}`, 'HEALTH_CHECK_ERROR'),
231
- };
232
- }
233
- return { ok: true, value: undefined };
234
- }
235
- catch (err) {
236
- return {
237
- ok: false,
238
- error: new RagError(`Qdrant health check failed: ${String(err)}`, 'HEALTH_CHECK_ERROR'),
239
- };
240
- }
241
- }
242
- writer() {
243
- return {
244
- upsertRaw: async (id, text, metadata, options) => {
245
- const res = await this.upsert(text, { ...metadata, id }, options);
246
- return res.ok ? { ok: true, value: undefined } : res;
247
- },
248
- deleteByIdRaw: async (id, options) => {
249
- try {
250
- const pointId = await deterministicUUID(id);
251
- const res = await this._fetch(`/collections/${this.collectionName}/points/delete`, {
252
- method: 'POST',
253
- body: JSON.stringify({ points: [pointId] }),
254
- }, options?.signal);
255
- if (!res.ok) {
256
- const body = await res.text();
257
- return {
258
- ok: false,
259
- error: new RagError(`Qdrant delete failed: ${body}`, 'DELETE_ERROR'),
260
- };
261
- }
262
- return { ok: true, value: true };
263
- }
264
- catch (err) {
265
- if (err instanceof RagError)
266
- return { ok: false, error: err };
267
- return {
268
- ok: false,
269
- error: new RagError(String(err), 'DELETE_ERROR'),
270
- };
271
- }
272
- },
273
- clearAll: async () => {
274
- try {
275
- const res = await this._fetch(`/collections/${this.collectionName}/points/delete`, {
276
- method: 'POST',
277
- body: JSON.stringify({ filter: {} }),
278
- });
279
- if (!res.ok) {
280
- const body = await res.text();
281
- return {
282
- ok: false,
283
- error: new RagError(`Qdrant clear failed: ${body}`, 'CLEAR_ERROR'),
284
- };
285
- }
286
- return { ok: true, value: undefined };
287
- }
288
- catch (err) {
289
- if (err instanceof RagError)
290
- return { ok: false, error: err };
291
- return { ok: false, error: new RagError(String(err), 'CLEAR_ERROR') };
292
- }
293
- },
294
- upsertPrecomputedRaw: async (id, text, vector, metadata, options) => {
295
- return this.upsertPrecomputed(text, vector, { ...metadata, id }, options);
296
- },
297
- };
298
- }
299
- }
300
- //# sourceMappingURL=qdrant-rag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qdrant-rag.js","sourceRoot":"","sources":["../../src/rag/qdrant-rag.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * SAP AI Core Embedder — IEmbedder 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 '../interfaces/rag.js';
8
- import type { CallOptions } from '../interfaces/types.js';
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"sap-ai-core-embedder.d.ts","sourceRoot":"","sources":["../../src/rag/sap-ai-core-embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * SAP AI Core Embedder — IEmbedder 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
- export class SapAiCoreEmbedder {
8
- model;
9
- resourceGroup;
10
- constructor(config) {
11
- this.model = config.model;
12
- this.resourceGroup = config.resourceGroup;
13
- }
14
- async embed(text, _options) {
15
- const { OrchestrationEmbeddingClient } = await import('@sap-ai-sdk/orchestration');
16
- const modelName = this
17
- .model;
18
- const client = new OrchestrationEmbeddingClient({ embeddings: { model: { name: modelName } } }, this.resourceGroup ? { resourceGroup: this.resourceGroup } : undefined);
19
- const response = await client.embed({ input: text });
20
- const embeddings = response.getEmbeddings();
21
- if (!embeddings || embeddings.length === 0) {
22
- throw new Error('No embeddings returned from SAP AI Core');
23
- }
24
- const embedding = embeddings[0].embedding;
25
- // Handle base64-encoded embeddings
26
- if (typeof embedding === 'string') {
27
- const buffer = Buffer.from(embedding, 'base64');
28
- const float32 = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
29
- return { vector: Array.from(float32) };
30
- }
31
- return { vector: embedding };
32
- }
33
- async embedBatch(texts, _options) {
34
- if (texts.length === 0)
35
- return [];
36
- const { OrchestrationEmbeddingClient } = await import('@sap-ai-sdk/orchestration');
37
- const modelName = this
38
- .model;
39
- const client = new OrchestrationEmbeddingClient({ embeddings: { model: { name: modelName } } }, this.resourceGroup ? { resourceGroup: this.resourceGroup } : undefined);
40
- const response = await client.embed({ input: texts });
41
- const embeddings = response.getEmbeddings();
42
- if (!embeddings || embeddings.length === 0) {
43
- throw new Error('No embeddings returned from SAP AI Core batch');
44
- }
45
- const sorted = [...embeddings].sort((a, b) => a.index - b.index);
46
- return sorted.map((e) => {
47
- if (typeof e.embedding === 'string') {
48
- const buffer = Buffer.from(e.embedding, 'base64');
49
- const float32 = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
50
- return { vector: Array.from(float32) };
51
- }
52
- return { vector: e.embedding };
53
- });
54
- }
55
- }
56
- //# sourceMappingURL=sap-ai-core-embedder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sap-ai-core-embedder.js","sourceRoot":"","sources":["../../src/rag/sap-ai-core-embedder.ts"],"names":[],"mappings":"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"}