assistant-stream 0.0.17 → 0.0.18

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.
@@ -13,6 +13,9 @@ type AssistantStreamChunk = {
13
13
  type: "tool-result";
14
14
  toolCallId: string;
15
15
  result: any;
16
+ } | {
17
+ type: "error";
18
+ error: string;
16
19
  };
17
20
  declare class AssistantStream {
18
21
  readonly readable: ReadableStream<AssistantStreamChunk>;
@@ -13,6 +13,9 @@ type AssistantStreamChunk = {
13
13
  type: "tool-result";
14
14
  toolCallId: string;
15
15
  result: any;
16
+ } | {
17
+ type: "error";
18
+ error: string;
16
19
  };
17
20
  declare class AssistantStream {
18
21
  readonly readable: ReadableStream<AssistantStreamChunk>;
package/dist/ai-sdk.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TextStreamPart, CoreTool, ObjectStreamPart } from 'ai';
2
- import { A as AssistantStream } from './AssistantStream-CFsZ_Iri.mjs';
2
+ import { A as AssistantStream } from './AssistantStream-BvnjeSxd.mjs';
3
3
 
4
4
  declare const fromAISDKStreamText: (stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>) => AssistantStream;
5
5
  declare const fromAISDKStreamObject: (stream: ReadableStream<ObjectStreamPart<unknown>>, toolName: string) => AssistantStream;
package/dist/ai-sdk.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TextStreamPart, CoreTool, ObjectStreamPart } from 'ai';
2
- import { A as AssistantStream } from './AssistantStream-CFsZ_Iri.js';
2
+ import { A as AssistantStream } from './AssistantStream-BvnjeSxd.js';
3
3
 
4
4
  declare const fromAISDKStreamText: (stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>) => AssistantStream;
5
5
  declare const fromAISDKStreamObject: (stream: ReadableStream<ObjectStreamPart<unknown>>, toolName: string) => AssistantStream;
package/dist/ai-sdk.js CHANGED
@@ -111,6 +111,7 @@ var fromAISDKStreamText = (stream) => {
111
111
  });
112
112
  break;
113
113
  }
114
+ case "step-start":
114
115
  case "step-finish":
115
116
  case "error":
116
117
  case "finish": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ai-sdk.ts","../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx","../src/ai-sdk/index.ts"],"sourcesContent":["export * from \"./ai-sdk/index\";\n","export 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 type { TextStreamPart, CoreTool, ObjectStreamPart } from \"ai\";\nimport { AssistantStream, AssistantStreamChunk } from \"../core/AssistantStream\";\nimport { generateId } from \"../core/utils/generateId\";\n\nexport const fromAISDKStreamText = (\n stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>,\n): AssistantStream => {\n const transformer = new TransformStream<\n TextStreamPart<Record<string, CoreTool>>,\n AssistantStreamChunk\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n break;\n }\n case \"tool-call-streaming-start\": {\n const { toolCallId, toolName } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\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 controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n case \"step-finish\":\n case \"error\":\n case \"finish\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n\nexport const fromAISDKStreamObject = (\n stream: ReadableStream<ObjectStreamPart<unknown>>,\n toolName: string,\n): AssistantStream => {\n const toolCallId = generateId();\n const transformer = new TransformStream<\n ObjectStreamPart<unknown>,\n AssistantStreamChunk\n >({\n start(controller) {\n controller.enqueue({\n type: \"tool-call-begin\",\n toolName,\n toolCallId,\n });\n },\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: textDelta,\n });\n break;\n }\n case \"finish\": {\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result: \"\",\n });\n break;\n }\n\n case \"object\":\n case \"error\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/ai-sdk.ts","../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx","../src/ai-sdk/index.ts"],"sourcesContent":["export * from \"./ai-sdk/index\";\n","export 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 | {\n type: \"error\";\n error: string;\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 type { TextStreamPart, CoreTool, ObjectStreamPart } from \"ai\";\nimport { AssistantStream, AssistantStreamChunk } from \"../core/AssistantStream\";\nimport { generateId } from \"../core/utils/generateId\";\n\nexport const fromAISDKStreamText = (\n stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>,\n): AssistantStream => {\n const transformer = new TransformStream<\n TextStreamPart<Record<string, CoreTool>>,\n AssistantStreamChunk\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n break;\n }\n case \"tool-call-streaming-start\": {\n const { toolCallId, toolName } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\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 controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n case \"step-start\":\n case \"step-finish\":\n case \"error\":\n case \"finish\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n\nexport const fromAISDKStreamObject = (\n stream: ReadableStream<ObjectStreamPart<unknown>>,\n toolName: string,\n): AssistantStream => {\n const toolCallId = generateId();\n const transformer = new TransformStream<\n ObjectStreamPart<unknown>,\n AssistantStreamChunk\n >({\n start(controller) {\n controller.enqueue({\n type: \"tool-call-begin\",\n toolName,\n toolCallId,\n });\n },\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: textDelta,\n });\n break;\n }\n case \"finish\": {\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result: \"\",\n });\n break;\n }\n\n case \"object\":\n case \"error\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n"],"mappings":"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","names":[]}
package/dist/ai-sdk.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AssistantStream,
3
3
  generateId
4
- } from "./chunk-BSARGAF6.mjs";
4
+ } from "./chunk-K4MZ4HSJ.mjs";
5
5
 
6
6
  // src/ai-sdk/index.ts
7
7
  var fromAISDKStreamText = (stream) => {
@@ -58,6 +58,7 @@ var fromAISDKStreamText = (stream) => {
58
58
  });
59
59
  break;
60
60
  }
61
+ case "step-start":
61
62
  case "step-finish":
62
63
  case "error":
63
64
  case "finish": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ai-sdk/index.ts"],"sourcesContent":["import type { TextStreamPart, CoreTool, ObjectStreamPart } from \"ai\";\nimport { AssistantStream, AssistantStreamChunk } from \"../core/AssistantStream\";\nimport { generateId } from \"../core/utils/generateId\";\n\nexport const fromAISDKStreamText = (\n stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>,\n): AssistantStream => {\n const transformer = new TransformStream<\n TextStreamPart<Record<string, CoreTool>>,\n AssistantStreamChunk\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n break;\n }\n case \"tool-call-streaming-start\": {\n const { toolCallId, toolName } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\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 controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n case \"step-finish\":\n case \"error\":\n case \"finish\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n\nexport const fromAISDKStreamObject = (\n stream: ReadableStream<ObjectStreamPart<unknown>>,\n toolName: string,\n): AssistantStream => {\n const toolCallId = generateId();\n const transformer = new TransformStream<\n ObjectStreamPart<unknown>,\n AssistantStreamChunk\n >({\n start(controller) {\n controller.enqueue({\n type: \"tool-call-begin\",\n toolName,\n toolCallId,\n });\n },\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: textDelta,\n });\n break;\n }\n case \"finish\": {\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result: \"\",\n });\n break;\n }\n\n case \"object\":\n case \"error\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n"],"mappings":";;;;;;AAIO,IAAM,sBAAsB,CACjC,WACoB;AACpB,QAAM,cAAc,IAAI,gBAGtB;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,EAAE,KAAK,IAAI;AACjB,cAAQ,MAAM;AAAA,QACZ,KAAK,cAAc;AACjB,gBAAM,EAAE,UAAU,IAAI;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,6BAA6B;AAChC,gBAAM,EAAE,YAAY,SAAS,IAAI;AACjC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,cAAc,IAAI;AACtC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,eAAyB;AAC5B,gBAAM,EAAE,YAAY,OAAO,IAAI;AAI/B,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,aAAa;AAChB,gBAAM,EAAE,YAAY,UAAU,KAAK,IAAI;AACvC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,eAAe,KAAK,UAAU,IAAI;AAAA,UACpC,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,UAAU;AACb;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,IAAI,gBAAgB,OAAO,YAAY,WAAW,CAAC;AAC5D;AAEO,IAAM,wBAAwB,CACnC,QACA,aACoB;AACpB,QAAM,aAAa,WAAW;AAC9B,QAAM,cAAc,IAAI,gBAGtB;AAAA,IACA,MAAM,YAAY;AAChB,iBAAW,QAAQ;AAAA,QACjB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,EAAE,KAAK,IAAI;AACjB,cAAQ,MAAM;AAAA,QACZ,KAAK,cAAc;AACjB,gBAAM,EAAE,UAAU,IAAI;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,eAAe;AAAA,UACjB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,QAAQ;AAAA,UACV,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK;AAAA,QACL,KAAK,SAAS;AACZ;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,IAAI,gBAAgB,OAAO,YAAY,WAAW,CAAC;AAC5D;","names":[]}
