assistant-stream 0.0.0-rc.1 → 0.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-sdk.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AssistantStream,
3
3
  generateId
4
- } from "./chunk-7LSSA5HC.mjs";
4
+ } from "./chunk-AQTFNEIT.mjs";
5
5
 
6
6
  // ../ai-sdk/src/index.ts
7
7
  var fromAISDKStreamText = (stream) => {
@@ -198,7 +198,7 @@ var RunControllerImpl = class {
198
198
  this._merge.seal();
199
199
  this._textPartController?.close();
200
200
  }
201
- addStep(stream) {
201
+ appendStep(stream) {
202
202
  this._merge.addStream(stream);
203
203
  }
204
204
  appendText(textDelta) {
@@ -214,7 +214,7 @@ var RunControllerImpl = class {
214
214
  controller = c;
215
215
  }
216
216
  });
217
- this.addStep(textStream);
217
+ this.appendStep(textStream);
218
218
  return controller;
219
219
  }
220
220
  addToolCallPart(options) {
@@ -227,7 +227,7 @@ var RunControllerImpl = class {
227
227
  controller = c;
228
228
  }
229
229
  });
230
- this.addStep(toolCallStream);
230
+ this.appendStep(toolCallStream);
231
231
  return controller;
232
232
  }
233
233
  };
@@ -277,7 +277,7 @@ var DataStreamEncoder = class {
277
277
  "b:" + JSON.stringify({
278
278
  toolCallId: chunk.toolCallId,
279
279
  toolName: chunk.toolName
280
- })
280
+ }) + "\n"
281
281
  );
282
282
  break;
283
283
  case "tool-call-delta":
@@ -944,4 +944,4 @@ export {
944
944
  PlainTextDecoder,
945
945
  toAssistantMessageStream
946
946
  };
