llm-stream-assemble 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -0
  3. package/dist/adapters/anthropic.cjs +312 -0
  4. package/dist/adapters/anthropic.cjs.map +1 -0
  5. package/dist/adapters/anthropic.d.cts +11 -0
  6. package/dist/adapters/anthropic.d.ts +11 -0
  7. package/dist/adapters/anthropic.js +310 -0
  8. package/dist/adapters/anthropic.js.map +1 -0
  9. package/dist/adapters/openai-chat.cjs +499 -0
  10. package/dist/adapters/openai-chat.cjs.map +1 -0
  11. package/dist/adapters/openai-chat.d.cts +9 -0
  12. package/dist/adapters/openai-chat.d.ts +9 -0
  13. package/dist/adapters/openai-chat.js +497 -0
  14. package/dist/adapters/openai-chat.js.map +1 -0
  15. package/dist/adapters/openai-compatible.cjs +519 -0
  16. package/dist/adapters/openai-compatible.cjs.map +1 -0
  17. package/dist/adapters/openai-compatible.d.cts +15 -0
  18. package/dist/adapters/openai-compatible.d.ts +15 -0
  19. package/dist/adapters/openai-compatible.js +517 -0
  20. package/dist/adapters/openai-compatible.js.map +1 -0
  21. package/dist/adapters/openai-responses.cjs +444 -0
  22. package/dist/adapters/openai-responses.cjs.map +1 -0
  23. package/dist/adapters/openai-responses.d.cts +8 -0
  24. package/dist/adapters/openai-responses.d.ts +8 -0
  25. package/dist/adapters/openai-responses.js +442 -0
  26. package/dist/adapters/openai-responses.js.map +1 -0
  27. package/dist/core/index.cjs +816 -0
  28. package/dist/core/index.cjs.map +1 -0
  29. package/dist/core/index.d.cts +18 -0
  30. package/dist/core/index.d.ts +18 -0
  31. package/dist/core/index.js +808 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/index.cjs +2238 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.cts +66 -0
  36. package/dist/index.d.ts +66 -0
  37. package/dist/index.js +2206 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/types-CskRfrmD.d.cts +176 -0
  40. package/dist/types-CskRfrmD.d.ts +176 -0
  41. package/package.json +95 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/utils/bytes.ts","../../src/core/utils/source.ts","../../src/core/assembly/process-payload.ts","../../src/core/parse-partial-json.ts","../../src/core/assembler/event-assembler.ts","../../src/core/assemble-payloads.ts","../../src/core/utils/sse-parser.ts","../../src/core/parse-sse.ts","../../src/core/assemble-stream.ts","../../src/core/assemble-response.ts","../../src/core/assemble-from-file.ts","../../src/core/create-assembly-transform.ts"],"names":["payload"],"mappings":"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","file":"index.js","sourcesContent":["export class Utf8StreamDecoder {\n\tprivate readonly decoder = new TextDecoder();\n\n\tdecode(chunk: Uint8Array): string {\n\t\treturn this.decoder.decode(chunk, { stream: true });\n\t}\n\n\tflush(): string {\n\t\treturn this.decoder.decode();\n\t}\n}\n\nconst encoder = new TextEncoder();\n\nexport function utf8ByteLength(value: string): number {\n\treturn encoder.encode(value).byteLength;\n}\n","import { Utf8StreamDecoder } from \"./bytes\";\n\nexport async function* readableStreamToStrings(\n\tsource: ReadableStream<Uint8Array>,\n): AsyncIterable<string> {\n\tconst reader = source.getReader();\n\tconst decoder = new Utf8StreamDecoder();\n\tlet completed = false;\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tcompleted = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst decoded = decoder.decode(value);\n\t\t\tif (decoded.length > 0) {\n\t\t\t\tyield decoded;\n\t\t\t}\n\t\t}\n\n\t\tconst flushed = decoder.flush();\n\t\tif (flushed.length > 0) {\n\t\t\tyield flushed;\n\t\t}\n\t} finally {\n\t\tif (!completed) {\n\t\t\tawait reader.cancel().catch(() => undefined);\n\t\t}\n\t\treader.releaseLock();\n\t}\n}\n\nexport function isReadableStream(\n\tsource: ReadableStream<Uint8Array> | AsyncIterable<string>,\n): source is ReadableStream<Uint8Array> {\n\treturn typeof (source as ReadableStream<Uint8Array>).getReader === \"function\";\n}\n\nexport function sourceToStrings(\n\tsource: ReadableStream<Uint8Array> | AsyncIterable<string>,\n): AsyncIterable<string> {\n\treturn isReadableStream(source) ? readableStreamToStrings(source) : source;\n}\n\nexport function errorFromUnknown(error: unknown): Error {\n\treturn error instanceof Error ? error : new Error(String(error));\n}\n\nexport function prefixedError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n","import type { EventAssembler } from \"../assembler/event-assembler\";\nimport type { AssembleOptions, StreamAdapter, StreamEvent } from \"../types\";\nimport { errorFromUnknown, prefixedError } from \"../utils/source\";\n\nexport type ProcessPayloadResult =\n\t| { kind: \"done-marker\" }\n\t| { kind: \"events\"; events: StreamEvent[] }\n\t| { kind: \"recoverable-error\"; event: StreamEvent };\n\nexport function isDoneMarker(payload: string): boolean {\n\treturn payload.trim() === \"[DONE]\";\n}\n\nexport function processPayload(\n\tpayload: string,\n\tassembler: EventAssembler,\n\tadapter: StreamAdapter,\n\toptions: AssembleOptions,\n): ProcessPayloadResult {\n\tif (isDoneMarker(payload)) {\n\t\treturn { kind: \"done-marker\" };\n\t}\n\n\tlet chunks;\n\ttry {\n\t\tchunks = adapter.parseChunk(payload);\n\t} catch (error) {\n\t\tif (!options.recoverMalformed) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tkind: \"recoverable-error\",\n\t\t\tevent: {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: prefixedError(errorFromUnknown(error).message),\n\t\t\t\trecoverable: true,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst events: StreamEvent[] = [];\n\tfor (const chunk of chunks) {\n\t\tevents.push(...assembler.push(chunk));\n\t}\n\treturn { kind: \"events\", events };\n}\n\nexport function resolveTerminalFlush(\n\tassembler: EventAssembler,\n\tstate: { sawTerminalMarker: boolean; aborted: boolean },\n): StreamEvent[] {\n\tif (state.aborted) {\n\t\treturn assembler.flush({ terminalReason: \"aborted\" });\n\t}\n\tif (state.sawTerminalMarker) {\n\t\treturn assembler.flush({ terminalReason: \"stop\" });\n\t}\n\tif (assembler.hasFinished()) {\n\t\treturn assembler.flush();\n\t}\n\treturn assembler.flush({ terminalReason: \"incomplete\" });\n}\n","import type { PartialJSONResult } from \"./types\";\n\nexport function parsePartialJSON(input: string): PartialJSONResult {\n\tconst trimmed = input.trim();\n\tif (trimmed.length === 0) {\n\t\treturn { complete: false };\n\t}\n\n\tconst complete = parseComplete(trimmed);\n\tif (complete.ok) {\n\t\treturn { complete: true, value: complete.value };\n\t}\n\n\tconst end = findFirstCompleteValueEnd(trimmed);\n\tif (end !== undefined) {\n\t\tconst parsed = parseComplete(trimmed.slice(0, end));\n\t\tif (parsed.ok) {\n\t\t\treturn { complete: false, value: parsed.value };\n\t\t}\n\t}\n\n\tfor (const candidate of repairedCandidates(trimmed)) {\n\t\tconst parsed = parseComplete(candidate);\n\t\tif (parsed.ok) {\n\t\t\treturn { complete: false, value: parsed.value };\n\t\t}\n\t}\n\n\treturn { complete: false };\n}\n\nfunction parseComplete(input: string): { ok: true; value: unknown } | { ok: false } {\n\ttry {\n\t\treturn { ok: true, value: JSON.parse(input) as unknown };\n\t} catch {\n\t\treturn { ok: false };\n\t}\n}\n\nfunction findFirstCompleteValueEnd(input: string): number | undefined {\n\tlet inString = false;\n\tlet escaped = false;\n\tconst stack: string[] = [];\n\n\tfor (let index = 0; index < input.length; index += 1) {\n\t\tconst char = input[index];\n\n\t\tif (inString) {\n\t\t\tif (escaped) {\n\t\t\t\tescaped = false;\n\t\t\t} else if (char === \"\\\\\") {\n\t\t\t\tescaped = true;\n\t\t\t} else if (char === '\"') {\n\t\t\t\tinString = false;\n\t\t\t\tif (stack.length === 0) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tinString = true;\n\t\t} else if (char === \"{\" || char === \"[\") {\n\t\t\tstack.push(char === \"{\" ? \"}\" : \"]\");\n\t\t} else if (char === \"}\" || char === \"]\") {\n\t\t\tif (stack.pop() !== char) return undefined;\n\t\t\tif (stack.length === 0) {\n\t\t\t\treturn index + 1;\n\t\t\t}\n\t\t} else if (stack.length === 0 && isPrimitiveTerminator(input, index)) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction isPrimitiveTerminator(input: string, index: number): boolean {\n\tif (!/[\\s,}\\]]/.test(input[index] ?? \"\")) return false;\n\tconst prefix = input.slice(0, index).trim();\n\tif (prefix.length === 0) return false;\n\treturn parseComplete(prefix).ok;\n}\n\nfunction repairedCandidates(input: string): string[] {\n\tconst candidates = new Set<string>();\n\tconst base = closeContainers(closeOpenString(input));\n\tcandidates.add(base);\n\n\tfor (const trimmed of trimDanglingValues(input)) {\n\t\tcandidates.add(closeContainers(closeOpenString(trimmed)));\n\t}\n\n\treturn [...candidates];\n}\n\nfunction closeOpenString(input: string): string {\n\tlet inString = false;\n\tlet escaped = false;\n\n\tfor (const char of input) {\n\t\tif (inString) {\n\t\t\tif (escaped) {\n\t\t\t\tescaped = false;\n\t\t\t} else if (char === \"\\\\\") {\n\t\t\t\tescaped = true;\n\t\t\t} else if (char === '\"') {\n\t\t\t\tinString = false;\n\t\t\t}\n\t\t} else if (char === '\"') {\n\t\t\tinString = true;\n\t\t}\n\t}\n\n\tif (!inString) return input;\n\treturn escaped ? `${input.slice(0, -1)}\"` : `${input}\"`;\n}\n\nfunction closeContainers(input: string): string {\n\tconst stack: string[] = [];\n\tlet inString = false;\n\tlet escaped = false;\n\n\tfor (const char of input) {\n\t\tif (inString) {\n\t\t\tif (escaped) {\n\t\t\t\tescaped = false;\n\t\t\t} else if (char === \"\\\\\") {\n\t\t\t\tescaped = true;\n\t\t\t} else if (char === '\"') {\n\t\t\t\tinString = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tinString = true;\n\t\t} else if (char === \"{\" || char === \"[\") {\n\t\t\tstack.push(char === \"{\" ? \"}\" : \"]\");\n\t\t} else if ((char === \"}\" || char === \"]\") && stack.at(-1) === char) {\n\t\t\tstack.pop();\n\t\t}\n\t}\n\n\treturn `${input}${stack.reverse().join(\"\")}`;\n}\n\nfunction trimDanglingValues(input: string): string[] {\n\tconst variants: string[] = [];\n\tlet current = input.trimEnd();\n\n\twhile (current.length > 0) {\n\t\tconst last = current.at(-1);\n\t\tif (last === \",\" || last === \":\") {\n\t\t\tcurrent = current.slice(0, -1).trimEnd();\n\t\t\tvariants.push(current);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst colon = lastTopLevelToken(current, \":\");\n\t\tconst comma = lastTopLevelToken(current, \",\");\n\t\tconst openObject = lastTopLevelToken(current, \"{\");\n\t\tconst cutAt = Math.max(colon, comma, openObject);\n\t\tif (cutAt === -1) break;\n\n\t\tcurrent = current.slice(0, cutAt + (current[cutAt] === \"{\" ? 1 : 0)).trimEnd();\n\t\tvariants.push(current);\n\t\tbreak;\n\t}\n\n\treturn variants;\n}\n\nfunction lastTopLevelToken(input: string, token: string): number {\n\tlet inString = false;\n\tlet escaped = false;\n\tlet depth = 0;\n\n\tfor (let index = input.length - 1; index >= 0; index -= 1) {\n\t\tconst char = input[index];\n\n\t\tif (inString) {\n\t\t\tif (char === \"\\\\\" && !escaped) {\n\t\t\t\tescaped = true;\n\t\t\t} else if (char === '\"' && !escaped) {\n\t\t\t\tinString = false;\n\t\t\t} else {\n\t\t\t\tescaped = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tinString = true;\n\t\t} else if (char === \"}\" || char === \"]\") {\n\t\t\tdepth += 1;\n\t\t} else if (char === \"{\" || char === \"[\") {\n\t\t\tif (depth === 0 && char === token) return index;\n\t\t\tdepth -= 1;\n\t\t} else if (depth === 0 && char === token) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n","import { parsePartialJSON } from \"../parse-partial-json\";\nimport type {\n\tAssembleOptions,\n\tFinishReason,\n\tRawChunk,\n\tReasoningVariant,\n\tStreamEvent,\n} from \"../types\";\nimport { utf8ByteLength } from \"../utils/bytes\";\nimport { errorFromUnknown, prefixedError } from \"../utils/source\";\n\ntype TextState = Map<number, string>;\n\ninterface ToolState {\n\teventId: string;\n\tname: string;\n\targs: string;\n\tindex: number | undefined;\n\tchoiceIndex: number | undefined;\n\tstarted: boolean;\n}\n\nexport class EventAssembler {\n\tprivate text: TextState = new Map();\n\tprivate reasoning = \"\";\n\tprivate reasoningVariant: ReasoningVariant | undefined;\n\tprivate refusal = \"\";\n\tprivate json = \"\";\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly toolByIndex = new Map<string, string>();\n\tprivate finishEmitted = false;\n\n\tconstructor(private readonly options: AssembleOptions = {}) {}\n\n\tpush(chunk: RawChunk): StreamEvent[] {\n\t\tif (this.finishEmitted) return [];\n\n\t\tswitch (chunk.kind) {\n\t\t\tcase \"message-start\":\n\t\t\t\treturn [\n\t\t\t\t\toptionalEvent({ type: \"message.start\", id: chunk.id, choiceIndex: chunk.choiceIndex }),\n\t\t\t\t];\n\t\t\tcase \"text-delta\":\n\t\t\t\treturn this.pushText(chunk.text, chunk.choiceIndex);\n\t\t\tcase \"reasoning-delta\":\n\t\t\t\treturn this.pushReasoning(chunk.text, chunk.variant);\n\t\t\tcase \"refusal-delta\":\n\t\t\t\treturn this.pushRefusal(chunk.text);\n\t\t\tcase \"json-delta\":\n\t\t\t\treturn this.pushJson(chunk.delta);\n\t\t\tcase \"tool-start\":\n\t\t\t\treturn this.pushToolStart(chunk);\n\t\t\tcase \"tool-args-delta\":\n\t\t\t\treturn this.pushToolArgs(chunk);\n\t\t\tcase \"tool-done\":\n\t\t\t\treturn this.finishTool(chunk);\n\t\t\tcase \"metadata\": {\n\t\t\t\tconst { kind: _kind, ...metadata } = chunk;\n\t\t\t\treturn [optionalEvent({ type: \"metadata\", ...metadata })];\n\t\t\t}\n\t\t\tcase \"usage\": {\n\t\t\t\tconst { kind: _kind, ...usage } = chunk;\n\t\t\t\treturn [optionalEvent({ type: \"usage\", ...usage })];\n\t\t\t}\n\t\t\tcase \"finish\":\n\t\t\t\treturn chunk.choiceIndex === undefined\n\t\t\t\t\t? this.flush({ terminalReason: chunk.reason })\n\t\t\t\t\t: this.flush({ terminalReason: chunk.reason, choiceIndex: chunk.choiceIndex });\n\t\t\tcase \"provider-error\":\n\t\t\t\treturn [this.errorEvent(chunk.error, chunk.recoverable)];\n\t\t}\n\t}\n\n\tflush(options: { terminalReason?: FinishReason; choiceIndex?: number } = {}): StreamEvent[] {\n\t\tconst events: StreamEvent[] = [];\n\n\t\tevents.push(...this.flushText());\n\t\tevents.push(...this.flushReasoning());\n\t\tevents.push(...this.flushRefusal());\n\t\tevents.push(...this.flushJson());\n\t\tevents.push(...this.flushTools());\n\n\t\tconst forcedError = events.some(\n\t\t\t(event) => event.type === \"error\" && event.recoverable === false,\n\t\t);\n\t\tconst reason = forcedError ? \"error\" : options.terminalReason;\n\t\tif (reason && !this.finishEmitted) {\n\t\t\tevents.push(optionalEvent({ type: \"finish\", reason, choiceIndex: options.choiceIndex }));\n\t\t\tthis.finishEmitted = true;\n\t\t}\n\n\t\treturn events;\n\t}\n\n\treset(): void {\n\t\tthis.text = new Map();\n\t\tthis.reasoning = \"\";\n\t\tthis.reasoningVariant = undefined;\n\t\tthis.refusal = \"\";\n\t\tthis.json = \"\";\n\t\tthis.tools.clear();\n\t\tthis.toolByIndex.clear();\n\t\tthis.finishEmitted = false;\n\t}\n\n\thasFinished(): boolean {\n\t\treturn this.finishEmitted;\n\t}\n\n\tprivate pushText(text: string, choiceIndex = 0): StreamEvent[] {\n\t\tif (text.length === 0) return [];\n\t\tconst next = `${this.text.get(choiceIndex) ?? \"\"}${text}`;\n\t\tthis.assertBuffer(next, \"text\");\n\t\tthis.text.set(choiceIndex, next);\n\t\treturn [\n\t\t\toptionalEvent({ type: \"text.delta\", text, choiceIndex: normalizeChoiceIndex(choiceIndex) }),\n\t\t];\n\t}\n\n\tprivate pushReasoning(text: string, variant: ReasoningVariant | undefined): StreamEvent[] {\n\t\tif (text.length === 0) return [];\n\t\tthis.reasoning += text;\n\t\tthis.reasoningVariant = variant ?? this.reasoningVariant;\n\t\tthis.assertBuffer(this.reasoning, \"reasoning\");\n\t\treturn [optionalEvent({ type: \"reasoning.delta\", text, variant })];\n\t}\n\n\tprivate pushRefusal(text: string): StreamEvent[] {\n\t\tif (text.length === 0) return [];\n\t\tthis.refusal += text;\n\t\tthis.assertBuffer(this.refusal, \"refusal\");\n\t\treturn [{ type: \"refusal.delta\", text }];\n\t}\n\n\tprivate pushJson(delta: string): StreamEvent[] {\n\t\tif (delta.length === 0) return [];\n\t\tthis.json += delta;\n\t\tthis.assertBuffer(this.json, \"json\");\n\t\tconst partial = parsePartialJSON(this.json);\n\t\treturn [withOptional(\"partial\", partial.value, { type: \"json.delta\", delta })];\n\t}\n\n\tprivate pushToolStart(chunk: Extract<RawChunk, { kind: \"tool-start\" }>): StreamEvent[] {\n\t\tconst state = this.getOrCreateTool(chunk);\n\t\tif (chunk.id && !state.started) {\n\t\t\tstate.eventId = chunk.id;\n\t\t}\n\t\tstate.name = chunk.name;\n\t\tstate.index = chunk.index;\n\t\tstate.choiceIndex = chunk.choiceIndex;\n\n\t\tif (state.started) return [];\n\t\tstate.started = true;\n\n\t\treturn [\n\t\t\toptionalEvent({\n\t\t\t\ttype: \"tool_call.start\",\n\t\t\t\tid: state.eventId,\n\t\t\t\tname: state.name,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: state.choiceIndex,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate pushToolArgs(chunk: Extract<RawChunk, { kind: \"tool-args-delta\" }>): StreamEvent[] {\n\t\tif (chunk.delta.length === 0) return [];\n\t\tconst state = this.getOrCreateTool(chunk);\n\t\tstate.args += chunk.delta;\n\t\tthis.assertBuffer(state.args, \"tool args\");\n\t\tconst partial = parsePartialJSON(state.args);\n\t\treturn [\n\t\t\twithOptional(\"partial\", partial.value, {\n\t\t\t\ttype: \"tool_call.args.delta\",\n\t\t\t\tid: state.eventId,\n\t\t\t\tdelta: chunk.delta,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate finishTool(chunk: Extract<RawChunk, { kind: \"tool-done\" }>): StreamEvent[] {\n\t\tconst state = this.getOrCreateTool(chunk);\n\t\tconst done = this.toolDoneEvent(state);\n\t\tthis.deleteTool(state);\n\t\treturn [done];\n\t}\n\n\tprivate flushText(): StreamEvent[] {\n\t\tconst events: StreamEvent[] = [];\n\t\tfor (const [choiceIndex, text] of this.text) {\n\t\t\tif (text.length > 0) {\n\t\t\t\tevents.push(\n\t\t\t\t\toptionalEvent({\n\t\t\t\t\t\ttype: \"text.done\",\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tchoiceIndex: normalizeChoiceIndex(choiceIndex),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.text.clear();\n\t\treturn events;\n\t}\n\n\tprivate flushReasoning(): StreamEvent[] {\n\t\tif (this.reasoning.length === 0) return [];\n\t\tconst event = optionalEvent({\n\t\t\ttype: \"reasoning.done\",\n\t\t\ttext: this.reasoning,\n\t\t\tvariant: this.reasoningVariant,\n\t\t});\n\t\tthis.reasoning = \"\";\n\t\tthis.reasoningVariant = undefined;\n\t\treturn [event];\n\t}\n\n\tprivate flushRefusal(): StreamEvent[] {\n\t\tif (this.refusal.length === 0) return [];\n\t\tconst event: StreamEvent = { type: \"refusal.done\", text: this.refusal };\n\t\tthis.refusal = \"\";\n\t\treturn [event];\n\t}\n\n\tprivate flushJson(): StreamEvent[] {\n\t\tif (this.json.length === 0) return [];\n\t\tconst parsed = parsePartialJSON(this.json);\n\t\tthis.json = \"\";\n\t\tif (parsed.complete) {\n\t\t\treturn [{ type: \"json.done\", value: parsed.value }];\n\t\t}\n\t\treturn [this.errorEvent(prefixedError(\"json stream ended with invalid JSON\"), false)];\n\t}\n\n\tprivate flushTools(): StreamEvent[] {\n\t\tconst events: StreamEvent[] = [];\n\t\tfor (const state of this.tools.values()) {\n\t\t\tevents.push(this.toolDoneEvent(state));\n\t\t}\n\t\tthis.tools.clear();\n\t\tthis.toolByIndex.clear();\n\t\treturn events;\n\t}\n\n\tprivate toolDoneEvent(state: ToolState): StreamEvent {\n\t\tconst parsed = parsePartialJSON(state.args);\n\t\tif (parsed.complete) {\n\t\t\treturn { type: \"tool_call.done\", id: state.eventId, name: state.name, args: parsed.value };\n\t\t}\n\t\tif (this.options.strictToolArgs) {\n\t\t\tthrow prefixedError(`tool args for ${state.name} ended with invalid JSON`);\n\t\t}\n\t\treturn { type: \"tool_call.done\", id: state.eventId, name: state.name, args: state.args };\n\t}\n\n\tprivate getOrCreateTool(\n\t\tchunk: Extract<RawChunk, { kind: \"tool-start\" | \"tool-args-delta\" | \"tool-done\" }>,\n\t): ToolState {\n\t\tconst choiceIndex = chunk.choiceIndex ?? 0;\n\t\tconst indexKey = chunk.index === undefined ? undefined : `${choiceIndex}:${chunk.index}`;\n\t\tlet key = (indexKey ? this.toolByIndex.get(indexKey) : undefined) || chunk.id;\n\n\t\tif (!key && indexKey) {\n\t\t\tkey = `tool:${indexKey}`;\n\t\t\tthis.toolByIndex.set(indexKey, key);\n\t\t}\n\n\t\tkey ??= chunk.id ?? `tool:${choiceIndex}:${this.tools.size}`;\n\n\t\tlet state = this.tools.get(key);\n\t\tif (!state) {\n\t\t\tstate = {\n\t\t\t\teventId: chunk.id || key,\n\t\t\t\tname: \"unknown\",\n\t\t\t\targs: \"\",\n\t\t\t\tindex: chunk.index,\n\t\t\t\tchoiceIndex: normalizeChoiceIndex(choiceIndex),\n\t\t\t\tstarted: false,\n\t\t\t};\n\t\t\tthis.tools.set(key, state);\n\t\t}\n\n\t\tif (chunk.id && !state.started && state.eventId.startsWith(\"tool:\")) {\n\t\t\tthis.tools.delete(key);\n\t\t\tstate.eventId = chunk.id;\n\t\t\tthis.tools.set(chunk.id, state);\n\t\t\tif (indexKey) {\n\t\t\t\tthis.toolByIndex.set(indexKey, chunk.id);\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t}\n\n\tprivate deleteTool(state: ToolState): void {\n\t\tthis.tools.delete(state.eventId);\n\t\tif (state.index !== undefined) {\n\t\t\tthis.toolByIndex.delete(`${state.choiceIndex ?? 0}:${state.index}`);\n\t\t}\n\t}\n\n\tprivate assertBuffer(value: string, label: string): void {\n\t\tif (this.options.maxBufferBytes === undefined) return;\n\t\tif (utf8ByteLength(value) > this.options.maxBufferBytes) {\n\t\t\tthrow prefixedError(`${label} buffer exceeded maxBufferBytes`);\n\t\t}\n\t}\n\n\tprivate errorEvent(error: unknown, recoverable: boolean | undefined): StreamEvent {\n\t\tconst source = errorFromUnknown(error);\n\t\tif (!this.options.sanitizeErrors) {\n\t\t\treturn optionalEvent({ type: \"error\", error: source, recoverable });\n\t\t}\n\n\t\treturn optionalEvent({\n\t\t\ttype: \"error\",\n\t\t\terror: new Error(\"An error occurred while processing the stream.\"),\n\t\t\trecoverable,\n\t\t\tsanitized: \"An error occurred while processing the stream.\",\n\t\t});\n\t}\n}\n\nfunction optionalEvent(event: Record<string, unknown>): StreamEvent {\n\treturn Object.fromEntries(\n\t\tObject.entries(event).filter(([, value]) => value !== undefined && value !== \"kind\"),\n\t) as StreamEvent;\n}\n\nfunction withOptional<K extends string, T extends object>(\n\tkey: K,\n\tvalue: unknown,\n\ttarget: T,\n): T & Partial<Record<K, unknown>> {\n\tif (value === undefined) return target;\n\treturn { ...target, [key]: value } as T & Partial<Record<K, unknown>>;\n}\n\nfunction normalizeChoiceIndex(choiceIndex: number): number | undefined {\n\treturn choiceIndex === 0 ? undefined : choiceIndex;\n}\n","import type { AssembleOptions, StreamAdapter, StreamEvent } from \"./types\";\nimport { processPayload, resolveTerminalFlush } from \"./assembly/process-payload\";\nimport { EventAssembler } from \"./assembler/event-assembler\";\n\nexport function assembleFromPayloads(\n\tpayloads: AsyncIterable<string>,\n\tadapter: StreamAdapter,\n\toptions: AssembleOptions = {},\n): AsyncIterable<StreamEvent> {\n\treturn assembleFromPayloadsGenerator(payloads, adapter, options);\n}\n\nasync function* assembleFromPayloadsGenerator(\n\tpayloads: AsyncIterable<string>,\n\tadapter: StreamAdapter,\n\toptions: AssembleOptions,\n): AsyncIterable<StreamEvent> {\n\tconst assembler = new EventAssembler(options);\n\tconst iterator = payloads[Symbol.asyncIterator]();\n\tlet sawTerminalMarker = false;\n\n\ttry {\n\t\twhile (true) {\n\t\t\tif (options.signal?.aborted) {\n\t\t\t\tyield* assembler.flush({ terminalReason: \"aborted\" });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst item = await iterator.next();\n\t\t\tif (item.done) break;\n\n\t\t\tconst result = processPayload(item.value, assembler, adapter, options);\n\t\t\tif (result.kind === \"done-marker\") {\n\t\t\t\tsawTerminalMarker = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (result.kind === \"recoverable-error\") {\n\t\t\t\tyield result.event;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tyield* result.events;\n\t\t}\n\n\t\tyield* resolveTerminalFlush(assembler, {\n\t\t\tsawTerminalMarker,\n\t\t\taborted: options.signal?.aborted === true,\n\t\t});\n\t} finally {\n\t\tawait iterator.return?.();\n\t}\n}\n","export class SSEParser {\n\tprivate lineBuffer = \"\";\n\tprivate dataLines: string[] = [];\n\n\tpush(chunk: string): string[] {\n\t\tconst payloads: string[] = [];\n\t\tthis.lineBuffer += chunk;\n\n\t\twhile (true) {\n\t\t\tconst lineEnd = this.findLineEnd();\n\t\t\tif (!lineEnd) break;\n\n\t\t\tconst line = this.lineBuffer.slice(0, lineEnd.index);\n\t\t\tthis.lineBuffer = this.lineBuffer.slice(lineEnd.nextIndex);\n\t\t\tconst payload = this.processLine(line);\n\t\t\tif (payload !== undefined) {\n\t\t\t\tpayloads.push(payload);\n\t\t\t}\n\t\t}\n\n\t\treturn payloads;\n\t}\n\n\tflush(): string[] {\n\t\tconst payloads: string[] = [];\n\n\t\tif (this.lineBuffer.length > 0) {\n\t\t\tconst payload = this.processLine(this.lineBuffer);\n\t\t\tthis.lineBuffer = \"\";\n\t\t\tif (payload !== undefined) {\n\t\t\t\tpayloads.push(payload);\n\t\t\t}\n\t\t}\n\n\t\tconst payload = this.dispatch();\n\t\tif (payload !== undefined) {\n\t\t\tpayloads.push(payload);\n\t\t}\n\n\t\treturn payloads;\n\t}\n\n\tprivate findLineEnd(): { index: number; nextIndex: number } | undefined {\n\t\tconst lf = this.lineBuffer.indexOf(\"\\n\");\n\t\tconst cr = this.lineBuffer.indexOf(\"\\r\");\n\n\t\tif (lf === -1 && cr === -1) return undefined;\n\n\t\tif (cr !== -1 && (lf === -1 || cr < lf)) {\n\t\t\tconst nextIndex = this.lineBuffer[cr + 1] === \"\\n\" ? cr + 2 : cr + 1;\n\t\t\treturn { index: cr, nextIndex };\n\t\t}\n\n\t\treturn { index: lf, nextIndex: lf + 1 };\n\t}\n\n\tprivate processLine(line: string): string | undefined {\n\t\tif (line === \"\") {\n\t\t\treturn this.dispatch();\n\t\t}\n\n\t\tif (line.startsWith(\":\")) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst colon = line.indexOf(\":\");\n\t\tconst field = colon === -1 ? line : line.slice(0, colon);\n\t\tlet value = colon === -1 ? \"\" : line.slice(colon + 1);\n\t\tif (value.startsWith(\" \")) {\n\t\t\tvalue = value.slice(1);\n\t\t}\n\n\t\tif (field === \"data\") {\n\t\t\tthis.dataLines.push(value);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate dispatch(): string | undefined {\n\t\tif (this.dataLines.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst payload = this.dataLines.join(\"\\n\");\n\t\tthis.dataLines = [];\n\t\treturn payload.length > 0 ? payload : undefined;\n\t}\n}\n","import { sourceToStrings } from \"./utils/source\";\nimport { SSEParser } from \"./utils/sse-parser\";\n\nexport function parseSSE(\n\tsource: ReadableStream<Uint8Array> | AsyncIterable<string>,\n): AsyncIterable<string> {\n\treturn parseSSEGenerator(source);\n}\n\nasync function* parseSSEGenerator(\n\tsource: ReadableStream<Uint8Array> | AsyncIterable<string>,\n): AsyncIterable<string> {\n\tconst parser = new SSEParser();\n\n\tfor await (const chunk of sourceToStrings(source)) {\n\t\tfor (const payload of parser.push(chunk)) {\n\t\t\tyield payload;\n\t\t}\n\t}\n\n\tfor (const payload of parser.flush()) {\n\t\tyield payload;\n\t}\n}\n","import type { AssembleOptions, StreamAdapter, StreamEvent } from \"./types\";\nimport { assembleFromPayloads } from \"./assemble-payloads\";\nimport { parseSSE } from \"./parse-sse\";\n\nexport function assembleStream(\n\tsource: ReadableStream<Uint8Array> | AsyncIterable<string>,\n\tadapter: StreamAdapter,\n\toptions?: AssembleOptions,\n): AsyncIterable<StreamEvent> {\n\treturn assembleFromPayloads(parseSSE(source), adapter, options);\n}\n","import type { AssembleOptions, StreamAdapter, StreamEvent } from \"./types\";\nimport { EventAssembler } from \"./assembler/event-assembler\";\nimport { prefixedError } from \"./utils/source\";\n\nexport function assembleResponse(\n\tbody: unknown,\n\tadapter: StreamAdapter,\n\toptions: AssembleOptions = {},\n): StreamEvent[] {\n\tif (!adapter.parseResponse) {\n\t\tthrow prefixedError(\"adapter.parseResponse is required for assembleResponse\");\n\t}\n\n\tconst assembler = new EventAssembler(options);\n\tconst events: StreamEvent[] = [];\n\n\tfor (const chunk of adapter.parseResponse(body)) {\n\t\tevents.push(...assembler.push(chunk));\n\t}\n\n\tevents.push(...assembler.flush(assembler.hasFinished() ? undefined : { terminalReason: \"stop\" }));\n\treturn events;\n}\n","import type { AssembleFromFileOptions, StreamAdapter, StreamEvent } from \"./types\";\nimport { assembleResponse } from \"./assemble-response\";\nimport { assembleStream } from \"./assemble-stream\";\n\nexport function assembleFromFile(\n\tpath: string,\n\tadapter: StreamAdapter,\n\toptions: AssembleFromFileOptions = {},\n): AsyncIterable<StreamEvent> {\n\treturn assembleFromFileGenerator(path, adapter, options);\n}\n\nasync function* assembleFromFileGenerator(\n\tpath: string,\n\tadapter: StreamAdapter,\n\toptions: AssembleFromFileOptions,\n): AsyncIterable<StreamEvent> {\n\tconst format = options.format ?? inferFormat(path);\n\tconst content = await readFixture(path);\n\n\tif (format === \"sse\") {\n\t\tyield* assembleStream(stringIterable(content), adapter, options);\n\t\treturn;\n\t}\n\n\tlet body: unknown;\n\ttry {\n\t\tbody = JSON.parse(content) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(\n\t\t\t`llm-stream-assemble: assembleFromFile failed to parse JSON ${path}: ${message}`,\n\t\t);\n\t}\n\n\tfor (const event of assembleResponse(body, adapter, options)) {\n\t\tyield event;\n\t}\n}\n\nfunction inferFormat(path: string): \"sse\" | \"json\" {\n\tif (path.endsWith(\".sse\")) return \"sse\";\n\tif (path.endsWith(\".json\")) return \"json\";\n\tthrow new Error(`llm-stream-assemble: assembleFromFile cannot infer format for ${path}`);\n}\n\nasync function readFixture(path: string): Promise<string> {\n\ttry {\n\t\tconst { readFile } = await import(\"node:fs/promises\");\n\t\treturn await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(`llm-stream-assemble: assembleFromFile failed to read ${path}: ${message}`);\n\t}\n}\n\nasync function* stringIterable(value: string): AsyncIterable<string> {\n\tyield value;\n}\n","import type { AssembleOptions, StreamAdapter, StreamEvent } from \"./types\";\nimport { processPayload, resolveTerminalFlush } from \"./assembly/process-payload\";\nimport { EventAssembler } from \"./assembler/event-assembler\";\nimport { Utf8StreamDecoder } from \"./utils/bytes\";\nimport { SSEParser } from \"./utils/sse-parser\";\n\nexport function createAssemblyTransform(\n\tadapter: StreamAdapter,\n\toptions: AssembleOptions = {},\n): TransformStream<Uint8Array, StreamEvent> {\n\tconst decoder = new Utf8StreamDecoder();\n\tconst parser = new SSEParser();\n\tconst assembler = new EventAssembler(options);\n\tlet sawTerminalMarker = false;\n\tlet aborted = false;\n\n\tconst emit = (\n\t\tcontroller: TransformStreamDefaultController<StreamEvent>,\n\t\tevents: StreamEvent[],\n\t) => {\n\t\tfor (const event of events) {\n\t\t\tcontroller.enqueue(event);\n\t\t}\n\t};\n\n\tconst handlePayload = (\n\t\tpayload: string,\n\t\tcontroller: TransformStreamDefaultController<StreamEvent>,\n\t) => {\n\t\tconst result = processPayload(payload, assembler, adapter, options);\n\t\tif (result.kind === \"done-marker\") {\n\t\t\tsawTerminalMarker = true;\n\t\t\treturn;\n\t\t}\n\t\tif (result.kind === \"recoverable-error\") {\n\t\t\tcontroller.enqueue(result.event);\n\t\t\treturn;\n\t\t}\n\t\temit(controller, result.events);\n\t};\n\n\treturn new TransformStream<Uint8Array, StreamEvent>({\n\t\tstart(controller) {\n\t\t\toptions.signal?.addEventListener(\n\t\t\t\t\"abort\",\n\t\t\t\t() => {\n\t\t\t\t\tif (aborted || assembler.hasFinished()) return;\n\t\t\t\t\taborted = true;\n\t\t\t\t\temit(controller, assembler.flush({ terminalReason: \"aborted\" }));\n\t\t\t\t\tcontroller.terminate();\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t);\n\t\t},\n\t\ttransform(chunk, controller) {\n\t\t\tif (aborted || options.signal?.aborted) {\n\t\t\t\taborted = true;\n\t\t\t\temit(controller, assembler.flush({ terminalReason: \"aborted\" }));\n\t\t\t\tcontroller.terminate();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const payload of parser.push(decoder.decode(chunk))) {\n\t\t\t\thandlePayload(payload, controller);\n\t\t\t}\n\t\t},\n\t\tflush(controller) {\n\t\t\tif (aborted || options.signal?.aborted) {\n\t\t\t\temit(controller, assembler.flush({ terminalReason: \"aborted\" }));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst decoded = decoder.flush();\n\t\t\tif (decoded.length > 0) {\n\t\t\t\tfor (const payload of parser.push(decoded)) {\n\t\t\t\t\thandlePayload(payload, controller);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const payload of parser.flush()) {\n\t\t\t\thandlePayload(payload, controller);\n\t\t\t}\n\n\t\t\temit(controller, resolveTerminalFlush(assembler, { sawTerminalMarker, aborted: false }));\n\t\t},\n\t});\n}\n"]}