llm-stream-assemble 1.4.0 → 1.5.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 (44) hide show
  1. package/README.md +47 -6
  2. package/dist/adapters/anthropic.cjs +181 -125
  3. package/dist/adapters/anthropic.cjs.map +1 -1
  4. package/dist/adapters/anthropic.d.cts +1 -3
  5. package/dist/adapters/anthropic.d.ts +1 -3
  6. package/dist/adapters/anthropic.js +181 -125
  7. package/dist/adapters/anthropic.js.map +1 -1
  8. package/dist/adapters/bedrock.cjs +155 -118
  9. package/dist/adapters/bedrock.cjs.map +1 -1
  10. package/dist/adapters/bedrock.js +155 -118
  11. package/dist/adapters/bedrock.js.map +1 -1
  12. package/dist/adapters/cohere.cjs +594 -0
  13. package/dist/adapters/cohere.cjs.map +1 -0
  14. package/dist/adapters/cohere.d.cts +9 -0
  15. package/dist/adapters/cohere.d.ts +9 -0
  16. package/dist/adapters/cohere.js +592 -0
  17. package/dist/adapters/cohere.js.map +1 -0
  18. package/dist/adapters/gemini.cjs +86 -44
  19. package/dist/adapters/gemini.cjs.map +1 -1
  20. package/dist/adapters/gemini.js +86 -44
  21. package/dist/adapters/gemini.js.map +1 -1
  22. package/dist/adapters/openai-chat.cjs +20 -8
  23. package/dist/adapters/openai-chat.cjs.map +1 -1
  24. package/dist/adapters/openai-chat.js +20 -8
  25. package/dist/adapters/openai-chat.js.map +1 -1
  26. package/dist/adapters/openai-compatible.cjs +20 -8
  27. package/dist/adapters/openai-compatible.cjs.map +1 -1
  28. package/dist/adapters/openai-compatible.js +20 -8
  29. package/dist/adapters/openai-compatible.js.map +1 -1
  30. package/dist/adapters/openai-responses.cjs +37 -27
  31. package/dist/adapters/openai-responses.cjs.map +1 -1
  32. package/dist/adapters/openai-responses.js +37 -27
  33. package/dist/adapters/openai-responses.js.map +1 -1
  34. package/dist/core/index.cjs +9 -2
  35. package/dist/core/index.cjs.map +1 -1
  36. package/dist/core/index.js +9 -2
  37. package/dist/core/index.js.map +1 -1
  38. package/dist/index.cjs +715 -297
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +2 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.js +715 -298
  43. package/dist/index.js.map +1 -1
  44. package/package.json +9 -2
@@ -1,3 +1,8 @@
1
+ // src/core/utils/object.ts
2
+ function stripUndefined(obj) {
3
+ return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== void 0));
4
+ }
5
+
1
6
  // src/adapters/utils.ts