947
- //# sourceMappingURL=chunk-7LSSA5HC.mjs.map
947
+ //# sourceMappingURL=chunk-AQTFNEIT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/AssistantStream.ts","../../core/src/utils/generateId.tsx","../../core/src/modules/text.ts","../../core/src/modules/tool-call.ts","../../core/src/modules/runs.ts","../../core/src/utils/PipeableTransformStream.ts","../../core/src/serialization/DataStream.ts","../../core/src/serialization/PlainText.ts","../../core/src/reducers/partial-json/parse-partial-json.ts","../../core/src/reducers/partial-json/fix-json.ts","../../core/src/reducers/assistant-message.ts"],"sourcesContent":["export type AssistantStream2 = {\n // kind: AssistantStreamKind;\n readable: ReadableStream<AssistantStreamChunk>;\n toResponse(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): Response;\n toByteStream(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): ReadableStream<Uint8Array>;\n tee(): [AssistantStream, AssistantStream];\n};\n\nexport type AssistantStreamChunk =\n | {\n type: \"text-delta\";\n textDelta: string;\n }\n | {\n type: \"tool-call-begin\";\n toolCallId: string;\n toolName: string;\n }\n | {\n type: \"tool-call-delta\";\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\nexport class AssistantStream {\n constructor(public readonly readable: ReadableStream<AssistantStreamChunk>) {\n this.readable = readable;\n }\n\n toResponse(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return new Response(this.toByteStream(transformer));\n }\n\n static fromResponse(\n response: Response,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n }\n\n toByteStream(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return this.readable.pipeThrough(transformer);\n }\n\n static fromByteStream(\n readable: ReadableStream<Uint8Array>,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return new AssistantStream(readable.pipeThrough(transformer));\n }\n\n tee(): [AssistantStream, AssistantStream] {\n const [readable1, readable2] = this.readable.tee();\n return [new AssistantStream(readable1), new AssistantStream(readable2)];\n }\n}\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n return this;\n }\n\n close() {\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\nimport { createTextStream, TextStreamController } from \"./text\";\n\nexport type ToolCallStreamController = {\n readonly toolCallId: string;\n readonly toolName: string;\n\n argsText: TextStreamController;\n\n setResult(result: unknown): void;\n close(): void;\n};\n\nclass ToolCallStreamControllerImpl implements ToolCallStreamController {\n public get toolCallId() {\n return this._options.toolCallId;\n }\n\n public get toolName() {\n return this._options.toolName;\n }\n\n constructor(\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n private _options: { toolCallId: string; toolName: string },\n ) {\n createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n throw new Error(\"Tool call results are not supported yet.\");\n }\n\n close() {\n this._controller.close();\n }\n}\n\ntype UnderlyingToolCallStreamReadable =\n UnderlyingReadable<ToolCallStreamController> & {\n toolCallId: string;\n toolName: string;\n };\n\nexport const createToolCallStream = (\n readable: UnderlyingToolCallStreamReadable,\n): AssistantStream => {\n const options = {\n toolCallId: readable.toolCallId,\n toolName: readable.toolName,\n };\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new ToolCallStreamControllerImpl(c, options));\n },\n pull(c) {\n return readable.pull?.(new ToolCallStreamControllerImpl(c, options));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { generateId } from \"../utils/generateId\";\nimport { createTextStream, TextStreamController } from \"./text\";\nimport { createToolCallStream, ToolCallStreamController } from \"./tool-call\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nconst promiseWithResolvers = () => {\n let resolve: () => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n};\n\nconst createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n async pull() {\n list.map((item) => {\n handlePull(item);\n return item.promise!;\n });\n\n currentPull = promiseWithResolvers();\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n stream: readable,\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: AssistantStream) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.readable.getReader() };\n list.push(item);\n if (list.length === 1) {\n handlePull(item);\n }\n },\n };\n};\n\nexport type RunController = {\n appendText(textDelta: string): void;\n // addTextPart(): TextStreamController;\n // addToolCallPart(toolName: string): ToolCallStreamController;\n // addToolCallPart(options: {\n // toolCallId: string;\n // toolName: string;\n // }): ToolCallStreamController;\n appendStep(stream: AssistantStream): void;\n};\n\nclass RunControllerImpl implements RunController {\n private _merge = createMergeStream();\n private _textPartController: TextStreamController | undefined;\n\n getReadable() {\n return this._merge.stream;\n }\n\n close() {\n this._merge.seal();\n this._textPartController?.close();\n }\n\n appendStep(stream: AssistantStream) {\n this._merge.addStream(stream);\n }\n\n appendText(textDelta: string) {\n if (!this._textPartController) {\n this._textPartController = this.addTextPart();\n }\n this._textPartController.append(textDelta);\n }\n\n addTextPart() {\n let controller: TextStreamController;\n const textStream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n this.appendStep(textStream);\n return controller!;\n }\n\n addToolCallPart(\n options:\n | string\n | {\n toolCallId: string;\n toolName: string;\n },\n ): ToolCallStreamController {\n const opt =\n typeof options === \"string\"\n ? { toolName: options, toolCallId: generateId() }\n : options;\n\n let controller: ToolCallStreamController;\n const toolCallStream = createToolCallStream({\n toolCallId: opt.toolCallId,\n toolName: opt.toolName,\n start(c) {\n controller = c;\n },\n });\n this.appendStep(toolCallStream);\n return controller!;\n }\n}\n\nexport function createRun(\n callback: (controller: RunController) => Promise<void> | void,\n): AssistantStream {\n const controller = new RunControllerImpl();\n const promiseOrVoid = callback(controller);\n if (promiseOrVoid instanceof Promise) {\n promiseOrVoid.finally(() => controller.close());\n } else {\n controller.close();\n }\n\n return new AssistantStream(controller.getReadable());\n}\n","export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as any);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\nimport { StreamPart } from \"./streamPart/StreamPart\";\n\nexport class DataStreamEncoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(\"0:\" + JSON.stringify(chunk.textDelta) + \"\\n\");\n break;\n\n case \"tool-call-begin\":\n controller.enqueue(\n \"b:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-call-delta\":\n controller.enqueue(\n \"c:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-result\":\n controller.enqueue(\n \"a:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n }) +\n \"\\n\",\n );\n break;\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst decodeStreamPart = <T extends Record<string, unknown>>(\n part: string,\n): StreamPart<T> => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return {\n type: part.slice(0, index),\n value: JSON.parse(part.slice(index + 1)),\n };\n};\n\nexport class DataStreamDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = decodeStreamPart(chunk);\n switch (type) {\n case \"0\":\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value as string,\n });\n break;\n\n case \"b\": {\n const { toolCallId, toolName } = value as {\n toolCallId: string;\n toolName: string;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n\n case \"c\": {\n const { toolCallId, argsTextDelta } = value as {\n toolCallId: string;\n argsTextDelta: string;\n };\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\n break;\n }\n\n case \"a\": {\n const { toolCallId, result } = value as {\n toolCallId: string;\n result: any;\n };\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n\n default:\n const exhaustiveCheck: string = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new ChunkByLineStream())\n .pipeThrough(transform);\n });\n }\n}\n\nexport class ChunkByLineStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1]!;\n },\n flush: (controller) => {\n // flush any remaining content in the buffer\n if (this.buffer) {\n controller.enqueue(this.buffer);\n }\n },\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n implements ReadableWritablePair<Uint8Array, AssistantStreamChunk>\n{\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(chunk.textDelta);\n break;\n\n case \"tool-call-begin\":\n case \"tool-call-delta\":\n case \"tool-result\":\n throw new Error(\n `tool-call-begin and tool-call-delta are not supported in plain text serialization`,\n );\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nexport class PlainTextDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: chunk,\n });\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n","import sjson from \"secure-json-parse\";\nimport { fixJson } from \"./fix-json\";\n\nexport const parsePartialJson = (json: string) => {\n try {\n return sjson.parse(json);\n } catch {\n try {\n return sjson.parse(fixJson(json));\n } catch {\n return undefined;\n }\n }\n};\n","// LICENSE for this file only\n\n// Copyright 2023 Vercel, Inc.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype State =\n | \"ROOT\"\n | \"FINISH\"\n | \"INSIDE_STRING\"\n | \"INSIDE_STRING_ESCAPE\"\n | \"INSIDE_LITERAL\"\n | \"INSIDE_NUMBER\"\n | \"INSIDE_OBJECT_START\"\n | \"INSIDE_OBJECT_KEY\"\n | \"INSIDE_OBJECT_AFTER_KEY\"\n | \"INSIDE_OBJECT_BEFORE_VALUE\"\n | \"INSIDE_OBJECT_AFTER_VALUE\"\n | \"INSIDE_OBJECT_AFTER_COMMA\"\n | \"INSIDE_ARRAY_START\"\n | \"INSIDE_ARRAY_AFTER_VALUE\"\n | \"INSIDE_ARRAY_AFTER_COMMA\";\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!;\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n\n case \",\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"}\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"]\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !\"false\".startsWith(partialLiteral) &&\n !\"true\".startsWith(partialLiteral) &&\n !\"null\".startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"./types\";\n\nexport type AsyncIterableStream<T> = AsyncIterable<T, undefined> &\n ReadableStream<T>;\n\nexport function createAsyncIterableStream<S, T>(\n source: ReadableStream<S>,\n transform: TransformStream<S, T>,\n): AsyncIterableStream<T> {\n const transformedStream: any = source.pipeThrough(transform);\n\n transformedStream[Symbol.asyncIterator] = () => {\n const reader = transformedStream.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return transformedStream;\n}\n\nexport const toAssistantMessageStream = (stream: AssistantStream) => {\n let message: AssistantMessage = {\n role: \"assistant\",\n content: [],\n status: { type: \"running\" },\n metadata: {\n steps: [],\n custom: {},\n },\n };\n const transformer = new TransformStream<\n AssistantStreamChunk,\n AssistantMessage\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-begin\": {\n const { toolCallId, toolName } = chunk;\n message = appendToolCall(message, toolCallId, toolName);\n controller.enqueue(message);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n message = appendToolArgsTextDelta(message, toolCallId, argsTextDelta);\n controller.enqueue(message);\n break;\n }\n case \"tool-result\" as string: {\n const { toolCallId, result } = chunk as unknown as {\n toolCallId: string;\n result: unknown;\n };\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return createAsyncIterableStream(stream.readable, transformer);\n};\n\nconst appendOrUpdateText = (message: AssistantMessage, textDelta: string) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = {\n type: \"text\",\n text: textDelta,\n status: { type: \"running\" },\n };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = {\n type: \"text\",\n text: contentPart.text + textDelta,\n status: { type: \"running\" },\n };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendToolCall = (\n message: AssistantMessage,\n toolCallId: string,\n toolName: string,\n): AssistantMessage => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: \"\",\n args: {},\n status: { type: \"running\", isArgsComplete: false },\n },\n ],\n };\n};\n\nconst appendToolArgsTextDelta = (\n message: AssistantMessage,\n toolCallId: string,\n argsTextDelta: string,\n): AssistantMessage => {\n const contentPartIdx = message.content.findIndex(\n (part) => part.type === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (contentPartIdx === -1)\n throw new Error(\n `Received tool call delta for unknown tool call \"${toolCallId}\".`,\n );\n const contentPart = message.content[contentPartIdx]! as ToolCallContentPart;\n const newArgsText = contentPart.argsText + argsTextDelta;\n\n return {\n ...message,\n content: [\n ...message.content.slice(0, contentPartIdx),\n {\n ...contentPart,\n argsText: newArgsText,\n args: parsePartialJson(newArgsText),\n },\n ...message.content.slice(contentPartIdx + 1),\n ],\n };\n};\n\nconst setToolResult = (\n message: AssistantMessage,\n toolCallId: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendOrUpdateFinish = (message: AssistantMessage): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"complete\",\n reason: \"unknown\",\n },\n };\n};\n"],"mappings":"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","names":["item"]}
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStre
2
2
 
