llm-stream-assemble 1.6.0 → 1.7.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 (38) hide show
  1. package/README.md +8 -6
  2. package/dist/adapters/anthropic.d.cts +1 -1
  3. package/dist/adapters/anthropic.d.ts +1 -1
  4. package/dist/adapters/bedrock.d.cts +1 -1
  5. package/dist/adapters/bedrock.d.ts +1 -1
  6. package/dist/adapters/cohere.d.cts +1 -1
  7. package/dist/adapters/cohere.d.ts +1 -1
  8. package/dist/adapters/gemini.d.cts +1 -1
  9. package/dist/adapters/gemini.d.ts +1 -1
  10. package/dist/adapters/openai-chat.cjs +81 -0
  11. package/dist/adapters/openai-chat.cjs.map +1 -1
  12. package/dist/adapters/openai-chat.d.cts +1 -1
  13. package/dist/adapters/openai-chat.d.ts +1 -1
  14. package/dist/adapters/openai-chat.js +81 -0
  15. package/dist/adapters/openai-chat.js.map +1 -1
  16. package/dist/adapters/openai-compatible.cjs +81 -0
  17. package/dist/adapters/openai-compatible.cjs.map +1 -1
  18. package/dist/adapters/openai-compatible.d.cts +1 -1
  19. package/dist/adapters/openai-compatible.d.ts +1 -1
  20. package/dist/adapters/openai-compatible.js +81 -0
  21. package/dist/adapters/openai-compatible.js.map +1 -1
  22. package/dist/adapters/openai-responses.d.cts +1 -1
  23. package/dist/adapters/openai-responses.d.ts +1 -1
  24. package/dist/core/index.cjs +6 -0
  25. package/dist/core/index.cjs.map +1 -1
  26. package/dist/core/index.d.cts +2 -2
  27. package/dist/core/index.d.ts +2 -2
  28. package/dist/core/index.js +6 -0
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/index.cjs +146 -1
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +44 -3
  33. package/dist/index.d.ts +44 -3
  34. package/dist/index.js +144 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/{types-CSHQ-Alb.d.cts → types-JvwK2_FV.d.cts} +31 -0
  37. package/dist/{types-CSHQ-Alb.d.ts → types-JvwK2_FV.d.ts} +31 -0
  38. package/package.json +2 -1
