llm-stream-assemble 1.4.0 → 1.4.1
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 +4 -4
- package/dist/adapters/anthropic.cjs +181 -125
- package/dist/adapters/anthropic.cjs.map +1 -1
- package/dist/adapters/anthropic.d.cts +1 -3
- package/dist/adapters/anthropic.d.ts +1 -3
- package/dist/adapters/anthropic.js +181 -125
- package/dist/adapters/anthropic.js.map +1 -1
- package/dist/adapters/bedrock.cjs +155 -118
- package/dist/adapters/bedrock.cjs.map +1 -1
- package/dist/adapters/bedrock.js +155 -118
- package/dist/adapters/bedrock.js.map +1 -1
- package/dist/adapters/gemini.cjs +86 -44
- package/dist/adapters/gemini.cjs.map +1 -1
- package/dist/adapters/gemini.js +86 -44
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/openai-chat.cjs +20 -8
- package/dist/adapters/openai-chat.cjs.map +1 -1
- package/dist/adapters/openai-chat.js +20 -8
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs +20 -8
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.js +20 -8
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/adapters/openai-responses.cjs +37 -27
- package/dist/adapters/openai-responses.cjs.map +1 -1
- package/dist/adapters/openai-responses.js +37 -27
- package/dist/adapters/openai-responses.js.map +1 -1
- package/dist/core/index.cjs +9 -2
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +9 -2
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +266 -304
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +266 -304
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# llm-stream-assemble
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|

|
|
5
5
|

|
|
6
|
-