2
7
  function isRecord(value) {
3
8
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -9,9 +14,7 @@ function asNumber(value) {
9
14
  return typeof value === "number" && Number.isFinite(value) ? value : void 0;
10
15
  }
11
16
  function optionalRawChunk(input) {
12
- return Object.fromEntries(
13
- Object.entries(input).filter(([, value]) => value !== void 0)
14
- );
17
+ return stripUndefined(input);
15
18
  }
16
19
  function prefixedAdapterError(feature, message) {
17
20
  return adapterScopedError(feature, message);
@@ -58,6 +61,96 @@ function providerErrorChunksFromPayload(errorPayload, scope, recoverable, fallba
58
61
  return providerErrorChunks(error, recoverable);
59
62
  }
60
63
 
64
+ // src/adapters/shared/incremental-json.ts
65
+ function incrementalJsonStringDelta(state, nextInput) {
66
+ const prev = state.lastArgsJson;
67
+ if (nextInput === prev) return void 0;
68
+ const delta = prev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;
69
+ state.lastArgsJson = nextInput;
70
+ return delta.length > 0 ? delta : void 0;
71
+ }
72
+
73
+ // src/adapters/shared/parse-payload.ts
74
+ function parseAdapterObjectPayload(raw, scope, options = {}) {
75
+ const { trim = true, allowDone = true } = options;
76
+ const input = trim ? raw.trim() : raw;
77
+ if (input.length === 0 || allowDone && input === "[DONE]") return null;
78
+ const payload = parseAdapterJSON(input, scope);
79
+ if (!isRecord(payload)) {
80
+ throw adapterScopedError(scope, "expected a JSON object");
81
+ }
82
+ return payload;
83
+ }
84
+
85
+ // src/adapters/shared/stop-reasons.ts
86
+ function mapAnthropicLikeStopReason(value) {
87
+ switch (value) {
88
+ case "end_turn":
89
+ case "stop_sequence":
90
+ return "stop";
91
+ case "tool_use":
92
+ return "tool_calls";
93
+ case "max_tokens":
94
+ return "length";
95
+ case "content_filtered":
96
+ case "guardrail_intervened":
97
+ case "refusal":
98
+ return "content_filter";
99
+ default:
100
+ return "stop";
101
+ }
102
+ }
103
+
104
+ // src/adapters/shared/text-delta.ts
105
+ function textOrJsonDelta(text, options) {
106
+ if (text.length === 0) return void 0;
107
+ if (options.jsonMode) return { kind: "json-delta", delta: text };
108
+ if (options.choiceIndex !== void 0) {
109
+ return { kind: "text-delta", text, choiceIndex: options.choiceIndex };
110
+ }
111
+ return { kind: "text-delta", text };
112
+ }
113
+
114
+ // src/adapters/shared/usage.ts
115
+ var DEFAULT_ALIASES = {
116
+ input: ["inputTokens", "input_tokens", "promptTokens", "promptTokenCount", "inputTokenCount"],
117
+ output: [
118
+ "outputTokens",
119
+ "output_tokens",
120
+ "completionTokens",
121
+ "candidatesTokenCount",
122
+ "outputTokenCount"
123
+ ],
124
+ reasoning: ["reasoningTokens", "reasoning_tokens", "thoughtsTokenCount"],
125
+ total: ["totalTokens", "totalTokenCount", "total_tokens"]
126
+ };
127
+ function firstNumber(value, fields) {
128
+ if (!fields) return void 0;
129
+ for (const field of fields) {
130
+ const number = asNumber(value[field]);
131
+ if (number !== void 0) return number;
132
+ }
133
+ return void 0;
134
+ }
135
+ function buildUsageChunk(value, aliases = DEFAULT_ALIASES, options) {
136
+ if (!isRecord(value)) return void 0;
137
+ const inputTokens = firstNumber(value, aliases.input);
138
+ const outputTokens = firstNumber(value, aliases.output);
139
+ const reasoningTokens = firstNumber(value, aliases.reasoning);
140
+ const totalTokens = firstNumber(value, aliases.total);
141
+ if (inputTokens === void 0 && outputTokens === void 0 && reasoningTokens === void 0 && totalTokens === void 0) {
142
+ return void 0;
143
+ }
144
+ const raw = totalTokens !== void 0 ? { ...value, totalTokens } : value;
145
+ return optionalRawChunk({
146
+ kind: "usage",
147
+ inputTokens,
148
+ outputTokens,
149
+ reasoningTokens,
150
+ raw
151
+ });
152
+ }
153
+
61
154
  // src/adapters/bedrock.ts
62
155
  var EXCEPTION_KEYS = [
63
156
  "internalServerException",
@@ -82,12 +175,8 @@ var BedrockStreamParser = class {
82
175
  messageStarted = false;
83
176
  blocks = /* @__PURE__ */ new Map();
84
177
  parseChunk(raw) {
85
- const trimmed = raw.trim();
86
- if (trimmed.length === 0 || trimmed === "[DONE]") return [];
87
- const payload = parseAdapterJSON(trimmed, "bedrockAdapter.parseChunk");
88
- if (!isRecord(payload)) {
89
- throw libraryError("bedrockAdapter.parseChunk expected a JSON object");
90
- }
178
+ const payload = parseAdapterObjectPayload(raw, "bedrockAdapter.parseChunk");
179
+ if (!payload) return [];
91
180
  for (const key of EXCEPTION_KEYS) {
92
181
  const exception = payload[key];
93
182
  if (isRecord(exception)) {
@@ -166,15 +255,9 @@ var BedrockStreamParser = class {
166
255
  if (!delta) return [];
167
256
  const chunks = [];
168
257
  const text = asString(delta.text);
169
- if (text !== void 0 && text.length > 0) {
170
- if (this.options.jsonMode) {
171
- chunks.push({ kind: "json-delta", delta: text });
172
- } else {
173
- chunks.push({ kind: "text-delta", text, choiceIndex: 0 });
174
- }
175
- }
176
- const reasoning = delta.reasoningContent;
177
- const reasoningText = reasoningTextFromDelta(reasoning, this.options.modelFamily);
258
+ const textChunk = text ? textOrJsonDelta(text, { jsonMode: this.options.jsonMode, choiceIndex: 0 }) : void 0;
259
+ if (textChunk) chunks.push(textChunk);
260
+ const reasoningText = reasoningTextFromDelta(delta.reasoningContent, this.options.modelFamily);
178
261
  if (reasoningText) {
179
262
  chunks.push({ kind: "reasoning-delta", text: reasoningText, variant: "detail" });
180
263
  }
@@ -190,9 +273,9 @@ var BedrockStreamParser = class {
190
273
  const input = toolUse.input;
191
274
  let delta;
192
275
  if (typeof input === "string") {
193
- delta = incrementalArgsDelta(state, input);
276
+ delta = incrementalJsonStringDelta(state, input);
194
277
  } else if (isRecord(input)) {
195
- delta = incrementalArgsDelta(state, JSON.stringify(input));
278
+ delta = incrementalJsonStringDelta(state, JSON.stringify(input));
196
279
  }
197
280
  if (!delta) return [];
198
281
  return [
@@ -234,13 +317,17 @@ var BedrockStreamParser = class {
234
317
  }
235
318
  })
236
319
  );
237
- chunks.push({ kind: "finish", reason: mapStopReason(stopReason), choiceIndex: 0 });
320
+ chunks.push({
321
+ kind: "finish",
322
+ reason: mapAnthropicLikeStopReason(stopReason),
323
+ choiceIndex: 0
324
+ });
238
325
  return chunks;
239
326
  }
240
327
  metadataChunks(value) {
241
328
  if (!isRecord(value)) return [];
242
329
  const chunks = [];
243
- const usage = usageChunk(value.usage);
330
+ const usage = buildUsageChunk(value.usage, void 0);
244
331
  if (usage) chunks.push(usage);
245
332
  const metrics = value.metrics;
246
333
  const trace = value.trace;
@@ -270,76 +357,69 @@ function parseResponse(body, options) {
270
357
  );
271
358
  }
272
359
  }
360
+ const parser = new BedrockStreamParser(options);
361
+ const syntheticEvents = synthesizeConverseStreamEvents(body);
273
362
  const chunks = [];
363
+ for (const event of syntheticEvents) {
364
+ chunks.push(...parser.parseChunk(JSON.stringify(event)));
365
+ }
366
+ const stopReason = asString(body.stopReason);
367
+ if (stopReason) {
368
+ chunks.push({
369
+ kind: "finish",
370
+ reason: mapAnthropicLikeStopReason(stopReason),
371
+ choiceIndex: 0
372
+ });
373
+ } else if (!chunks.some((chunk) => chunk.kind === "finish")) {
374
+ chunks.push({ kind: "finish", reason: "stop", choiceIndex: 0 });
375
+ }
376
+ return chunks;
377
+ }
378
+ function synthesizeConverseStreamEvents(body) {
379
+ const events = [];
274
380
  const output = isRecord(body.output) ? body.output : void 0;
275
381
  const message = output && isRecord(output.message) ? output.message : void 0;
276
382
  if (message) {
277
- chunks.push({ kind: "message-start" });
278
- const role = asString(message.role);
279
- if (role) {
280
- chunks.push(optionalRawChunk({ kind: "metadata", raw: { role } }));
281
- }
383
+ events.push({ messageStart: { role: message.role } });
282
384
  const content = Array.isArray(message.content) ? message.content : [];
283
385
  let blockIndex = 0;
284
386
  for (const block of content) {
285
387
  if (!isRecord(block)) continue;
286
- const text = asString(block.text);
287
- if (text !== void 0 && text.length > 0) {
288
- if (options.jsonMode) {
289
- chunks.push({ kind: "json-delta", delta: text });
290
- } else {
291
- chunks.push({ kind: "text-delta", text, choiceIndex: 0 });
292
- }
293
- }
294
388
  const toolUse = isRecord(block.toolUse) ? block.toolUse : void 0;
295
389
  if (toolUse) {
296
- const id = asString(toolUse.toolUseId) ?? `bedrock:${blockIndex}`;
297
- const name = asString(toolUse.name) ?? "unknown";
298
- chunks.push(
299
- optionalRawChunk({
300
- kind: "tool-start",
301
- id,
302
- name,
303
- index: blockIndex,
304
- choiceIndex: 0
305
- })
306
- );
307
- const input = toolUse.input;
308
- if (input !== void 0) {
309
- const argsJson = typeof input === "string" ? input : JSON.stringify(input);
310
- if (argsJson.length > 0) {
311
- chunks.push(
312
- optionalRawChunk({
313
- kind: "tool-args-delta",
314
- id,
315
- delta: argsJson,
316
- index: blockIndex,
317
- choiceIndex: 0
318
- })
319
- );
390
+ events.push({
391
+ contentBlockStart: {
392
+ contentBlockIndex: blockIndex,
393
+ start: { toolUse }
320
394
  }
395
+ });
396
+ if (toolUse.input !== void 0) {
397
+ events.push({
398
+ contentBlockDelta: {
399
+ contentBlockIndex: blockIndex,
400
+ delta: { toolUse: { input: toolUse.input } }
401
+ }
402
+ });
403
+ }
404
+ events.push({ contentBlockStop: { contentBlockIndex: blockIndex } });
405
+ } else {
406
+ const text = asString(block.text);
407
+ if (text !== void 0 && text.length > 0) {
408
+ events.push({
409
+ contentBlockDelta: {
410
+ contentBlockIndex: blockIndex,
411
+ delta: { text }
412
+ }
413
+ });
321
414
  }
322
- chunks.push(
323
- optionalRawChunk({
324
- kind: "tool-done",
325
- id,
326
- index: blockIndex,
327
- choiceIndex: 0
328
- })
329
- );
330
415
  }
331
416
  blockIndex += 1;
332
417
  }
333
418
  }
334
- const usage = usageChunk(body.usage);
335
- if (usage) chunks.push(usage);
336
- const stopReason = asString(body.stopReason);
337
- if (stopReason) {
338
- chunks.push({ kind: "finish", reason: mapStopReason(stopReason), choiceIndex: 0 });
339
- } else if (!chunks.some((chunk) => chunk.kind === "finish")) {
340
- chunks.push({ kind: "finish", reason: "stop" });
419
+ if (body.usage !== void 0) {
420
+ events.push({ metadata: { usage: body.usage } });
341
421
  }
342
- return chunks;
422
+ return events;
343
423
  }
344
424
  function reasoningTextFromDelta(reasoning, modelFamily) {
345
425
  if (reasoning === void 0) return void 0;
@@ -353,49 +433,6 @@ function reasoningTextFromDelta(reasoning, modelFamily) {
353
433
  }
354
434
  return void 0;
355
435
  }
356
- function incrementalArgsDelta(state, nextInput) {
357
- const prev = state.lastArgsJson;
358
- if (nextInput === prev) return void 0;
359
- let delta;
360
- if (prev.length > 0 && nextInput.startsWith(prev)) {
361
- delta = nextInput.slice(prev.length);
362
- } else {
363
- delta = nextInput;
364
- }
365
- state.lastArgsJson = nextInput;
366
- return delta.length > 0 ? delta : void 0;
367
- }
368
- function mapStopReason(value) {
369
- switch (value) {
370
- case "end_turn":
371
- case "stop_sequence":
372
- return "stop";
373
- case "tool_use":
374
- return "tool_calls";
375
- case "max_tokens":
376
- return "length";
377
- case "content_filtered":
378
- case "guardrail_intervened":
379
- return "content_filter";
380
- default:
381
- return "stop";
382
- }
383
- }
384
- function usageChunk(value) {
385
- if (!isRecord(value)) return void 0;
386
- const inputTokens = asNumber(value.inputTokens) ?? asNumber(value.promptTokens) ?? asNumber(value.inputTokenCount);
387
- const outputTokens = asNumber(value.outputTokens) ?? asNumber(value.completionTokens) ?? asNumber(value.outputTokenCount);
388
- const totalTokens = asNumber(value.totalTokens) ?? asNumber(value.totalTokenCount);
389
- if (inputTokens === void 0 && outputTokens === void 0 && totalTokens === void 0) {
390
- return void 0;
391
- }
392
- return optionalRawChunk({
393
- kind: "usage",
394
- inputTokens,
395
- outputTokens,
396
- raw: { ...value, totalTokens }
397
- });
398
- }
399
436
  function optionalMetadataRaw(payload) {
400
437
  if (Object.keys(payload).length === 0) return [];
401
438
  return [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/bedrock.ts"],"names":[],"mappings":"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","file":"bedrock.js","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, providerErrorChunksFromPayload } from \"./errors\";\nimport {\n\tasNumber,\n\tasString,\n\tcreateStreamAdapter,\n\tisRecord,\n\toptionalRawChunk,\n\tparseAdapterJSON,\n} from \"./utils\";\n\nexport type BedrockModelFamily = \"anthropic\" | \"openai-like\" | \"nova\" | \"auto\";\n\nexport interface BedrockAdapterOptions {\n\t/**\n\t * Hint which ConverseStream payload dialect to prefer when envelopes overlap.\n\t * \"auto\" uses structural detection (document heuristics in adapter-guide).\n\t */\n\tmodelFamily?: BedrockModelFamily;\n\t/** Map structured JSON text blocks to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n}\n\ninterface BlockToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\topen: boolean;\n\tlastArgsJson: string;\n}\n\nconst EXCEPTION_KEYS = [\n\t\"internalServerException\",\n\t\"modelStreamErrorException\",\n\t\"validationException\",\n\t\"throttlingException\",\n\t\"serviceUnavailableException\",\n] as const;\n\nexport function bedrockAdapter(options: BedrockAdapterOptions = {}): StreamAdapter {\n\tconst parser = new BedrockStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass BedrockStreamParser {\n\tprivate messageStarted = false;\n\tprivate readonly blocks = new Map<number, BlockToolState>();\n\n\tconstructor(private readonly options: BedrockAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst trimmed = raw.trim();\n\t\tif (trimmed.length === 0 || trimmed === \"[DONE]\") return [];\n\n\t\tconst payload = parseAdapterJSON(trimmed, \"bedrockAdapter.parseChunk\");\n\t\tif (!isRecord(payload)) {\n\t\t\tthrow libraryError(\"bedrockAdapter.parseChunk expected a JSON object\");\n\t\t}\n\n\t\tfor (const key of EXCEPTION_KEYS) {\n\t\t\tconst exception = payload[key];\n\t\t\tif (isRecord(exception)) {\n\t\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\t\texception,\n\t\t\t\t\t\"bedrockAdapter.parseChunk\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t`Bedrock ${key}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (payload.messageStart !== undefined) {\n\t\t\treturn this.messageStartChunks(payload.messageStart);\n\t\t}\n\t\tif (payload.contentBlockStart !== undefined) {\n\t\t\treturn this.contentBlockStartChunks(payload.contentBlockStart);\n\t\t}\n\t\tif (payload.contentBlockDelta !== undefined) {\n\t\t\treturn this.contentBlockDeltaChunks(payload.contentBlockDelta);\n\t\t}\n\t\tif (payload.contentBlockStop !== undefined) {\n\t\t\treturn this.contentBlockStopChunks(payload.contentBlockStop);\n\t\t}\n\t\tif (payload.messageStop !== undefined) {\n\t\t\treturn this.messageStopChunks(payload.messageStop);\n\t\t}\n\t\tif (payload.metadata !== undefined) {\n\t\t\treturn this.metadataChunks(payload.metadata);\n\t\t}\n\n\t\treturn optionalMetadataRaw(payload);\n\t}\n\n\tprivate messageStartChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tif (this.messageStarted) return [];\n\t\tthis.messageStarted = true;\n\t\tconst role = asString(value.role);\n\t\treturn [\n\t\t\t{ kind: \"message-start\" },\n\t\t\t...(role\n\t\t\t\t? [\n\t\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\t\t\traw: { role },\n\t\t\t\t\t\t}),\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t];\n\t}\n\n\tprivate contentBlockStartChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst start = isRecord(value.start) ? value.start : undefined;\n\t\tconst toolUse = start && isRecord(start.toolUse) ? start.toolUse : undefined;\n\t\tif (!toolUse) return [];\n\n\t\tconst id = asString(toolUse.toolUseId) ?? `bedrock:${blockIndex}`;\n\t\tconst name = asString(toolUse.name) ?? \"unknown\";\n\t\tthis.blocks.set(blockIndex, {\n\t\t\tid,\n\t\t\tname,\n\t\t\tindex: blockIndex,\n\t\t\topen: true,\n\t\t\tlastArgsJson: \"\",\n\t\t});\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-start\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex: blockIndex,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate contentBlockDeltaChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst delta = isRecord(value.delta) ? value.delta : undefined;\n\t\tif (!delta) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst text = asString(delta.text);\n\t\tif (text !== undefined && text.length > 0) {\n\t\t\tif (this.options.jsonMode) {\n\t\t\t\tchunks.push({ kind: \"json-delta\", delta: text });\n\t\t\t} else {\n\t\t\t\tchunks.push({ kind: \"text-delta\", text, choiceIndex: 0 });\n\t\t\t}\n\t\t}\n\n\t\tconst reasoning = delta.reasoningContent;\n\t\tconst reasoningText = reasoningTextFromDelta(reasoning, this.options.modelFamily);\n\t\tif (reasoningText) {\n\t\t\tchunks.push({ kind: \"reasoning-delta\", text: reasoningText, variant: \"detail\" });\n\t\t}\n\n\t\tconst toolUse = isRecord(delta.toolUse) ? delta.toolUse : undefined;\n\t\tif (toolUse) {\n\t\t\tchunks.push(...this.toolInputDelta(blockIndex, toolUse));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate toolInputDelta(blockIndex: number, toolUse: Record<string, unknown>): RawChunk[] {\n\t\tconst state = this.blocks.get(blockIndex);\n\t\tif (!state) return [];\n\n\t\tconst input = toolUse.input;\n\t\tlet delta: string | undefined;\n\t\tif (typeof input === \"string\") {\n\t\t\tdelta = incrementalArgsDelta(state, input);\n\t\t} else if (isRecord(input)) {\n\t\t\tdelta = incrementalArgsDelta(state, JSON.stringify(input));\n\t\t}\n\t\tif (!delta) return [];\n\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\tid: state.id,\n\t\t\t\tdelta,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate contentBlockStopChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst state = this.blocks.get(blockIndex);\n\t\tif (!state?.open) return [];\n\n\t\tstate.open = false;\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-done\",\n\t\t\t\tid: state.id,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate messageStopChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst stopReason = asString(value.stopReason) ?? \"unknown\";\n\t\tconst additional = value.additionalModelResponseFields;\n\t\tconst chunks: RawChunk[] = [];\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: {\n\t\t\t\t\tstopReason,\n\t\t\t\t\t...(additional !== undefined ? { additionalModelResponseFields: additional } : {}),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tchunks.push({ kind: \"finish\", reason: mapStopReason(stopReason), choiceIndex: 0 });\n\t\treturn chunks;\n\t}\n\n\tprivate metadataChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tconst usage = usageChunk(value.usage);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst metrics = value.metrics;\n\t\tconst trace = value.trace;\n\t\tif (metrics !== undefined || trace !== undefined) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\traw: { metrics, trace },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n}\n\nfunction parseResponse(body: unknown, options: BedrockAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"bedrockAdapter.parseResponse expected a Converse response object\");\n\t}\n\n\tfor (const key of EXCEPTION_KEYS) {\n\t\tconst exception = body[key];\n\t\tif (isRecord(exception)) {\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\texception,\n\t\t\t\t\"bedrockAdapter.parseResponse\",\n\t\t\t\tfalse,\n\t\t\t\t`Bedrock ${key}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst parser = new BedrockStreamParser(options);\n\tconst chunks: RawChunk[] = [];\n\n\tconst output = isRecord(body.output) ? body.output : undefined;\n\tconst message = output && isRecord(output.message) ? output.message : undefined;\n\tif (message) {\n\t\tchunks.push({ kind: \"message-start\" });\n\t\tconst role = asString(message.role);\n\t\tif (role) {\n\t\t\tchunks.push(optionalRawChunk({ kind: \"metadata\", raw: { role } }));\n\t\t}\n\n\t\tconst content = Array.isArray(message.content) ? message.content : [];\n\t\tlet blockIndex = 0;\n\t\tfor (const block of content) {\n\t\t\tif (!isRecord(block)) continue;\n\t\t\tconst text = asString(block.text);\n\t\t\tif (text !== undefined && text.length > 0) {\n\t\t\t\tif (options.jsonMode) {\n\t\t\t\t\tchunks.push({ kind: \"json-delta\", delta: text });\n\t\t\t\t} else {\n\t\t\t\t\tchunks.push({ kind: \"text-delta\", text, choiceIndex: 0 });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst toolUse = isRecord(block.toolUse) ? block.toolUse : undefined;\n\t\t\tif (toolUse) {\n\t\t\t\tconst id = asString(toolUse.toolUseId) ?? `bedrock:${blockIndex}`;\n\t\t\t\tconst name = asString(toolUse.name) ?? \"unknown\";\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tindex: blockIndex,\n\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tconst input = toolUse.input;\n\t\t\t\tif (input !== undefined) {\n\t\t\t\t\tconst argsJson = typeof input === \"string\" ? input : JSON.stringify(input);\n\t\t\t\t\tif (argsJson.length > 0) {\n\t\t\t\t\t\tchunks.push(\n\t\t\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdelta: argsJson,\n\t\t\t\t\t\t\t\tindex: blockIndex,\n\t\t\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-done\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tindex: blockIndex,\n\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tblockIndex += 1;\n\t\t}\n\t}\n\n\tconst usage = usageChunk(body.usage);\n\tif (usage) chunks.push(usage);\n\n\tconst stopReason = asString(body.stopReason);\n\tif (stopReason) {\n\t\tchunks.push({ kind: \"finish\", reason: mapStopReason(stopReason), choiceIndex: 0 });\n\t} else if (!chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\" });\n\t}\n\n\t// Touch parser options for modelFamily-specific paths in stream mode parity.\n\tvoid parser;\n\n\treturn chunks;\n}\n\nfunction reasoningTextFromDelta(\n\treasoning: unknown,\n\tmodelFamily: BedrockModelFamily | undefined,\n): string | undefined {\n\tif (reasoning === undefined) return undefined;\n\tif (typeof reasoning === \"string\") return reasoning.length > 0 ? reasoning : undefined;\n\tif (!isRecord(reasoning)) return undefined;\n\n\tconst text = asString(reasoning.text);\n\tif (text !== undefined && text.length > 0) return text;\n\n\tif (modelFamily === \"anthropic\" || modelFamily === \"auto\") {\n\t\tconst thinking = asString(reasoning.thinking);\n\t\tif (thinking !== undefined && thinking.length > 0) return thinking;\n\t}\n\n\treturn undefined;\n}\n\nfunction incrementalArgsDelta(state: BlockToolState, nextInput: string): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tlet delta: string;\n\tif (prev.length > 0 && nextInput.startsWith(prev)) {\n\t\tdelta = nextInput.slice(prev.length);\n\t} else {\n\t\tdelta = nextInput;\n\t}\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\n}\n\nfunction mapStopReason(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\t\treturn \"content_filter\";\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 =\n\t\tasNumber(value.inputTokens) ?? asNumber(value.promptTokens) ?? asNumber(value.inputTokenCount);\n\tconst outputTokens =\n\t\tasNumber(value.outputTokens) ??\n\t\tasNumber(value.completionTokens) ??\n\t\tasNumber(value.outputTokenCount);\n\tconst totalTokens = asNumber(value.totalTokens) ?? asNumber(value.totalTokenCount);\n\tif (inputTokens === undefined && outputTokens === undefined && totalTokens === undefined) {\n\t\treturn undefined;\n\t}\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\traw: { ...value, totalTokens },\n\t});\n}\n\nfunction optionalMetadataRaw(payload: Record<string, unknown>): RawChunk[] {\n\tif (Object.keys(payload).length === 0) return [];\n\treturn [\n\t\toptionalRawChunk({\n\t\t\tkind: \"metadata\",\n\t\t\traw: payload,\n\t\t}),\n\t];\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/shared/incremental-json.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/stop-reasons.ts","../../src/adapters/shared/text-delta.ts","../../src/adapters/shared/usage.ts","../../src/adapters/bedrock.ts"],"names":[],"mappings":"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","file":"bedrock.js","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 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","/** 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","/** Tracks last serialized JSON for prefix-diff tool arg deltas. */\nexport interface IncrementalJsonState {\n\tlastArgsJson: string;\n}\n\n/** Emit only the new suffix when `nextInput` extends `prev`, else full replace. */\nexport function incrementalJsonStringDelta(\n\tstate: IncrementalJsonState,\n\tnextInput: string,\n): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tconst delta =\n\t\tprev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\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\";\n\nexport interface TextOrJsonDeltaOptions {\n\tjsonMode?: boolean | undefined;\n\tchoiceIndex?: number | undefined;\n}\n\nexport function textOrJsonDelta(\n\ttext: string,\n\toptions: TextOrJsonDeltaOptions,\n): RawChunk | undefined {\n\tif (text.length === 0) return undefined;\n\tif (options.jsonMode) return { kind: \"json-delta\", delta: text };\n\tif (options.choiceIndex !== undefined) {\n\t\treturn { kind: \"text-delta\", text, choiceIndex: options.choiceIndex };\n\t}\n\treturn { kind: \"text-delta\", text };\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 { RawChunk, StreamAdapter } from \"../core/types\";\nimport { libraryError, providerErrorChunksFromPayload } from \"./errors\";\nimport { incrementalJsonStringDelta } from \"./shared/incremental-json\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { mapAnthropicLikeStopReason } from \"./shared/stop-reasons\";\nimport { textOrJsonDelta } from \"./shared/text-delta\";\nimport { buildUsageChunk } from \"./shared/usage\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport type BedrockModelFamily = \"anthropic\" | \"openai-like\" | \"nova\" | \"auto\";\n\nexport interface BedrockAdapterOptions {\n\t/**\n\t * Hint which ConverseStream payload dialect to prefer when envelopes overlap.\n\t * \"auto\" uses structural detection (document heuristics in adapter-guide).\n\t */\n\tmodelFamily?: BedrockModelFamily;\n\t/** Map structured JSON text blocks to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n}\n\ninterface BlockToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\topen: boolean;\n\tlastArgsJson: string;\n}\n\nconst EXCEPTION_KEYS = [\n\t\"internalServerException\",\n\t\"modelStreamErrorException\",\n\t\"validationException\",\n\t\"throttlingException\",\n\t\"serviceUnavailableException\",\n] as const;\n\nexport function bedrockAdapter(options: BedrockAdapterOptions = {}): StreamAdapter {\n\tconst parser = new BedrockStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass BedrockStreamParser {\n\tprivate messageStarted = false;\n\tprivate readonly blocks = new Map<number, BlockToolState>();\n\n\tconstructor(private readonly options: BedrockAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, \"bedrockAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tfor (const key of EXCEPTION_KEYS) {\n\t\t\tconst exception = payload[key];\n\t\t\tif (isRecord(exception)) {\n\t\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\t\texception,\n\t\t\t\t\t\"bedrockAdapter.parseChunk\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t`Bedrock ${key}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (payload.messageStart !== undefined) {\n\t\t\treturn this.messageStartChunks(payload.messageStart);\n\t\t}\n\t\tif (payload.contentBlockStart !== undefined) {\n\t\t\treturn this.contentBlockStartChunks(payload.contentBlockStart);\n\t\t}\n\t\tif (payload.contentBlockDelta !== undefined) {\n\t\t\treturn this.contentBlockDeltaChunks(payload.contentBlockDelta);\n\t\t}\n\t\tif (payload.contentBlockStop !== undefined) {\n\t\t\treturn this.contentBlockStopChunks(payload.contentBlockStop);\n\t\t}\n\t\tif (payload.messageStop !== undefined) {\n\t\t\treturn this.messageStopChunks(payload.messageStop);\n\t\t}\n\t\tif (payload.metadata !== undefined) {\n\t\t\treturn this.metadataChunks(payload.metadata);\n\t\t}\n\n\t\treturn optionalMetadataRaw(payload);\n\t}\n\n\tprivate messageStartChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tif (this.messageStarted) return [];\n\t\tthis.messageStarted = true;\n\t\tconst role = asString(value.role);\n\t\treturn [\n\t\t\t{ kind: \"message-start\" },\n\t\t\t...(role\n\t\t\t\t? [\n\t\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\t\t\traw: { role },\n\t\t\t\t\t\t}),\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t];\n\t}\n\n\tprivate contentBlockStartChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst start = isRecord(value.start) ? value.start : undefined;\n\t\tconst toolUse = start && isRecord(start.toolUse) ? start.toolUse : undefined;\n\t\tif (!toolUse) return [];\n\n\t\tconst id = asString(toolUse.toolUseId) ?? `bedrock:${blockIndex}`;\n\t\tconst name = asString(toolUse.name) ?? \"unknown\";\n\t\tthis.blocks.set(blockIndex, {\n\t\t\tid,\n\t\t\tname,\n\t\t\tindex: blockIndex,\n\t\t\topen: true,\n\t\t\tlastArgsJson: \"\",\n\t\t});\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-start\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex: blockIndex,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate contentBlockDeltaChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst delta = isRecord(value.delta) ? value.delta : undefined;\n\t\tif (!delta) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst text = asString(delta.text);\n\t\tconst textChunk = text\n\t\t\t? textOrJsonDelta(text, { jsonMode: this.options.jsonMode, choiceIndex: 0 })\n\t\t\t: undefined;\n\t\tif (textChunk) chunks.push(textChunk);\n\n\t\tconst reasoningText = reasoningTextFromDelta(delta.reasoningContent, this.options.modelFamily);\n\t\tif (reasoningText) {\n\t\t\tchunks.push({ kind: \"reasoning-delta\", text: reasoningText, variant: \"detail\" });\n\t\t}\n\n\t\tconst toolUse = isRecord(delta.toolUse) ? delta.toolUse : undefined;\n\t\tif (toolUse) {\n\t\t\tchunks.push(...this.toolInputDelta(blockIndex, toolUse));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate toolInputDelta(blockIndex: number, toolUse: Record<string, unknown>): RawChunk[] {\n\t\tconst state = this.blocks.get(blockIndex);\n\t\tif (!state) return [];\n\n\t\tconst input = toolUse.input;\n\t\tlet delta: string | undefined;\n\t\tif (typeof input === \"string\") {\n\t\t\tdelta = incrementalJsonStringDelta(state, input);\n\t\t} else if (isRecord(input)) {\n\t\t\tdelta = incrementalJsonStringDelta(state, JSON.stringify(input));\n\t\t}\n\t\tif (!delta) return [];\n\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\tid: state.id,\n\t\t\t\tdelta,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate contentBlockStopChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst blockIndex = asNumber(value.contentBlockIndex) ?? 0;\n\t\tconst state = this.blocks.get(blockIndex);\n\t\tif (!state?.open) return [];\n\n\t\tstate.open = false;\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-done\",\n\t\t\t\tid: state.id,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate messageStopChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst stopReason = asString(value.stopReason) ?? \"unknown\";\n\t\tconst additional = value.additionalModelResponseFields;\n\t\tconst chunks: RawChunk[] = [];\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: {\n\t\t\t\t\tstopReason,\n\t\t\t\t\t...(additional !== undefined ? { additionalModelResponseFields: additional } : {}),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tchunks.push({\n\t\t\tkind: \"finish\",\n\t\t\treason: mapAnthropicLikeStopReason(stopReason),\n\t\t\tchoiceIndex: 0,\n\t\t});\n\t\treturn chunks;\n\t}\n\n\tprivate metadataChunks(value: unknown): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tconst usage = buildUsageChunk(value.usage, undefined, { mirrorTotalTokens: true });\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst metrics = value.metrics;\n\t\tconst trace = value.trace;\n\t\tif (metrics !== undefined || trace !== undefined) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\traw: { metrics, trace },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n}\n\nfunction parseResponse(body: unknown, options: BedrockAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"bedrockAdapter.parseResponse expected a Converse response object\");\n\t}\n\n\tfor (const key of EXCEPTION_KEYS) {\n\t\tconst exception = body[key];\n\t\tif (isRecord(exception)) {\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\texception,\n\t\t\t\t\"bedrockAdapter.parseResponse\",\n\t\t\t\tfalse,\n\t\t\t\t`Bedrock ${key}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst parser = new BedrockStreamParser(options);\n\tconst syntheticEvents = synthesizeConverseStreamEvents(body);\n\tconst chunks: RawChunk[] = [];\n\tfor (const event of syntheticEvents) {\n\t\tchunks.push(...parser.parseChunk(JSON.stringify(event)));\n\t}\n\n\tconst stopReason = asString(body.stopReason);\n\tif (stopReason) {\n\t\tchunks.push({\n\t\t\tkind: \"finish\",\n\t\t\treason: mapAnthropicLikeStopReason(stopReason),\n\t\t\tchoiceIndex: 0,\n\t\t});\n\t} else if (!chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\", choiceIndex: 0 });\n\t}\n\n\treturn chunks;\n}\n\nfunction synthesizeConverseStreamEvents(body: Record<string, unknown>): unknown[] {\n\tconst events: unknown[] = [];\n\tconst output = isRecord(body.output) ? body.output : undefined;\n\tconst message = output && isRecord(output.message) ? output.message : undefined;\n\n\tif (message) {\n\t\tevents.push({ messageStart: { role: message.role } });\n\t\tconst content = Array.isArray(message.content) ? message.content : [];\n\t\tlet blockIndex = 0;\n\t\tfor (const block of content) {\n\t\t\tif (!isRecord(block)) continue;\n\t\t\tconst toolUse = isRecord(block.toolUse) ? block.toolUse : undefined;\n\t\t\tif (toolUse) {\n\t\t\t\tevents.push({\n\t\t\t\t\tcontentBlockStart: {\n\t\t\t\t\t\tcontentBlockIndex: blockIndex,\n\t\t\t\t\t\tstart: { toolUse },\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tif (toolUse.input !== undefined) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tcontentBlockDelta: {\n\t\t\t\t\t\t\tcontentBlockIndex: blockIndex,\n\t\t\t\t\t\t\tdelta: { toolUse: { input: toolUse.input } },\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tevents.push({ contentBlockStop: { contentBlockIndex: blockIndex } });\n\t\t\t} else {\n\t\t\t\tconst text = asString(block.text);\n\t\t\t\tif (text !== undefined && text.length > 0) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tcontentBlockDelta: {\n\t\t\t\t\t\t\tcontentBlockIndex: blockIndex,\n\t\t\t\t\t\t\tdelta: { text },\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tblockIndex += 1;\n\t\t}\n\t}\n\n\tif (body.usage !== undefined) {\n\t\tevents.push({ metadata: { usage: body.usage } });\n\t}\n\n\treturn events;\n}\n\nfunction reasoningTextFromDelta(\n\treasoning: unknown,\n\tmodelFamily: BedrockModelFamily | undefined,\n): string | undefined {\n\tif (reasoning === undefined) return undefined;\n\tif (typeof reasoning === \"string\") return reasoning.length > 0 ? reasoning : undefined;\n\tif (!isRecord(reasoning)) return undefined;\n\n\tconst text = asString(reasoning.text);\n\tif (text !== undefined && text.length > 0) return text;\n\n\tif (modelFamily === \"anthropic\" || modelFamily === \"auto\") {\n\t\tconst thinking = asString(reasoning.thinking);\n\t\tif (thinking !== undefined && thinking.length > 0) return thinking;\n\t}\n\n\treturn undefined;\n}\n\nfunction optionalMetadataRaw(payload: Record<string, unknown>): RawChunk[] {\n\tif (Object.keys(payload).length === 0) return [];\n\treturn [\n\t\toptionalRawChunk({\n\t\t\tkind: \"metadata\",\n\t\t\traw: payload,\n\t\t}),\n\t];\n}\n"]}