3
3
  type RunController = {
4
4
  appendText(textDelta: string): void;
5
- addStep(stream: AssistantStream): void;
5
+ appendStep(stream: AssistantStream): void;
6
6
  };
7
7
  declare function createRun(callback: (controller: RunController) => Promise<void> | void): AssistantStream;
8
8
 
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStre
2
2
 
3
3
  type RunController = {
4
4
  appendText(textDelta: string): void;
5
- addStep(stream: AssistantStream): void;
5
+ appendStep(stream: AssistantStream): void;
6
6
  };
7
7
  declare function createRun(callback: (controller: RunController) => Promise<void> | void): AssistantStream;
8
8
 
package/dist/index.js CHANGED
@@ -240,7 +240,7 @@ var RunControllerImpl = class {
240
240
  this._merge.seal();
241
241
  this._textPartController?.close();
242
242
  }
243
- addStep(stream) {
243
+ appendStep(stream) {
244
244
  this._merge.addStream(stream);
245
245
  }
246
246
  appendText(textDelta) {
@@ -256,7 +256,7 @@ var RunControllerImpl = class {
256
256
  controller = c;
257
257
  }
258
258
  });
259
- this.addStep(textStream);
259
+ this.appendStep(textStream);
260
260
  return controller;
261
261
  }
262
262
  addToolCallPart(options) {
@@ -269,7 +269,7 @@ var RunControllerImpl = class {
269
269
  controller = c;
270
270
  }
271
271
  });
272
- this.addStep(toolCallStream);
272
+ this.appendStep(toolCallStream);
273
273
  return controller;
274
274
  }
275
275
  };
@@ -319,7 +319,7 @@ var DataStreamEncoder = class {
319
319
  "b:" + JSON.stringify({
320
320
  toolCallId: chunk.toolCallId,
321
321
  toolName: chunk.toolName
322
- })
322
+ }) + "\n"
323
323
  );
324
324
  break;