1
+ {"version":3,"sources":["../src/ai-sdk/index.ts"],"sourcesContent":["import type { TextStreamPart, CoreTool, ObjectStreamPart } from \"ai\";\nimport { AssistantStream, AssistantStreamChunk } from \"../core/AssistantStream\";\nimport { generateId } from \"../core/utils/generateId\";\n\nexport const fromAISDKStreamText = (\n stream: ReadableStream<TextStreamPart<Record<string, CoreTool>>>,\n): AssistantStream => {\n const transformer = new TransformStream<\n TextStreamPart<Record<string, CoreTool>>,\n AssistantStreamChunk\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"text-delta\",\n textDelta,\n });\n break;\n }\n case \"tool-call-streaming-start\": {\n const { toolCallId, toolName } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta,\n });\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 controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result,\n });\n break;\n }\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n case \"step-start\":\n case \"step-finish\":\n case \"error\":\n case \"finish\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n\nexport const fromAISDKStreamObject = (\n stream: ReadableStream<ObjectStreamPart<unknown>>,\n toolName: string,\n): AssistantStream => {\n const toolCallId = generateId();\n const transformer = new TransformStream<\n ObjectStreamPart<unknown>,\n AssistantStreamChunk\n >({\n start(controller) {\n controller.enqueue({\n type: \"tool-call-begin\",\n toolName,\n toolCallId,\n });\n },\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: textDelta,\n });\n break;\n }\n case \"finish\": {\n controller.enqueue({\n type: \"tool-result\",\n toolCallId,\n result: \"\",\n });\n break;\n }\n\n case \"object\":\n case \"error\": {\n break;\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n\n return new AssistantStream(stream.pipeThrough(transformer));\n};\n"],"mappings":";;;;;;AAIO,IAAM,sBAAsB,CACjC,WACoB;AACpB,QAAM,cAAc,IAAI,gBAGtB;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,EAAE,KAAK,IAAI;AACjB,cAAQ,MAAM;AAAA,QACZ,KAAK,cAAc;AACjB,gBAAM,EAAE,UAAU,IAAI;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,6BAA6B;AAChC,gBAAM,EAAE,YAAY,SAAS,IAAI;AACjC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,cAAc,IAAI;AACtC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,eAAyB;AAC5B,gBAAM,EAAE,YAAY,OAAO,IAAI;AAI/B,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,aAAa;AAChB,gBAAM,EAAE,YAAY,UAAU,KAAK,IAAI;AACvC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,eAAe,KAAK,UAAU,IAAI;AAAA,UACpC,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,UAAU;AACb;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,IAAI,gBAAgB,OAAO,YAAY,WAAW,CAAC;AAC5D;AAEO,IAAM,wBAAwB,CACnC,QACA,aACoB;AACpB,QAAM,aAAa,WAAW;AAC9B,QAAM,cAAc,IAAI,gBAGtB;AAAA,IACA,MAAM,YAAY;AAChB,iBAAW,QAAQ;AAAA,QACjB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,EAAE,KAAK,IAAI;AACjB,cAAQ,MAAM;AAAA,QACZ,KAAK,cAAc;AACjB,gBAAM,EAAE,UAAU,IAAI;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,eAAe;AAAA,UACjB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,QAAQ;AAAA,UACV,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK;AAAA,QACL,KAAK,SAAS;AACZ;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,IAAI,gBAAgB,OAAO,YAAY,WAAW,CAAC;AAC5D;","names":[]}
@@ -33,4 +33,4 @@ export {
33
33
  AssistantStream,
34
34
  generateId
35
35
  };
36
- //# sourceMappingURL=chunk-BSARGAF6.mjs.map
36
+ //# sourceMappingURL=chunk-K4MZ4HSJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx"],"sourcesContent":["export 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 | {\n type: \"error\";\n error: string;\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"],"mappings":";AAyBO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC3B,YAA4B,UAAgD;AAAhD;AAC1B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,WACE,aACA;AACA,WAAO,IAAI,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EACpD;AAAA,EAEA,OAAO,aACL,UACA,aACA;AACA,WAAO,iBAAgB,eAAe,SAAS,MAAO,WAAW;AAAA,EACnE;AAAA,EAEA,aACE,aACA;AACA,WAAO,KAAK,SAAS,YAAY,WAAW;AAAA,EAC9C;AAAA,EAEA,OAAO,eACL,UACA,aACA;AACA,WAAO,IAAI,iBAAgB,SAAS,YAAY,WAAW,CAAC;AAAA,EAC9D;AAAA,EAEA,MAA0C;AACxC,UAAM,CAAC,WAAW,SAAS,IAAI,KAAK,SAAS,IAAI;AACjD,WAAO,CAAC,IAAI,iBAAgB,SAAS,GAAG,IAAI,iBAAgB,SAAS,CAAC;AAAA,EACxE;AACF;;;AC5DA,SAAS,sBAAsB;AAExB,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AACF;","names":[]}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStream-CFsZ_Iri.mjs';
1
+ import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStream-BvnjeSxd.mjs';
2
2
 
3
3
  type RunController = {
4
4
  appendText(textDelta: string): void;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStream-CFsZ_Iri.js';
1
+ import { A as AssistantStream, a as AssistantStreamChunk } from './AssistantStream-BvnjeSxd.js';
2
2
 
3
3
  type RunController = {
4
4
  appendText(textDelta: string): void;
package/dist/index.js CHANGED
@@ -294,12 +294,29 @@ var RunControllerImpl = class {
294
294
  this.appendStep(toolCallStream);
295
295
  return controller;
296
296
  }
297
+ addError(error) {
298
+ this._merge.addStream(
299
+ new AssistantStream(
300
+ new ReadableStream({
301
+ start(c) {
302
+ c.enqueue({
303
+ type: "error",
304
+ error
305
+ });
306
+ }
307
+ })
308
+ )
309
+ );
310
+ }
297
311
  };
298
312
  function createAssistantRun(callback) {
299
313
  const controller = new RunControllerImpl();
300
314
  const promiseOrVoid = callback(controller);
301
315
  if (promiseOrVoid instanceof Promise) {
302
- promiseOrVoid.finally(() => controller.close());
316
+ promiseOrVoid.catch((e) => {
317
+ controller.addError(e instanceof Error ? e.message : String(e));
318
+ throw e;
319
+ }).finally(() => controller.close());
303
320
  } else {
304
321
  controller.close();
305
322
  }
@@ -360,6 +377,10 @@ var DataStreamEncoder = class {
360
377
  }) + "\n"
361
378
  );
362
379
  break;
380
+ case "error":
381
+ controller.enqueue(`3:${JSON.stringify(chunk.error)}
382
+ `);
383
+ break;
363
384
  default:
364
385
  const exhaustiveCheck = type;
365
386
  throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
