llm-stream-assemble 1.9.1 → 1.10.2
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 +76 -673
- package/dist/adapters/anthropic.cjs +4 -4
- package/dist/adapters/anthropic.cjs.map +1 -1
- package/dist/adapters/anthropic.js +4 -4
- package/dist/adapters/anthropic.js.map +1 -1
- package/dist/adapters/bedrock.cjs +82 -76
- package/dist/adapters/bedrock.cjs.map +1 -1
- package/dist/adapters/bedrock.d.cts +1 -0
- package/dist/adapters/bedrock.d.ts +1 -0
- package/dist/adapters/bedrock.js +82 -76
- package/dist/adapters/bedrock.js.map +1 -1
- package/dist/adapters/cohere.cjs +209 -196
- package/dist/adapters/cohere.cjs.map +1 -1
- package/dist/adapters/cohere.d.cts +1 -0
- package/dist/adapters/cohere.d.ts +1 -0
- package/dist/adapters/cohere.js +209 -196
- package/dist/adapters/cohere.js.map +1 -1
- package/dist/adapters/gemini.cjs +212 -191
- package/dist/adapters/gemini.cjs.map +1 -1
- package/dist/adapters/gemini.d.cts +3 -1
- package/dist/adapters/gemini.d.ts +3 -1
- package/dist/adapters/gemini.js +212 -191
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/openai-chat.cjs +3 -3
- package/dist/adapters/openai-chat.cjs.map +1 -1
- package/dist/adapters/openai-chat.js +3 -3
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs +3 -3
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.js +3 -3
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/adapters/openai-responses.cjs +368 -356
- package/dist/adapters/openai-responses.cjs.map +1 -1
- package/dist/adapters/openai-responses.d.cts +1 -0
- package/dist/adapters/openai-responses.d.ts +1 -0
- package/dist/adapters/openai-responses.js +368 -356
- package/dist/adapters/openai-responses.js.map +1 -1
- package/dist/core/index.cjs +67 -40
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +67 -40
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +767 -688
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +767 -688
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
|
@@ -66,7 +66,7 @@ function parseAdapterJSON(raw, feature) {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
// src/adapters/
|
|
69
|
+
// src/adapters/common/anthropic-blocks.ts
|
|
70
70
|
function anthropicResponseBlockChunks(block, index, context) {
|
|
71
71
|
return anthropicBlockStartChunks(block, index, { ...context, mode: "response" });
|
|
72
72
|
}
|
|
@@ -116,7 +116,7 @@ function anthropicToolUseBlockChunks(block, index, mode) {
|
|
|
116
116
|
return chunks;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
// src/adapters/
|
|
119
|
+
// src/adapters/common/parse-payload.ts
|
|
120
120
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
121
121
|
const { trim = true, allowDone = true } = options;
|
|
122
122
|
const input = trim ? raw.trim() : raw;
|
|
@@ -128,7 +128,7 @@ function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
|
128
128
|
return payload;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
// src/adapters/
|
|
131
|
+
// src/adapters/common/stop-reasons.ts
|
|
132
132
|
function mapAnthropicLikeStopReason(value) {
|
|
133
133
|
switch (value) {
|
|
134
134
|
case "end_turn":
|
|
@@ -147,7 +147,7 @@ function mapAnthropicLikeStopReason(value) {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
// src/adapters/
|
|
150
|
+
// src/adapters/common/usage.ts
|
|
151
151
|
var DEFAULT_ALIASES = {
|
|
152
152
|
input: ["inputTokens", "input_tokens", "promptTokens", "promptTokenCount", "inputTokenCount"],
|
|
153
153
|
output: [
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/common/anthropic-blocks.ts","../../src/adapters/common/parse-payload.ts","../../src/adapters/common/stop-reasons.ts","../../src/adapters/common/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 \"./common/anthropic-blocks\";\nimport { parseAdapterObjectPayload } from \"./common/parse-payload\";\nimport { mapAnthropicLikeStopReason } from \"./common/stop-reasons\";\nimport { buildUsageChunk } from \"./common/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"]}
|
|
@@ -64,7 +64,7 @@ function parseAdapterJSON(raw, feature) {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
// src/adapters/
|
|
67
|
+
// src/adapters/common/anthropic-blocks.ts
|
|
68
68
|
function anthropicResponseBlockChunks(block, index, context) {
|
|
69
69
|
return anthropicBlockStartChunks(block, index, { ...context, mode: "response" });
|
|
70
70
|
}
|
|
@@ -114,7 +114,7 @@ function anthropicToolUseBlockChunks(block, index, mode) {
|
|
|
114
114
|
return chunks;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
// src/adapters/
|
|
117
|
+
// src/adapters/common/parse-payload.ts
|
|
118
118
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
119
119
|
const { trim = true, allowDone = true } = options;
|
|
120
120
|
const input = trim ? raw.trim() : raw;
|
|
@@ -126,7 +126,7 @@ function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
|
126
126
|
return payload;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
// src/adapters/
|
|
129
|
+
// src/adapters/common/stop-reasons.ts
|
|
130
130
|
function mapAnthropicLikeStopReason(value) {
|
|
131
131
|
switch (value) {
|
|
132
132
|
case "end_turn":
|
|
@@ -145,7 +145,7 @@ function mapAnthropicLikeStopReason(value) {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
// src/adapters/
|
|
148
|
+
// src/adapters/common/usage.ts
|
|
149
149
|
var DEFAULT_ALIASES = {
|
|
150
150
|
input: ["inputTokens", "input_tokens", "promptTokens", "promptTokenCount", "inputTokenCount"],
|
|
151
151
|
output: [
|
|
@@ -1 +1 @@
|
|
|
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.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 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
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/common/anthropic-blocks.ts","../../src/adapters/common/parse-payload.ts","../../src/adapters/common/stop-reasons.ts","../../src/adapters/common/usage.ts","../../src/adapters/anthropic.ts"],"names":[],"mappings":"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","file":"anthropic.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 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 \"./common/anthropic-blocks\";\nimport { parseAdapterObjectPayload } from \"./common/parse-payload\";\nimport { mapAnthropicLikeStopReason } from \"./common/stop-reasons\";\nimport { buildUsageChunk } from \"./common/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"]}
|
|
@@ -5,6 +5,29 @@ function stripUndefined(obj) {
|
|
|
5
5
|
return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== void 0));
|
|
6
6
|
}
|
|
7
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 providerErrorChunksFromPayload(errorPayload, scope, recoverable, fallbackMessage) {
|
|
22
|
+
const message = asString(errorPayload.message) ?? fallbackMessage;
|
|
23
|
+
const error = adapterScopedError(scope, message);
|
|
24
|
+
Object.defineProperty(error, "raw", {
|
|
25
|
+
value: errorPayload,
|
|
26
|
+
enumerable: false
|
|
27
|
+
});
|
|
28
|
+
return providerErrorChunks(error, recoverable);
|
|
29
|
+
}
|
|
30
|
+
|
|
8
31
|
// src/adapters/utils.ts
|
|
9
32
|
function isRecord(value) {
|
|
10
33
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -40,30 +63,56 @@ function parseAdapterJSON(raw, feature) {
|
|
|
40
63
|
}
|
|
41
64
|
}
|
|
42
65
|
|
|
43
|
-
// src/adapters/
|
|
44
|
-
function
|
|
45
|
-
|
|
66
|
+
// src/adapters/common/stop-reasons.ts
|
|
67
|
+
function mapAnthropicLikeStopReason(value) {
|
|
68
|
+
switch (value) {
|
|
69
|
+
case "end_turn":
|
|
70
|
+
case "stop_sequence":
|
|
71
|
+
return "stop";
|
|
72
|
+
case "tool_use":
|
|
73
|
+
return "tool_calls";
|
|
74
|
+
case "max_tokens":
|
|
75
|
+
return "length";
|
|
76
|
+
case "content_filtered":
|
|
77
|
+
case "guardrail_intervened":
|
|
78
|
+
case "refusal":
|
|
79
|
+
return "content_filter";
|
|
80
|
+
default:
|
|
81
|
+
return "stop";
|
|
82
|
+
}
|
|
46
83
|
}
|
|
47
|
-
|
|
48
|
-
|
|
84
|
+
|
|
85
|
+
// src/adapters/bedrock/helpers.ts
|
|
86
|
+
var EXCEPTION_KEYS = [
|
|
87
|
+
"internalServerException",
|
|
88
|
+
"modelStreamErrorException",
|
|
89
|
+
"validationException",
|
|
90
|
+
"throttlingException",
|
|
91
|
+
"serviceUnavailableException"
|
|
92
|
+
];
|
|
93
|
+
function reasoningTextFromDelta(reasoning, modelFamily) {
|
|
94
|
+
if (reasoning === void 0) return void 0;
|
|
95
|
+
if (typeof reasoning === "string") return reasoning.length > 0 ? reasoning : void 0;
|
|
96
|
+
if (!isRecord(reasoning)) return void 0;
|
|
97
|
+
const text = asString(reasoning.text);
|
|
98
|
+
if (text !== void 0 && text.length > 0) return text;
|
|
99
|
+
if (modelFamily === "anthropic" || modelFamily === "auto") {
|
|
100
|
+
const thinking = asString(reasoning.thinking);
|
|
101
|
+
if (thinking !== void 0 && thinking.length > 0) return thinking;
|
|
102
|
+
}
|
|
103
|
+
return void 0;
|
|
49
104
|
}
|
|
50
|
-
function
|
|
105
|
+
function optionalMetadataRaw(payload) {
|
|
106
|
+
if (Object.keys(payload).length === 0) return [];
|
|
51
107
|
return [
|
|
52
|
-
{
|
|
53
|
-
|
|
108
|
+
optionalRawChunk({
|
|
109
|
+
kind: "metadata",
|
|
110
|
+
raw: payload
|
|
111
|
+
})
|
|
54
112
|
];
|
|
55
113
|
}
|
|
56
|
-
function providerErrorChunksFromPayload(errorPayload, scope, recoverable, fallbackMessage) {
|
|
57
|
-
const message = asString(errorPayload.message) ?? fallbackMessage;
|
|
58
|
-
const error = adapterScopedError(scope, message);
|
|
59
|
-
Object.defineProperty(error, "raw", {
|
|
60
|
-
value: errorPayload,
|
|
61
|
-
enumerable: false
|
|
62
|
-
});
|
|
63
|
-
return providerErrorChunks(error, recoverable);
|
|
64
|
-
}
|
|
65
114
|
|
|
66
|
-
// src/adapters/
|
|
115
|
+
// src/adapters/common/incremental-json.ts
|
|
67
116
|
function incrementalJsonStringDelta(state, nextInput) {
|
|
68
117
|
const prev = state.lastArgsJson;
|
|
69
118
|
if (nextInput === prev) return void 0;
|
|
@@ -72,7 +121,7 @@ function incrementalJsonStringDelta(state, nextInput) {
|
|
|
72
121
|
return delta.length > 0 ? delta : void 0;
|
|
73
122
|
}
|
|
74
123
|
|
|
75
|
-
// src/adapters/
|
|
124
|
+
// src/adapters/common/parse-payload.ts
|
|
76
125
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
77
126
|
const { trim = true, allowDone = true } = options;
|
|
78
127
|
const input = trim ? raw.trim() : raw;
|
|
@@ -84,26 +133,7 @@ function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
|
84
133
|
return payload;
|
|
85
134
|
}
|
|
86
135
|
|
|
87
|
-
// src/adapters/
|
|
88
|
-
function mapAnthropicLikeStopReason(value) {
|
|
89
|
-
switch (value) {
|
|
90
|
-
case "end_turn":
|
|
91
|
-
case "stop_sequence":
|
|
92
|
-
return "stop";
|
|
93
|
-
case "tool_use":
|
|
94
|
-
return "tool_calls";
|
|
95
|
-
case "max_tokens":
|
|
96
|
-
return "length";
|
|
97
|
-
case "content_filtered":
|
|
98
|
-
case "guardrail_intervened":
|
|
99
|
-
case "refusal":
|
|
100
|
-
return "content_filter";
|
|
101
|
-
default:
|
|
102
|
-
return "stop";
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// src/adapters/shared/text-delta.ts
|
|
136
|
+
// src/adapters/common/text-delta.ts
|
|
107
137
|
function textOrJsonDelta(text, options) {
|
|
108
138
|
if (text.length === 0) return void 0;
|
|
109
139
|
if (options.jsonMode) return { kind: "json-delta", delta: text };
|
|
@@ -113,7 +143,7 @@ function textOrJsonDelta(text, options) {
|
|
|
113
143
|
return { kind: "text-delta", text };
|
|
114
144
|
}
|
|
115
145
|
|
|
116
|
-
// src/adapters/
|
|
146
|
+
// src/adapters/common/usage.ts
|
|
117
147
|
var DEFAULT_ALIASES = {
|
|
118
148
|
input: ["inputTokens", "input_tokens", "promptTokens", "promptTokenCount", "inputTokenCount"],
|
|
119
149
|
output: [
|
|
@@ -153,22 +183,7 @@ function buildUsageChunk(value, aliases = DEFAULT_ALIASES, options) {
|
|
|
153
183
|
});
|
|
154
184
|
}
|
|
155
185
|
|
|
156
|
-
// src/adapters/bedrock.ts
|
|
157
|
-
var EXCEPTION_KEYS = [
|
|
158
|
-
"internalServerException",
|
|
159
|
-
"modelStreamErrorException",
|
|
160
|
-
"validationException",
|
|
161
|
-
"throttlingException",
|
|
162
|
-
"serviceUnavailableException"
|
|
163
|
-
];
|
|
164
|
-
function bedrockAdapter(options = {}) {
|
|
165
|
-
const parser = new BedrockStreamParser(options);
|
|
166
|
-
return createStreamAdapter({
|
|
167
|
-
parser,
|
|
168
|
-
parseResponse,
|
|
169
|
-
options
|
|
170
|
-
});
|
|
171
|
-
}
|
|
186
|
+
// src/adapters/bedrock/stream-parser.ts
|
|
172
187
|
var BedrockStreamParser = class {
|
|
173
188
|
constructor(options) {
|
|
174
189
|
this.options = options;
|
|
@@ -344,6 +359,8 @@ var BedrockStreamParser = class {
|
|
|
344
359
|
return chunks;
|
|
345
360
|
}
|
|
346
361
|
};
|
|
362
|
+
|
|
363
|
+
// src/adapters/bedrock/parse-response.ts
|
|
347
364
|
function parseResponse(body, options) {
|
|
348
365
|
if (!isRecord(body)) {
|
|
349
366
|
throw libraryError("bedrockAdapter.parseResponse expected a Converse response object");
|
|
@@ -423,26 +440,15 @@ function synthesizeConverseStreamEvents(body) {
|
|
|
423
440
|
}
|
|
424
441
|
return events;
|
|
425
442
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
}
|
|
436
|
-
return void 0;
|
|
437
|
-
}
|
|
438
|
-
function optionalMetadataRaw(payload) {
|
|
439
|
-
if (Object.keys(payload).length === 0) return [];
|
|
440
|
-
return [
|
|
441
|
-
optionalRawChunk({
|
|
442
|
-
kind: "metadata",
|
|
443
|
-
raw: payload
|
|
444
|
-
})
|
|
445
|
-
];
|
|
443
|
+
|
|
444
|
+
// src/adapters/bedrock/index.ts
|
|
445
|
+
function bedrockAdapter(options = {}) {
|
|
446
|
+
const parser = new BedrockStreamParser(options);
|
|
447
|
+
return createStreamAdapter({
|
|
448
|
+
parser,
|
|
449
|
+
parseResponse,
|
|
450
|
+
options
|
|
451
|
+
});
|
|
446
452
|
}
|
|
447
453
|
|
|
448
454
|
exports.bedrockAdapter = bedrockAdapter;
|