325
325
  case "tool-call-delta":
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../core/src/AssistantStream.ts","../../core/src/utils/generateId.tsx","../../core/src/modules/text.ts","../../core/src/modules/tool-call.ts","../../core/src/modules/runs.ts","../../core/src/utils/PipeableTransformStream.ts","../../core/src/serialization/DataStream.ts","../../core/src/serialization/PlainText.ts","../../core/src/reducers/partial-json/parse-partial-json.ts","../../core/src/reducers/partial-json/fix-json.ts","../../core/src/reducers/assistant-message.ts"],"sourcesContent":["export * from \"@assistant-stream/core\";\n","export type AssistantStream2 = {\n // kind: AssistantStreamKind;\n readable: ReadableStream<AssistantStreamChunk>;\n toResponse(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): Response;\n toByteStream(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): ReadableStream<Uint8Array>;\n tee(): [AssistantStream, AssistantStream];\n};\n\nexport type AssistantStreamChunk =\n | {\n type: \"text-delta\";\n textDelta: string;\n }\n | {\n type: \"tool-call-begin\";\n toolCallId: string;\n toolName: string;\n }\n | {\n type: \"tool-call-delta\";\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\nexport class AssistantStream {\n constructor(public readonly readable: ReadableStream<AssistantStreamChunk>) {\n this.readable = readable;\n }\n\n toResponse(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return new Response(this.toByteStream(transformer));\n }\n\n static fromResponse(\n response: Response,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n }\n\n toByteStream(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return this.readable.pipeThrough(transformer);\n }\n\n static fromByteStream(\n readable: ReadableStream<Uint8Array>,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return new AssistantStream(readable.pipeThrough(transformer));\n }\n\n tee(): [AssistantStream, AssistantStream] {\n const [readable1, readable2] = this.readable.tee();\n return [new AssistantStream(readable1), new AssistantStream(readable2)];\n }\n}\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n return this;\n }\n\n close() {\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\nimport { createTextStream, TextStreamController } from \"./text\";\n\nexport type ToolCallStreamController = {\n readonly toolCallId: string;\n readonly toolName: string;\n\n argsText: TextStreamController;\n\n setResult(result: unknown): void;\n close(): void;\n};\n\nclass ToolCallStreamControllerImpl implements ToolCallStreamController {\n public get toolCallId() {\n return this._options.toolCallId;\n }\n\n public get toolName() {\n return this._options.toolName;\n }\n\n constructor(\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n private _options: { toolCallId: string; toolName: string },\n ) {\n createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n throw new Error(\"Tool call results are not supported yet.\");\n }\n\n close() {\n this._controller.close();\n }\n}\n\ntype UnderlyingToolCallStreamReadable =\n UnderlyingReadable<ToolCallStreamController> & {\n toolCallId: string;\n toolName: string;\n };\n\nexport const createToolCallStream = (\n readable: UnderlyingToolCallStreamReadable,\n): AssistantStream => {\n const options = {\n toolCallId: readable.toolCallId,\n toolName: readable.toolName,\n };\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new ToolCallStreamControllerImpl(c, options));\n },\n pull(c) {\n return readable.pull?.(new ToolCallStreamControllerImpl(c, options));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { generateId } from \"../utils/generateId\";\nimport { createTextStream, TextStreamController } from \"./text\";\nimport { createToolCallStream, ToolCallStreamController } from \"./tool-call\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nconst promiseWithResolvers = () => {\n let resolve: () => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n};\n\nconst createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n async pull() {\n list.map((item) => {\n handlePull(item);\n return item.promise!;\n });\n\n currentPull = promiseWithResolvers();\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n stream: readable,\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: AssistantStream) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.readable.getReader() };\n list.push(item);\n if (list.length === 1) {\n handlePull(item);\n }\n },\n };\n};\n\nexport type RunController = {\n appendText(textDelta: string): void;\n // addTextPart(): TextStreamController;\n // addToolCallPart(toolName: string): ToolCallStreamController;\n // addToolCallPart(options: {\n // toolCallId: string;\n // toolName: string;\n // }): ToolCallStreamController;\n addStep(stream: AssistantStream): void;\n};\n\nclass RunControllerImpl implements RunController {\n private _merge = createMergeStream();\n private _textPartController: TextStreamController | undefined;\n\n getReadable() {\n return this._merge.stream;\n }\n\n close() {\n this._merge.seal();\n this._textPartController?.close();\n }\n\n addStep(stream: AssistantStream) {\n this._merge.addStream(stream);\n }\n\n appendText(textDelta: string) {\n if (!this._textPartController) {\n this._textPartController = this.addTextPart();\n }\n this._textPartController.append(textDelta);\n }\n\n addTextPart() {\n let controller: TextStreamController;\n const textStream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n this.addStep(textStream);\n return controller!;\n }\n\n addToolCallPart(\n options:\n | string\n | {\n toolCallId: string;\n toolName: string;\n },\n ): ToolCallStreamController {\n const opt =\n typeof options === \"string\"\n ? { toolName: options, toolCallId: generateId() }\n : options;\n\n let controller: ToolCallStreamController;\n const toolCallStream = createToolCallStream({\n toolCallId: opt.toolCallId,\n toolName: opt.toolName,\n start(c) {\n controller = c;\n },\n });\n this.addStep(toolCallStream);\n return controller!;\n }\n}\n\nexport function createRun(\n callback: (controller: RunController) => Promise<void> | void,\n): AssistantStream {\n const controller = new RunControllerImpl();\n const promiseOrVoid = callback(controller);\n if (promiseOrVoid instanceof Promise) {\n promiseOrVoid.finally(() => controller.close());\n } else {\n controller.close();\n }\n\n return new AssistantStream(controller.getReadable());\n}\n","export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as any);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\nimport { StreamPart } from \"./streamPart/StreamPart\";\n\nexport class DataStreamEncoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(\"0:\" + JSON.stringify(chunk.textDelta) + \"\\n\");\n break;\n\n case \"tool-call-begin\":\n controller.enqueue(\n \"b:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n }),\n );\n break;\n\n case \"tool-call-delta\":\n controller.enqueue(\n \"c:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-result\":\n controller.enqueue(\n \"a:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n }) +\n \"\\n\",\n );\n break;\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst decodeStreamPart = <T extends Record<string, unknown>>(\n part: string,\n): StreamPart<T> => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return {\n type: part.slice(0, index),\n value: JSON.parse(part.slice(index + 1)),\n };\n};\n\nexport class DataStreamDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = decodeStreamPart(chunk);\n switch (type) {\n case \"0\":\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value as string,\n });\n break;\n\n case \"b\": {\n const { toolCallId, toolName } = value as {\n toolCallId: string;\n toolName: string;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n\n case \"c\": {\n const { toolCallId, argsTextDelta } = value as {\n toolCallId: string;\n argsTextDelta: string;\n };\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\n break;\n }\n\n case \"a\": {\n const { toolCallId, result } = value as {\n toolCallId: string;\n result: any;\n };\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n\n default:\n const exhaustiveCheck: string = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new ChunkByLineStream())\n .pipeThrough(transform);\n });\n }\n}\n\nexport class ChunkByLineStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1]!;\n },\n flush: (controller) => {\n // flush any remaining content in the buffer\n if (this.buffer) {\n controller.enqueue(this.buffer);\n }\n },\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n implements ReadableWritablePair<Uint8Array, AssistantStreamChunk>\n{\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(chunk.textDelta);\n break;\n\n case \"tool-call-begin\":\n case \"tool-call-delta\":\n case \"tool-result\":\n throw new Error(\n `tool-call-begin and tool-call-delta are not supported in plain text serialization`,\n );\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nexport class PlainTextDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: chunk,\n });\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n","import sjson from \"secure-json-parse\";\nimport { fixJson } from \"./fix-json\";\n\nexport const parsePartialJson = (json: string) => {\n try {\n return sjson.parse(json);\n } catch {\n try {\n return sjson.parse(fixJson(json));\n } catch {\n return undefined;\n }\n }\n};\n","// LICENSE for this file only\n\n// Copyright 2023 Vercel, Inc.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype State =\n | \"ROOT\"\n | \"FINISH\"\n | \"INSIDE_STRING\"\n | \"INSIDE_STRING_ESCAPE\"\n | \"INSIDE_LITERAL\"\n | \"INSIDE_NUMBER\"\n | \"INSIDE_OBJECT_START\"\n | \"INSIDE_OBJECT_KEY\"\n | \"INSIDE_OBJECT_AFTER_KEY\"\n | \"INSIDE_OBJECT_BEFORE_VALUE\"\n | \"INSIDE_OBJECT_AFTER_VALUE\"\n | \"INSIDE_OBJECT_AFTER_COMMA\"\n | \"INSIDE_ARRAY_START\"\n | \"INSIDE_ARRAY_AFTER_VALUE\"\n | \"INSIDE_ARRAY_AFTER_COMMA\";\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!;\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n\n case \",\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"}\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"]\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !\"false\".startsWith(partialLiteral) &&\n !\"true\".startsWith(partialLiteral) &&\n !\"null\".startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"./types\";\n\nexport type AsyncIterableStream<T> = AsyncIterable<T, undefined> &\n ReadableStream<T>;\n\nexport function createAsyncIterableStream<S, T>(\n source: ReadableStream<S>,\n transform: TransformStream<S, T>,\n): AsyncIterableStream<T> {\n const transformedStream: any = source.pipeThrough(transform);\n\n transformedStream[Symbol.asyncIterator] = () => {\n const reader = transformedStream.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return transformedStream;\n}\n\nexport const toAssistantMessageStream = (stream: AssistantStream) => {\n let message: AssistantMessage = {\n role: \"assistant\",\n content: [],\n status: { type: \"running\" },\n metadata: {\n steps: [],\n custom: {},\n },\n };\n const transformer = new TransformStream<\n AssistantStreamChunk,\n AssistantMessage\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-begin\": {\n const { toolCallId, toolName } = chunk;\n message = appendToolCall(message, toolCallId, toolName);\n controller.enqueue(message);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n message = appendToolArgsTextDelta(message, toolCallId, argsTextDelta);\n controller.enqueue(message);\n break;\n }\n case \"tool-result\" as string: {\n const { toolCallId, result } = chunk as unknown as {\n toolCallId: string;\n result: unknown;\n };\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return createAsyncIterableStream(stream.readable, transformer);\n};\n\nconst appendOrUpdateText = (message: AssistantMessage, textDelta: string) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = {\n type: \"text\",\n text: textDelta,\n status: { type: \"running\" },\n };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = {\n type: \"text\",\n text: contentPart.text + textDelta,\n status: { type: \"running\" },\n };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendToolCall = (\n message: AssistantMessage,\n toolCallId: string,\n toolName: string,\n): AssistantMessage => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: \"\",\n args: {},\n status: { type: \"running\", isArgsComplete: false },\n },\n ],\n };\n};\n\nconst appendToolArgsTextDelta = (\n message: AssistantMessage,\n toolCallId: string,\n argsTextDelta: string,\n): AssistantMessage => {\n const contentPartIdx = message.content.findIndex(\n (part) => part.type === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (contentPartIdx === -1)\n throw new Error(\n `Received tool call delta for unknown tool call \"${toolCallId}\".`,\n );\n const contentPart = message.content[contentPartIdx]! as ToolCallContentPart;\n const newArgsText = contentPart.argsText + argsTextDelta;\n\n return {\n ...message,\n content: [\n ...message.content.slice(0, contentPartIdx),\n {\n ...contentPart,\n argsText: newArgsText,\n args: parsePartialJson(newArgsText),\n },\n ...message.content.slice(contentPartIdx + 1),\n ],\n };\n};\n\nconst setToolResult = (\n message: AssistantMessage,\n toolCallId: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendOrUpdateFinish = (message: AssistantMessage): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"complete\",\n reason: \"unknown\",\n },\n };\n};\n"],"mappings":"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","names":["item","sjson"]}
1
+ {"version":3,"sources":["../src/index.ts","../../core/src/AssistantStream.ts","../../core/src/utils/generateId.tsx","../../core/src/modules/text.ts","../../core/src/modules/tool-call.ts","../../core/src/modules/runs.ts","../../core/src/utils/PipeableTransformStream.ts","../../core/src/serialization/DataStream.ts","../../core/src/serialization/PlainText.ts","../../core/src/reducers/partial-json/parse-partial-json.ts","../../core/src/reducers/partial-json/fix-json.ts","../../core/src/reducers/assistant-message.ts"],"sourcesContent":["export * from \"@assistant-stream/core\";\n","export type AssistantStream2 = {\n // kind: AssistantStreamKind;\n readable: ReadableStream<AssistantStreamChunk>;\n toResponse(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): Response;\n toByteStream(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): ReadableStream<Uint8Array>;\n tee(): [AssistantStream, AssistantStream];\n};\n\nexport type AssistantStreamChunk =\n | {\n type: \"text-delta\";\n textDelta: string;\n }\n | {\n type: \"tool-call-begin\";\n toolCallId: string;\n toolName: string;\n }\n | {\n type: \"tool-call-delta\";\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\nexport class AssistantStream {\n constructor(public readonly readable: ReadableStream<AssistantStreamChunk>) {\n this.readable = readable;\n }\n\n toResponse(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return new Response(this.toByteStream(transformer));\n }\n\n static fromResponse(\n response: Response,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n }\n\n toByteStream(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return this.readable.pipeThrough(transformer);\n }\n\n static fromByteStream(\n readable: ReadableStream<Uint8Array>,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return new AssistantStream(readable.pipeThrough(transformer));\n }\n\n tee(): [AssistantStream, AssistantStream] {\n const [readable1, readable2] = this.readable.tee();\n return [new AssistantStream(readable1), new AssistantStream(readable2)];\n }\n}\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n return this;\n }\n\n close() {\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\nimport { createTextStream, TextStreamController } from \"./text\";\n\nexport type ToolCallStreamController = {\n readonly toolCallId: string;\n readonly toolName: string;\n\n argsText: TextStreamController;\n\n setResult(result: unknown): void;\n close(): void;\n};\n\nclass ToolCallStreamControllerImpl implements ToolCallStreamController {\n public get toolCallId() {\n return this._options.toolCallId;\n }\n\n public get toolName() {\n return this._options.toolName;\n }\n\n constructor(\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n private _options: { toolCallId: string; toolName: string },\n ) {\n createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n throw new Error(\"Tool call results are not supported yet.\");\n }\n\n close() {\n this._controller.close();\n }\n}\n\ntype UnderlyingToolCallStreamReadable =\n UnderlyingReadable<ToolCallStreamController> & {\n toolCallId: string;\n toolName: string;\n };\n\nexport const createToolCallStream = (\n readable: UnderlyingToolCallStreamReadable,\n): AssistantStream => {\n const options = {\n toolCallId: readable.toolCallId,\n toolName: readable.toolName,\n };\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new ToolCallStreamControllerImpl(c, options));\n },\n pull(c) {\n return readable.pull?.(new ToolCallStreamControllerImpl(c, options));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { generateId } from \"../utils/generateId\";\nimport { createTextStream, TextStreamController } from \"./text\";\nimport { createToolCallStream, ToolCallStreamController } from \"./tool-call\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nconst promiseWithResolvers = () => {\n let resolve: () => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n};\n\nconst createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n async pull() {\n list.map((item) => {\n handlePull(item);\n return item.promise!;\n });\n\n currentPull = promiseWithResolvers();\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n stream: readable,\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: AssistantStream) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.readable.getReader() };\n list.push(item);\n if (list.length === 1) {\n handlePull(item);\n }\n },\n };\n};\n\nexport type RunController = {\n appendText(textDelta: string): void;\n // addTextPart(): TextStreamController;\n // addToolCallPart(toolName: string): ToolCallStreamController;\n // addToolCallPart(options: {\n // toolCallId: string;\n // toolName: string;\n // }): ToolCallStreamController;\n appendStep(stream: AssistantStream): void;\n};\n\nclass RunControllerImpl implements RunController {\n private _merge = createMergeStream();\n private _textPartController: TextStreamController | undefined;\n\n getReadable() {\n return this._merge.stream;\n }\n\n close() {\n this._merge.seal();\n this._textPartController?.close();\n }\n\n appendStep(stream: AssistantStream) {\n this._merge.addStream(stream);\n }\n\n appendText(textDelta: string) {\n if (!this._textPartController) {\n this._textPartController = this.addTextPart();\n }\n this._textPartController.append(textDelta);\n }\n\n addTextPart() {\n let controller: TextStreamController;\n const textStream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n this.appendStep(textStream);\n return controller!;\n }\n\n addToolCallPart(\n options:\n | string\n | {\n toolCallId: string;\n toolName: string;\n },\n ): ToolCallStreamController {\n const opt =\n typeof options === \"string\"\n ? { toolName: options, toolCallId: generateId() }\n : options;\n\n let controller: ToolCallStreamController;\n const toolCallStream = createToolCallStream({\n toolCallId: opt.toolCallId,\n toolName: opt.toolName,\n start(c) {\n controller = c;\n },\n });\n this.appendStep(toolCallStream);\n return controller!;\n }\n}\n\nexport function createRun(\n callback: (controller: RunController) => Promise<void> | void,\n): AssistantStream {\n const controller = new RunControllerImpl();\n const promiseOrVoid = callback(controller);\n if (promiseOrVoid instanceof Promise) {\n promiseOrVoid.finally(() => controller.close());\n } else {\n controller.close();\n }\n\n return new AssistantStream(controller.getReadable());\n}\n","export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as any);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\nimport { StreamPart } from \"./streamPart/StreamPart\";\n\nexport class DataStreamEncoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(\"0:\" + JSON.stringify(chunk.textDelta) + \"\\n\");\n break;\n\n case \"tool-call-begin\":\n controller.enqueue(\n \"b:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-call-delta\":\n controller.enqueue(\n \"c:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-result\":\n controller.enqueue(\n \"a:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n }) +\n \"\\n\",\n );\n break;\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst decodeStreamPart = <T extends Record<string, unknown>>(\n part: string,\n): StreamPart<T> => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return {\n type: part.slice(0, index),\n value: JSON.parse(part.slice(index + 1)),\n };\n};\n\nexport class DataStreamDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = decodeStreamPart(chunk);\n switch (type) {\n case \"0\":\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value as string,\n });\n break;\n\n case \"b\": {\n const { toolCallId, toolName } = value as {\n toolCallId: string;\n toolName: string;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n\n case \"c\": {\n const { toolCallId, argsTextDelta } = value as {\n toolCallId: string;\n argsTextDelta: string;\n };\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\n break;\n }\n\n case \"a\": {\n const { toolCallId, result } = value as {\n toolCallId: string;\n result: any;\n };\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n\n default:\n const exhaustiveCheck: string = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new ChunkByLineStream())\n .pipeThrough(transform);\n });\n }\n}\n\nexport class ChunkByLineStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1]!;\n },\n flush: (controller) => {\n // flush any remaining content in the buffer\n if (this.buffer) {\n controller.enqueue(this.buffer);\n }\n },\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n implements ReadableWritablePair<Uint8Array, AssistantStreamChunk>\n{\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(chunk.textDelta);\n break;\n\n case \"tool-call-begin\":\n case \"tool-call-delta\":\n case \"tool-result\":\n throw new Error(\n `tool-call-begin and tool-call-delta are not supported in plain text serialization`,\n );\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nexport class PlainTextDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: chunk,\n });\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n","import sjson from \"secure-json-parse\";\nimport { fixJson } from \"./fix-json\";\n\nexport const parsePartialJson = (json: string) => {\n try {\n return sjson.parse(json);\n } catch {\n try {\n return sjson.parse(fixJson(json));\n } catch {\n return undefined;\n }\n }\n};\n","// LICENSE for this file only\n\n// Copyright 2023 Vercel, Inc.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype State =\n | \"ROOT\"\n | \"FINISH\"\n | \"INSIDE_STRING\"\n | \"INSIDE_STRING_ESCAPE\"\n | \"INSIDE_LITERAL\"\n | \"INSIDE_NUMBER\"\n | \"INSIDE_OBJECT_START\"\n | \"INSIDE_OBJECT_KEY\"\n | \"INSIDE_OBJECT_AFTER_KEY\"\n | \"INSIDE_OBJECT_BEFORE_VALUE\"\n | \"INSIDE_OBJECT_AFTER_VALUE\"\n | \"INSIDE_OBJECT_AFTER_COMMA\"\n | \"INSIDE_ARRAY_START\"\n | \"INSIDE_ARRAY_AFTER_VALUE\"\n | \"INSIDE_ARRAY_AFTER_COMMA\";\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!;\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n\n case \",\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"}\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"]\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !\"false\".startsWith(partialLiteral) &&\n !\"true\".startsWith(partialLiteral) &&\n !\"null\".startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"./types\";\n\nexport type AsyncIterableStream<T> = AsyncIterable<T, undefined> &\n ReadableStream<T>;\n\nexport function createAsyncIterableStream<S, T>(\n source: ReadableStream<S>,\n transform: TransformStream<S, T>,\n): AsyncIterableStream<T> {\n const transformedStream: any = source.pipeThrough(transform);\n\n transformedStream[Symbol.asyncIterator] = () => {\n const reader = transformedStream.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return transformedStream;\n}\n\nexport const toAssistantMessageStream = (stream: AssistantStream) => {\n let message: AssistantMessage = {\n role: \"assistant\",\n content: [],\n status: { type: \"running\" },\n metadata: {\n steps: [],\n custom: {},\n },\n };\n const transformer = new TransformStream<\n AssistantStreamChunk,\n AssistantMessage\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-begin\": {\n const { toolCallId, toolName } = chunk;\n message = appendToolCall(message, toolCallId, toolName);\n controller.enqueue(message);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n message = appendToolArgsTextDelta(message, toolCallId, argsTextDelta);\n controller.enqueue(message);\n break;\n }\n case \"tool-result\" as string: {\n const { toolCallId, result } = chunk as unknown as {\n toolCallId: string;\n result: unknown;\n };\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return createAsyncIterableStream(stream.readable, transformer);\n};\n\nconst appendOrUpdateText = (message: AssistantMessage, textDelta: string) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = {\n type: \"text\",\n text: textDelta,\n status: { type: \"running\" },\n };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = {\n type: \"text\",\n text: contentPart.text + textDelta,\n status: { type: \"running\" },\n };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendToolCall = (\n message: AssistantMessage,\n toolCallId: string,\n toolName: string,\n): AssistantMessage => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: \"\",\n args: {},\n status: { type: \"running\", isArgsComplete: false },\n },\n ],\n };\n};\n\nconst appendToolArgsTextDelta = (\n message: AssistantMessage,\n toolCallId: string,\n argsTextDelta: string,\n): AssistantMessage => {\n const contentPartIdx = message.content.findIndex(\n (part) => part.type === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (contentPartIdx === -1)\n throw new Error(\n `Received tool call delta for unknown tool call \"${toolCallId}\".`,\n );\n const contentPart = message.content[contentPartIdx]! as ToolCallContentPart;\n const newArgsText = contentPart.argsText + argsTextDelta;\n\n return {\n ...message,\n content: [\n ...message.content.slice(0, contentPartIdx),\n {\n ...contentPart,\n argsText: newArgsText,\n args: parsePartialJson(newArgsText),\n },\n ...message.content.slice(contentPartIdx + 1),\n ],\n };\n};\n\nconst setToolResult = (\n message: AssistantMessage,\n toolCallId: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendOrUpdateFinish = (message: AssistantMessage): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"complete\",\n reason: \"unknown\",\n },\n };\n};\n"],"mappings":"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","names":["item","sjson"]}
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  PlainTextEncoder,
7
7
  createRun,
