llm-stream-assemble 1.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.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -0
  3. package/dist/adapters/anthropic.cjs +312 -0
  4. package/dist/adapters/anthropic.cjs.map +1 -0
  5. package/dist/adapters/anthropic.d.cts +11 -0
  6. package/dist/adapters/anthropic.d.ts +11 -0
  7. package/dist/adapters/anthropic.js +310 -0
  8. package/dist/adapters/anthropic.js.map +1 -0
  9. package/dist/adapters/openai-chat.cjs +499 -0
  10. package/dist/adapters/openai-chat.cjs.map +1 -0
  11. package/dist/adapters/openai-chat.d.cts +9 -0
  12. package/dist/adapters/openai-chat.d.ts +9 -0
  13. package/dist/adapters/openai-chat.js +497 -0
  14. package/dist/adapters/openai-chat.js.map +1 -0
  15. package/dist/adapters/openai-compatible.cjs +519 -0
  16. package/dist/adapters/openai-compatible.cjs.map +1 -0
  17. package/dist/adapters/openai-compatible.d.cts +15 -0
  18. package/dist/adapters/openai-compatible.d.ts +15 -0
  19. package/dist/adapters/openai-compatible.js +517 -0
  20. package/dist/adapters/openai-compatible.js.map +1 -0
  21. package/dist/adapters/openai-responses.cjs +444 -0
  22. package/dist/adapters/openai-responses.cjs.map +1 -0
  23. package/dist/adapters/openai-responses.d.cts +8 -0
  24. package/dist/adapters/openai-responses.d.ts +8 -0
  25. package/dist/adapters/openai-responses.js +442 -0
  26. package/dist/adapters/openai-responses.js.map +1 -0
  27. package/dist/core/index.cjs +816 -0
  28. package/dist/core/index.cjs.map +1 -0
  29. package/dist/core/index.d.cts +18 -0
  30. package/dist/core/index.d.ts +18 -0
  31. package/dist/core/index.js +808 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/index.cjs +2238 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.cts +66 -0
  36. package/dist/index.d.ts +66 -0
  37. package/dist/index.js +2206 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/types-CskRfrmD.d.cts +176 -0
  40. package/dist/types-CskRfrmD.d.ts +176 -0
  41. package/package.json +95 -0