@@ -495,15 +516,9 @@ var PlainTextEncoder = class {
495
516
  case "text-delta":
496
517
  controller.enqueue(chunk.textDelta);
497
518
  break;
498
- case "tool-call-begin":
499
- case "tool-call-delta":
500
- case "tool-result":
501
- throw new Error(
502
- `tool-call-begin and tool-call-delta are not supported in plain text serialization`
503
- );
504
519
  default:
505
- const exhaustiveCheck = type;
506
- throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
520
+ const unsupportedType = type;
521
+ throw new Error(`unsupported chunk type: ${unsupportedType}`);
507
522
  }
508
523
  }
509
524
  });
@@ -906,6 +921,16 @@ var assistantMessageAccumulator = () => {
906
921
  controller.enqueue(message);
907
922
  break;
908
923
  }
924
+ case "error": {
925
+ const { error } = chunk;
926
+ message = setError(message, error);
927
+ controller.enqueue(message);
928
+ break;
929
+ }
930
+ default: {
931
+ const _exhaustiveCheck = type;
932
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
933
+ }
909
934
  }
910
935
  },
911
936
  flush(controller) {
@@ -1005,6 +1030,16 @@ var appendOrUpdateFinish = (message) => {
1005
1030
  }
1006
1031
  };
1007
1032
  };
1033
+ var setError = (message, error) => {
1034
+ return {
1035
+ ...message,
1036
+ status: {
1037
+ type: "incomplete",
1038
+ reason: "error",
1039
+ error
1040
+ }
1041
+ };
1042
+ };
1008
1043
 
1009
1044
  // src/core/accumulators/AssistantMessageStream.ts
1010
1045
  var AssistantMessageStream = class _AssistantMessageStream {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx","../src/core/modules/text.ts","../src/core/modules/tool-call.ts","../src/core/modules/runs.ts","../src/core/utils/PipeableTransformStream.ts","../src/core/serialization/DataStream.ts","../src/core/serialization/PlainText.ts","../src/core/accumulators/partial-json/parse-partial-json.ts","../src/core/accumulators/partial-json/fix-json.ts","../src/core/accumulators/assistantMessageAccumulator.ts","../src/core/accumulators/AssistantMessageStream.ts"],"sourcesContent":["export * from \"./core\";\n","export 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 this._controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId: this._options.toolCallId,\n toolName: this._options.toolName,\n });\n\n const stream = createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n stream.readable.pipeTo(\n new WritableStream({\n write: (chunk) => {\n if (chunk.type !== \"text-delta\")\n throw new Error(\"Unexpected chunk type\");\n\n this._controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId: this._options.toolCallId,\n argsTextDelta: chunk.textDelta,\n });\n },\n }),\n );\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n this._controller.enqueue({\n type: \"tool-result\",\n toolCallId: this._options.toolCallId,\n result,\n });\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 createAssistantRun(\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 case \"9\": {\n const { toolCallId, args } = value as {\n toolCallId: string;\n toolName: string;\n args: object;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n\n case \"2\":\n case \"3\":\n case \"8\":\n case \"d\":\n case \"e\": {\n break; // ignore\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 { AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"../utils/types\";\n\nexport const assistantMessageAccumulator = () => {\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 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","import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantMessage } from \"../utils/types\";\nimport { assistantMessageAccumulator } from \"./assistantMessageAccumulator\";\n\nexport class AssistantMessageStream {\n constructor(public readonly readable: ReadableStream<AssistantMessage>) {\n this.readable = readable;\n }\n\n static fromAssistantStream(stream: AssistantStream) {\n return new AssistantMessageStream(\n stream.readable.pipeThrough(assistantMessageAccumulator()),\n );\n }\n\n async unstable_result(): Promise<AssistantMessage> {\n let last: AssistantMessage | undefined;\n for await (const chunk of this) {\n last = chunk;\n }\n\n if (!last) {\n return {\n role: \"assistant\",\n status: { type: \"complete\", reason: \"unknown\" },\n content: [],\n metadata: {\n steps: [],\n custom: {},\n },\n };\n }\n return last;\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.readable.getReader();\n return {\n async next(): Promise<IteratorResult<AssistantMessage, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n }\n\n tee(): [AssistantMessageStream, AssistantMessageStream] {\n const [readable1, readable2] = this.readable.tee();\n return [\n new AssistantMessageStream(readable1),\n new AssistantMessageStream(readable2),\n ];\n }\n}\n"],"mappings":"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","names":["item","sjson"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx","../src/core/modules/text.ts","../src/core/modules/tool-call.ts","../src/core/modules/runs.ts","../src/core/utils/PipeableTransformStream.ts","../src/core/serialization/DataStream.ts","../src/core/serialization/PlainText.ts","../src/core/accumulators/partial-json/parse-partial-json.ts","../src/core/accumulators/partial-json/fix-json.ts","../src/core/accumulators/assistantMessageAccumulator.ts","../src/core/accumulators/AssistantMessageStream.ts"],"sourcesContent":["export * from \"./core\";\n","export 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 | {\n type: \"error\";\n error: string;\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 this._controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId: this._options.toolCallId,\n toolName: this._options.toolName,\n });\n\n const stream = createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n stream.readable.pipeTo(\n new WritableStream({\n write: (chunk) => {\n if (chunk.type !== \"text-delta\")\n throw new Error(\"Unexpected chunk type\");\n\n this._controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId: this._options.toolCallId,\n argsTextDelta: chunk.textDelta,\n });\n },\n }),\n );\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n this._controller.enqueue({\n type: \"tool-result\",\n toolCallId: this._options.toolCallId,\n result,\n });\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 addError(error: string) {\n this._merge.addStream(\n new AssistantStream(\n new ReadableStream({\n start(c) {\n c.enqueue({\n type: \"error\",\n error,\n });\n },\n }),\n ),\n );\n }\n}\n\nexport function createAssistantRun(\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\n .catch((e) => {\n controller.addError(e instanceof Error ? e.message : String(e));\n throw e;\n })\n .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 case \"error\":\n controller.enqueue(`3:${JSON.stringify(chunk.error)}\\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 case \"9\": {\n const { toolCallId, args } = value as {\n toolCallId: string;\n toolName: string;\n args: object;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n\n case \"2\":\n case \"3\":\n case \"8\":\n case \"d\":\n case \"e\": {\n break; // ignore\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 default:\n const unsupportedType:\n | \"tool-call-begin\"\n | \"tool-call-delta\"\n | \"tool-result\"\n | \"error\" = type;\n throw new Error(`unsupported chunk type: ${unsupportedType}`);\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 { AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"../utils/types\";\n\nexport const assistantMessageAccumulator = () => {\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\": {\n const { toolCallId, result } = chunk;\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n\n case \"error\": {\n const { error } = chunk;\n message = setError(message, error);\n controller.enqueue(message);\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return 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\nconst setError = (\n message: AssistantMessage,\n error: string,\n): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error,\n },\n };\n};\n","import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantMessage } from \"../utils/types\";\nimport { assistantMessageAccumulator } from \"./assistantMessageAccumulator\";\n\nexport class AssistantMessageStream {\n constructor(public readonly readable: ReadableStream<AssistantMessage>) {\n this.readable = readable;\n }\n\n static fromAssistantStream(stream: AssistantStream) {\n return new AssistantMessageStream(\n stream.readable.pipeThrough(assistantMessageAccumulator()),\n );\n }\n\n async unstable_result(): Promise<AssistantMessage> {\n let last: AssistantMessage | undefined;\n for await (const chunk of this) {\n last = chunk;\n }\n\n if (!last) {\n return {\n role: \"assistant\",\n status: { type: \"complete\", reason: \"unknown\" },\n content: [],\n metadata: {\n steps: [],\n custom: {},\n },\n };\n }\n return last;\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.readable.getReader();\n return {\n async next(): Promise<IteratorResult<AssistantMessage, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n }\n\n tee(): [AssistantMessageStream, AssistantMessageStream] {\n const [readable1, readable2] = this.readable.tee();\n return [\n new AssistantMessageStream(readable1),\n new AssistantMessageStream(readable2),\n ];\n }\n}\n"],"mappings":"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","names":["item","sjson"]}
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AssistantStream,
3
3
  generateId
