@mcp-abap-adt/llm-agent-libs 27.0.1 → 29.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/package.json +10 -8
- package/dist/providers.d.ts +0 -58
- package/dist/providers.d.ts.map +0 -1
- package/dist/providers.js +0 -228
- package/dist/providers.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-abap-adt/llm-agent-libs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "29.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,17 +33,19 @@
|
|
|
33
33
|
"test": "node --import tsx/esm --test --test-reporter=spec 'src/**/*.test.ts'"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@mcp-abap-adt/interfaces-auth": "^1.1.0",
|
|
37
|
-
"@mcp-abap-adt/llm-agent": "^27.0.1",
|
|
38
|
-
"@mcp-abap-adt/llm-agent-mcp": "^27.0.1",
|
|
39
|
-
"@mcp-abap-adt/llm-agent-rag": "^27.0.1",
|
|
40
36
|
"@opentelemetry/api": "^1.9.1",
|
|
41
37
|
"dotenv": "^17.3.1",
|
|
42
|
-
"yaml": "^2.9.
|
|
43
|
-
"zod": "^4.5
|
|
38
|
+
"yaml": "^2.9.1",
|
|
39
|
+
"zod": "^4.6.5"
|
|
44
40
|
},
|
|
45
41
|
"publishConfig": {
|
|
46
42
|
"access": "public"
|
|
47
43
|
},
|
|
48
|
-
"license": "LGPL-3.0-only"
|
|
44
|
+
"license": "LGPL-3.0-only",
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@mcp-abap-adt/interfaces-auth": "^2.1.0",
|
|
47
|
+
"@mcp-abap-adt/llm-agent": "^29.0.0",
|
|
48
|
+
"@mcp-abap-adt/llm-agent-mcp": "^29.0.0",
|
|
49
|
+
"@mcp-abap-adt/llm-agent-rag": "^29.0.0"
|
|
50
|
+
}
|
|
49
51
|
}
|
package/dist/providers.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provider resolution — the composition root for concrete LLM implementations.
|
|
3
|
-
*
|
|
4
|
-
* This module is the ONLY place that knows about concrete LLM providers.
|
|
5
|
-
* Embedder and RAG factories live in @mcp-abap-adt/llm-agent-rag.
|
|
6
|
-
*
|
|
7
|
-
* LLM provider packages are optional peers loaded via dynamic import().
|
|
8
|
-
* MissingProviderError is thrown when a required peer is not installed.
|
|
9
|
-
*/
|
|
10
|
-
import type { ILlm, IModelResolver, IThrottleStrategy } from '@mcp-abap-adt/llm-agent';
|
|
11
|
-
import type { SapAICoreCredentials } from '@mcp-abap-adt/sap-aicore-llm';
|
|
12
|
-
export interface MakeLlmConfig {
|
|
13
|
-
provider: 'deepseek' | 'openai' | 'anthropic' | 'sap-ai-sdk' | 'ollama';
|
|
14
|
-
apiKey?: string;
|
|
15
|
-
/** Custom base URL for OpenAI-compatible endpoints (Azure OpenAI, Ollama, vLLM, etc.). */
|
|
16
|
-
baseURL?: string;
|
|
17
|
-
model?: string;
|
|
18
|
-
temperature?: number;
|
|
19
|
-
maxTokens?: number;
|
|
20
|
-
resourceGroup?: string;
|
|
21
|
-
credentials?: SapAICoreCredentials;
|
|
22
|
-
/**
|
|
23
|
-
* What the provider does when a server throttles it: `maxAttempts` and a
|
|
24
|
-
* `strategy`. Omit and nothing waits — the failure comes back carrying what
|
|
25
|
-
* the server said, and the caller decides.
|
|
26
|
-
*
|
|
27
|
-
* There is no duration here. How long anyone may be held depends on who is
|
|
28
|
-
* waiting at the other end, which this library cannot see; a caller with a
|
|
29
|
-
* deadline expresses it as an `AbortSignal`.
|
|
30
|
-
*/
|
|
31
|
-
whenThrottled?: IThrottleStrategy;
|
|
32
|
-
/** When false, streamChat() is replaced with chat() yielding a single chunk. Default: true. */
|
|
33
|
-
streaming?: boolean;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Create an ILlm from a declarative provider config.
|
|
37
|
-
* This is the only function that knows about concrete LLM implementations.
|
|
38
|
-
* Provider packages are loaded via dynamic import (optional peers).
|
|
39
|
-
*/
|
|
40
|
-
export declare function makeLlm(cfg: MakeLlmConfig, temperature: number): Promise<ILlm>;
|
|
41
|
-
/**
|
|
42
|
-
* Create a default DeepSeek-based ILlm from simple config (apiKey + model).
|
|
43
|
-
* Used by the flat YAML / CLI path.
|
|
44
|
-
*/
|
|
45
|
-
export declare function makeDefaultLlm(apiKey: string, model: string, temperature: number): Promise<ILlm>;
|
|
46
|
-
/**
|
|
47
|
-
* Default IModelResolver — delegates to makeLlm() with the given provider settings.
|
|
48
|
-
* Returns fully constructed ILlm instances ready for use with SmartAgent.reconfigure().
|
|
49
|
-
*/
|
|
50
|
-
export declare class DefaultModelResolver implements IModelResolver {
|
|
51
|
-
private readonly providerConfig;
|
|
52
|
-
private readonly defaults;
|
|
53
|
-
constructor(providerConfig: Omit<MakeLlmConfig, 'model'>, defaults?: {
|
|
54
|
-
temperature?: number;
|
|
55
|
-
});
|
|
56
|
-
resolve(modelName: string, role: 'main' | 'classifier' | 'helper'): Promise<ILlm>;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=providers.d.ts.map
|
package/dist/providers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,iBAAiB,EAElB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAyBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,+FAA+F;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuHD;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAwHf;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAEvD,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAC5C,QAAQ,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAGpD,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GACrC,OAAO,CAAC,IAAI,CAAC;CAKjB"}
|
package/dist/providers.js
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provider resolution — the composition root for concrete LLM implementations.
|
|
3
|
-
*
|
|
4
|
-
* This module is the ONLY place that knows about concrete LLM providers.
|
|
5
|
-
* Embedder and RAG factories live in @mcp-abap-adt/llm-agent-rag.
|
|
6
|
-
*
|
|
7
|
-
* LLM provider packages are optional peers loaded via dynamic import().
|
|
8
|
-
* MissingProviderError is thrown when a required peer is not installed.
|
|
9
|
-
*/
|
|
10
|
-
import { MissingProviderError, staticApiKey } from '@mcp-abap-adt/llm-agent';
|
|
11
|
-
import { LlmAdapter } from './adapters/llm-adapter.js';
|
|
12
|
-
import { LlmProviderBridge } from './adapters/llm-provider-bridge.js';
|
|
13
|
-
import { NonStreamingLlm } from './adapters/non-streaming-llm.js';
|
|
14
|
-
function shimCredential(apiKey) {
|
|
15
|
-
return apiKey ? staticApiKey(apiKey) : undefined;
|
|
16
|
-
}
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Per-provider dynamic loaders
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
function isMissingOptionalPeer(err, pkg) {
|
|
21
|
-
if (!(err instanceof Error))
|
|
22
|
-
return false;
|
|
23
|
-
const code = err.code;
|
|
24
|
-
if (code === 'ERR_MODULE_NOT_FOUND')
|
|
25
|
-
return true;
|
|
26
|
-
if (err.message.includes(pkg) &&
|
|
27
|
-
err.message.toLowerCase().includes('cannot find'))
|
|
28
|
-
return true;
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
async function loadOpenAI() {
|
|
32
|
-
const pkg = '@mcp-abap-adt/openai-llm';
|
|
33
|
-
try {
|
|
34
|
-
const mod = await import(pkg);
|
|
35
|
-
return mod.OpenAIProvider;
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
if (isMissingOptionalPeer(err, pkg))
|
|
39
|
-
throw new MissingProviderError(pkg, 'openai');
|
|
40
|
-
throw err;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async function loadDeepSeek() {
|
|
44
|
-
const pkg = '@mcp-abap-adt/deepseek-llm';
|
|
45
|
-
try {
|
|
46
|
-
const mod = await import(pkg);
|
|
47
|
-
return mod.DeepSeekProvider;
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
if (isMissingOptionalPeer(err, pkg))
|
|
51
|
-
throw new MissingProviderError(pkg, 'deepseek');
|
|
52
|
-
throw err;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
async function loadOllama() {
|
|
56
|
-
const pkg = '@mcp-abap-adt/ollama-llm';
|
|
57
|
-
try {
|
|
58
|
-
const mod = await import(pkg);
|
|
59
|
-
return mod.OllamaProvider;
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
if (isMissingOptionalPeer(err, pkg))
|
|
63
|
-
throw new MissingProviderError(pkg, 'ollama');
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async function loadAnthropic() {
|
|
68
|
-
const pkg = '@mcp-abap-adt/anthropic-llm';
|
|
69
|
-
try {
|
|
70
|
-
const mod = await import(pkg);
|
|
71
|
-
return mod.AnthropicProvider;
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
if (isMissingOptionalPeer(err, pkg))
|
|
75
|
-
throw new MissingProviderError(pkg, 'anthropic');
|
|
76
|
-
throw err;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async function loadSapAiCore() {
|
|
80
|
-
const pkg = '@mcp-abap-adt/sap-aicore-llm';
|
|
81
|
-
try {
|
|
82
|
-
const mod = await import(pkg);
|
|
83
|
-
return mod.SapCoreAIProvider;
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
if (isMissingOptionalPeer(err, pkg))
|
|
87
|
-
throw new MissingProviderError(pkg, 'sap-ai-sdk');
|
|
88
|
-
throw err;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// ---------------------------------------------------------------------------
|
|
92
|
-
// makeLlm — async, dynamic-import based
|
|
93
|
-
// ---------------------------------------------------------------------------
|
|
94
|
-
/**
|
|
95
|
-
* Create an ILlm from a declarative provider config.
|
|
96
|
-
* This is the only function that knows about concrete LLM implementations.
|
|
97
|
-
* Provider packages are loaded via dynamic import (optional peers).
|
|
98
|
-
*/
|
|
99
|
-
export async function makeLlm(cfg, temperature) {
|
|
100
|
-
// Coerce numeric fields that may arrive as strings from ${ENV_VAR} substitution
|
|
101
|
-
const maxTokens = cfg.maxTokens != null ? Number(cfg.maxTokens) : undefined;
|
|
102
|
-
let llm;
|
|
103
|
-
switch (cfg.provider) {
|
|
104
|
-
case 'deepseek': {
|
|
105
|
-
const DeepSeekProvider = await loadDeepSeek();
|
|
106
|
-
const provider = new DeepSeekProvider({
|
|
107
|
-
credential: shimCredential(cfg.apiKey),
|
|
108
|
-
baseURL: cfg.baseURL,
|
|
109
|
-
model: cfg.model,
|
|
110
|
-
temperature,
|
|
111
|
-
maxTokens,
|
|
112
|
-
whenThrottled: cfg.whenThrottled,
|
|
113
|
-
});
|
|
114
|
-
llm = new LlmAdapter(new LlmProviderBridge(provider), {
|
|
115
|
-
model: provider.model,
|
|
116
|
-
getModels: () => provider.getModels?.() ?? Promise.resolve([]),
|
|
117
|
-
getEmbeddingModels: () => provider.getEmbeddingModels?.() ?? Promise.resolve([]),
|
|
118
|
-
});
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
case 'ollama': {
|
|
122
|
-
const OllamaProvider = await loadOllama();
|
|
123
|
-
const provider = new OllamaProvider({
|
|
124
|
-
credential: shimCredential(cfg.apiKey),
|
|
125
|
-
baseURL: cfg.baseURL,
|
|
126
|
-
model: cfg.model,
|
|
127
|
-
temperature,
|
|
128
|
-
maxTokens,
|
|
129
|
-
whenThrottled: cfg.whenThrottled,
|
|
130
|
-
});
|
|
131
|
-
llm = new LlmAdapter(new LlmProviderBridge(provider), {
|
|
132
|
-
model: provider.model,
|
|
133
|
-
getModels: () => provider.getModels?.() ?? Promise.resolve([]),
|
|
134
|
-
getEmbeddingModels: () => provider.getEmbeddingModels?.() ?? Promise.resolve([]),
|
|
135
|
-
});
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
case 'openai': {
|
|
139
|
-
const OpenAIProvider = await loadOpenAI();
|
|
140
|
-
const provider = new OpenAIProvider({
|
|
141
|
-
credential: shimCredential(cfg.apiKey),
|
|
142
|
-
baseURL: cfg.baseURL,
|
|
143
|
-
model: cfg.model,
|
|
144
|
-
temperature,
|
|
145
|
-
maxTokens,
|
|
146
|
-
whenThrottled: cfg.whenThrottled,
|
|
147
|
-
});
|
|
148
|
-
llm = new LlmAdapter(new LlmProviderBridge(provider), {
|
|
149
|
-
model: provider.model,
|
|
150
|
-
getModels: () => provider.getModels?.() ?? Promise.resolve([]),
|
|
151
|
-
getEmbeddingModels: () => provider.getEmbeddingModels?.() ?? Promise.resolve([]),
|
|
152
|
-
});
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
case 'anthropic': {
|
|
156
|
-
const AnthropicProvider = await loadAnthropic();
|
|
157
|
-
const provider = new AnthropicProvider({
|
|
158
|
-
credential: shimCredential(cfg.apiKey),
|
|
159
|
-
baseURL: cfg.baseURL,
|
|
160
|
-
model: cfg.model,
|
|
161
|
-
temperature,
|
|
162
|
-
maxTokens,
|
|
163
|
-
whenThrottled: cfg.whenThrottled,
|
|
164
|
-
});
|
|
165
|
-
llm = new LlmAdapter(new LlmProviderBridge(provider), {
|
|
166
|
-
model: provider.model,
|
|
167
|
-
getModels: () => provider.getModels?.() ?? Promise.resolve([]),
|
|
168
|
-
getEmbeddingModels: () => provider.getEmbeddingModels?.() ?? Promise.resolve([]),
|
|
169
|
-
});
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
case 'sap-ai-sdk': {
|
|
173
|
-
const SapCoreAIProvider = await loadSapAiCore();
|
|
174
|
-
const provider = new SapCoreAIProvider({
|
|
175
|
-
apiKey: cfg.apiKey,
|
|
176
|
-
model: cfg.model,
|
|
177
|
-
temperature,
|
|
178
|
-
maxTokens,
|
|
179
|
-
whenThrottled: cfg.whenThrottled,
|
|
180
|
-
resourceGroup: cfg.resourceGroup,
|
|
181
|
-
credentials: cfg.credentials,
|
|
182
|
-
log: {
|
|
183
|
-
debug: (msg, meta) => process.stderr.write(`[sap-ai-sdk:debug] ${msg} ${meta ? JSON.stringify(meta) : ''}\n`),
|
|
184
|
-
error: (msg, meta) => process.stderr.write(`[sap-ai-sdk:error] ${msg} ${meta ? JSON.stringify(meta) : ''}\n`),
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
llm = new LlmAdapter(new LlmProviderBridge(provider), {
|
|
188
|
-
model: provider.model,
|
|
189
|
-
getModels: () => provider.getModels?.() ?? Promise.resolve([]),
|
|
190
|
-
getEmbeddingModels: () => provider.getEmbeddingModels?.() ?? Promise.resolve([]),
|
|
191
|
-
});
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
|
-
default: {
|
|
195
|
-
const _exhaustive = cfg.provider;
|
|
196
|
-
throw new Error(`Unknown LLM provider: ${_exhaustive}`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// Wrap with non-streaming adapter when streaming is disabled for this provider
|
|
200
|
-
if (cfg.streaming === false) {
|
|
201
|
-
llm = new NonStreamingLlm(llm);
|
|
202
|
-
}
|
|
203
|
-
return llm;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Create a default DeepSeek-based ILlm from simple config (apiKey + model).
|
|
207
|
-
* Used by the flat YAML / CLI path.
|
|
208
|
-
*/
|
|
209
|
-
export async function makeDefaultLlm(apiKey, model, temperature) {
|
|
210
|
-
return makeLlm({ provider: 'deepseek', apiKey, model }, temperature);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Default IModelResolver — delegates to makeLlm() with the given provider settings.
|
|
214
|
-
* Returns fully constructed ILlm instances ready for use with SmartAgent.reconfigure().
|
|
215
|
-
*/
|
|
216
|
-
export class DefaultModelResolver {
|
|
217
|
-
providerConfig;
|
|
218
|
-
defaults;
|
|
219
|
-
constructor(providerConfig, defaults = {}) {
|
|
220
|
-
this.providerConfig = providerConfig;
|
|
221
|
-
this.defaults = defaults;
|
|
222
|
-
}
|
|
223
|
-
async resolve(modelName, role) {
|
|
224
|
-
const temperature = this.defaults.temperature ?? (role === 'main' ? 0.7 : 0.1);
|
|
225
|
-
return makeLlm({ ...this.providerConfig, model: modelName }, temperature);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=providers.js.map
|
package/dist/providers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
|