@@ -1 +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/utils/object.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","/** 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","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 { stripUndefined } from \"../utils/object\";\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 \"citation\":\n\t\t\t\treturn [this.citationEvent(chunk)];\n\t\t\tcase \"grounding\":\n\t\t\t\treturn [this.groundingEvent(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 citationEvent(chunk: Extract<RawChunk, { kind: \"citation\" }>): StreamEvent {\n\t\tconst { kind: _kind, ...rest } = chunk;\n\t\treturn optionalEvent({ type: \"citation\", ...rest });\n\t}\n\n\tprivate groundingEvent(chunk: Extract<RawChunk, { kind: \"grounding\" }>): StreamEvent {\n\t\tconst { kind: _kind, ...rest } = chunk;\n\t\treturn optionalEvent({ type: \"grounding\", ...rest });\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 stripUndefined(\n\t\tObject.fromEntries(\n\t\t\tObject.entries(event).filter(([, value]) => value !== undefined && value !== \"kind\"),\n\t\t),\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"]}
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/utils/object.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","/** 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","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 { stripUndefined } from \"../utils/object\";\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 \"citation\":\n\t\t\t\treturn [this.citationEvent(chunk)];\n\t\t\tcase \"grounding\":\n\t\t\t\treturn [this.groundingEvent(chunk)];\n\t\t\tcase \"logprob\":\n\t\t\t\treturn [this.logprobEvent(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 citationEvent(chunk: Extract<RawChunk, { kind: \"citation\" }>): StreamEvent {\n\t\tconst { kind: _kind, ...rest } = chunk;\n\t\treturn optionalEvent({ type: \"citation\", ...rest });\n\t}\n\n\tprivate groundingEvent(chunk: Extract<RawChunk, { kind: \"grounding\" }>): StreamEvent {\n\t\tconst { kind: _kind, ...rest } = chunk;\n\t\treturn optionalEvent({ type: \"grounding\", ...rest });\n\t}\n\n\tprivate logprobEvent(chunk: Extract<RawChunk, { kind: \"logprob\" }>): StreamEvent {\n\t\tconst { kind: _kind, ...rest } = chunk;\n\t\treturn optionalEvent({ type: \"logprob\", ...rest });\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 stripUndefined(\n\t\tObject.fromEntries(\n\t\t\tObject.entries(event).filter(([, value]) => value !== undefined && value !== \"kind\"),\n\t\t),\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"]}
package/dist/index.cjs CHANGED
@@ -319,6 +319,8 @@ var EventAssembler = class {
319
319
  return [this.citationEvent(chunk)];
320
320
  case "grounding":
321
321
  return [this.groundingEvent(chunk)];
322
+ case "logprob":
323
+ return [this.logprobEvent(chunk)];
322
324
  case "metadata": {
323
325
  const { kind: _kind, ...metadata } = chunk;
324
326
  return [optionalEvent({ type: "metadata", ...metadata })];
@@ -544,6 +546,10 @@ var EventAssembler = class {
544
546
  const { kind: _kind, ...rest } = chunk;
545
547
  return optionalEvent({ type: "grounding", ...rest });
546
548
  }
549
+ logprobEvent(chunk) {
550
+ const { kind: _kind, ...rest } = chunk;
551
+ return optionalEvent({ type: "logprob", ...rest });
552
+ }
547
553
  errorEvent(error, recoverable) {
548
554
  const source = errorFromUnknown(error);
549
555
  if (!this.options.sanitizeErrors) {
@@ -1192,6 +1198,82 @@ function firstNumber(source, fields) {
1192
1198
  return void 0;
1193
1199
  }
1194
1200
 
1201
+ // src/adapters/shared/logprobs.ts
1202
+ function createLogprobPositionState() {
1203
+ return { positions: /* @__PURE__ */ new Map() };
1204
+ }
1205
+ function logprobPositionKey(choiceIndex, channel) {
1206
+ return `${choiceIndex ?? 0}:${channel}`;
1207
+ }
1208
+ function nextLogprobPosition(state, choiceIndex, channel) {
1209
+ const key = logprobPositionKey(choiceIndex, channel);
1210
+ const next = state.positions.get(key) ?? 0;
1211
+ state.positions.set(key, next + 1);
1212
+ return next;
1213
+ }
1214
+ function normalizeTopLogprobs(value) {
1215
+ if (!Array.isArray(value) || value.length === 0) return void 0;
1216
+ const result = [];
1217
+ for (const entry of value) {
1218
+ if (!isRecord(entry)) continue;
1219
+ const token = asString(entry.token);
1220
+ const logprob = asNumber(entry.logprob);
1221
+ if (token === void 0 || logprob === void 0) continue;
1222
+ const item = { token, logprob };
1223
+ if (Array.isArray(entry.bytes)) {
1224
+ const bytes = entry.bytes.filter((byte) => typeof byte === "number");
1225
+ if (bytes.length > 0) item.bytes = bytes;
1226
+ }
1227
+ result.push(item);
1228
+ }
1229
+ return result.length > 0 ? result : void 0;
1230
+ }
1231
+ function logprobEntryFromProvider(entry, channel, choiceIndex, position) {
1232
+ if (!isRecord(entry)) return void 0;
1233
+ const token = asString(entry.token);
1234
+ if (token === void 0 || token.length === 0) return void 0;
1235
+ const logprob = asNumber(entry.logprob);
1236
+ if (logprob === void 0) return void 0;
1237
+ const chunk = {
1238
+ kind: "logprob",
1239
+ channel,
1240
+ token,
1241
+ logprob,
1242
+ raw: entry
1243
+ };
1244
+ if (Array.isArray(entry.bytes)) {
1245
+ const bytes = entry.bytes.filter((byte) => typeof byte === "number");
1246
+ if (bytes.length > 0) chunk.bytes = bytes;
1247
+ }
1248
+ const topLogprobs = normalizeTopLogprobs(entry.top_logprobs);
1249
+ if (topLogprobs) chunk.topLogprobs = topLogprobs;
1250
+ if (choiceIndex !== void 0) chunk.choiceIndex = choiceIndex;
1251
+ if (position !== void 0) chunk.position = position;
1252
+ return optionalRawChunk(chunk);
1253
+ }
1254
+ function logprobChunksFromChoiceLogprobs(logprobs, choiceIndex, positionState) {
1255
+ if (logprobs === null || logprobs === void 0) return [];
1256
+ if (!isRecord(logprobs)) return [];
1257
+ const chunks = [];
1258
+ const content = logprobs.content;
1259
+ const refusal = logprobs.refusal;
1260
+ if (Array.isArray(content)) {
1261
+ for (let index = 0; index < content.length; index += 1) {
1262
+ const position = positionState ? nextLogprobPosition(positionState, choiceIndex, "content") : index;
1263
+ const chunk = logprobEntryFromProvider(content[index], "content", choiceIndex, position);
1264
+ if (chunk) chunks.push(chunk);
1265
+ }
1266
+ }
1267
+ if (Array.isArray(refusal)) {
1268
+ for (let index = 0; index < refusal.length; index += 1) {
1269
+ const position = positionState ? nextLogprobPosition(positionState, choiceIndex, "refusal") : index;
1270
+ const chunk = logprobEntryFromProvider(refusal[index], "refusal", choiceIndex, position);
1271
+ if (chunk) chunks.push(chunk);
1272
+ }
1273
+ }
1274
+ return chunks;
1275
+ }
1276
+
1195
1277
  // src/adapters/openai-chat/parser/stream-parser.ts