@@ -0,0 +1,312 @@
1
+ 'use strict';
2
+
3
+ // src/adapters/utils.ts
4
+ function isRecord(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+ function asString(value) {
8
+ return typeof value === "string" ? value : void 0;
9
+ }
10
+ function asNumber(value) {
11
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
12
+ }
13
+ function optionalRawChunk(input) {
14
+ return Object.fromEntries(
15
+ Object.entries(input).filter(([, value]) => value !== void 0)
16
+ );
17
+ }
18
+ function prefixedAdapterError(feature, message) {
19
+ return adapterScopedError(feature, message);
20
+ }
21
+ function createStreamAdapter(config) {
22
+ return {
23
+ parseChunk(raw) {
24
+ return config.parser.parseChunk(raw);
25
+ },
26
+ parseResponse(body) {
27
+ return config.parseResponse(body, config.options);
28
+ }
29
+ };
30
+ }
31
+ function parseAdapterJSON(raw, feature) {
32
+ try {
33
+ return JSON.parse(raw);
34
+ } catch (error) {
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ throw prefixedAdapterError(feature, message);
37
+ }
38
+ }
39
+
40
+ // src/adapters/errors.ts
41
+ function libraryError(message) {
42
+ return new Error(`llm-stream-assemble: ${message}`);
43
+ }
44
+ function adapterScopedError(scope, message) {
45
+ return new Error(`llm-stream-assemble: ${scope}: ${message}`);
46
+ }
47
+ function providerErrorChunks(error, recoverable = false) {
48
+ return [
49
+ { kind: "provider-error", error, recoverable },
50
+ { kind: "finish", reason: "error" }
51
+ ];
52
+ }
53
+ function providerErrorChunksFromMessage(message, recoverable = false) {
54
+ return providerErrorChunks(libraryError(message), recoverable);
55
+ }
56
+
57
+ // src/adapters/anthropic.ts
58
+ function anthropicAdapter(options = {}) {
59
+ const parser = new AnthropicStreamParser(options);
60
+ return createStreamAdapter({
61
+ parser,
62
+ parseResponse,
63
+ options
64
+ });
65
+ }
66
+ var AnthropicStreamParser = class {
67
+ constructor(options) {
68
+ this.options = options;
69
+ }
70
+ options;
71
+ blocks = /* @__PURE__ */ new Map();
72
+ sawFinish = false;
73
+ parseChunk(raw) {
74
+ const payload = parseAdapterJSON(raw, "anthropicAdapter.parseChunk");
75
+ if (!isRecord(payload)) {
76
+ throw libraryError("anthropicAdapter.parseChunk expected a JSON object");
77
+ }
78
+ const type = asString(payload.type);
79
+ switch (type) {
80
+ case "ping":
81
+ return [];
82
+ case "message_start":
83
+ return this.messageStart(payload);
84
+ case "content_block_start":
85
+ return this.contentBlockStart(payload);
86
+ case "content_block_delta":
87
+ return this.contentBlockDelta(payload);
88
+ case "content_block_stop":
89
+ return this.contentBlockStop(payload);
90
+ case "message_delta":
91
+ return this.messageDelta(payload);
92
+ case "message_stop":
93
+ return this.messageStop();
94
+ case "error":
95
+ return providerErrorChunks2(payload.error);
96
+ default:
97
+ throw libraryError(`anthropicAdapter.parseChunk unknown event type: ${String(type)}`);
98
+ }
99
+ }
100
+ messageStart(payload) {
101
+ const message = isRecord(payload.message) ? payload.message : void 0;
102
+ if (!message) return [];
103
+ const chunks = [];
104
+ const id = asString(message.id);
105
+ const model = asString(message.model);
106
+ if (id) chunks.push({ kind: "message-start", id });
107
+ if (id || model) {
108
+ chunks.push(optionalRawChunk({ kind: "metadata", responseId: id, model, raw: message }));
109
+ }
110
+ const usage = usageChunk(message.usage);
111
+ if (usage) chunks.push(usage);
112
+ return chunks;
113
+ }
114
+ contentBlockStart(payload) {
115
+ const index = asNumber(payload.index) ?? 0;
116
+ const block = isRecord(payload.content_block) ? payload.content_block : void 0;
117
+ if (!block) return [];
118
+ const blockType = asString(block.type) ?? "unknown";
119
+ const state = { type: blockType };
120
+ this.blocks.set(index, state);
121
+ switch (blockType) {
122
+ case "text": {
123
+ const text = asString(block.text);
124
+ return text ? [{ kind: "text-delta", text }] : [];
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 [];
156
+ }
157
+ }
158
+ contentBlockDelta(payload) {
159
+ const index = asNumber(payload.index) ?? 0;
160
+ const delta = isRecord(payload.delta) ? payload.delta : void 0;
161
+ if (!delta) return [];
162
+ const deltaType = asString(delta.type);
163
+ const state = this.blocks.get(index);
164
+ switch (deltaType) {
165
+ case "text_delta": {
166
+ const text = asString(delta.text);
167
+ if (!text) return [];
168
+ if (this.options.jsonMode || state?.type === "json")
169
+ return [{ kind: "json-delta", delta: text }];
170
+ if (state?.type === "refusal") return [{ kind: "refusal-delta", text }];
171
+ return [{ kind: "text-delta", text }];
172
+ }
173
+ case "thinking_delta": {
174
+ const text = asString(delta.thinking);
175
+ return text ? [{ kind: "reasoning-delta", text, variant: "detail" }] : [];
176
+ }
177
+ case "input_json_delta": {
178
+ const partial = asString(delta.partial_json);
179
+ if (!partial) return [];
180
+ return [
181
+ optionalRawChunk({ kind: "tool-args-delta", id: state?.id, delta: partial, index })
182
+ ];
183
+ }
184
+ case "signature_delta":
185
+ return [];
186
+ default:
187
+ return [];
188
+ }
189
+ }
190
+ contentBlockStop(payload) {
191
+ const index = asNumber(payload.index) ?? 0;
192
+ const state = this.blocks.get(index);
193
+ this.blocks.delete(index);
194
+ if (state?.type === "tool_use") {
195
+ return [optionalRawChunk({ kind: "tool-done", id: state.id, index })];
196
+ }
197
+ return [];
198
+ }
199
+ messageDelta(payload) {
200
+ const chunks = [];
201
+ const usage = usageChunk(payload.usage);
202
+ if (usage) chunks.push(usage);
203
+ const delta = isRecord(payload.delta) ? payload.delta : void 0;
204
+ const stopReason = delta ? asString(delta.stop_reason) : void 0;
205
+ if (stopReason) {
206
+ const reason = finishReason(stopReason);
207
+ if (reason) chunks.push({ kind: "finish", reason });
208
+ this.sawFinish = true;
209
+ }
210
+ return chunks;
211
+ }
212
+ messageStop() {
213
+ if (this.sawFinish) return [];
214
+ this.sawFinish = true;
215
+ return [{ kind: "finish", reason: "stop" }];
216
+ }
217
+ };
218
+ function parseResponse(body, options) {
219
+ if (!isRecord(body)) {
220
+ throw libraryError("anthropicAdapter.parseResponse expected an Anthropic message object");
221
+ }
222
+ if (asString(body.type) === "error" || isRecord(body.error)) {
223
+ return providerErrorChunks2(body.error);
224
+ }
225
+ const chunks = [];
226
+ const id = asString(body.id);
227
+ const model = asString(body.model);
228
+ if (id) chunks.push({ kind: "message-start", id });
229
+ if (id || model)
230
+ chunks.push(optionalRawChunk({ kind: "metadata", responseId: id, model, raw: body }));
231
+ const inputUsage = usageChunk(body.usage);
232
+ if (inputUsage) chunks.push(inputUsage);
233
+ const content = Array.isArray(body.content) ? body.content : [];
234
+ for (let index = 0; index < content.length; index += 1) {
235
+ const block = content[index];
236
+ if (!isRecord(block)) continue;
237
+ chunks.push(...responseBlockChunks(block, index, options));
238
+ }
239
+ const reason = finishReason(asString(body.stop_reason));
240
+ if (reason) chunks.push({ kind: "finish", reason });
241
+ return chunks;
242
+ }
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
+ function finishReason(value) {
281
+ switch (value) {
282
+ case "end_turn":
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 });
304
+ }
305
+ function providerErrorChunks2(value) {
306
+ const message = isRecord(value) ? asString(value.message) : void 0;
307
+ return providerErrorChunksFromMessage(message ?? "Anthropic provider error", false);
308
+ }
309
+
310
+ exports.anthropicAdapter = anthropicAdapter;
311
+ //# sourceMappingURL=anthropic.cjs.map
312
+ //# sourceMappingURL=anthropic.cjs.map
@@ -0,0 +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"]}
@@ -0,0 +1,11 @@
1
+ import { S as StreamAdapter } from '../types-CskRfrmD.cjs';
2
+
3
+ interface AnthropicAdapterOptions {
4
+ /**
5
+ * Map `json` content blocks to json-delta instead of text-delta.
6
+ */
7
+ jsonMode?: boolean;
8
+ }
9
+ declare function anthropicAdapter(options?: AnthropicAdapterOptions): StreamAdapter;
10
+
11
+ export { type AnthropicAdapterOptions, anthropicAdapter };
@@ -0,0 +1,11 @@
1
+ import { S as StreamAdapter } from '../types-CskRfrmD.js';
2
+
3
+ interface AnthropicAdapterOptions {
4
+ /**
5
+ * Map `json` content blocks to json-delta instead of text-delta.
6
+ */
7
+ jsonMode?: boolean;
8
+ }
9
+ declare function anthropicAdapter(options?: AnthropicAdapterOptions): StreamAdapter;
10
+
11
+ export { type AnthropicAdapterOptions, anthropicAdapter };