4
- } from "./chunk-BSARGAF6.mjs";
4
+ } from "./chunk-K4MZ4HSJ.mjs";
5
5
 
6
6
  // src/core/modules/text.ts
7
7
  var TextStreamControllerImpl = class {
@@ -226,12 +226,29 @@ var RunControllerImpl = class {
226
226
  this.appendStep(toolCallStream);
227
227
  return controller;
228
228
  }
229
+ addError(error) {
230
+ this._merge.addStream(
231
+ new AssistantStream(
232
+ new ReadableStream({
233
+ start(c) {
234
+ c.enqueue({
235
+ type: "error",
236
+ error
237
+ });
238
+ }
239
+ })
240
+ )
241
+ );
242
+ }
229
243
  };
230
244
  function createAssistantRun(callback) {
231
245
  const controller = new RunControllerImpl();
232
246
  const promiseOrVoid = callback(controller);
233
247
  if (promiseOrVoid instanceof Promise) {
234
- promiseOrVoid.finally(() => controller.close());
248
+ promiseOrVoid.catch((e) => {
249
+ controller.addError(e instanceof Error ? e.message : String(e));
250
+ throw e;
251
+ }).finally(() => controller.close());
235
252
  } else {
236
253
  controller.close();
237
254
  }
@@ -292,6 +309,10 @@ var DataStreamEncoder = class {
292
309
  }) + "\n"
293
310
  );
294
311
  break;
312
+ case "error":
313
+ controller.enqueue(`3:${JSON.stringify(chunk.error)}
314
+ `);
315
+ break;
295
316
  default:
296
317
  const exhaustiveCheck = type;
297
318
  throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
@@ -427,15 +448,9 @@ var PlainTextEncoder = class {
427
448
  case "text-delta":
428
449
  controller.enqueue(chunk.textDelta);
429
450
  break;
430
- case "tool-call-begin":
431
- case "tool-call-delta":
432
- case "tool-result":
433
- throw new Error(
434
- `tool-call-begin and tool-call-delta are not supported in plain text serialization`
435
- );
436
451
  default:
437
- const exhaustiveCheck = type;
438
- throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
452
+ const unsupportedType = type;
453
+ throw new Error(`unsupported chunk type: ${unsupportedType}`);
439
454
  }
440
455
  }
441
456
  });
@@ -838,6 +853,16 @@ var assistantMessageAccumulator = () => {
838
853
  controller.enqueue(message);
839
854
  break;
840
855
  }
856
+ case "error": {
857
+ const { error } = chunk;
858
+ message = setError(message, error);
859
+ controller.enqueue(message);
860
+ break;
861
+ }
862
+ default: {
863
+ const _exhaustiveCheck = type;
864
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
865
+ }
841
866
  }
842
867
  },
843
868
  flush(controller) {
@@ -937,6 +962,16 @@ var appendOrUpdateFinish = (message) => {
937
962
  }
938
963
  };
939
964
  };
965
+ var setError = (message, error) => {
966
+ return {
967
+ ...message,
968
+ status: {
969
+ type: "incomplete",
970
+ reason: "error",
971
+ error
972
+ }
973
+ };
974
+ };
940
975
 
941
976
  // src/core/accumulators/AssistantMessageStream.ts