|
|
7
7
|
[](https://github.com/01laky/llm-stream-assemble/actions/workflows/ci.yml)
|
|
8
|
-

|
|
9
9
|
|
|
10
10
|
**One typed event model for every LLM stream** — text, tool calls, reasoning, JSON, usage, refusals, errors, and non-streaming responses.
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
Turn provider SSE fragments into typed events — **not another `+=` loop**.
|
|
15
15
|
|
|
16
|
-
**Status:** Stable `1.4.
|
|
16
|
+
**Status:** Stable `1.4.1`. Six built-in adapters, thirteen OpenAI-compatible host presets (including **Azure OpenAI** and **Cloudflare Workers AI**), transforms, replay helpers, and examples are production-ready. Pin semver ranges as usual and review [CHANGELOG.md](./CHANGELOG.md) before major upgrades.
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
// src/core/utils/object.ts
|
|
4
|
+
function stripUndefined(obj) {
|
|
5
|
+
return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== void 0));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/adapters/errors.ts
|
|
9
|
+
function libraryError(message) {
|
|
10
|
+
return new Error(`llm-stream-assemble: ${message}`);
|
|
11
|
+
}
|
|
12
|
+
function adapterScopedError(scope, message) {
|
|
13
|
+
return new Error(`llm-stream-assemble: ${scope}: ${message}`);
|
|
14
|
+
}
|
|
15
|
+
function providerErrorChunks(error, recoverable = false) {
|
|
16
|
+
return [
|
|
17
|
+
{ kind: "provider-error", error, recoverable },
|
|
18
|
+
{ kind: "finish", reason: "error" }
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
function providerErrorChunksFromMessage(message, recoverable = false) {
|
|
22
|
+
return providerErrorChunks(libraryError(message), recoverable);
|
|
23
|
+
}
|
|
24
|
+
function providerErrorChunksFromPayload(errorPayload, scope, recoverable, fallbackMessage) {
|
|
25
|
+
const message = asString(errorPayload.message) ?? fallbackMessage;
|
|
26
|
+
const error = adapterScopedError(scope, message);
|
|
27
|
+
Object.defineProperty(error, "raw", {
|
|
28
|
+
value: errorPayload,
|
|
29
|
+
enumerable: false
|
|
30
|
+
});
|
|
31
|
+
return providerErrorChunks(error, recoverable);
|
|
32
|
+
}
|
|
33
|
+
|
|
3
34
|
// src/adapters/utils.ts
|
|
4
35
|
function isRecord(value) {
|
|
5
36
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -11,9 +42,7 @@ function asNumber(value) {
|
|
|
11
42
|
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
12
43
|
}
|
|
13
44
|
function optionalRawChunk(input) {
|
|
14
|
-
return
|
|
15
|
-
Object.entries(input).filter(([, value]) => value !== void 0)
|
|
16
|
-
);
|
|
45
|
+
return stripUndefined(input);
|
|
17
46
|
}
|
|
18
47
|
function prefixedAdapterError(feature, message) {
|
|
19
48
|
return adapterScopedError(feature, message);
|
|
@@ -37,21 +66,125 @@ function parseAdapterJSON(raw, feature) {
|
|
|
37
66
|
}
|
|
38
67
|
}
|
|
39
68
|
|
|
40
|
-
// src/adapters/
|
|
41
|
-
function
|
|
42
|
-
return
|
|
69
|
+
// src/adapters/shared/anthropic-blocks.ts
|
|
70
|
+
function anthropicResponseBlockChunks(block, index, context) {
|
|
71
|
+
return anthropicBlockStartChunks(block, index, { ...context, mode: "response" });
|
|
43
72
|
}
|
|
44
|
-
function
|
|
45
|
-
|
|
73
|
+
function anthropicBlockStartChunks(block, index, context) {
|
|
74
|
+
const mode = context.mode ?? "stream-start";
|
|
75
|
+
const blockType = asString(block.type) ?? "unknown";
|
|
76
|
+
switch (blockType) {
|
|
77
|
+
case "text": {
|
|
78
|
+
const text = asString(block.text);
|
|
79
|
+
if (!text) return [];
|
|
80
|
+
if (context.jsonMode) return [{ kind: "json-delta", delta: text }];
|
|
81
|
+
return [{ kind: "text-delta", text }];
|
|
82
|
+
}
|
|
83
|
+
case "thinking": {
|
|
84
|
+
const text = asString(block.thinking);
|
|
85
|
+
return text ? [{ kind: "reasoning-delta", text, variant: "detail" }] : [];
|
|
86
|
+
}
|
|
87
|
+
case "redacted_thinking":
|
|
88
|
+
return [];
|
|
89
|
+
case "tool_use":
|
|
90
|
+
return anthropicToolUseBlockChunks(block, index, mode);
|
|
91
|
+
case "json": {
|
|
92
|
+
const text = asString(block.text) ?? asString(block.partial_json);
|
|
93
|
+
return text ? [{ kind: "json-delta", delta: text }] : [];
|
|
94
|
+
}
|
|
95
|
+
case "refusal": {
|
|
96
|
+
const text = asString(block.refusal) ?? asString(block.text);
|
|
97
|
+
return text ? [{ kind: "refusal-delta", text }] : [];
|
|
98
|
+
}
|
|
99
|
+
default:
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
46
102
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
103
|
+
function anthropicToolUseBlockChunks(block, index, mode) {
|
|
104
|
+
const id = asString(block.id);
|
|
105
|
+
const name = asString(block.name) ?? "unknown";
|
|
106
|
+
const chunks = [optionalRawChunk({ kind: "tool-start", id, name, index })];
|
|
107
|
+
const input = block.input;
|
|
108
|
+
if (input !== void 0 && !(isRecord(input) && Object.keys(input).length === 0)) {
|
|
109
|
+
chunks.push(
|
|
110
|
+
optionalRawChunk({ kind: "tool-args-delta", id, delta: JSON.stringify(input), index })
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
if (mode === "response") {
|
|
114
|
+
chunks.push(optionalRawChunk({ kind: "tool-done", id, index }));
|
|
115
|
+
}
|
|
116
|
+
return chunks;
|
|
52
117
|
}
|
|
53
|
-
|
|
54
|
-
|
|
118
|
+
|
|
119
|
+
// src/adapters/shared/parse-payload.ts
|
|
120
|
+
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
121
|
+
const { trim = true, allowDone = true } = options;
|
|
122
|
+
const input = trim ? raw.trim() : raw;
|
|
123
|
+
if (input.length === 0 || allowDone && input === "[DONE]") return null;
|
|
124
|
+
const payload = parseAdapterJSON(input, scope);
|
|
125
|
+
if (!isRecord(payload)) {
|
|
126
|
+
throw adapterScopedError(scope, "expected a JSON object");
|
|
127
|
+
}
|
|
128
|
+
return payload;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// src/adapters/shared/stop-reasons.ts
|
|
132
|
+
function mapAnthropicLikeStopReason(value) {
|
|
133
|
+
switch (value) {
|
|
134
|
+
case "end_turn":
|
|
135
|
+
case "stop_sequence":
|
|
136
|
+
return "stop";
|
|
137
|
+
case "tool_use":
|
|
138
|
+
return "tool_calls";
|
|
139
|
+
case "max_tokens":
|
|
140
|
+
return "length";
|
|
141
|
+
case "content_filtered":
|
|
142
|
+
case "guardrail_intervened":
|
|
143
|
+
case "refusal":
|
|
144
|
+
return "content_filter";
|
|
145
|
+
default:
|
|
146
|
+
return "stop";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// src/adapters/shared/usage.ts
|
|
151
|
+
var DEFAULT_ALIASES = {
|
|
152
|
+
input: ["inputTokens", "input_tokens", "promptTokens", "promptTokenCount", "inputTokenCount"],
|
|
153
|
+
output: [
|
|
154
|
+
"outputTokens",
|
|
155
|
+
"output_tokens",
|
|
156
|
+
"completionTokens",
|
|
157
|
+
"candidatesTokenCount",
|
|
158
|
+
"outputTokenCount"
|
|
159
|
+
],
|
|
160
|
+
reasoning: ["reasoningTokens", "reasoning_tokens", "thoughtsTokenCount"],
|
|
161
|
+
total: ["totalTokens", "totalTokenCount", "total_tokens"]
|
|
162
|
+
};
|
|
163
|
+
function firstNumber(value, fields) {
|
|
164
|
+
if (!fields) return void 0;
|
|
165
|
+
for (const field of fields) {
|
|
166
|
+
const number = asNumber(value[field]);
|
|
167
|
+
if (number !== void 0) return number;
|
|
168
|
+
}
|
|
169
|
+
return void 0;
|
|
170
|
+
}
|
|
171
|
+
function buildUsageChunk(value, aliases = DEFAULT_ALIASES, options) {
|
|
172
|
+
if (!isRecord(value)) return void 0;
|
|
173
|
+
const inputTokens = firstNumber(value, aliases.input);
|
|
174
|
+
const outputTokens = firstNumber(value, aliases.output);
|
|
175
|
+
const reasoningTokens = firstNumber(value, aliases.reasoning);
|
|
176
|
+
const totalTokens = firstNumber(value, aliases.total);
|
|
177
|
+
if (inputTokens === void 0 && outputTokens === void 0 && reasoningTokens === void 0 && totalTokens === void 0) {
|
|
178
|
+
return void 0;
|
|
179
|
+
}
|
|
180
|
+
const raw = value;
|
|
181
|
+
return optionalRawChunk({
|
|
182
|
+
kind: "usage",
|
|
183
|
+
inputTokens,
|
|
184
|
+
outputTokens,
|
|
185
|
+
reasoningTokens,
|
|
186
|
+
raw
|
|
187
|
+
});
|
|
55
188
|
}
|
|
56
189
|
|
|
57
190
|
// src/adapters/anthropic.ts
|
|
@@ -71,10 +204,8 @@ var AnthropicStreamParser = class {
|
|
|
71
204
|
blocks = /* @__PURE__ */ new Map();
|
|
72
205
|
sawFinish = false;
|
|
73
206
|
parseChunk(raw) {
|
|
74
|
-
const payload =
|
|
75
|
-
if (!
|
|
76
|
-
throw libraryError("anthropicAdapter.parseChunk expected a JSON object");
|
|
77
|
-
}
|
|
207
|
+
const payload = parseAdapterObjectPayload(raw, "anthropicAdapter.parseChunk");
|
|
208
|
+
if (!payload) return [];
|
|
78
209
|
const type = asString(payload.type);
|
|
79
210
|
switch (type) {
|
|
80
211
|
case "ping":
|
|
@@ -92,7 +223,7 @@ var AnthropicStreamParser = class {
|
|
|
92
223
|
case "message_stop":
|
|
93
224
|
return this.messageStop();
|
|
94
225
|
case "error":
|
|
95
|
-
return
|
|
226
|
+
return providerErrorFromPayload(payload.error);
|
|
96
227
|
default:
|
|
97
228
|
throw libraryError(`anthropicAdapter.parseChunk unknown event type: ${String(type)}`);
|
|
98
229
|
}
|
|
@@ -107,7 +238,7 @@ var AnthropicStreamParser = class {
|
|
|
107
238
|
if (id || model) {
|
|
108
239
|
chunks.push(optionalRawChunk({ kind: "metadata", responseId: id, model, raw: message }));
|
|
109
240
|
}
|
|
110
|
-
const usage =
|
|
241
|
+
const usage = buildUsageChunk(message.usage);
|
|
111
242
|
if (usage) chunks.push(usage);
|
|
112
243
|
return chunks;
|
|
113
244
|
}
|
|
@@ -118,42 +249,16 @@ var AnthropicStreamParser = class {
|
|
|
118
249
|
const blockType = asString(block.type) ?? "unknown";
|
|
119
250
|
const state = { type: blockType };
|
|
120
251
|
this.blocks.set(index, state);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
case "thinking": {
|
|
127
|
-
const text = asString(block.thinking);
|
|
128
|
-
return text ? [{ kind: "reasoning-delta", text, variant: "detail" }] : [];
|
|
129
|
-
}
|
|
130
|
-
case "redacted_thinking":
|
|
131
|
-
return [];
|
|
132
|
-
case "tool_use": {
|
|
133
|
-
const id = asString(block.id);
|
|
134
|
-
const name = asString(block.name) ?? "unknown";
|
|
135
|
-
if (id) state.id = id;
|
|
136
|
-
state.name = name;
|
|
137
|
-
const chunks = [optionalRawChunk({ kind: "tool-start", id, name, index })];
|
|
138
|
-
const input = block.input;
|
|
139
|
-
if (input !== void 0 && !(isRecord(input) && Object.keys(input).length === 0)) {
|
|
140
|
-
chunks.push(
|
|
141
|
-
optionalRawChunk({ kind: "tool-args-delta", id, delta: JSON.stringify(input), index })
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
return chunks;
|
|
145
|
-
}
|
|
146
|
-
case "json": {
|
|
147
|
-
const text = asString(block.text) ?? asString(block.partial_json);
|
|
148
|
-
return text ? [{ kind: "json-delta", delta: text }] : [];
|
|
149
|
-
}
|
|
150
|
-
case "refusal": {
|
|
151
|
-
const text = asString(block.refusal) ?? asString(block.text);
|
|
152
|
-
return text ? [{ kind: "refusal-delta", text }] : [];
|
|
153
|
-
}
|
|
154
|
-
default:
|
|
155
|
-
return [];
|
|
252
|
+
if (blockType === "tool_use") {
|
|
253
|
+
const id = asString(block.id);
|
|
254
|
+
const name = asString(block.name) ?? "unknown";
|
|
255
|
+
if (id) state.id = id;
|
|
256
|
+
state.name = name;
|
|
156
257
|
}
|
|
258
|
+
return anthropicBlockStartChunks(block, index, {
|
|
259
|
+
jsonMode: this.options.jsonMode,
|
|
260
|
+
mode: "stream-start"
|
|
261
|
+
});
|
|
157
262
|
}
|
|
158
263
|
contentBlockDelta(payload) {
|
|
159
264
|
const index = asNumber(payload.index) ?? 0;
|
|
@@ -165,8 +270,9 @@ var AnthropicStreamParser = class {
|
|
|
165
270
|
case "text_delta": {
|
|
166
271
|
const text = asString(delta.text);
|
|
167
272
|
if (!text) return [];
|
|
168
|
-
if (this.options.jsonMode || state?.type === "json")
|
|
273
|
+
if (this.options.jsonMode || state?.type === "json") {
|
|
169
274
|
return [{ kind: "json-delta", delta: text }];
|
|
275
|
+
}
|
|
170
276
|
if (state?.type === "refusal") return [{ kind: "refusal-delta", text }];
|
|
171
277
|
return [{ kind: "text-delta", text }];
|
|
172
278
|
}
|
|
@@ -198,7 +304,7 @@ var AnthropicStreamParser = class {
|
|
|
198
304
|
}
|
|
199
305
|
messageDelta(payload) {
|
|
200
306
|
const chunks = [];
|
|
201
|
-
const usage =
|
|
307
|
+
const usage = buildUsageChunk(payload.usage);
|
|
202
308
|
if (usage) chunks.push(usage);
|
|
203
309
|
const delta = isRecord(payload.delta) ? payload.delta : void 0;
|
|
204
310
|
const stopReason = delta ? asString(delta.stop_reason) : void 0;
|
|
@@ -220,91 +326,41 @@ function parseResponse(body, options) {
|
|
|
220
326
|
throw libraryError("anthropicAdapter.parseResponse expected an Anthropic message object");
|
|
221
327
|
}
|
|
222
328
|
if (asString(body.type) === "error" || isRecord(body.error)) {
|
|
223
|
-
return
|
|
329
|
+
return providerErrorFromPayload(body.error);
|
|
224
330
|
}
|
|
225
331
|
const chunks = [];
|
|
226
332
|
const id = asString(body.id);
|
|
227
333
|
const model = asString(body.model);
|
|
228
334
|
if (id) chunks.push({ kind: "message-start", id });
|
|
229
|
-
if (id || model)
|
|
335
|
+
if (id || model) {
|
|
230
336
|
chunks.push(optionalRawChunk({ kind: "metadata", responseId: id, model, raw: body }));
|
|
231
|
-
|
|
337
|
+
}
|
|
338
|
+
const inputUsage = buildUsageChunk(body.usage);
|
|
232
339
|
if (inputUsage) chunks.push(inputUsage);
|
|
233
340
|
const content = Array.isArray(body.content) ? body.content : [];
|
|
234
341
|
for (let index = 0; index < content.length; index += 1) {
|
|
235
342
|
const block = content[index];
|
|
236
343
|
if (!isRecord(block)) continue;
|
|
237
|
-
chunks.push(...
|
|
344
|
+
chunks.push(...anthropicResponseBlockChunks(block, index, { jsonMode: options.jsonMode }));
|
|
238
345
|
}
|
|
239
346
|
const reason = finishReason(asString(body.stop_reason));
|
|
240
347
|
if (reason) chunks.push({ kind: "finish", reason });
|
|
241
348
|
return chunks;
|
|
242
349
|
}
|
|
243
|
-
function responseBlockChunks(block, index, options) {
|
|
244
|
-
const type = asString(block.type);
|
|
245
|
-
switch (type) {
|
|
246
|
-
case "text": {
|
|
247
|
-
const text = asString(block.text);
|
|
248
|
-
if (!text) return [];
|
|
249
|
-
return options.jsonMode ? [{ kind: "json-delta", delta: text }] : [{ kind: "text-delta", text }];
|
|
250
|
-
}
|
|
251
|
-
case "thinking": {
|
|
252
|
-
const text = asString(block.thinking);
|
|
253
|
-
return text ? [{ kind: "reasoning-delta", text, variant: "detail" }] : [];
|
|
254
|
-
}
|
|
255
|
-
case "tool_use": {
|
|
256
|
-
const id = asString(block.id);
|
|
257
|
-
const name = asString(block.name) ?? "unknown";
|
|
258
|
-
const chunks = [optionalRawChunk({ kind: "tool-start", id, name, index })];
|
|
259
|
-
if (block.input !== void 0) {
|
|
260
|
-
chunks.push(
|
|
261
|
-
optionalRawChunk({
|
|
262
|
-
kind: "tool-args-delta",
|
|
263
|
-
id,
|
|
264
|
-
delta: JSON.stringify(block.input),
|
|
265
|
-
index
|
|
266
|
-
})
|
|
267
|
-
);
|
|
268
|
-
}
|
|
269
|
-
chunks.push(optionalRawChunk({ kind: "tool-done", id, index }));
|
|
270
|
-
return chunks;
|
|
271
|
-
}
|
|
272
|
-
case "refusal": {
|
|
273
|
-
const text = asString(block.refusal) ?? asString(block.text);
|
|
274
|
-
return text ? [{ kind: "refusal-delta", text }] : [];
|
|
275
|
-
}
|
|
276
|
-
default:
|
|
277
|
-
return [];
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
350
|
function finishReason(value) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
case "stop_sequence":
|
|
284
|
-
return "stop";
|
|
285
|
-
case "max_tokens":
|
|
286
|
-
return "length";
|
|
287
|
-
case "tool_use":
|
|
288
|
-
return "tool_calls";
|
|
289
|
-
case "refusal":
|
|
290
|
-
return "content_filter";
|
|
291
|
-
case void 0:
|
|
292
|
-
case null:
|
|
293
|
-
return void 0;
|
|
294
|
-
default:
|
|
295
|
-
return "stop";
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
function usageChunk(value) {
|
|
299
|
-
if (!isRecord(value)) return void 0;
|
|
300
|
-
const inputTokens = asNumber(value.input_tokens);
|
|
301
|
-
const outputTokens = asNumber(value.output_tokens);
|
|
302
|
-
if (inputTokens === void 0 && outputTokens === void 0) return void 0;
|
|
303
|
-
return optionalRawChunk({ kind: "usage", inputTokens, outputTokens, raw: value });
|
|
351
|
+
if (value === void 0 || value === null) return void 0;
|
|
352
|
+
return mapAnthropicLikeStopReason(value);
|
|
304
353
|
}
|
|
305
|
-
function
|
|
306
|
-
|
|
307
|
-
|
|
354
|
+
function providerErrorFromPayload(value) {
|
|
355
|
+
if (isRecord(value)) {
|
|
356
|
+
return providerErrorChunksFromPayload(
|
|
357
|
+
value,
|
|
358
|
+
"anthropicAdapter.parseChunk",
|
|
359
|
+
false,
|
|
360
|
+
"Anthropic provider error"
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
return providerErrorChunksFromMessage("Anthropic provider error", false);
|
|
308
364
|
}
|
|
309
365
|
|
|
310
366
|
exports.anthropicAdapter = anthropicAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/anthropic.ts"],"names":["providerErrorChunks"],"mappings":"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","file":"anthropic.cjs","sourcesContent":["/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\n\t) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport { libraryError, providerErrorChunksFromMessage } from \"./errors\";\nimport {\n\tasNumber,\n\tasString,\n\tcreateStreamAdapter,\n\tisRecord,\n\toptionalRawChunk,\n\tparseAdapterJSON,\n} from \"./utils\";\n\nexport interface AnthropicAdapterOptions {\n\t/**\n\t * Map `json` content blocks to json-delta instead of text-delta.\n\t */\n\tjsonMode?: boolean;\n}\n\ninterface BlockState {\n\ttype: string;\n\tid?: string;\n\tname?: string;\n}\n\nexport function anthropicAdapter(options: AnthropicAdapterOptions = {}): StreamAdapter {\n\tconst parser = new AnthropicStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass AnthropicStreamParser {\n\tprivate readonly blocks = new Map<number, BlockState>();\n\tprivate sawFinish = false;\n\n\tconstructor(private readonly options: AnthropicAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterJSON(raw, \"anthropicAdapter.parseChunk\");\n\t\tif (!isRecord(payload)) {\n\t\t\tthrow libraryError(\"anthropicAdapter.parseChunk expected a JSON object\");\n\t\t}\n\n\t\tconst type = asString(payload.type);\n\t\tswitch (type) {\n\t\t\tcase \"ping\":\n\t\t\t\treturn [];\n\t\t\tcase \"message_start\":\n\t\t\t\treturn this.messageStart(payload);\n\t\t\tcase \"content_block_start\":\n\t\t\t\treturn this.contentBlockStart(payload);\n\t\t\tcase \"content_block_delta\":\n\t\t\t\treturn this.contentBlockDelta(payload);\n\t\t\tcase \"content_block_stop\":\n\t\t\t\treturn this.contentBlockStop(payload);\n\t\t\tcase \"message_delta\":\n\t\t\t\treturn this.messageDelta(payload);\n\t\t\tcase \"message_stop\":\n\t\t\t\treturn this.messageStop();\n\t\t\tcase \"error\":\n\t\t\t\treturn providerErrorChunks(payload.error);\n\t\t\tdefault:\n\t\t\t\tthrow libraryError(`anthropicAdapter.parseChunk unknown event type: ${String(type)}`);\n\t\t}\n\t}\n\n\tprivate messageStart(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst message = isRecord(payload.message) ? payload.message : undefined;\n\t\tif (!message) return [];\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst id = asString(message.id);\n\t\tconst model = asString(message.model);\n\t\tif (id) chunks.push({ kind: \"message-start\", id });\n\t\tif (id || model) {\n\t\t\tchunks.push(optionalRawChunk({ kind: \"metadata\", responseId: id, model, raw: message }));\n\t\t}\n\t\tconst usage = usageChunk(message.usage);\n\t\tif (usage) chunks.push(usage);\n\t\treturn chunks;\n\t}\n\n\tprivate contentBlockStart(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst block = isRecord(payload.content_block) ? payload.content_block : undefined;\n\t\tif (!block) return [];\n\t\tconst blockType = asString(block.type) ?? \"unknown\";\n\t\tconst state: BlockState = { type: blockType };\n\t\tthis.blocks.set(index, state);\n\n\t\tswitch (blockType) {\n\t\t\tcase \"text\": {\n\t\t\t\tconst text = asString(block.text);\n\t\t\t\treturn text ? [{ kind: \"text-delta\", text }] : [];\n\t\t\t}\n\t\t\tcase \"thinking\": {\n\t\t\t\tconst text = asString(block.thinking);\n\t\t\t\treturn text ? [{ kind: \"reasoning-delta\", text, variant: \"detail\" }] : [];\n\t\t\t}\n\t\t\tcase \"redacted_thinking\":\n\t\t\t\treturn [];\n\t\t\tcase \"tool_use\": {\n\t\t\t\tconst id = asString(block.id);\n\t\t\t\tconst name = asString(block.name) ?? \"unknown\";\n\t\t\t\tif (id) state.id = id;\n\t\t\t\tstate.name = name;\n\t\t\t\tconst chunks: RawChunk[] = [optionalRawChunk({ kind: \"tool-start\", id, name, index })];\n\t\t\t\tconst input = block.input;\n\t\t\t\tif (input !== undefined && !(isRecord(input) && Object.keys(input).length === 0)) {\n\t\t\t\t\tchunks.push(\n\t\t\t\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id, delta: JSON.stringify(input), index }),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn chunks;\n\t\t\t}\n\t\t\tcase \"json\": {\n\t\t\t\tconst text = asString(block.text) ?? asString(block.partial_json);\n\t\t\t\treturn text ? [{ kind: \"json-delta\", delta: text }] : [];\n\t\t\t}\n\t\t\tcase \"refusal\": {\n\t\t\t\tconst text = asString(block.refusal) ?? asString(block.text);\n\t\t\t\treturn text ? [{ kind: \"refusal-delta\", text }] : [];\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate contentBlockDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tif (!delta) return [];\n\t\tconst deltaType = asString(delta.type);\n\t\tconst state = this.blocks.get(index);\n\n\t\tswitch (deltaType) {\n\t\t\tcase \"text_delta\": {\n\t\t\t\tconst text = asString(delta.text);\n\t\t\t\tif (!text) return [];\n\t\t\t\tif (this.options.jsonMode || state?.type === \"json\")\n\t\t\t\t\treturn [{ kind: \"json-delta\", delta: text }];\n\t\t\t\tif (state?.type === \"refusal\") return [{ kind: \"refusal-delta\", text }];\n\t\t\t\treturn [{ kind: \"text-delta\", text }];\n\t\t\t}\n\t\t\tcase \"thinking_delta\": {\n\t\t\t\tconst text = asString(delta.thinking);\n\t\t\t\treturn text ? [{ kind: \"reasoning-delta\", text, variant: \"detail\" }] : [];\n\t\t\t}\n\t\t\tcase \"input_json_delta\": {\n\t\t\t\tconst partial = asString(delta.partial_json);\n\t\t\t\tif (!partial) return [];\n\t\t\t\treturn [\n\t\t\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id: state?.id, delta: partial, index }),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase \"signature_delta\":\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate contentBlockStop(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst state = this.blocks.get(index);\n\t\tthis.blocks.delete(index);\n\t\tif (state?.type === \"tool_use\") {\n\t\t\treturn [optionalRawChunk({ kind: \"tool-done\", id: state.id, index })];\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate messageDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst usage = usageChunk(payload.usage);\n\t\tif (usage) chunks.push(usage);\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst stopReason = delta ? asString(delta.stop_reason) : undefined;\n\t\tif (stopReason) {\n\t\t\tconst reason = finishReason(stopReason);\n\t\t\tif (reason) chunks.push({ kind: \"finish\", reason });\n\t\t\tthis.sawFinish = true;\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate messageStop(): RawChunk[] {\n\t\tif (this.sawFinish) return [];\n\t\tthis.sawFinish = true;\n\t\treturn [{ kind: \"finish\", reason: \"stop\" }];\n\t}\n}\n\nfunction parseResponse(body: unknown, options: AnthropicAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"anthropicAdapter.parseResponse expected an Anthropic message object\");\n\t}\n\tif (asString(body.type) === \"error\" || isRecord(body.error)) {\n\t\treturn providerErrorChunks(body.error);\n\t}\n\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(body.id);\n\tconst model = asString(body.model);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\tif (id || model)\n\t\tchunks.push(optionalRawChunk({ kind: \"metadata\", responseId: id, model, raw: body }));\n\tconst inputUsage = usageChunk(body.usage);\n\tif (inputUsage) chunks.push(inputUsage);\n\n\tconst content = Array.isArray(body.content) ? body.content : [];\n\tfor (let index = 0; index < content.length; index += 1) {\n\t\tconst block = content[index];\n\t\tif (!isRecord(block)) continue;\n\t\tchunks.push(...responseBlockChunks(block, index, options));\n\t}\n\n\tconst reason = finishReason(asString(body.stop_reason));\n\tif (reason) chunks.push({ kind: \"finish\", reason });\n\treturn chunks;\n}\n\nfunction responseBlockChunks(\n\tblock: Record<string, unknown>,\n\tindex: number,\n\toptions: AnthropicAdapterOptions,\n): RawChunk[] {\n\tconst type = asString(block.type);\n\tswitch (type) {\n\t\tcase \"text\": {\n\t\t\tconst text = asString(block.text);\n\t\t\tif (!text) return [];\n\t\t\treturn options.jsonMode\n\t\t\t\t? [{ kind: \"json-delta\", delta: text }]\n\t\t\t\t: [{ kind: \"text-delta\", text }];\n\t\t}\n\t\tcase \"thinking\": {\n\t\t\tconst text = asString(block.thinking);\n\t\t\treturn text ? [{ kind: \"reasoning-delta\", text, variant: \"detail\" }] : [];\n\t\t}\n\t\tcase \"tool_use\": {\n\t\t\tconst id = asString(block.id);\n\t\t\tconst name = asString(block.name) ?? \"unknown\";\n\t\t\tconst chunks: RawChunk[] = [optionalRawChunk({ kind: \"tool-start\", id, name, index })];\n\t\t\tif (block.input !== undefined) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tdelta: JSON.stringify(block.input),\n\t\t\t\t\t\tindex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tchunks.push(optionalRawChunk({ kind: \"tool-done\", id, index }));\n\t\t\treturn chunks;\n\t\t}\n\t\tcase \"refusal\": {\n\t\t\tconst text = asString(block.refusal) ?? asString(block.text);\n\t\t\treturn text ? [{ kind: \"refusal-delta\", text }] : [];\n\t\t}\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n\nfunction finishReason(value: string | undefined): FinishReason | undefined {\n\tswitch (value) {\n\t\tcase \"end_turn\":\n\t\tcase \"stop_sequence\":\n\t\t\treturn \"stop\";\n\t\tcase \"max_tokens\":\n\t\t\treturn \"length\";\n\t\tcase \"tool_use\":\n\t\t\treturn \"tool_calls\";\n\t\tcase \"refusal\":\n\t\t\treturn \"content_filter\";\n\t\tcase undefined:\n\t\tcase null:\n\t\t\treturn undefined;\n\t\tdefault:\n\t\t\treturn \"stop\";\n\t}\n}\n\nfunction usageChunk(value: unknown): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = asNumber(value.input_tokens);\n\tconst outputTokens = asNumber(value.output_tokens);\n\tif (inputTokens === undefined && outputTokens === undefined) return undefined;\n\treturn optionalRawChunk({ kind: \"usage\", inputTokens, outputTokens, raw: value });\n}\n\nfunction providerErrorChunks(value: unknown): RawChunk[] {\n\tconst message = isRecord(value) ? asString(value.message) : undefined;\n\treturn providerErrorChunksFromMessage(message ?? \"Anthropic provider error\", false);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/shared/anthropic-blocks.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/stop-reasons.ts","../../src/adapters/shared/usage.ts","../../src/adapters/anthropic.ts"],"names":[],"mappings":"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","file":"anthropic.cjs","sourcesContent":["/** Strip undefined own properties; preserve explicit null. */\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined)) as T;\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { stripUndefined } from \"../core/utils/object\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn stripUndefined(input) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asString, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface AnthropicBlockContext {\n\tjsonMode?: boolean | undefined;\n\tmode?: AnthropicBlockMode;\n}\n\nexport type AnthropicBlockMode = \"stream-start\" | \"response\";\n\n/** Map a complete Anthropic content block (response body) to raw chunks. */\nexport function anthropicResponseBlockChunks(\n\tblock: Record<string, unknown>,\n\tindex: number,\n\tcontext: AnthropicBlockContext,\n): RawChunk[] {\n\treturn anthropicBlockStartChunks(block, index, { ...context, mode: \"response\" });\n}\n\n/** Map content_block_start envelope block to raw chunks. */\nexport function anthropicBlockStartChunks(\n\tblock: Record<string, unknown>,\n\tindex: number,\n\tcontext: AnthropicBlockContext,\n): RawChunk[] {\n\tconst mode = context.mode ?? \"stream-start\";\n\tconst blockType = asString(block.type) ?? \"unknown\";\n\tswitch (blockType) {\n\t\tcase \"text\": {\n\t\t\tconst text = asString(block.text);\n\t\t\tif (!text) return [];\n\t\t\tif (context.jsonMode) return [{ kind: \"json-delta\", delta: text }];\n\t\t\treturn [{ kind: \"text-delta\", text }];\n\t\t}\n\t\tcase \"thinking\": {\n\t\t\tconst text = asString(block.thinking);\n\t\t\treturn text ? [{ kind: \"reasoning-delta\", text, variant: \"detail\" }] : [];\n\t\t}\n\t\tcase \"redacted_thinking\":\n\t\t\treturn [];\n\t\tcase \"tool_use\":\n\t\t\treturn anthropicToolUseBlockChunks(block, index, mode);\n\t\tcase \"json\": {\n\t\t\tconst text = asString(block.text) ?? asString(block.partial_json);\n\t\t\treturn text ? [{ kind: \"json-delta\", delta: text }] : [];\n\t\t}\n\t\tcase \"refusal\": {\n\t\t\tconst text = asString(block.refusal) ?? asString(block.text);\n\t\t\treturn text ? [{ kind: \"refusal-delta\", text }] : [];\n\t\t}\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n\nfunction anthropicToolUseBlockChunks(\n\tblock: Record<string, unknown>,\n\tindex: number,\n\tmode: AnthropicBlockMode,\n): RawChunk[] {\n\tconst id = asString(block.id);\n\tconst name = asString(block.name) ?? \"unknown\";\n\tconst chunks: RawChunk[] = [optionalRawChunk({ kind: \"tool-start\", id, name, index })];\n\tconst input = block.input;\n\tif (input !== undefined && !(isRecord(input) && Object.keys(input).length === 0)) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id, delta: JSON.stringify(input), index }),\n\t\t);\n\t}\n\tif (mode === \"response\") {\n\t\tchunks.push(optionalRawChunk({ kind: \"tool-done\", id, index }));\n\t}\n\treturn chunks;\n}\n","import { adapterScopedError } from \"../errors\";\nimport { isRecord, parseAdapterJSON } from \"../utils\";\n\nexport interface ParseAdapterObjectOptions {\n\ttrim?: boolean;\n\tallowDone?: boolean;\n}\n\n/**\n * Parse a single adapter payload string into a JSON object.\n * Returns null for empty / [DONE] lines when configured.\n */\nexport function parseAdapterObjectPayload(\n\traw: string,\n\tscope: string,\n\toptions: ParseAdapterObjectOptions = {},\n): Record<string, unknown> | null {\n\tconst { trim = true, allowDone = true } = options;\n\tconst input = trim ? raw.trim() : raw;\n\tif (input.length === 0 || (allowDone && input === \"[DONE]\")) return null;\n\n\tconst payload = parseAdapterJSON(input, scope);\n\tif (!isRecord(payload)) {\n\t\tthrow adapterScopedError(scope, \"expected a JSON object\");\n\t}\n\treturn payload;\n}\n","import type { FinishReason } from \"../../core/types\";\n\n/** Anthropic Messages and Bedrock Converse share similar stop-reason strings. */\nexport function mapAnthropicLikeStopReason(value: string): FinishReason {\n\tswitch (value) {\n\t\tcase \"end_turn\":\n\t\tcase \"stop_sequence\":\n\t\t\treturn \"stop\";\n\t\tcase \"tool_use\":\n\t\t\treturn \"tool_calls\";\n\t\tcase \"max_tokens\":\n\t\t\treturn \"length\";\n\t\tcase \"content_filtered\":\n\t\tcase \"guardrail_intervened\":\n\t\tcase \"refusal\":\n\t\t\treturn \"content_filter\";\n\t\tdefault:\n\t\t\treturn \"stop\";\n\t}\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface UsageFieldAliases {\n\tinput?: string[];\n\toutput?: string[];\n\treasoning?: string[];\n\ttotal?: string[];\n}\n\nconst DEFAULT_ALIASES: UsageFieldAliases = {\n\tinput: [\"inputTokens\", \"input_tokens\", \"promptTokens\", \"promptTokenCount\", \"inputTokenCount\"],\n\toutput: [\n\t\t\"outputTokens\",\n\t\t\"output_tokens\",\n\t\t\"completionTokens\",\n\t\t\"candidatesTokenCount\",\n\t\t\"outputTokenCount\",\n\t],\n\treasoning: [\"reasoningTokens\", \"reasoning_tokens\", \"thoughtsTokenCount\"],\n\ttotal: [\"totalTokens\", \"totalTokenCount\", \"total_tokens\"],\n};\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\tfields: string[] | undefined,\n): number | undefined {\n\tif (!fields) return undefined;\n\tfor (const field of fields) {\n\t\tconst number = asNumber(value[field]);\n\t\tif (number !== undefined) return number;\n\t}\n\treturn undefined;\n}\n\nexport function buildUsageChunk(\n\tvalue: unknown,\n\taliases: UsageFieldAliases = DEFAULT_ALIASES,\n\toptions?: { mirrorTotalTokens?: boolean },\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, aliases.input);\n\tconst outputTokens = firstNumber(value, aliases.output);\n\tconst reasoningTokens = firstNumber(value, aliases.reasoning);\n\tconst totalTokens = firstNumber(value, aliases.total);\n\tif (\n\t\tinputTokens === undefined &&\n\t\toutputTokens === undefined &&\n\t\treasoningTokens === undefined &&\n\t\ttotalTokens === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\tconst raw =\n\t\toptions?.mirrorTotalTokens && totalTokens !== undefined ? { ...value, totalTokens } : value;\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\treasoningTokens,\n\t\traw,\n\t});\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport { anthropicBlockStartChunks, anthropicResponseBlockChunks } from \"./shared/anthropic-blocks\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { mapAnthropicLikeStopReason } from \"./shared/stop-reasons\";\nimport { buildUsageChunk } from \"./shared/usage\";\nimport {\n\tlibraryError,\n\tproviderErrorChunksFromMessage,\n\tproviderErrorChunksFromPayload,\n} from \"./errors\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport interface AnthropicAdapterOptions {\n\t/** Map `json` content blocks to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n}\n\ninterface BlockState {\n\ttype: string;\n\tid?: string;\n\tname?: string;\n}\n\nexport function anthropicAdapter(options: AnthropicAdapterOptions = {}): StreamAdapter {\n\tconst parser = new AnthropicStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass AnthropicStreamParser {\n\tprivate readonly blocks = new Map<number, BlockState>();\n\tprivate sawFinish = false;\n\n\tconstructor(private readonly options: AnthropicAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, \"anthropicAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tconst type = asString(payload.type);\n\t\tswitch (type) {\n\t\t\tcase \"ping\":\n\t\t\t\treturn [];\n\t\t\tcase \"message_start\":\n\t\t\t\treturn this.messageStart(payload);\n\t\t\tcase \"content_block_start\":\n\t\t\t\treturn this.contentBlockStart(payload);\n\t\t\tcase \"content_block_delta\":\n\t\t\t\treturn this.contentBlockDelta(payload);\n\t\t\tcase \"content_block_stop\":\n\t\t\t\treturn this.contentBlockStop(payload);\n\t\t\tcase \"message_delta\":\n\t\t\t\treturn this.messageDelta(payload);\n\t\t\tcase \"message_stop\":\n\t\t\t\treturn this.messageStop();\n\t\t\tcase \"error\":\n\t\t\t\treturn providerErrorFromPayload(payload.error);\n\t\t\tdefault:\n\t\t\t\tthrow libraryError(`anthropicAdapter.parseChunk unknown event type: ${String(type)}`);\n\t\t}\n\t}\n\n\tprivate messageStart(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst message = isRecord(payload.message) ? payload.message : undefined;\n\t\tif (!message) return [];\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst id = asString(message.id);\n\t\tconst model = asString(message.model);\n\t\tif (id) chunks.push({ kind: \"message-start\", id });\n\t\tif (id || model) {\n\t\t\tchunks.push(optionalRawChunk({ kind: \"metadata\", responseId: id, model, raw: message }));\n\t\t}\n\t\tconst usage = buildUsageChunk(message.usage);\n\t\tif (usage) chunks.push(usage);\n\t\treturn chunks;\n\t}\n\n\tprivate contentBlockStart(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst block = isRecord(payload.content_block) ? payload.content_block : undefined;\n\t\tif (!block) return [];\n\t\tconst blockType = asString(block.type) ?? \"unknown\";\n\t\tconst state: BlockState = { type: blockType };\n\t\tthis.blocks.set(index, state);\n\n\t\tif (blockType === \"tool_use\") {\n\t\t\tconst id = asString(block.id);\n\t\t\tconst name = asString(block.name) ?? \"unknown\";\n\t\t\tif (id) state.id = id;\n\t\t\tstate.name = name;\n\t\t}\n\n\t\treturn anthropicBlockStartChunks(block, index, {\n\t\t\tjsonMode: this.options.jsonMode,\n\t\t\tmode: \"stream-start\",\n\t\t});\n\t}\n\n\tprivate contentBlockDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tif (!delta) return [];\n\t\tconst deltaType = asString(delta.type);\n\t\tconst state = this.blocks.get(index);\n\n\t\tswitch (deltaType) {\n\t\t\tcase \"text_delta\": {\n\t\t\t\tconst text = asString(delta.text);\n\t\t\t\tif (!text) return [];\n\t\t\t\tif (this.options.jsonMode || state?.type === \"json\") {\n\t\t\t\t\treturn [{ kind: \"json-delta\", delta: text }];\n\t\t\t\t}\n\t\t\t\tif (state?.type === \"refusal\") return [{ kind: \"refusal-delta\", text }];\n\t\t\t\treturn [{ kind: \"text-delta\", text }];\n\t\t\t}\n\t\t\tcase \"thinking_delta\": {\n\t\t\t\tconst text = asString(delta.thinking);\n\t\t\t\treturn text ? [{ kind: \"reasoning-delta\", text, variant: \"detail\" }] : [];\n\t\t\t}\n\t\t\tcase \"input_json_delta\": {\n\t\t\t\tconst partial = asString(delta.partial_json);\n\t\t\t\tif (!partial) return [];\n\t\t\t\treturn [\n\t\t\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id: state?.id, delta: partial, index }),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase \"signature_delta\":\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate contentBlockStop(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst state = this.blocks.get(index);\n\t\tthis.blocks.delete(index);\n\t\tif (state?.type === \"tool_use\") {\n\t\t\treturn [optionalRawChunk({ kind: \"tool-done\", id: state.id, index })];\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate messageDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst usage = buildUsageChunk(payload.usage);\n\t\tif (usage) chunks.push(usage);\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst stopReason = delta ? asString(delta.stop_reason) : undefined;\n\t\tif (stopReason) {\n\t\t\tconst reason = finishReason(stopReason);\n\t\t\tif (reason) chunks.push({ kind: \"finish\", reason });\n\t\t\tthis.sawFinish = true;\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate messageStop(): RawChunk[] {\n\t\tif (this.sawFinish) return [];\n\t\tthis.sawFinish = true;\n\t\treturn [{ kind: \"finish\", reason: \"stop\" }];\n\t}\n}\n\nfunction parseResponse(body: unknown, options: AnthropicAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"anthropicAdapter.parseResponse expected an Anthropic message object\");\n\t}\n\tif (asString(body.type) === \"error\" || isRecord(body.error)) {\n\t\treturn providerErrorFromPayload(body.error);\n\t}\n\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(body.id);\n\tconst model = asString(body.model);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\tif (id || model) {\n\t\tchunks.push(optionalRawChunk({ kind: \"metadata\", responseId: id, model, raw: body }));\n\t}\n\tconst inputUsage = buildUsageChunk(body.usage);\n\tif (inputUsage) chunks.push(inputUsage);\n\n\tconst content = Array.isArray(body.content) ? body.content : [];\n\tfor (let index = 0; index < content.length; index += 1) {\n\t\tconst block = content[index];\n\t\tif (!isRecord(block)) continue;\n\t\tchunks.push(...anthropicResponseBlockChunks(block, index, { jsonMode: options.jsonMode }));\n\t}\n\n\tconst reason = finishReason(asString(body.stop_reason));\n\tif (reason) chunks.push({ kind: \"finish\", reason });\n\treturn chunks;\n}\n\nfunction finishReason(value: string | undefined): FinishReason | undefined {\n\tif (value === undefined || value === null) return undefined;\n\treturn mapAnthropicLikeStopReason(value);\n}\n\nfunction providerErrorFromPayload(value: unknown): RawChunk[] {\n\tif (isRecord(value)) {\n\t\treturn providerErrorChunksFromPayload(\n\t\t\tvalue,\n\t\t\t\"anthropicAdapter.parseChunk\",\n\t\t\tfalse,\n\t\t\t\"Anthropic provider error\",\n\t\t);\n\t}\n\treturn providerErrorChunksFromMessage(\"Anthropic provider error\", false);\n}\n"]}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { S as StreamAdapter } from '../types-CskRfrmD.cjs';
|
|
2
2
|
|
|
3
3
|
interface AnthropicAdapterOptions {
|
|
4
|
-
/**
|
|
5
|
-
* Map `json` content blocks to json-delta instead of text-delta.
|
|
6
|
-
*/
|
|
4
|
+
/** Map `json` content blocks to json-delta instead of text-delta. */
|
|
7
5
|
jsonMode?: boolean;
|
|
8
6
|
}
|
|
9
7
|
declare function anthropicAdapter(options?: AnthropicAdapterOptions): StreamAdapter;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { S as StreamAdapter } from '../types-CskRfrmD.js';
|
|
2
2
|
|
|
3
3
|
interface AnthropicAdapterOptions {
|
|
4
|
-
/**
|
|
5
|
-
* Map `json` content blocks to json-delta instead of text-delta.
|
|
6
|
-
*/
|
|
4
|
+
/** Map `json` content blocks to json-delta instead of text-delta. */
|
|
7
5
|
jsonMode?: boolean;
|
|
8
6
|
}
|
|
9
7
|
declare function anthropicAdapter(options?: AnthropicAdapterOptions): StreamAdapter;
|