1196
1278
  var OpenAIChatLikeParser = class {
1197
1279
  constructor(options) {
@@ -1201,6 +1283,7 @@ var OpenAIChatLikeParser = class {
1201
1283
  metadataEmitted = false;
1202
1284
  tools = /* @__PURE__ */ new Map();
1203
1285
  legacyStarted = /* @__PURE__ */ new Set();
1286
+ logprobPositions = createLogprobPositionState();
1204
1287
  parseChunk(raw) {
1205
1288
  const payload = parseAdapterObjectPayload(raw, `${this.options.errorPrefix}.parseChunk`);
1206
1289
  if (!payload) return [];
@@ -1238,6 +1321,9 @@ var OpenAIChatLikeParser = class {
1238
1321
  const choiceIndex = choiceIndexFor(choice, position, this.options);
1239
1322
  const chunks = [];
1240
1323
  const delta = isRecord(choice.delta) ? choice.delta : void 0;
1324
+ chunks.push(
1325
+ ...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex, this.logprobPositions)
1326
+ );
1241
1327
  if (delta) {
1242
1328
  chunks.push(...this.deltaChunks(delta, choiceIndex, position));
1243
1329
  }
@@ -1372,6 +1458,7 @@ function responseChoiceChunks(choice, position, options) {
1372
1458
  const choiceIndex = choiceIndexFor(choice, position, options);
1373
1459
  const message = isRecord(choice.message) ? choice.message : void 0;
1374
1460
  const chunks = [];
1461
+ chunks.push(...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex));
1375
1462
  if (message) {
1376
1463
  const content = asString(message.content);
1377
1464
  if (content && content.length > 0) {
@@ -3298,7 +3385,8 @@ async function collectStream(events) {
3298
3385
  json: void 0,
3299
3386
  toolCalls: [],
3300
3387
  citations: [],
3301
- grounding: []
3388
+ grounding: [],
3389
+ logprobs: []
3302
3390
  };
3303
3391
  const iterator = events[Symbol.asyncIterator]();
3304
3392
  try {
@@ -3345,6 +3433,9 @@ function collectEvent(result, event) {
3345
3433
  case "grounding":
3346
3434
  result.grounding.push(event);
3347
3435
  break;
3436
+ case "logprob":
3437
+ result.logprobs.push(event);
3438
+ break;
3348
3439
  case "usage":
3349
3440
  result.usage = event;
3350
3441
  break;
@@ -3465,6 +3556,8 @@ function matchEvent(event, handlers) {
3465
3556
  return handlers.citation?.(event);
3466
3557
  case "grounding":
3467
3558
  return handlers.grounding?.(event);
3559
+ case "logprob":
3560
+ return handlers.logprob?.(event);
3468
3561
  case "usage":
3469
3562
  return handlers.usage?.(event);
3470
3563
  case "finish":
@@ -3503,6 +3596,52 @@ function citationSpanAnchor(input) {
3503
3596
  return { anchorText, consistent: true };
3504
3597
  }
3505
3598
 
3599
+ // src/helpers/logprob-confidence.ts
3600
+ function logprobConfidence(input) {
3601
+ const result = {};
3602
+ if (Number.isFinite(input.logprob) && input.logprob <= 0) {
3603
+ result.probability = Math.exp(input.logprob);
3604
+ }
3605
+ const top = input.topLogprobs;
3606
+ if (top && top.length >= 2) {
3607
+ const sorted = [...top].sort((left, right) => right.logprob - left.logprob);
3608
+ const best = sorted[0];
3609
+ const runnerUp = sorted[1];
3610
+ if (best && runnerUp && Number.isFinite(best.logprob) && Number.isFinite(runnerUp.logprob)) {
3611
+ result.margin = best.logprob - runnerUp.logprob;
3612
+ result.runnerUpToken = runnerUp.token;
3613
+ }
3614
+ }
3615
+ return result;
3616
+ }
3617
+
3618
+ // src/helpers/align-logprobs-with-text.ts
3619
+ function alignLogprobsWithText(input) {
3620
+ const entries = [];
3621
+ let cursor = 0;
3622
+ let unaligned = 0;
3623
+ for (const item of input.logprobs) {
3624
+ const index = input.assistantText.indexOf(item.token, cursor);
3625
+ if (index === -1) {
3626
+ unaligned += 1;
3627
+ continue;
3628
+ }
3629
+ const start = index;
3630
+ const end = index + item.token.length;
3631
+ const slice = input.assistantText.slice(start, end);
3632
+ entries.push({
3633
+ logprob: item.logprob,
3634
+ token: item.token,
3635
+ start,
3636
+ end,
3637
+ consistent: slice === item.token,
3638
+ ...item.position !== void 0 ? { position: item.position } : {}
3639
+ });
3640
+ cursor = end;
3641
+ }
3642
+ return { entries, unaligned };
3643
+ }
3644
+
3506
3645
  // src/helpers/type-guards.ts
3507
3646
  function isMessageStart(event) {
3508
3647
  return event.type === "message.start";
@@ -3549,6 +3688,9 @@ function isCitation(event) {
3549
3688
  function isGrounding(event) {
3550
3689
  return event.type === "grounding";
3551
3690
  }
3691
+ function isLogprob(event) {
3692
+ return event.type === "logprob";
3693
+ }
3552
3694
  function isUsage(event) {
3553
3695
  return event.type === "usage";
3554
3696
  }
@@ -3565,6 +3707,7 @@ exports.OPENAI_COMPATIBLE_PROVIDERS = OPENAI_COMPATIBLE_PROVIDERS;
3565
3707
  exports.PRESET_OVERRIDES = PRESET_OVERRIDES;
3566
3708
  exports.PRESET_OVERRIDE_KEYS = PRESET_OVERRIDE_KEYS;
3567
3709
  exports.STRICT_COMPATIBLE_PRESETS = STRICT_COMPATIBLE_PRESETS;
3710
+ exports.alignLogprobsWithText = alignLogprobsWithText;
3568
3711
  exports.anthropicAdapter = anthropicAdapter;
3569
3712
  exports.assembleFromFile = assembleFromFile;
3570
3713
  exports.assembleFromPayloads = assembleFromPayloads;
@@ -3584,6 +3727,7 @@ exports.isFinish = isFinish;
3584
3727
  exports.isGrounding = isGrounding;
3585
3728
  exports.isJsonDelta = isJsonDelta;
3586
3729
  exports.isJsonDone = isJsonDone;
3730
+ exports.isLogprob = isLogprob;
3587
3731
  exports.isMessageStart = isMessageStart;
3588
3732
  exports.isMetadata = isMetadata;
3589
3733
  exports.isReasoningDelta = isReasoningDelta;
@@ -3597,6 +3741,7 @@ exports.isToolCallArgsDelta = isToolCallArgsDelta;
3597
3741
  exports.isToolCallDone = isToolCallDone;
3598
3742
  exports.isToolCallStart = isToolCallStart;
3599
3743
  exports.isUsage = isUsage;
3744
+ exports.logprobConfidence = logprobConfidence;
3600
3745
  exports.matchEvent = matchEvent;
3601
3746
  exports.openaiChatAdapter = openaiChatAdapter;
3602
3747
  exports.openaiCompatibleAdapter = openaiCompatibleAdapter;