942
977
  var AssistantMessageStream = class _AssistantMessageStream {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/modules/text.ts","../src/core/modules/tool-call.ts","../src/core/modules/runs.ts","../src/core/utils/PipeableTransformStream.ts","../src/core/serialization/DataStream.ts","../src/core/serialization/PlainText.ts","../src/core/accumulators/partial-json/parse-partial-json.ts","../src/core/accumulators/partial-json/fix-json.ts","../src/core/accumulators/assistantMessageAccumulator.ts","../src/core/accumulators/AssistantMessageStream.ts"],"sourcesContent":["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 this._controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId: this._options.toolCallId,\n toolName: this._options.toolName,\n });\n\n const stream = createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n stream.readable.pipeTo(\n new WritableStream({\n write: (chunk) => {\n if (chunk.type !== \"text-delta\")\n throw new Error(\"Unexpected chunk type\");\n\n this._controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId: this._options.toolCallId,\n argsTextDelta: chunk.textDelta,\n });\n },\n }),\n );\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n this._controller.enqueue({\n type: \"tool-result\",\n toolCallId: this._options.toolCallId,\n result,\n });\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 createAssistantRun(\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 case \"9\": {\n const { toolCallId, args } = value as {\n toolCallId: string;\n toolName: string;\n args: object;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n\n case \"2\":\n case \"3\":\n case \"8\":\n case \"d\":\n case \"e\": {\n break; // ignore\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 { AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"../utils/types\";\n\nexport const assistantMessageAccumulator = () => {\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 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","import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantMessage } from \"../utils/types\";\nimport { assistantMessageAccumulator } from \"./assistantMessageAccumulator\";\n\nexport class AssistantMessageStream {\n constructor(public readonly readable: ReadableStream<AssistantMessage>) {\n this.readable = readable;\n }\n\n static fromAssistantStream(stream: AssistantStream) {\n return new AssistantMessageStream(\n stream.readable.pipeThrough(assistantMessageAccumulator()),\n );\n }\n\n async unstable_result(): Promise<AssistantMessage> {\n let last: AssistantMessage | undefined;\n for await (const chunk of this) {\n last = chunk;\n }\n\n if (!last) {\n return {\n role: \"assistant\",\n status: { type: \"complete\", reason: \"unknown\" },\n content: [],\n metadata: {\n steps: [],\n custom: {},\n },\n };\n }\n return last;\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.readable.getReader();\n return {\n async next(): Promise<IteratorResult<AssistantMessage, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n }\n\n tee(): [AssistantMessageStream, AssistantMessageStream] {\n const [readable1, readable2] = this.readable.tee();\n return [\n new AssistantMessageStream(readable1),\n new AssistantMessageStream(readable2),\n ];\n }\n}\n"],"mappings":";;;;;;AAQA,IAAM,2BAAN,MAA+D;AAAA,EACrD;AAAA,EAER,YACE,YACA;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAO,WAAmB;AACxB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAEO,IAAM,mBAAmB,CAC9B,aACoB;AACpB,SAAO,IAAI;AAAA,IACT,IAAI,eAAe;AAAA,MACjB,MAAM,GAAG;AACP,eAAO,SAAS,QAAQ,IAAI,yBAAyB,CAAC,CAAC;AAAA,MACzD;AAAA,MACA,KAAK,GAAG;AACN,eAAO,SAAS,OAAO,IAAI,yBAAyB,CAAC,CAAC;AAAA,MACxD;AAAA,MACA,OAAO,GAAG;AACR,eAAO,SAAS,SAAS,CAAC;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AChCA,IAAM,+BAAN,MAAuE;AAAA,EASrE,YACU,aACA,UACR;AAFQ;AACA;AAER,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,KAAK,SAAS;AAAA,MAC1B,UAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAED,UAAM,SAAS,iBAAiB;AAAA,MAC9B,OAAO,CAAC,MAAM;AACZ,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF,CAAC;AACD,WAAO,SAAS;AAAA,MACd,IAAI,eAAe;AAAA,QACjB,OAAO,CAAC,UAAU;AAChB,cAAI,MAAM,SAAS;AACjB,kBAAM,IAAI,MAAM,uBAAuB;AAEzC,eAAK,YAAY,QAAQ;AAAA,YACvB,MAAM;AAAA,YACN,YAAY,KAAK,SAAS;AAAA,YAC1B,eAAe,MAAM;AAAA,UACvB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EArCA,IAAW,aAAa;AACtB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAiCA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ;AAAA,EAER,UAAU,QAAiB;AACzB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,KAAK,SAAS;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AACN,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAQO,IAAM,uBAAuB,CAClC,aACoB;AACpB,QAAM,UAAU;AAAA,IACd,YAAY,SAAS;AAAA,IACrB,UAAU,SAAS;AAAA,EACrB;AACA,SAAO,IAAI;AAAA,IACT,IAAI,eAAe;AAAA,MACjB,MAAM,GAAG;AACP,eAAO,SAAS,QAAQ,IAAI,6BAA6B,GAAG,OAAO,CAAC;AAAA,MACtE;AAAA,MACA,KAAK,GAAG;AACN,eAAO,SAAS,OAAO,IAAI,6BAA6B,GAAG,OAAO,CAAC;AAAA,MACrE;AAAA,MACA,OAAO,GAAG;AACR,eAAO,SAAS,SAAS,CAAC;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACzFA,IAAM,uBAAuB,MAAM;AACjC,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAc,CAAC,KAAK,QAAQ;AAC9C,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO,EAAE,SAAS,SAAmB,OAAgB;AACvD;AAEA,IAAM,oBAAoB,MAAM;AAC9B,QAAM,OAA0B,CAAC;AACjC,MAAI,SAAS;AACb,MAAI;AACJ,MAAI;AAEJ,QAAM,aAAa,CAAC,SAA0B;AAC5C,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,UAAU,KAAK,OACjB,KAAK,EACL,KAAK,CAAC,EAAE,MAAM,MAAM,MAAM;AACzB,aAAK,UAAU;AACf,YAAI,MAAM;AACR,eAAK,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC;AACjC,cAAI,UAAU,KAAK,WAAW,GAAG;AAC/B,uBAAW,MAAM;AAAA,UACnB;AAAA,QACF,OAAO;AACL,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAEA,qBAAa,QAAQ;AACrB,sBAAc;AAAA,MAChB,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,aAAK,QAAQ,CAACA,UAAS;AACrB,UAAAA,MAAK,OAAO,OAAO;AAAA,QACrB,CAAC;AACD,aAAK,SAAS;AAEd,mBAAW,MAAM,CAAC;AAElB,qBAAa,OAAO,CAAC;AACrB,sBAAc;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,eAAqC;AAAA,IACxD,MAAM,GAAG;AACP,mBAAa;AAAA,IACf;AAAA,IACA,MAAM,OAAO;AACX,WAAK,IAAI,CAAC,SAAS;AACjB,mBAAW,IAAI;AACf,eAAO,KAAK;AAAA,MACd,CAAC;AAED,oBAAc,qBAAqB;AACnC,aAAO,YAAY;AAAA,IACrB;AAAA,IACA,SAAS;AACP,WAAK,QAAQ,CAAC,SAAS;AACrB,aAAK,OAAO,OAAO;AAAA,MACrB,CAAC;AACD,WAAK,SAAS;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AACL,eAAS;AACT,UAAI,KAAK,WAAW,EAAG,YAAW,MAAM;AAAA,IAC1C;AAAA,IACA,UAAU,QAAyB;AACjC,UAAI;AACF,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAEF,YAAM,OAAO,EAAE,QAAQ,OAAO,SAAS,UAAU,EAAE;AACnD,WAAK,KAAK,IAAI;AACd,UAAI,KAAK,WAAW,GAAG;AACrB,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAaA,IAAM,oBAAN,MAAiD;AAAA,EACvC,SAAS,kBAAkB;AAAA,EAC3B;AAAA,EAER,cAAc;AACZ,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ;AACN,SAAK,OAAO,KAAK;AACjB,SAAK,qBAAqB,MAAM;AAAA,EAClC;AAAA,EAEA,WAAW,QAAyB;AAClC,SAAK,OAAO,UAAU,MAAM;AAAA,EAC9B;AAAA,EAEA,WAAW,WAAmB;AAC5B,QAAI,CAAC,KAAK,qBAAqB;AAC7B,WAAK,sBAAsB,KAAK,YAAY;AAAA,IAC9C;AACA,SAAK,oBAAoB,OAAO,SAAS;AAAA,EAC3C;AAAA,EAEA,cAAc;AACZ,QAAI;AACJ,UAAM,aAAa,iBAAiB;AAAA,MAClC,MAAM,GAAG;AACP,qBAAa;AAAA,MACf;AAAA,IACF,CAAC;AACD,SAAK,WAAW,UAAU;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,gBACE,SAM0B;AAC1B,UAAM,MACJ,OAAO,YAAY,WACf,EAAE,UAAU,SAAS,YAAY,WAAW,EAAE,IAC9C;AAEN,QAAI;AACJ,UAAM,iBAAiB,qBAAqB;AAAA,MAC1C,YAAY,IAAI;AAAA,MAChB,UAAU,IAAI;AAAA,MACd,MAAM,GAAG;AACP,qBAAa;AAAA,MACf;AAAA,IACF,CAAC;AACD,SAAK,WAAW,cAAc;AAC9B,WAAO;AAAA,EACT;AACF;AAEO,SAAS,mBACd,UACiB;AACjB,QAAM,aAAa,IAAI,kBAAkB;AACzC,QAAM,gBAAgB,SAAS,UAAU;AACzC,MAAI,yBAAyB,SAAS;AACpC,kBAAc,QAAQ,MAAM,WAAW,MAAM,CAAC;AAAA,EAChD,OAAO;AACL,eAAW,MAAM;AAAA,EACnB;AAEA,SAAO,IAAI,gBAAgB,WAAW,YAAY,CAAC;AACrD;;;ACxLO,IAAM,0BAAN,cAA4C,gBAAsB;AAAA,EACvE,YAAY,WAA+D;AACzE,UAAM;AACN,UAAM,WAAW,UAAU,MAAM,QAAe;AAChD,WAAO,eAAe,MAAM,YAAY;AAAA,MACtC,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACF;;;ACLO,IAAM,oBAAN,MAAwB;AAAA,EACrB;AAAA,EAER,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB,IAAI,wBAG1B,CAAC,aAAa;AACd,YAAM,YAAY,IAAI,gBAA8C;AAAA,QAClE,UAAU,OAAO,YAAY;AAC3B,gBAAM,OAAO,MAAM;AACnB,kBAAQ,MAAM;AAAA,YACZ,KAAK;AACH,yBAAW,QAAQ,OAAO,KAAK,UAAU,MAAM,SAAS,IAAI,IAAI;AAChE;AAAA,YAEF,KAAK;AACH,yBAAW;AAAA,gBACT,OACE,KAAK,UAAU;AAAA,kBACb,YAAY,MAAM;AAAA,kBAClB,UAAU,MAAM;AAAA,gBAClB,CAAC,IACD;AAAA,cACJ;AACA;AAAA,YAEF,KAAK;AACH,yBAAW;AAAA,gBACT,OACE,KAAK,UAAU;AAAA,kBACb,YAAY,MAAM;AAAA,kBAClB,eAAe,MAAM;AAAA,gBACvB,CAAC,IACD;AAAA,cACJ;AACA;AAAA,YAEF,KAAK;AACH,yBAAW;AAAA,gBACT,OACE,KAAK,UAAU;AAAA,kBACb,YAAY,MAAM;AAAA,kBAClB,QAAQ,MAAM;AAAA,gBAChB,CAAC,IACD;AAAA,cACJ;AACA;AAAA,YAEF;AACE,oBAAM,kBAAyB;AAC/B,oBAAM,IAAI,MAAM,2BAA2B,eAAe,EAAE;AAAA,UAChE;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,SAAS,EACrB,YAAY,IAAI,kBAAkB,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AAEA,IAAM,mBAAmB,CACvB,SACkB;AAClB,QAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,MAAI,UAAU,GAAI,OAAM,IAAI,MAAM,qBAAqB;AACvD,SAAO;AAAA,IACL,MAAM,KAAK,MAAM,GAAG,KAAK;AAAA,IACzB,OAAO,KAAK,MAAM,KAAK,MAAM,QAAQ,CAAC,CAAC;AAAA,EACzC;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EACrB;AAAA,EAER,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB,IAAI,wBAG1B,CAAC,aAAa;AACd,YAAM,YAAY,IAAI,gBAA8C;AAAA,QAClE,UAAU,OAAO,YAAY;AAC3B,gBAAM,EAAE,MAAM,MAAM,IAAI,iBAAiB,KAAK;AAC9C,kBAAQ,MAAM;AAAA,YACZ,KAAK;AACH,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW;AAAA,cACb,CAAC;AACD;AAAA,YAEF,KAAK,KAAK;AACR,oBAAM,EAAE,YAAY,SAAS,IAAI;AAIjC,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,YAEA,KAAK,KAAK;AACR,oBAAM,EAAE,YAAY,cAAc,IAAI;AAItC,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,YAEA,KAAK,KAAK;AACR,oBAAM,EAAE,YAAY,OAAO,IAAI;AAK/B,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,YAEA,KAAK,KAAK;AACR,oBAAM,EAAE,YAAY,KAAK,IAAI;AAK7B,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA,UAAU;AAAA,cACZ,CAAC;AACD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA,eAAe,KAAK,UAAU,IAAI;AAAA,cACpC,CAAC;AACD;AAAA,YACF;AAAA,YAEA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,KAAK;AACR;AAAA,YACF;AAAA,YAEA;AACE,oBAAM,kBAA0B;AAChC,oBAAM,IAAI,MAAM,2BAA2B,eAAe,EAAE;AAAA,UAChE;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAEO,IAAM,oBAAN,cAAgC,gBAAgC;AAAA,EAC7D,SAAS;AAAA,EAEjB,cAAc;AACZ,UAAM;AAAA,MACJ,WAAW,CAAC,OAAO,eAAe;AAChC,aAAK,UAAU;AACf,cAAM,QAAQ,KAAK,OAAO,MAAM,IAAI;AAGpC,iBAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,qBAAW,QAAQ,MAAM,CAAC,CAAC;AAAA,QAC7B;AAGA,aAAK,SAAS,MAAM,MAAM,SAAS,CAAC;AAAA,MACtC;AAAA,MACA,OAAO,CAAC,eAAe;AAErB,YAAI,KAAK,QAAQ;AACf,qBAAW,QAAQ,KAAK,MAAM;AAAA,QAChC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACzNO,IAAM,mBAAN,MAEP;AAAA,EACU;AAAA,EAER,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB,IAAI,wBAG1B,CAAC,aAAa;AACd,YAAM,YAAY,IAAI,gBAA8C;AAAA,QAClE,UAAU,OAAO,YAAY;AAC3B,gBAAM,OAAO,MAAM;AACnB,kBAAQ,MAAM;AAAA,YACZ,KAAK;AACH,yBAAW,QAAQ,MAAM,SAAS;AAClC;AAAA,YAEF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YAEF;AACE,oBAAM,kBAAyB;AAC/B,oBAAM,IAAI,MAAM,2BAA2B,eAAe,EAAE;AAAA,UAChE;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,SAAS,EACrB,YAAY,IAAI,kBAAkB,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACpB;AAAA,EAER,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB,IAAI,wBAG1B,CAAC,aAAa;AACd,YAAM,YAAY,IAAI,gBAA8C;AAAA,QAClE,UAAU,OAAO,YAAY;AAC3B,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;;;AChFA,OAAO,WAAW;;;AC0CX,SAAS,QAAQ,OAAuB;AAC7C,QAAM,QAAiB,CAAC,MAAM;AAC9B,MAAI,iBAAiB;AACrB,MAAI,eAA8B;AAElC,WAAS,kBAAkB,MAAc,GAAW,WAAkB;AACpE;AACE,cAAQ,MAAM;AAAA,QACZ,KAAK,KAAK;AACR,2BAAiB;AACjB,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,eAAe;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,KAAK;AACR,2BAAiB;AACjB,yBAAe;AACf,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,gBAAgB;AAC3B;AAAA,QACF;AAAA,QAEA,KAAK,KAAK;AACR,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,eAAe;AAC1B;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,KAAK;AACR,2BAAiB;AACjB,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,eAAe;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,KAAK;AACR,2BAAiB;AACjB,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,qBAAqB;AAChC;AAAA,QACF;AAAA,QAEA,KAAK,KAAK;AACR,2BAAiB;AACjB,gBAAM,IAAI;AACV,gBAAM,KAAK,SAAS;AACpB,gBAAM,KAAK,oBAAoB;AAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,wBAAwB,MAAc,GAAW;AACxD,YAAQ,MAAM;AAAA,MACZ,KAAK,KAAK;AACR,cAAM,IAAI;AACV,cAAM,KAAK,2BAA2B;AACtC;AAAA,MACF;AAAA,MACA,KAAK,KAAK;AACR,yBAAiB;AACjB,cAAM,IAAI;AACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,uBAAuB,MAAc,GAAW;AACvD,YAAQ,MAAM;AAAA,MACZ,KAAK,KAAK;AACR,cAAM,IAAI;AACV,cAAM,KAAK,0BAA0B;AACrC;AAAA,MACF;AAAA,MACA,KAAK,KAAK;AACR,yBAAiB;AACjB,cAAM,IAAI;AACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,eAAe,MAAM,MAAM,SAAS,CAAC;AAE3C,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,0BAAkB,MAAM,GAAG,QAAQ;AACnC;AAAA,MAEF,KAAK,uBAAuB;AAC1B,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,kBAAM,KAAK,mBAAmB;AAC9B;AAAA,UACF;AAAA,UACA,KAAK,KAAK;AACR,6BAAiB;AACjB,kBAAM,IAAI;AACV;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK,6BAA6B;AAChC,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,kBAAM,KAAK,mBAAmB;AAC9B;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK,qBAAqB;AACxB,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,kBAAM,KAAK,yBAAyB;AACpC;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK,2BAA2B;AAC9B,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,kBAAM,KAAK,4BAA4B;AAEvC;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK,8BAA8B;AACjC,0BAAkB,MAAM,GAAG,2BAA2B;AACtD;AAAA,MACF;AAAA,MAEA,KAAK,6BAA6B;AAChC,gCAAwB,MAAM,CAAC;AAC/B;AAAA,MACF;AAAA,MAEA,KAAK,iBAAiB;AACpB,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,6BAAiB;AACjB;AAAA,UACF;AAAA,UAEA,KAAK,MAAM;AACT,kBAAM,KAAK,sBAAsB;AACjC;AAAA,UACF;AAAA,UAEA,SAAS;AACP,6BAAiB;AAAA,UACnB;AAAA,QACF;AAEA;AAAA,MACF;AAAA,MAEA,KAAK,sBAAsB;AACzB,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,6BAAiB;AACjB,kBAAM,IAAI;AACV;AAAA,UACF;AAAA,UAEA,SAAS;AACP,6BAAiB;AACjB,8BAAkB,MAAM,GAAG,0BAA0B;AACrD;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK,4BAA4B;AAC/B,gBAAQ,MAAM;AAAA,UACZ,KAAK,KAAK;AACR,kBAAM,IAAI;AACV,kBAAM,KAAK,0BAA0B;AACrC;AAAA,UACF;AAAA,UAEA,KAAK,KAAK;AACR,6BAAiB;AACjB,kBAAM,IAAI;AACV;AAAA,UACF;AAAA,UAEA,SAAS;AACP,6BAAiB;AACjB;AAAA,UACF;AAAA,QACF;AAEA;AAAA,MACF;AAAA,MAEA,KAAK,4BAA4B;AAC/B,0BAAkB,MAAM,GAAG,0BAA0B;AACrD;AAAA,MACF;AAAA,MAEA,KAAK,wBAAwB;AAC3B,cAAM,IAAI;AACV,yBAAiB;AAEjB;AAAA,MACF;AAAA,MAEA,KAAK,iBAAiB;AACpB,gBAAQ,MAAM;AAAA,UACZ,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,KAAK;AACR,6BAAiB;AACjB;AAAA,UACF;AAAA,UAEA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,KAAK;AACR;AAAA,UACF;AAAA,UAEA,KAAK,KAAK;AACR,kBAAM,IAAI;AAEV,gBAAI,MAAM,MAAM,SAAS,CAAC,MAAM,4BAA4B;AAC1D,qCAAuB,MAAM,CAAC;AAAA,YAChC;AAEA,gBAAI,MAAM,MAAM,SAAS,CAAC,MAAM,6BAA6B;AAC3D,sCAAwB,MAAM,CAAC;AAAA,YACjC;AAEA;AAAA,UACF;AAAA,UAEA,KAAK,KAAK;AACR,kBAAM,IAAI;AAEV,gBAAI,MAAM,MAAM,SAAS,CAAC,MAAM,6BAA6B;AAC3D,sCAAwB,MAAM,CAAC;AAAA,YACjC;AAEA;AAAA,UACF;AAAA,UAEA,KAAK,KAAK;AACR,kBAAM,IAAI;AAEV,gBAAI,MAAM,MAAM,SAAS,CAAC,MAAM,4BAA4B;AAC1D,qCAAuB,MAAM,CAAC;AAAA,YAChC;AAEA;AAAA,UACF;AAAA,UAEA,SAAS;AACP,kBAAM,IAAI;AACV;AAAA,UACF;AAAA,QACF;AAEA;AAAA,MACF;AAAA,MAEA,KAAK,kBAAkB;AACrB,cAAM,iBAAiB,MAAM,UAAU,cAAe,IAAI,CAAC;AAE3D,YACE,CAAC,QAAQ,WAAW,cAAc,KAClC,CAAC,OAAO,WAAW,cAAc,KACjC,CAAC,OAAO,WAAW,cAAc,GACjC;AACA,gBAAM,IAAI;AAEV,cAAI,MAAM,MAAM,SAAS,CAAC,MAAM,6BAA6B;AAC3D,oCAAwB,MAAM,CAAC;AAAA,UACjC,WAAW,MAAM,MAAM,SAAS,CAAC,MAAM,4BAA4B;AACjE,mCAAuB,MAAM,CAAC;AAAA,UAChC;AAAA,QACF,OAAO;AACL,2BAAiB;AAAA,QACnB;AAEA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAE9C,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAM,QAAQ,MAAM,CAAC;AAErB,YAAQ,OAAO;AAAA,MACb,KAAK,iBAAiB;AACpB,kBAAU;AACV;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,6BAA6B;AAChC,kBAAU;AACV;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,4BAA4B;AAC/B,kBAAU;AACV;AAAA,MACF;AAAA,MAEA,KAAK,kBAAkB;AACrB,cAAM,iBAAiB,MAAM,UAAU,cAAe,MAAM,MAAM;AAElE,YAAI,OAAO,WAAW,cAAc,GAAG;AACrC,oBAAU,OAAO,MAAM,eAAe,MAAM;AAAA,QAC9C,WAAW,QAAQ,WAAW,cAAc,GAAG;AAC7C,oBAAU,QAAQ,MAAM,eAAe,MAAM;AAAA,QAC/C,WAAW,OAAO,WAAW,cAAc,GAAG;AAC5C,oBAAU,OAAO,MAAM,eAAe,MAAM;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AD7ZO,IAAM,mBAAmB,CAAC,SAAiB;AAChD,MAAI;AACF,WAAO,MAAM,MAAM,IAAI;AAAA,EACzB,QAAQ;AACN,QAAI;AACF,aAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AETO,IAAM,8BAA8B,MAAM;AAC/C,MAAI,UAA4B;AAAA,IAC9B,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC1B,UAAU;AAAA,MACR,OAAO,CAAC;AAAA,MACR,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACA,QAAM,cAAc,IAAI,gBAGtB;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,EAAE,KAAK,IAAI;AACjB,cAAQ,MAAM;AAAA,QACZ,KAAK,cAAc;AACjB,oBAAU,mBAAmB,SAAS,MAAM,SAAS;AACrD,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,SAAS,IAAI;AACjC,oBAAU,eAAe,SAAS,YAAY,QAAQ;AACtD,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,cAAc,IAAI;AACtC,oBAAU,wBAAwB,SAAS,YAAY,aAAa;AACpE,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,eAAyB;AAC5B,gBAAM,EAAE,YAAY,OAAO,IAAI;AAI/B,oBAAU,cAAc,SAAS,YAAY,MAAM;AACnD,qBAAW,QAAQ,OAAO;AAE1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY;AAChB,gBAAU,qBAAqB,OAAO;AACtC,iBAAW,QAAQ,OAAO;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,IAAM,qBAAqB,CAAC,SAA2B,cAAsB;AAC3E,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAE;AACxC,MAAI,aAAa,SAAS,QAAQ;AAChC,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC5B;AAAA,EACF,OAAO;AACL,mBAAe,aAAa,MAAM,GAAG,EAAE;AACvC,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN,MAAM,YAAY,OAAO;AAAA,MACzB,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,aAAa,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AACF;AAEA,IAAM,iBAAiB,CACrB,SACA,YACA,aACqB;AACrB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,QAAQ;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,CAAC;AAAA,QACP,QAAQ,EAAE,MAAM,WAAW,gBAAgB,MAAM;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,0BAA0B,CAC9B,SACA,YACA,kBACqB;AACrB,QAAM,iBAAiB,QAAQ,QAAQ;AAAA,IACrC,CAAC,SAAS,KAAK,SAAS,eAAe,KAAK,eAAe;AAAA,EAC7D;AACA,MAAI,mBAAmB;AACrB,UAAM,IAAI;AAAA,MACR,mDAAmD,UAAU;AAAA,IAC/D;AACF,QAAM,cAAc,QAAQ,QAAQ,cAAc;AAClD,QAAM,cAAc,YAAY,WAAW;AAE3C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,QAAQ,QAAQ,MAAM,GAAG,cAAc;AAAA,MAC1C;AAAA,QACE,GAAG;AAAA,QACH,UAAU;AAAA,QACV,MAAM,iBAAiB,WAAW;AAAA,MACpC;AAAA,MACA,GAAG,QAAQ,QAAQ,MAAM,iBAAiB,CAAC;AAAA,IAC7C;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CACpB,SACA,YACA,WACG;AACH,MAAI,QAAQ;AACZ,QAAM,kBAAkB,QAAQ,SAAS,IAAI,CAAC,SAAS;AACrD,QAAI,KAAK,SAAS,eAAe,KAAK,eAAe;AACnD,aAAO;AACT,YAAQ;AAER,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR,+CAA+C,UAAU;AAAA,IAC3D;AAEF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,EACX;AACF;AAEA,IAAM,uBAAuB,CAAC,YAAgD;AAC5E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;ACpKO,IAAM,yBAAN,MAAM,wBAAuB;AAAA,EAClC,YAA4B,UAA4C;AAA5C;AAC1B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,OAAO,oBAAoB,QAAyB;AAClD,WAAO,IAAI;AAAA,MACT,OAAO,SAAS,YAAY,4BAA4B,CAAC;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,kBAA6C;AACjD,QAAI;AACJ,qBAAiB,SAAS,MAAM;AAC9B,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,MAAM,YAAY,QAAQ,UAAU;AAAA,QAC9C,SAAS,CAAC;AAAA,QACV,UAAU;AAAA,UACR,OAAO,CAAC;AAAA,UACR,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,OAAO,aAAa,IAAI;AACvB,UAAM,SAAS,KAAK,SAAS,UAAU;AACvC,WAAO;AAAA,MACL,MAAM,OAA6D;AACjE,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,eAAO,OAAO,EAAE,MAAM,MAAM,OAAO,OAAU,IAAI,EAAE,MAAM,OAAO,MAAM;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAwD;AACtD,UAAM,CAAC,WAAW,SAAS,IAAI,KAAK,SAAS,IAAI;AACjD,WAAO;AAAA,MACL,IAAI,wBAAuB,SAAS;AAAA,MACpC,IAAI,wBAAuB,SAAS;AAAA,IACtC;AAAA,EACF;AACF;","names":["item"]}
1
+ {"version":3,"sources":["../src/core/modules/text.ts","../src/core/modules/tool-call.ts","../src/core/modules/runs.ts","../src/core/utils/PipeableTransformStream.ts","../src/core/serialization/DataStream.ts","../src/core/serialization/PlainText.ts","../src/core/accumulators/partial-json/parse-partial-json.ts","../src/core/accumulators/partial-json/fix-json.ts","../src/core/accumulators/assistantMessageAccumulator.ts","../src/core/accumulators/AssistantMessageStream.ts"],"sourcesContent":["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 this._controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId: this._options.toolCallId,\n toolName: this._options.toolName,\n });\n\n const stream = createTextStream({\n start: (c) => {\n this._argsTextController = c;\n },\n });\n stream.readable.pipeTo(\n new WritableStream({\n write: (chunk) => {\n if (chunk.type !== \"text-delta\")\n throw new Error(\"Unexpected chunk type\");\n\n this._controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId: this._options.toolCallId,\n argsTextDelta: chunk.textDelta,\n });\n },\n }),\n );\n }\n\n get argsText() {\n return this._argsTextController;\n }\n\n private _argsTextController!: TextStreamController;\n\n setResult(result: unknown) {\n this._controller.enqueue({\n type: \"tool-result\",\n toolCallId: this._options.toolCallId,\n result,\n });\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 addError(error: string) {\n this._merge.addStream(\n new AssistantStream(\n new ReadableStream({\n start(c) {\n c.enqueue({\n type: \"error\",\n error,\n });\n },\n }),\n ),\n );\n }\n}\n\nexport function createAssistantRun(\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\n .catch((e) => {\n controller.addError(e instanceof Error ? e.message : String(e));\n throw e;\n })\n .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 case \"error\":\n controller.enqueue(`3:${JSON.stringify(chunk.error)}\\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 case \"9\": {\n const { toolCallId, args } = value as {\n toolCallId: string;\n toolName: string;\n args: object;\n };\n controller.enqueue({\n type: \"tool-call-begin\",\n toolCallId,\n toolName: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallId,\n argsTextDelta: JSON.stringify(args),\n });\n break;\n }\n\n case \"2\":\n case \"3\":\n case \"8\":\n case \"d\":\n case \"e\": {\n break; // ignore\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 default:\n const unsupportedType:\n | \"tool-call-begin\"\n | \"tool-call-delta\"\n | \"tool-result\"\n | \"error\" = type;\n throw new Error(`unsupported chunk type: ${unsupportedType}`);\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 { AssistantStreamChunk } from \"../AssistantStream\";\nimport { parsePartialJson } from \"./partial-json/parse-partial-json\";\nimport { AssistantMessage, ToolCallContentPart } from \"../utils/types\";\n\nexport const assistantMessageAccumulator = () => {\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\": {\n const { toolCallId, result } = chunk;\n message = setToolResult(message, toolCallId, result);\n controller.enqueue(message);\n\n break;\n }\n\n case \"error\": {\n const { error } = chunk;\n message = setError(message, error);\n controller.enqueue(message);\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n flush(controller) {\n message = appendOrUpdateFinish(message);\n controller.enqueue(message);\n },\n });\n\n return 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\nconst setError = (\n message: AssistantMessage,\n error: string,\n): AssistantMessage => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error,\n },\n };\n};\n","import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantMessage } from \"../utils/types\";\nimport { assistantMessageAccumulator } from \"./assistantMessageAccumulator\";\n\nexport class AssistantMessageStream {\n constructor(public readonly readable: ReadableStream<AssistantMessage>) {\n this.readable = readable;\n }\n\n static fromAssistantStream(stream: AssistantStream) {\n return new AssistantMessageStream(\n stream.readable.pipeThrough(assistantMessageAccumulator()),\n );\n }\n\n async unstable_result(): Promise<AssistantMessage> {\n let last: AssistantMessage | undefined;\n for await (const chunk of this) {\n last = chunk;\n }\n\n if (!last) {\n return {\n role: \"assistant\",\n status: { type: \"complete\", reason: \"unknown\" },\n content: [],\n metadata: {\n steps: [],\n custom: {},\n },\n };\n }\n return last;\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.readable.getReader();\n return {\n async next(): Promise<IteratorResult<AssistantMessage, undefined>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n }\n\n tee(): [AssistantMessageStream, AssistantMessageStream] {\n const [readable1, readable2] = this.readable.tee();\n return [\n new AssistantMessageStream(readable1),\n new AssistantMessageStream(readable2),\n ];\n }\n}\n"],"mappings":"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","names":["item"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-stream",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -35,9 +35,9 @@
35
35
  ],
36
36
  "sideEffects": false,
37
37
  "devDependencies": {
38
- "ai": "^4.0.33",
38
+ "ai": "^4.1.0",
39
39
  "eslint": "^9",
40
- "eslint-config-next": "15.1.4",
40
+ "eslint-config-next": "15.1.5",
41
41
  "tsup": "8.3.5",
42
42
  "tsx": "^4.19.2",
43
43
  "@assistant-ui/tsconfig": "0.0.0"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/AssistantStream.ts","../src/core/utils/generateId.tsx"],"sourcesContent":["export 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"],"mappings":";AAqBO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC3B,YAA4B,UAAgD;AAAhD;AAC1B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,WACE,aACA;AACA,WAAO,IAAI,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EACpD;AAAA,EAEA,OAAO,aACL,UACA,aACA;AACA,WAAO,iBAAgB,eAAe,SAAS,MAAO,WAAW;AAAA,EACnE;AAAA,EAEA,aACE,aACA;AACA,WAAO,KAAK,SAAS,YAAY,WAAW;AAAA,EAC9C;AAAA,EAEA,OAAO,eACL,UACA,aACA;AACA,WAAO,IAAI,iBAAgB,SAAS,YAAY,WAAW,CAAC;AAAA,EAC9D;AAAA,EAEA,MAA0C;AACxC,UAAM,CAAC,WAAW,SAAS,IAAI,KAAK,SAAS,IAAI;AACjD,WAAO,CAAC,IAAI,iBAAgB,SAAS,GAAG,IAAI,iBAAgB,SAAS,CAAC;AAAA,EACxE;AACF;;;ACxDA,SAAS,sBAAsB;AAExB,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AACF;","names":[]}