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.
- package/README.md +8 -6
- package/dist/adapters/anthropic.d.cts +1 -1
- package/dist/adapters/anthropic.d.ts +1 -1
- package/dist/adapters/bedrock.d.cts +1 -1
- package/dist/adapters/bedrock.d.ts +1 -1
- package/dist/adapters/cohere.d.cts +1 -1
- package/dist/adapters/cohere.d.ts +1 -1
- package/dist/adapters/gemini.d.cts +1 -1
- package/dist/adapters/gemini.d.ts +1 -1
- package/dist/adapters/openai-chat.cjs +81 -0
- package/dist/adapters/openai-chat.cjs.map +1 -1
- package/dist/adapters/openai-chat.d.cts +1 -1
- package/dist/adapters/openai-chat.d.ts +1 -1
- package/dist/adapters/openai-chat.js +81 -0
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs +81 -0
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.d.cts +1 -1
- package/dist/adapters/openai-compatible.d.ts +1 -1
- package/dist/adapters/openai-compatible.js +81 -0
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/adapters/openai-responses.d.cts +1 -1
- package/dist/adapters/openai-responses.d.ts +1 -1
- package/dist/core/index.cjs +6 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +146 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +44 -3
- package/dist/index.d.ts +44 -3
- package/dist/index.js +144 -2
- package/dist/index.js.map +1 -1
- package/dist/{types-CSHQ-Alb.d.cts → types-JvwK2_FV.d.cts} +31 -0
- package/dist/{types-CSHQ-Alb.d.ts → types-JvwK2_FV.d.ts} +31 -0
- package/package.json +2 -1
package/dist/core/index.js.map
CHANGED
|
@@ -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;
|