@mcp-abap-adt/llm-agent 11.1.2 → 12.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 +9 -2
- package/dist/adapters/cline-client-adapter.d.ts +18 -0
- package/dist/adapters/cline-client-adapter.d.ts.map +1 -0
- package/dist/adapters/cline-client-adapter.js +21 -0
- package/dist/adapters/cline-client-adapter.js.map +1 -0
- package/dist/api-adapters/anthropic-adapter.d.ts +10 -0
- package/dist/api-adapters/anthropic-adapter.d.ts.map +1 -0
- package/dist/api-adapters/anthropic-adapter.js +356 -0
- package/dist/api-adapters/anthropic-adapter.js.map +1 -0
- package/dist/api-adapters/index.d.ts +3 -0
- package/dist/api-adapters/index.d.ts.map +1 -0
- package/dist/api-adapters/index.js +3 -0
- package/dist/api-adapters/index.js.map +1 -0
- package/dist/api-adapters/openai-adapter.d.ts +10 -0
- package/dist/api-adapters/openai-adapter.d.ts.map +1 -0
- package/dist/api-adapters/openai-adapter.js +277 -0
- package/dist/api-adapters/openai-adapter.js.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +3 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/noop-tool-cache.d.ts +7 -0
- package/dist/cache/noop-tool-cache.d.ts.map +1 -0
- package/dist/cache/noop-tool-cache.js +8 -0
- package/dist/cache/noop-tool-cache.js.map +1 -0
- package/dist/cache/tool-cache.d.ts +14 -0
- package/dist/cache/tool-cache.d.ts.map +1 -0
- package/dist/cache/tool-cache.js +32 -0
- package/dist/cache/tool-cache.js.map +1 -0
- package/dist/cache/types.d.ts +7 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/external-tools-normalizer.d.ts +15 -0
- package/dist/external-tools-normalizer.d.ts.map +1 -0
- package/dist/external-tools-normalizer.js +146 -0
- package/dist/external-tools-normalizer.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/api-adapter.d.ts +36 -0
- package/dist/interfaces/api-adapter.d.ts.map +1 -0
- package/dist/interfaces/api-adapter.js +9 -0
- package/dist/interfaces/api-adapter.js.map +1 -0
- package/dist/interfaces/client-adapter.d.ts +23 -0
- package/dist/interfaces/client-adapter.d.ts.map +1 -0
- package/dist/interfaces/client-adapter.js +10 -0
- package/dist/interfaces/client-adapter.js.map +1 -0
- package/dist/logger/types.d.ts +63 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/logger/types.js +2 -0
- package/dist/logger/types.js.map +1 -0
- package/dist/policy/fallback-llm-call-strategy.d.ts +16 -0
- package/dist/policy/fallback-llm-call-strategy.d.ts.map +1 -0
- package/dist/policy/fallback-llm-call-strategy.js +66 -0
- package/dist/policy/fallback-llm-call-strategy.js.map +1 -0
- package/dist/policy/index.d.ts +4 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +4 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/non-streaming-llm-call-strategy.d.ts +6 -0
- package/dist/policy/non-streaming-llm-call-strategy.d.ts.map +1 -0
- package/dist/policy/non-streaming-llm-call-strategy.js +21 -0
- package/dist/policy/non-streaming-llm-call-strategy.js.map +1 -0
- package/dist/policy/streaming-llm-call-strategy.d.ts +6 -0
- package/dist/policy/streaming-llm-call-strategy.d.ts.map +1 -0
- package/dist/policy/streaming-llm-call-strategy.js +7 -0
- package/dist/policy/streaming-llm-call-strategy.js.map +1 -0
- package/dist/resilience/circuit-breaker-embedder.d.ts +16 -0
- package/dist/resilience/circuit-breaker-embedder.d.ts.map +1 -0
- package/dist/resilience/circuit-breaker-embedder.js +47 -0
- package/dist/resilience/circuit-breaker-embedder.js.map +1 -0
- package/dist/resilience/circuit-breaker-llm.d.ts +19 -0
- package/dist/resilience/circuit-breaker-llm.d.ts.map +1 -0
- package/dist/resilience/circuit-breaker-llm.js +72 -0
- package/dist/resilience/circuit-breaker-llm.js.map +1 -0
- package/dist/resilience/circuit-breaker.d.ts +36 -0
- package/dist/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/resilience/circuit-breaker.js +60 -0
- package/dist/resilience/circuit-breaker.js.map +1 -0
- package/dist/resilience/fallback-rag.d.ts +21 -0
- package/dist/resilience/fallback-rag.d.ts.map +1 -0
- package/dist/resilience/fallback-rag.js +80 -0
- package/dist/resilience/fallback-rag.js.map +1 -0
- package/dist/resilience/index.d.ts +5 -0
- package/dist/resilience/index.d.ts.map +1 -0
- package/dist/resilience/index.js +5 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/testing/index.d.ts +5 -2
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +30 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/tool-call-deltas.d.ts +4 -0
- package/dist/tool-call-deltas.d.ts.map +1 -0
- package/dist/tool-call-deltas.js +25 -0
- package/dist/tool-call-deltas.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,10 +4,17 @@ Core interfaces, types, and lightweight default implementations for LLM agent or
|
|
|
4
4
|
|
|
5
5
|
This package is the abstraction layer consumed by `@mcp-abap-adt/llm-agent-server` and by downstream applications that want to build their own agent on our interfaces. It ships:
|
|
6
6
|
|
|
7
|
-
- All `I*` interfaces (IRag, IRagEditor, IRagProvider, IRagRegistry, ILlm, IMcpClient, IPipeline, etc.)
|
|
7
|
+
- All `I*` interfaces (IRag, IRagEditor, IRagProvider, IRagRegistry, ILlm, IMcpClient, IPipeline, IClientAdapter, ILlmApiAdapter, IToolCache, ILogger, etc.)
|
|
8
8
|
- Shared types (Message, ToolCall, RagMetadata, CallOptions, Result, errors)
|
|
9
9
|
- Lightweight RAG implementations (InMemoryRag, VectorRag, QdrantRag, InMemoryRagProvider, VectorRagProvider, QdrantRagProvider, SimpleRagRegistry, SimpleRagProviderRegistry, edit strategies, id strategies, corrections module, overlay rags, MCP tool factory)
|
|
10
|
+
- Library helpers usable when embedding SmartAgent in your own server:
|
|
11
|
+
- **Resilience**: `CircuitBreaker`, `CircuitBreakerLlm`, `CircuitBreakerEmbedder`, `FallbackRag`
|
|
12
|
+
- **LLM call policies**: `NonStreamingLlmCallStrategy`, `StreamingLlmCallStrategy`, `FallbackLlmCallStrategy`
|
|
13
|
+
- **Tool cache**: `ToolCache`, `NoopToolCache`
|
|
14
|
+
- **API adapters** (Anthropic Messages / OpenAI Chat Completions ↔ SmartAgent): `AnthropicApiAdapter`, `OpenAiApiAdapter`, with `NormalizedRequest` / `ApiRequestContext` / `ApiSseEvent` / `AdapterValidationError`
|
|
15
|
+
- **Client adapters**: `ClineClientAdapter`
|
|
16
|
+
- **Tool utilities**: `normalizeAndValidateExternalTools`, `normalizeExternalTools`, `getStreamToolCallName`, `toToolCallDelta`
|
|
10
17
|
|
|
11
|
-
For the full default agent (SmartAgent
|
|
18
|
+
For the full default agent runtime (SmartAgent assembly, providers wiring, HTTP server, CLI), install `@mcp-abap-adt/llm-agent-server` — but if you only need the helpers above and you ship your own server, depending on `@mcp-abap-adt/llm-agent` is sufficient.
|
|
12
19
|
|
|
13
20
|
See the repo root for design specs, migration notes, and architectural docs.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client adapter for Cline (VS Code AI extension).
|
|
3
|
+
*
|
|
4
|
+
* Cline is a prompt-based agent: it describes tools as XML in the system
|
|
5
|
+
* prompt and expects the LLM to respond with XML tool calls in `content`.
|
|
6
|
+
* When a task is complete, Cline requires the response to be wrapped in
|
|
7
|
+
* `<attempt_completion>` XML.
|
|
8
|
+
*
|
|
9
|
+
* This adapter detects Cline by its system prompt signature and wraps
|
|
10
|
+
* the final response accordingly.
|
|
11
|
+
*/
|
|
12
|
+
import type { IClientAdapter } from '../interfaces/client-adapter.js';
|
|
13
|
+
export declare class ClineClientAdapter implements IClientAdapter {
|
|
14
|
+
readonly name = "cline";
|
|
15
|
+
detect(systemPrompt: string): boolean;
|
|
16
|
+
wrapResponse(content: string): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=cline-client-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline-client-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/cline-client-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,qBAAa,kBAAmB,YAAW,cAAc;IACvD,QAAQ,CAAC,IAAI,WAAW;IAExB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIrC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGtC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client adapter for Cline (VS Code AI extension).
|
|
3
|
+
*
|
|
4
|
+
* Cline is a prompt-based agent: it describes tools as XML in the system
|
|
5
|
+
* prompt and expects the LLM to respond with XML tool calls in `content`.
|
|
6
|
+
* When a task is complete, Cline requires the response to be wrapped in
|
|
7
|
+
* `<attempt_completion>` XML.
|
|
8
|
+
*
|
|
9
|
+
* This adapter detects Cline by its system prompt signature and wraps
|
|
10
|
+
* the final response accordingly.
|
|
11
|
+
*/
|
|
12
|
+
export class ClineClientAdapter {
|
|
13
|
+
name = 'cline';
|
|
14
|
+
detect(systemPrompt) {
|
|
15
|
+
return systemPrompt.includes('You are Cline');
|
|
16
|
+
}
|
|
17
|
+
wrapResponse(content) {
|
|
18
|
+
return `<attempt_completion>\n<result>\n${content}\n</result>\n</attempt_completion>`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cline-client-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline-client-adapter.js","sourceRoot":"","sources":["../../src/adapters/cline-client-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,OAAO,CAAC;IAExB,MAAM,CAAC,YAAoB;QACzB,OAAO,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAChD,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,mCAAmC,OAAO,oCAAoC,CAAC;IACxF,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LlmStreamChunk, OrchestratorError, Result, SmartAgentResponse } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
import { type ApiRequestContext, type ApiSseEvent, type ILlmApiAdapter, type NormalizedRequest } from '../interfaces/api-adapter.js';
|
|
3
|
+
export declare class AnthropicApiAdapter implements ILlmApiAdapter {
|
|
4
|
+
readonly name = "anthropic";
|
|
5
|
+
normalizeRequest(request: unknown): NormalizedRequest;
|
|
6
|
+
formatResult(response: SmartAgentResponse, context: ApiRequestContext): unknown;
|
|
7
|
+
formatError(error: OrchestratorError, _context: ApiRequestContext): unknown;
|
|
8
|
+
transformStream(source: AsyncIterable<Result<LlmStreamChunk, OrchestratorError>>, context: ApiRequestContext): AsyncIterable<ApiSseEvent>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=anthropic-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-adapter.d.ts","sourceRoot":"","sources":["../../src/api-adapters/anthropic-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,cAAc,EAEd,iBAAiB,EACjB,MAAM,EACN,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AA8BtC,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,IAAI,eAAe;IAM5B,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;IAuIrD,YAAY,CACV,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,GACzB,OAAO;IA8CV,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAcpE,eAAe,CACpB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,EAChE,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,WAAW,CAAC;CAiL9B"}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// src/smart-agent/api-adapters/anthropic-adapter.ts
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { AdapterValidationError, } from '../interfaces/api-adapter.js';
|
|
4
|
+
import { toToolCallDelta } from '../tool-call-deltas.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Helpers
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function mapStopReason(r) {
|
|
9
|
+
switch (r) {
|
|
10
|
+
case 'stop':
|
|
11
|
+
return 'end_turn';
|
|
12
|
+
case 'tool_calls':
|
|
13
|
+
return 'tool_use';
|
|
14
|
+
case 'error':
|
|
15
|
+
return 'end_turn';
|
|
16
|
+
default:
|
|
17
|
+
return 'max_tokens';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function sse(event, data) {
|
|
21
|
+
return { event, data: JSON.stringify(data) };
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// AnthropicApiAdapter
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
export class AnthropicApiAdapter {
|
|
27
|
+
name = 'anthropic';
|
|
28
|
+
// -------------------------------------------------------------------------
|
|
29
|
+
// normalizeRequest
|
|
30
|
+
// -------------------------------------------------------------------------
|
|
31
|
+
normalizeRequest(request) {
|
|
32
|
+
if (typeof request !== 'object' || request === null) {
|
|
33
|
+
throw new AdapterValidationError('Request body must be a JSON object');
|
|
34
|
+
}
|
|
35
|
+
const body = request;
|
|
36
|
+
if (!Array.isArray(body.messages)) {
|
|
37
|
+
throw new AdapterValidationError('messages must be a non-empty array');
|
|
38
|
+
}
|
|
39
|
+
if (body.messages.length === 0) {
|
|
40
|
+
throw new AdapterValidationError('messages must be a non-empty array');
|
|
41
|
+
}
|
|
42
|
+
const messages = [];
|
|
43
|
+
// Extract system field (Anthropic has it separate from messages)
|
|
44
|
+
if (typeof body.system === 'string' && body.system) {
|
|
45
|
+
messages.push({ role: 'system', content: body.system });
|
|
46
|
+
}
|
|
47
|
+
else if (Array.isArray(body.system)) {
|
|
48
|
+
// system can be an array of content blocks [{type: "text", text: "..."}]
|
|
49
|
+
const systemText = body.system
|
|
50
|
+
.filter((b) => b.type === 'text')
|
|
51
|
+
.map((b) => b.text)
|
|
52
|
+
.join('\n');
|
|
53
|
+
if (systemText) {
|
|
54
|
+
messages.push({ role: 'system', content: systemText });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Convert Anthropic messages to normalized format
|
|
58
|
+
for (const msg of body.messages) {
|
|
59
|
+
const role = msg.role;
|
|
60
|
+
if (role === 'user') {
|
|
61
|
+
if (typeof msg.content === 'string') {
|
|
62
|
+
messages.push({ role: 'user', content: msg.content });
|
|
63
|
+
}
|
|
64
|
+
else if (Array.isArray(msg.content)) {
|
|
65
|
+
const blocks = msg.content;
|
|
66
|
+
const textParts = [];
|
|
67
|
+
for (const block of blocks) {
|
|
68
|
+
if (block.type === 'text') {
|
|
69
|
+
textParts.push(block.text);
|
|
70
|
+
}
|
|
71
|
+
else if (block.type === 'tool_result') {
|
|
72
|
+
// tool_result blocks become separate tool messages
|
|
73
|
+
const toolContent = typeof block.content === 'string'
|
|
74
|
+
? block.content
|
|
75
|
+
: JSON.stringify(block.content);
|
|
76
|
+
messages.push({
|
|
77
|
+
role: 'tool',
|
|
78
|
+
content: toolContent,
|
|
79
|
+
tool_call_id: block.tool_use_id,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (textParts.length > 0) {
|
|
84
|
+
messages.push({ role: 'user', content: textParts.join('\n') });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (role === 'assistant') {
|
|
89
|
+
if (typeof msg.content === 'string') {
|
|
90
|
+
messages.push({ role: 'assistant', content: msg.content });
|
|
91
|
+
}
|
|
92
|
+
else if (Array.isArray(msg.content)) {
|
|
93
|
+
const blocks = msg.content;
|
|
94
|
+
const textParts = [];
|
|
95
|
+
const toolCalls = [];
|
|
96
|
+
for (const block of blocks) {
|
|
97
|
+
if (block.type === 'text') {
|
|
98
|
+
textParts.push(block.text);
|
|
99
|
+
}
|
|
100
|
+
else if (block.type === 'tool_use') {
|
|
101
|
+
toolCalls.push({
|
|
102
|
+
id: block.id,
|
|
103
|
+
type: 'function',
|
|
104
|
+
function: {
|
|
105
|
+
name: block.name,
|
|
106
|
+
arguments: JSON.stringify(block.input),
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const assistantMsg = {
|
|
112
|
+
role: 'assistant',
|
|
113
|
+
content: textParts.join('\n') || null,
|
|
114
|
+
};
|
|
115
|
+
if (toolCalls.length > 0) {
|
|
116
|
+
assistantMsg.tool_calls = toolCalls;
|
|
117
|
+
}
|
|
118
|
+
messages.push(assistantMsg);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const options = {};
|
|
123
|
+
if (body.temperature !== undefined)
|
|
124
|
+
options.temperature = body.temperature;
|
|
125
|
+
if (body.max_tokens !== undefined)
|
|
126
|
+
options.maxTokens = body.max_tokens;
|
|
127
|
+
if (body.top_p !== undefined)
|
|
128
|
+
options.topP = body.top_p;
|
|
129
|
+
if (Array.isArray(body.stop_sequences))
|
|
130
|
+
options.stop = body.stop_sequences;
|
|
131
|
+
if (Array.isArray(body.tools))
|
|
132
|
+
options.externalTools = body.tools;
|
|
133
|
+
if (body.model !== undefined)
|
|
134
|
+
options.model = body.model;
|
|
135
|
+
const id = `msg_${randomUUID()}`;
|
|
136
|
+
const context = {
|
|
137
|
+
adapterName: this.name,
|
|
138
|
+
protocol: {
|
|
139
|
+
id,
|
|
140
|
+
model: body.model ?? 'smart-agent',
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
messages,
|
|
145
|
+
stream: body.stream === true,
|
|
146
|
+
options,
|
|
147
|
+
context,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// -------------------------------------------------------------------------
|
|
151
|
+
// formatResult
|
|
152
|
+
// -------------------------------------------------------------------------
|
|
153
|
+
formatResult(response, context) {
|
|
154
|
+
const { id, model } = context.protocol;
|
|
155
|
+
const content = [];
|
|
156
|
+
if (response.content) {
|
|
157
|
+
content.push({ type: 'text', text: response.content });
|
|
158
|
+
}
|
|
159
|
+
if (response.toolCalls) {
|
|
160
|
+
for (const tc of response.toolCalls) {
|
|
161
|
+
content.push({
|
|
162
|
+
type: 'tool_use',
|
|
163
|
+
id: tc.id,
|
|
164
|
+
name: tc.function.name,
|
|
165
|
+
input: JSON.parse(tc.function.arguments),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Ensure at least one content block
|
|
170
|
+
if (content.length === 0) {
|
|
171
|
+
content.push({ type: 'text', text: '' });
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
id,
|
|
175
|
+
type: 'message',
|
|
176
|
+
role: 'assistant',
|
|
177
|
+
model,
|
|
178
|
+
content,
|
|
179
|
+
stop_reason: mapStopReason(response.stopReason),
|
|
180
|
+
usage: {
|
|
181
|
+
input_tokens: response.usage?.promptTokens ?? 0,
|
|
182
|
+
output_tokens: response.usage?.completionTokens ?? 0,
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// -------------------------------------------------------------------------
|
|
187
|
+
// formatError
|
|
188
|
+
// -------------------------------------------------------------------------
|
|
189
|
+
formatError(error, _context) {
|
|
190
|
+
return {
|
|
191
|
+
type: 'error',
|
|
192
|
+
error: {
|
|
193
|
+
type: 'api_error',
|
|
194
|
+
message: error.message,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// -------------------------------------------------------------------------
|
|
199
|
+
// transformStream
|
|
200
|
+
// -------------------------------------------------------------------------
|
|
201
|
+
async *transformStream(source, context) {
|
|
202
|
+
const { id, model } = context.protocol;
|
|
203
|
+
let messageStarted = false;
|
|
204
|
+
let blockIndex = 0;
|
|
205
|
+
let blockOpen = false;
|
|
206
|
+
let blockType = 'text';
|
|
207
|
+
let lastUsage = null;
|
|
208
|
+
// Helpers to emit block lifecycle events
|
|
209
|
+
const openTextBlock = () => {
|
|
210
|
+
blockOpen = true;
|
|
211
|
+
blockType = 'text';
|
|
212
|
+
return sse('content_block_start', {
|
|
213
|
+
type: 'content_block_start',
|
|
214
|
+
index: blockIndex,
|
|
215
|
+
content_block: { type: 'text', text: '' },
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
const closeBlock = () => {
|
|
219
|
+
blockOpen = false;
|
|
220
|
+
const evt = sse('content_block_stop', {
|
|
221
|
+
type: 'content_block_stop',
|
|
222
|
+
index: blockIndex,
|
|
223
|
+
});
|
|
224
|
+
blockIndex++;
|
|
225
|
+
return evt;
|
|
226
|
+
};
|
|
227
|
+
const emitMessageStart = () => {
|
|
228
|
+
messageStarted = true;
|
|
229
|
+
return sse('message_start', {
|
|
230
|
+
type: 'message_start',
|
|
231
|
+
message: {
|
|
232
|
+
id,
|
|
233
|
+
type: 'message',
|
|
234
|
+
role: 'assistant',
|
|
235
|
+
model,
|
|
236
|
+
content: [],
|
|
237
|
+
stop_reason: null,
|
|
238
|
+
usage: { input_tokens: 0, output_tokens: 0 },
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
for await (const chunk of source) {
|
|
243
|
+
// Error chunk
|
|
244
|
+
if (!chunk.ok) {
|
|
245
|
+
if (!messageStarted)
|
|
246
|
+
yield emitMessageStart();
|
|
247
|
+
if (blockOpen)
|
|
248
|
+
yield closeBlock();
|
|
249
|
+
yield sse('message_delta', {
|
|
250
|
+
type: 'message_delta',
|
|
251
|
+
delta: { stop_reason: 'end_turn' },
|
|
252
|
+
usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
|
|
253
|
+
});
|
|
254
|
+
yield sse('message_stop', { type: 'message_stop' });
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const val = chunk.value;
|
|
258
|
+
// Skip heartbeat-only and timing-only chunks
|
|
259
|
+
if (!val.content &&
|
|
260
|
+
!val.toolCalls &&
|
|
261
|
+
!val.finishReason &&
|
|
262
|
+
!val.usage &&
|
|
263
|
+
(val.heartbeat || val.timing)) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
// Capture usage
|
|
267
|
+
if (val.usage) {
|
|
268
|
+
lastUsage = {
|
|
269
|
+
input_tokens: val.usage.promptTokens,
|
|
270
|
+
output_tokens: val.usage.completionTokens,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// Skip chunks that carry only usage
|
|
274
|
+
if (!val.content && !val.toolCalls && !val.finishReason) {
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
// Ensure message_start is emitted
|
|
278
|
+
if (!messageStarted)
|
|
279
|
+
yield emitMessageStart();
|
|
280
|
+
// Text content
|
|
281
|
+
if (val.content) {
|
|
282
|
+
if (!blockOpen || blockType !== 'text') {
|
|
283
|
+
if (blockOpen)
|
|
284
|
+
yield closeBlock();
|
|
285
|
+
yield openTextBlock();
|
|
286
|
+
}
|
|
287
|
+
yield sse('content_block_delta', {
|
|
288
|
+
type: 'content_block_delta',
|
|
289
|
+
index: blockIndex,
|
|
290
|
+
delta: { type: 'text_delta', text: val.content },
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
// Tool calls
|
|
294
|
+
if (val.toolCalls) {
|
|
295
|
+
// Close text block if open
|
|
296
|
+
if (blockOpen && blockType === 'text') {
|
|
297
|
+
yield closeBlock();
|
|
298
|
+
}
|
|
299
|
+
for (const call of val.toolCalls) {
|
|
300
|
+
const tc = toToolCallDelta(call, 0);
|
|
301
|
+
// Open tool_use block
|
|
302
|
+
blockOpen = true;
|
|
303
|
+
blockType = 'tool_use';
|
|
304
|
+
yield sse('content_block_start', {
|
|
305
|
+
type: 'content_block_start',
|
|
306
|
+
index: blockIndex,
|
|
307
|
+
content_block: {
|
|
308
|
+
type: 'tool_use',
|
|
309
|
+
id: tc.id ?? `toolu_${randomUUID()}`,
|
|
310
|
+
name: tc.name ?? '',
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
// Emit input_json_delta
|
|
314
|
+
if (tc.arguments) {
|
|
315
|
+
yield sse('content_block_delta', {
|
|
316
|
+
type: 'content_block_delta',
|
|
317
|
+
index: blockIndex,
|
|
318
|
+
delta: {
|
|
319
|
+
type: 'input_json_delta',
|
|
320
|
+
partial_json: tc.arguments,
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// Close tool_use block
|
|
325
|
+
yield closeBlock();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Finish reason
|
|
329
|
+
if (val.finishReason) {
|
|
330
|
+
if (blockOpen)
|
|
331
|
+
yield closeBlock();
|
|
332
|
+
yield sse('message_delta', {
|
|
333
|
+
type: 'message_delta',
|
|
334
|
+
delta: {
|
|
335
|
+
stop_reason: mapStopReason(val.finishReason),
|
|
336
|
+
},
|
|
337
|
+
usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
|
|
338
|
+
});
|
|
339
|
+
yield sse('message_stop', { type: 'message_stop' });
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// Stream ended without finishReason — emit closing events
|
|
344
|
+
if (!messageStarted)
|
|
345
|
+
yield emitMessageStart();
|
|
346
|
+
if (blockOpen)
|
|
347
|
+
yield closeBlock();
|
|
348
|
+
yield sse('message_delta', {
|
|
349
|
+
type: 'message_delta',
|
|
350
|
+
delta: { stop_reason: 'end_turn' },
|
|
351
|
+
usage: lastUsage ?? { input_tokens: 0, output_tokens: 0 },
|
|
352
|
+
});
|
|
353
|
+
yield sse('message_stop', { type: 'message_stop' });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=anthropic-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../src/api-adapters/anthropic-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LlmStreamChunk, OrchestratorError, Result, SmartAgentResponse } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
import { type ApiRequestContext, type ApiSseEvent, type ILlmApiAdapter, type NormalizedRequest } from '../interfaces/api-adapter.js';
|
|
3
|
+
export declare class OpenAiApiAdapter implements ILlmApiAdapter {
|
|
4
|
+
readonly name = "openai";
|
|
5
|
+
normalizeRequest(request: unknown): NormalizedRequest;
|
|
6
|
+
formatResult(response: SmartAgentResponse, context: ApiRequestContext): unknown;
|
|
7
|
+
formatError(error: OrchestratorError, _context: ApiRequestContext): unknown;
|
|
8
|
+
transformStream(source: AsyncIterable<Result<LlmStreamChunk, OrchestratorError>>, context: ApiRequestContext): AsyncIterable<ApiSseEvent>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=openai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/api-adapters/openai-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,cAAc,EAEd,iBAAiB,EACjB,MAAM,EACN,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AA0BtC,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,YAAY;IAMzB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;IAiDrD,YAAY,CACV,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,GACzB,OAAO;IAyCV,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAcpE,eAAe,CACpB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,EAChE,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,WAAW,CAAC;CAuL9B"}
|