8
8
  toAssistantMessageStream
9
- } from "./chunk-7LSSA5HC.mjs";
9
+ } from "./chunk-AQTFNEIT.mjs";
10
10
  export {
11
11
  AssistantStream,
12
12
  DataStreamDecoder,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-stream",
3
- "version": "0.0.0-rc.1",
3
+ "version": "0.0.0-rc.2",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -38,9 +38,9 @@
38
38
  "eslint-config-next": "14.2.14",
39
39
  "tsup": "8.3.0",
40
40
  "tsx": "^4.19.1",
41
- "@assistant-stream/ai-sdk": "0.0.0",
41
+ "@assistant-stream/core": "0.0.0",
42
42
  "@assistant-ui/tsconfig": "0.0.0",
43
- "@assistant-stream/core": "0.0.0"
43
+ "@assistant-stream/ai-sdk": "0.0.0"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../core/src/AssistantStream.ts","../../core/src/utils/generateId.tsx","../../core/src/modules/text.ts","../../core/src/modules/tool-call.ts","../../core/src/modules/runs.ts","../../core/src/utils/PipeableTransformStream.ts","../../core/src/serialization/DataStream.ts","../../core/src/serialization/PlainText.ts","../../core/src/reducers/partial-json/parse-partial-json.ts","../../core/src/reducers/partial-json/fix-json.ts","../../core/src/reducers/assistant-message.ts"],"sourcesContent":["export type AssistantStream2 = {\n // kind: AssistantStreamKind;\n readable: ReadableStream<AssistantStreamChunk>;\n toResponse(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): Response;\n toByteStream(\n format: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ): ReadableStream<Uint8Array>;\n tee(): [AssistantStream, AssistantStream];\n};\n\nexport type AssistantStreamChunk =\n | {\n type: \"text-delta\";\n textDelta: string;\n }\n | {\n type: \"tool-call-begin\";\n toolCallId: string;\n toolName: string;\n }\n | {\n type: \"tool-call-delta\";\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\nexport class AssistantStream {\n constructor(public readonly readable: ReadableStream<AssistantStreamChunk>) {\n this.readable = readable;\n }\n\n toResponse(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return new Response(this.toByteStream(transformer));\n }\n\n static fromResponse(\n response: Response,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n }\n\n toByteStream(\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return this.readable.pipeThrough(transformer);\n }\n\n static fromByteStream(\n readable: ReadableStream<Uint8Array>,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return new AssistantStream(readable.pipeThrough(transformer));\n }\n\n tee(): [AssistantStream, AssistantStream] {\n const [readable1, readable2] = this.readable.tee();\n return [new AssistantStream(readable1), new AssistantStream(readable2)];\n }\n}\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n return this;\n }\n\n close() {\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { UnderlyingReadable } from \"../utils/UnderlyingReadable\";\nimport { createTextStream, TextStreamController } from \"./text\";\n\nexport type ToolCallStreamController = {\n readonly toolCallId: string;\n readonly toolName: string;\n\n argsText: TextStreamController;\n\n setResult(result: unknown): void;\n close(): void;\n};\n\nclass ToolCallStreamControllerImpl implements ToolCallStreamController {\n public get toolCallId() {\n return this._options.toolCallId;\n }\n\n public get toolName() {\n return this._options.toolName;\n }\n\n constructor(\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n private _options: { toolCallId: string; toolName: string },\n ) {\n createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n throw new Error(\"Tool call results are not supported yet.\");\n }\n\n close() {\n this._controller.close();\n }\n}\n\ntype UnderlyingToolCallStreamReadable =\n UnderlyingReadable<ToolCallStreamController> & {\n toolCallId: string;\n toolName: string;\n };\n\nexport const createToolCallStream = (\n readable: UnderlyingToolCallStreamReadable,\n): AssistantStream => {\n const options = {\n toolCallId: readable.toolCallId,\n toolName: readable.toolName,\n };\n return new AssistantStream(\n new ReadableStream({\n start(c) {\n return readable.start?.(new ToolCallStreamControllerImpl(c, options));\n },\n pull(c) {\n return readable.pull?.(new ToolCallStreamControllerImpl(c, options));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n }),\n );\n};\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { generateId } from \"../utils/generateId\";\nimport { createTextStream, TextStreamController } from \"./text\";\nimport { createToolCallStream, ToolCallStreamController } from \"./tool-call\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nconst promiseWithResolvers = () => {\n let resolve: () => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n};\n\nconst createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n async pull() {\n list.map((item) => {\n handlePull(item);\n return item.promise!;\n });\n\n currentPull = promiseWithResolvers();\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n stream: readable,\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: AssistantStream) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.readable.getReader() };\n list.push(item);\n if (list.length === 1) {\n handlePull(item);\n }\n },\n };\n};\n\nexport type RunController = {\n appendText(textDelta: string): void;\n // addTextPart(): TextStreamController;\n // addToolCallPart(toolName: string): ToolCallStreamController;\n // addToolCallPart(options: {\n // toolCallId: string;\n // toolName: string;\n // }): ToolCallStreamController;\n addStep(stream: AssistantStream): void;\n};\n\nclass RunControllerImpl implements RunController {\n private _merge = createMergeStream();\n private _textPartController: TextStreamController | undefined;\n\n getReadable() {\n return this._merge.stream;\n }\n\n close() {\n this._merge.seal();\n this._textPartController?.close();\n }\n\n addStep(stream: AssistantStream) {\n this._merge.addStream(stream);\n }\n\n appendText(textDelta: string) {\n if (!this._textPartController) {\n this._textPartController = this.addTextPart();\n }\n this._textPartController.append(textDelta);\n }\n\n addTextPart() {\n let controller: TextStreamController;\n const textStream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n this.addStep(textStream);\n return controller!;\n }\n\n addToolCallPart(\n options:\n | string\n | {\n toolCallId: string;\n toolName: string;\n },\n ): ToolCallStreamController {\n const opt =\n typeof options === \"string\"\n ? { toolName: options, toolCallId: generateId() }\n : options;\n\n let controller: ToolCallStreamController;\n const toolCallStream = createToolCallStream({\n toolCallId: opt.toolCallId,\n toolName: opt.toolName,\n start(c) {\n controller = c;\n },\n });\n this.addStep(toolCallStream);\n return controller!;\n }\n}\n\nexport function createRun(\n callback: (controller: RunController) => Promise<void> | void,\n): AssistantStream {\n const controller = new RunControllerImpl();\n const promiseOrVoid = callback(controller);\n if (promiseOrVoid instanceof Promise) {\n promiseOrVoid.finally(() => controller.close());\n } else {\n controller.close();\n }\n\n return new AssistantStream(controller.getReadable());\n}\n","export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as any);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\nimport { StreamPart } from \"./streamPart/StreamPart\";\n\nexport class DataStreamEncoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(\"0:\" + JSON.stringify(chunk.textDelta) + \"\\n\");\n break;\n\n case \"tool-call-begin\":\n controller.enqueue(\n \"b:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n }),\n );\n break;\n\n case \"tool-call-delta\":\n controller.enqueue(\n \"c:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n }) +\n \"\\n\",\n );\n break;\n\n case \"tool-result\":\n controller.enqueue(\n \"a:\" +\n JSON.stringify({\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n }) +\n \"\\n\",\n );\n break;\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst decodeStreamPart = <T extends Record<string, unknown>>(\n part: string,\n): StreamPart<T> => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return {\n type: part.slice(0, index),\n value: JSON.parse(part.slice(index + 1)),\n };\n};\n\nexport class DataStreamDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = decodeStreamPart(chunk);\n switch (type) {\n case \"0\":\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value as string,\n });\n break;\n\n case \"b\": {\n const { toolCallId, toolName } = value as {\n toolCallId: string;\n toolName: string;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n\n case \"c\": {\n const { toolCallId, argsTextDelta } = value as {\n toolCallId: string;\n argsTextDelta: string;\n };\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\n break;\n }\n\n case \"a\": {\n const { toolCallId, result } = value as {\n toolCallId: string;\n result: any;\n };\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n\n default:\n const exhaustiveCheck: string = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new ChunkByLineStream())\n .pipeThrough(transform);\n });\n }\n}\n\nexport class ChunkByLineStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1]!;\n },\n flush: (controller) => {\n // flush any remaining content in the buffer\n if (this.buffer) {\n controller.enqueue(this.buffer);\n }\n },\n });\n }\n}\n","import { AssistantStreamChunk } from \"../AssistantStream\";\nimport { PipeableTransformStream } from \"../utils/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n implements ReadableWritablePair<Uint8Array, AssistantStreamChunk>\n{\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n AssistantStreamChunk,\n Uint8Array\n >((readable) => {\n const transform = new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"text-delta\":\n controller.enqueue(chunk.textDelta);\n break;\n\n case \"tool-call-begin\":\n case \"tool-call-delta\":\n case \"tool-result\":\n throw new Error(\n `tool-call-begin and tool-call-delta are not supported in plain text serialization`,\n );\n\n default:\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n },\n });\n\n return readable\n .pipeThrough(transform)\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nexport class PlainTextDecoder {\n private _transformStream;\n\n public get writable() {\n return this._transformStream.writable;\n }\n\n public get readable() {\n return this._transformStream.readable;\n }\n\n constructor() {\n this._transformStream = new PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n >((readable) => {\n const transform = new TransformStream<string, AssistantStreamChunk>({\n transform(chunk, controller) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: chunk,\n });\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n","import sjson from \"secure-json-parse\";\nimport { fixJson } from \"./fix-json\";\n\nexport const parsePartialJson = (json: string) => {\n try {\n return sjson.parse(json);\n } catch {\n try {\n return sjson.parse(fixJson(json));\n } catch {\n return undefined;\n }\n }\n};\n","// LICENSE for this file only\n\n// Copyright 2023 Vercel, Inc.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype State =\n | \"ROOT\"\n | \"FINISH\"\n | \"INSIDE_STRING\"\n | \"INSIDE_STRING_ESCAPE\"\n | \"INSIDE_LITERAL\"\n | \"INSIDE_NUMBER\"\n | \"INSIDE_OBJECT_START\"\n | \"INSIDE_OBJECT_KEY\"\n | \"INSIDE_OBJECT_AFTER_KEY\"\n | \"INSIDE_OBJECT_BEFORE_VALUE\"\n | \"INSIDE_OBJECT_AFTER_VALUE\"\n | \"INSIDE_OBJECT_AFTER_COMMA\"\n | \"INSIDE_ARRAY_START\"\n | \"INSIDE_ARRAY_AFTER_VALUE\"\n | \"INSIDE_ARRAY_AFTER_COMMA\";\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!;\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n\n case \",\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"}\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"]\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !\"false\".startsWith(partialLiteral) &&\n !\"true\".startsWith(partialLiteral) &&\n !\"null\".startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { AssistantStream, AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"./types\";\n\nexport type AsyncIterableStream<T> = AsyncIterable<T, undefined> &\n ReadableStream<T>;\n\nexport function createAsyncIterableStream<S, T>(\n source: ReadableStream<S>,\n transform: TransformStream<S, T>,\n): AsyncIterableStream<T> {\n const transformedStream: any = source.pipeThrough(transform);\n\n transformedStream[Symbol.asyncIterator] = () => {\n const reader = transformedStream.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return transformedStream;\n}\n\nexport const toAssistantMessageStream = (stream: AssistantStream) => {\n let message: AssistantMessage = {\n role: \"assistant\",\n content: [],\n status: { type: \"running\" },\n metadata: {\n steps: [],\n custom: {},\n },\n };\n const transformer = new TransformStream<\n AssistantStreamChunk,\n AssistantMessage\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-begin\": {\n const { toolCallId, toolName } = chunk;\n message = appendToolCall(message, toolCallId, toolName);\n controller.enqueue(message);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n message = appendToolArgsTextDelta(message, toolCallId, argsTextDelta);\n controller.enqueue(message);\n break;\n }\n case \"tool-result\" as string: {\n const { toolCallId, result } = chunk as unknown as {\n toolCallId: string;\n result: unknown;\n };\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return createAsyncIterableStream(stream.readable, transformer);\n};\n\nconst appendOrUpdateText = (message: AssistantMessage, textDelta: string) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = {\n type: \"text\",\n text: textDelta,\n status: { type: \"running\" },\n };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = {\n type: \"text\",\n text: contentPart.text + textDelta,\n status: { type: \"running\" },\n };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendToolCall = (\n message: AssistantMessage,\n toolCallId: string,\n toolName: string,\n): AssistantMessage => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: \"\",\n args: {},\n status: { type: \"running\", isArgsComplete: false },\n },\n ],\n };\n};\n\nconst appendToolArgsTextDelta = (\n message: AssistantMessage,\n toolCallId: string,\n argsTextDelta: string,\n): AssistantMessage => {\n const contentPartIdx = message.content.findIndex(\n (part) => part.type === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (contentPartIdx === -1)\n throw new Error(\n `Received tool call delta for unknown tool call \"${toolCallId}\".`,\n );\n const contentPart = message.content[contentPartIdx]! as ToolCallContentPart;\n const newArgsText = contentPart.argsText + argsTextDelta;\n\n return {\n ...message,\n content: [\n ...message.content.slice(0, contentPartIdx),\n {\n ...contentPart,\n argsText: newArgsText,\n args: parsePartialJson(newArgsText),\n },\n ...message.content.slice(contentPartIdx + 1),\n ],\n };\n};\n\nconst setToolResult = (\n message: AssistantMessage,\n toolCallId: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendOrUpdateFinish = (message: AssistantMessage): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"complete\",\n reason: \"unknown\",\n },\n };\n};\n"],"mappings":"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","names":["item"]}