assistant-stream 0.2.21 → 0.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/core/AssistantStream.d.ts +4 -4
  2. package/dist/core/AssistantStream.d.ts.map +1 -1
  3. package/dist/core/AssistantStream.js.map +1 -1
  4. package/dist/core/object/ObjectStreamResponse.d.ts +1 -1
  5. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  6. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  7. package/dist/core/serialization/PlainText.d.ts +2 -2
  8. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  9. package/dist/core/serialization/PlainText.js.map +1 -1
  10. package/dist/core/serialization/data-stream/DataStream.d.ts +2 -2
  11. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  12. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  13. package/dist/core/tool/tool-types.d.ts +1 -1
  14. package/dist/core/tool/tool-types.d.ts.map +1 -1
  15. package/dist/core/utils/stream/SSE.d.ts +2 -2
  16. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  17. package/dist/core/utils/stream/SSE.js.map +1 -1
  18. package/package.json +4 -11
  19. package/src/core/AssistantStream.ts +14 -5
  20. package/src/core/object/ObjectStreamResponse.ts +1 -1
  21. package/src/core/serialization/PlainText.ts +2 -2
  22. package/src/core/serialization/data-stream/DataStream.ts +2 -2
  23. package/src/core/tool/tool-types.ts +1 -1
  24. package/src/core/utils/stream/SSE.ts +8 -2
  25. package/utils/README.md +1 -1
  26. package/ai-sdk/README.md +0 -1
  27. package/ai-sdk/package.json +0 -5
  28. package/dist/ai-sdk/index.d.ts +0 -5
  29. package/dist/ai-sdk/index.d.ts.map +0 -1
  30. package/dist/ai-sdk/index.js +0 -173
  31. package/dist/ai-sdk/index.js.map +0 -1
  32. package/dist/ai-sdk/language-model.d.ts +0 -6
  33. package/dist/ai-sdk/language-model.d.ts.map +0 -1
  34. package/dist/ai-sdk/language-model.js +0 -106
  35. package/dist/ai-sdk/language-model.js.map +0 -1
  36. package/dist/ai-sdk.d.ts +0 -3
  37. package/dist/ai-sdk.d.ts.map +0 -1
  38. package/dist/ai-sdk.js +0 -7
  39. package/dist/ai-sdk.js.map +0 -1
  40. package/src/ai-sdk/index.ts +0 -204
  41. package/src/ai-sdk/language-model.ts +0 -122
  42. package/src/ai-sdk.ts +0 -2
@@ -1,12 +1,12 @@
1
1
  import { AssistantStreamChunk } from "./AssistantStreamChunk";
2
2
  export type AssistantStream = ReadableStream<AssistantStreamChunk>;
3
- export type AssistantStreamEncoder = ReadableWritablePair<Uint8Array, AssistantStreamChunk> & {
3
+ export type AssistantStreamEncoder = ReadableWritablePair<Uint8Array<ArrayBuffer>, AssistantStreamChunk> & {
4
4
  headers?: Headers;
5
5
  };
6
6
  export declare const AssistantStream: {
7
7
  toResponse(stream: AssistantStream, transformer: AssistantStreamEncoder): Response;
8
- fromResponse(response: Response, transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>): ReadableStream<AssistantStreamChunk>;
9
- toByteStream(stream: AssistantStream, transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>): ReadableStream<Uint8Array<ArrayBufferLike>>;
10
- fromByteStream(readable: ReadableStream<Uint8Array>, transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>): ReadableStream<AssistantStreamChunk>;
8
+ fromResponse(response: Response, transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array<ArrayBuffer>>): ReadableStream<AssistantStreamChunk>;
9
+ toByteStream(stream: AssistantStream, transformer: ReadableWritablePair<Uint8Array<ArrayBuffer>, AssistantStreamChunk>): ReadableStream<Uint8Array<ArrayBuffer>>;
10
+ fromByteStream(readable: ReadableStream<Uint8Array<ArrayBuffer>>, transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array<ArrayBuffer>>): ReadableStream<AssistantStreamChunk>;
11
11
  };
12
12
  //# sourceMappingURL=AssistantStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantStream.d.ts","sourceRoot":"","sources":["../../src/core/AssistantStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CACvD,UAAU,EACV,oBAAoB,CACrB,GAAG;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe;uBACP,eAAe,eAAe,sBAAsB;2BAO3D,QAAQ,eACL,oBAAoB,CAAC,oBAAoB,EAAE,UAAU,CAAC;yBAM3D,eAAe,eACV,oBAAoB,CAAC,UAAU,EAAE,oBAAoB,CAAC;6BAMzD,cAAc,CAAC,UAAU,CAAC,eACvB,oBAAoB,CAAC,oBAAoB,EAAE,UAAU,CAAC;CAItE,CAAC"}
1
+ {"version":3,"file":"AssistantStream.d.ts","sourceRoot":"","sources":["../../src/core/AssistantStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CACvD,UAAU,CAAC,WAAW,CAAC,EACvB,oBAAoB,CACrB,GAAG;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe;uBACP,eAAe,eAAe,sBAAsB;2BAO3D,QAAQ,eACL,oBAAoB,CAC/B,oBAAoB,EACpB,UAAU,CAAC,WAAW,CAAC,CACxB;yBAMO,eAAe,eACV,oBAAoB,CAC/B,UAAU,CAAC,WAAW,CAAC,EACvB,oBAAoB,CACrB;6BAMS,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,eACpC,oBAAoB,CAC/B,oBAAoB,EACpB,UAAU,CAAC,WAAW,CAAC,CACxB;CAIJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/AssistantStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"./AssistantStreamChunk\";\n\nexport type AssistantStream = ReadableStream<AssistantStreamChunk>;\n\nexport type AssistantStreamEncoder = ReadableWritablePair<\n Uint8Array,\n AssistantStreamChunk\n> & {\n headers?: Headers;\n};\n\nexport const AssistantStream = {\n toResponse(stream: AssistantStream, transformer: AssistantStreamEncoder) {\n return new Response(AssistantStream.toByteStream(stream, transformer), {\n headers: transformer.headers ?? {},\n });\n },\n\n fromResponse(\n response: Response,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n },\n\n toByteStream(\n stream: AssistantStream,\n transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,\n ) {\n return stream.pipeThrough(transformer);\n },\n\n fromByteStream(\n readable: ReadableStream<Uint8Array>,\n transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,\n ) {\n return readable.pipeThrough(transformer);\n },\n};\n"],"mappings":";AAWO,IAAM,kBAAkB;AAAA,EAC7B,WAAW,QAAyB,aAAqC;AACvE,WAAO,IAAI,SAAS,gBAAgB,aAAa,QAAQ,WAAW,GAAG;AAAA,MACrE,SAAS,YAAY,WAAW,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,aACE,UACA,aACA;AACA,WAAO,gBAAgB,eAAe,SAAS,MAAO,WAAW;AAAA,EACnE;AAAA,EAEA,aACE,QACA,aACA;AACA,WAAO,OAAO,YAAY,WAAW;AAAA,EACvC;AAAA,EAEA,eACE,UACA,aACA;AACA,WAAO,SAAS,YAAY,WAAW;AAAA,EACzC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/core/AssistantStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"./AssistantStreamChunk\";\n\nexport type AssistantStream = ReadableStream<AssistantStreamChunk>;\n\nexport type AssistantStreamEncoder = ReadableWritablePair<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> & {\n headers?: Headers;\n};\n\nexport const AssistantStream = {\n toResponse(stream: AssistantStream, transformer: AssistantStreamEncoder) {\n return new Response(AssistantStream.toByteStream(stream, transformer), {\n headers: transformer.headers ?? {},\n });\n },\n\n fromResponse(\n response: Response,\n transformer: ReadableWritablePair<\n AssistantStreamChunk,\n Uint8Array<ArrayBuffer>\n >,\n ) {\n return AssistantStream.fromByteStream(response.body!, transformer);\n },\n\n toByteStream(\n stream: AssistantStream,\n transformer: ReadableWritablePair<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n >,\n ) {\n return stream.pipeThrough(transformer);\n },\n\n fromByteStream(\n readable: ReadableStream<Uint8Array<ArrayBuffer>>,\n transformer: ReadableWritablePair<\n AssistantStreamChunk,\n Uint8Array<ArrayBuffer>\n >,\n ) {\n return readable.pipeThrough(transformer);\n },\n};\n"],"mappings":";AAWO,IAAM,kBAAkB;AAAA,EAC7B,WAAW,QAAyB,aAAqC;AACvE,WAAO,IAAI,SAAS,gBAAgB,aAAa,QAAQ,WAAW,GAAG;AAAA,MACrE,SAAS,YAAY,WAAW,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,aACE,UACA,aAIA;AACA,WAAO,gBAAgB,eAAe,SAAS,MAAO,WAAW;AAAA,EACnE;AAAA,EAEA,aACE,QACA,aAIA;AACA,WAAO,OAAO,YAAY,WAAW;AAAA,EACvC;AAAA,EAEA,eACE,UACA,aAIA;AACA,WAAO,SAAS,YAAY,WAAW;AAAA,EACzC;AACF;","names":[]}
@@ -3,7 +3,7 @@ import { ObjectStreamChunk } from "./types";
3
3
  export declare class ObjectStreamEncoder extends PipeableTransformStream<ObjectStreamChunk, Uint8Array> {
4
4
  constructor();
5
5
  }
6
- export declare class ObjectStreamDecoder extends PipeableTransformStream<Uint8Array, ObjectStreamChunk> {
6
+ export declare class ObjectStreamDecoder extends PipeableTransformStream<Uint8Array<ArrayBuffer>, ObjectStreamChunk> {
7
7
  constructor();
8
8
  }
9
9
  export declare class ObjectStreamResponse extends Response {
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectStreamResponse.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAyB,MAAM,SAAS,CAAC;AAEnE,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,iBAAiB,EACjB,UAAU,CACX;;CA6CA;AAED,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,UAAU,EACV,iBAAiB,CAClB;;CAsBA;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,IAAI,EAAE,cAAc,CAAC,iBAAiB,CAAC;CAUpD;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAU,QAAQ,KACjB,cAAc,CAAC,iBAAiB,CAWlC,CAAC"}
1
+ {"version":3,"file":"ObjectStreamResponse.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAyB,MAAM,SAAS,CAAC;AAEnE,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,iBAAiB,EACjB,UAAU,CACX;;CA6CA;AAED,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,UAAU,CAAC,WAAW,CAAC,EACvB,iBAAiB,CAClB;;CAsBA;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,IAAI,EAAE,cAAc,CAAC,iBAAiB,CAAC;CAUpD;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAU,QAAQ,KACjB,cAAc,CAAC,iBAAiB,CAWlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/object/ObjectStreamResponse.ts"],"sourcesContent":["import { PipeableTransformStream } from \"../utils/stream/PipeableTransformStream\";\nimport { ObjectStreamAccumulator } from \"./ObjectStreamAccumulator\";\nimport { SSEDecoder, SSEEncoder } from \"../utils/stream/SSE\";\nimport { ObjectStreamChunk, ObjectStreamOperation } from \"./types\";\n\nexport class ObjectStreamEncoder extends PipeableTransformStream<\n ObjectStreamChunk,\n Uint8Array\n> {\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(\n (() => {\n class ObjectStreamTransformer\n implements\n Transformer<ObjectStreamChunk, readonly ObjectStreamOperation[]>\n {\n #isFirstChunk = true;\n\n start() {\n // Nothing needed here since we initialize in the field declaration\n }\n\n transform(\n chunk: ObjectStreamChunk,\n controller: TransformStreamDefaultController<\n readonly ObjectStreamOperation[]\n >,\n ) {\n if (\n this.#isFirstChunk &&\n chunk.snapshot &&\n Object.keys(chunk.snapshot).length > 0\n ) {\n // For the first chunk, if there's an initial state that's not empty,\n // prepend a set operation for the initial state\n controller.enqueue([\n { type: \"set\", path: [], value: chunk.snapshot },\n ...chunk.operations,\n ]);\n } else {\n controller.enqueue(chunk.operations);\n }\n this.#isFirstChunk = false;\n }\n }\n return new TransformStream(new ObjectStreamTransformer());\n })(),\n )\n .pipeThrough(new SSEEncoder()),\n );\n }\n}\n\nexport class ObjectStreamDecoder extends PipeableTransformStream<\n Uint8Array,\n ObjectStreamChunk\n> {\n constructor() {\n const accumulator = new ObjectStreamAccumulator();\n super((readable) =>\n readable\n .pipeThrough(new SSEDecoder<readonly ObjectStreamOperation[]>())\n .pipeThrough(\n new TransformStream<\n readonly ObjectStreamOperation[],\n ObjectStreamChunk\n >({\n transform(operations, controller) {\n accumulator.append(operations);\n controller.enqueue({\n snapshot: accumulator.state,\n operations,\n });\n },\n }),\n ),\n );\n }\n}\n\nexport class ObjectStreamResponse extends Response {\n constructor(body: ReadableStream<ObjectStreamChunk>) {\n super(body.pipeThrough(new ObjectStreamEncoder()), {\n headers: new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Assistant-Stream-Format\": \"object-stream/v0\",\n }),\n });\n }\n}\n\nexport const fromObjectStreamResponse = (\n response: Response,\n): ReadableStream<ObjectStreamChunk> => {\n if (!response.ok)\n throw new Error(`Response failed, status ${response.status}`);\n if (!response.body) throw new Error(\"Response body is null\");\n if (response.headers.get(\"Content-Type\") !== \"text/event-stream\") {\n throw new Error(\"Response is not an event stream\");\n }\n if (response.headers.get(\"Assistant-Stream-Format\") !== \"object-stream/v0\") {\n throw new Error(\"Unsupported Assistant-Stream-Format header\");\n }\n return response.body.pipeThrough(new ObjectStreamDecoder());\n};\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,+BAA+B;AACxC,SAAS,YAAY,kBAAkB;AAGhC,IAAM,sBAAN,cAAkC,wBAGvC;AAAA,EACA,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG;AAAA,SACE,MAAM;AAAA,UACL,MAAM,wBAGN;AAAA,YACE,gBAAgB;AAAA,YAEhB,QAAQ;AAAA,YAER;AAAA,YAEA,UACE,OACA,YAGA;AACA,kBACE,KAAK,iBACL,MAAM,YACN,OAAO,KAAK,MAAM,QAAQ,EAAE,SAAS,GACrC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,EAAE,MAAM,OAAO,MAAM,CAAC,GAAG,OAAO,MAAM,SAAS;AAAA,kBAC/C,GAAG,MAAM;AAAA,gBACX,CAAC;AAAA,cACH,OAAO;AACL,2BAAW,QAAQ,MAAM,UAAU;AAAA,cACrC;AACA,mBAAK,gBAAgB;AAAA,YACvB;AAAA,UACF;AACA,iBAAO,IAAI,gBAAgB,IAAI,wBAAwB,CAAC;AAAA,QAC1D,GAAG;AAAA,MACL,EACC,YAAY,IAAI,WAAW,CAAC;AAAA,IACjC;AAAA,EACF;AACF;AAEO,IAAM,sBAAN,cAAkC,wBAGvC;AAAA,EACA,cAAc;AACZ,UAAM,cAAc,IAAI,wBAAwB;AAChD;AAAA,MAAM,CAAC,aACL,SACG,YAAY,IAAI,WAA6C,CAAC,EAC9D;AAAA,QACC,IAAI,gBAGF;AAAA,UACA,UAAU,YAAY,YAAY;AAChC,wBAAY,OAAO,UAAU;AAC7B,uBAAW,QAAQ;AAAA,cACjB,UAAU,YAAY;AAAA,cACtB;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,EACF;AACF;AAEO,IAAM,uBAAN,cAAmC,SAAS;AAAA,EACjD,YAAY,MAAyC;AACnD,UAAM,KAAK,YAAY,IAAI,oBAAoB,CAAC,GAAG;AAAA,MACjD,SAAS,IAAI,QAAQ;AAAA,QACnB,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,2BAA2B;AAAA,MAC7B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,IAAM,2BAA2B,CACtC,aACsC;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,EAAE;AAC9D,MAAI,CAAC,SAAS,KAAM,OAAM,IAAI,MAAM,uBAAuB;AAC3D,MAAI,SAAS,QAAQ,IAAI,cAAc,MAAM,qBAAqB;AAChE,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,MAAI,SAAS,QAAQ,IAAI,yBAAyB,MAAM,oBAAoB;AAC1E,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO,SAAS,KAAK,YAAY,IAAI,oBAAoB,CAAC;AAC5D;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/object/ObjectStreamResponse.ts"],"sourcesContent":["import { PipeableTransformStream } from \"../utils/stream/PipeableTransformStream\";\nimport { ObjectStreamAccumulator } from \"./ObjectStreamAccumulator\";\nimport { SSEDecoder, SSEEncoder } from \"../utils/stream/SSE\";\nimport { ObjectStreamChunk, ObjectStreamOperation } from \"./types\";\n\nexport class ObjectStreamEncoder extends PipeableTransformStream<\n ObjectStreamChunk,\n Uint8Array\n> {\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(\n (() => {\n class ObjectStreamTransformer\n implements\n Transformer<ObjectStreamChunk, readonly ObjectStreamOperation[]>\n {\n #isFirstChunk = true;\n\n start() {\n // Nothing needed here since we initialize in the field declaration\n }\n\n transform(\n chunk: ObjectStreamChunk,\n controller: TransformStreamDefaultController<\n readonly ObjectStreamOperation[]\n >,\n ) {\n if (\n this.#isFirstChunk &&\n chunk.snapshot &&\n Object.keys(chunk.snapshot).length > 0\n ) {\n // For the first chunk, if there's an initial state that's not empty,\n // prepend a set operation for the initial state\n controller.enqueue([\n { type: \"set\", path: [], value: chunk.snapshot },\n ...chunk.operations,\n ]);\n } else {\n controller.enqueue(chunk.operations);\n }\n this.#isFirstChunk = false;\n }\n }\n return new TransformStream(new ObjectStreamTransformer());\n })(),\n )\n .pipeThrough(new SSEEncoder()),\n );\n }\n}\n\nexport class ObjectStreamDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n ObjectStreamChunk\n> {\n constructor() {\n const accumulator = new ObjectStreamAccumulator();\n super((readable) =>\n readable\n .pipeThrough(new SSEDecoder<readonly ObjectStreamOperation[]>())\n .pipeThrough(\n new TransformStream<\n readonly ObjectStreamOperation[],\n ObjectStreamChunk\n >({\n transform(operations, controller) {\n accumulator.append(operations);\n controller.enqueue({\n snapshot: accumulator.state,\n operations,\n });\n },\n }),\n ),\n );\n }\n}\n\nexport class ObjectStreamResponse extends Response {\n constructor(body: ReadableStream<ObjectStreamChunk>) {\n super(body.pipeThrough(new ObjectStreamEncoder()), {\n headers: new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Assistant-Stream-Format\": \"object-stream/v0\",\n }),\n });\n }\n}\n\nexport const fromObjectStreamResponse = (\n response: Response,\n): ReadableStream<ObjectStreamChunk> => {\n if (!response.ok)\n throw new Error(`Response failed, status ${response.status}`);\n if (!response.body) throw new Error(\"Response body is null\");\n if (response.headers.get(\"Content-Type\") !== \"text/event-stream\") {\n throw new Error(\"Response is not an event stream\");\n }\n if (response.headers.get(\"Assistant-Stream-Format\") !== \"object-stream/v0\") {\n throw new Error(\"Unsupported Assistant-Stream-Format header\");\n }\n return response.body.pipeThrough(new ObjectStreamDecoder());\n};\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,+BAA+B;AACxC,SAAS,YAAY,kBAAkB;AAGhC,IAAM,sBAAN,cAAkC,wBAGvC;AAAA,EACA,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG;AAAA,SACE,MAAM;AAAA,UACL,MAAM,wBAGN;AAAA,YACE,gBAAgB;AAAA,YAEhB,QAAQ;AAAA,YAER;AAAA,YAEA,UACE,OACA,YAGA;AACA,kBACE,KAAK,iBACL,MAAM,YACN,OAAO,KAAK,MAAM,QAAQ,EAAE,SAAS,GACrC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,EAAE,MAAM,OAAO,MAAM,CAAC,GAAG,OAAO,MAAM,SAAS;AAAA,kBAC/C,GAAG,MAAM;AAAA,gBACX,CAAC;AAAA,cACH,OAAO;AACL,2BAAW,QAAQ,MAAM,UAAU;AAAA,cACrC;AACA,mBAAK,gBAAgB;AAAA,YACvB;AAAA,UACF;AACA,iBAAO,IAAI,gBAAgB,IAAI,wBAAwB,CAAC;AAAA,QAC1D,GAAG;AAAA,MACL,EACC,YAAY,IAAI,WAAW,CAAC;AAAA,IACjC;AAAA,EACF;AACF;AAEO,IAAM,sBAAN,cAAkC,wBAGvC;AAAA,EACA,cAAc;AACZ,UAAM,cAAc,IAAI,wBAAwB;AAChD;AAAA,MAAM,CAAC,aACL,SACG,YAAY,IAAI,WAA6C,CAAC,EAC9D;AAAA,QACC,IAAI,gBAGF;AAAA,UACA,UAAU,YAAY,YAAY;AAChC,wBAAY,OAAO,UAAU;AAC7B,uBAAW,QAAQ;AAAA,cACjB,UAAU,YAAY;AAAA,cACtB;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,EACF;AACF;AAEO,IAAM,uBAAN,cAAmC,SAAS;AAAA,EACjD,YAAY,MAAyC;AACnD,UAAM,KAAK,YAAY,IAAI,oBAAoB,CAAC,GAAG;AAAA,MACjD,SAAS,IAAI,QAAQ;AAAA,QACnB,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,2BAA2B;AAAA,MAC7B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,IAAM,2BAA2B,CACtC,aACsC;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,EAAE;AAC9D,MAAI,CAAC,SAAS,KAAM,OAAM,IAAI,MAAM,uBAAuB;AAC3D,MAAI,SAAS,QAAQ,IAAI,cAAc,MAAM,qBAAqB;AAChE,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,MAAI,SAAS,QAAQ,IAAI,yBAAyB,MAAM,oBAAoB;AAC1E,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO,SAAS,KAAK,YAAY,IAAI,oBAAoB,CAAC;AAC5D;","names":[]}
@@ -1,11 +1,11 @@
1
1
  import { AssistantStreamEncoder } from "../AssistantStream";
2
2
  import { AssistantStreamChunk } from "../AssistantStreamChunk";
3
3
  import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream";
4
- export declare class PlainTextEncoder extends PipeableTransformStream<AssistantStreamChunk, Uint8Array> implements AssistantStreamEncoder {
4
+ export declare class PlainTextEncoder extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>> implements AssistantStreamEncoder {
5
5
  headers: Headers;
6
6
  constructor();
7
7
  }
8
- export declare class PlainTextDecoder extends PipeableTransformStream<Uint8Array, AssistantStreamChunk> {
8
+ export declare class PlainTextDecoder extends PipeableTransformStream<Uint8Array<ArrayBuffer>, AssistantStreamChunk> {
9
9
  constructor();
10
10
  }
11
11
  //# sourceMappingURL=PlainText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlainText.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/PlainText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,qBAAa,gBACX,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,UAAU,CAChE,YAAW,sBAAsB;IAEjC,OAAO,UAGJ;;CAuCJ;AAED,qBAAa,gBAAiB,SAAQ,uBAAuB,CAC3D,UAAU,EACV,oBAAoB,CACrB;;CAcA"}
1
+ {"version":3,"file":"PlainText.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/PlainText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,qBAAa,gBACX,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,UAAU,CAAC,WAAW,CAAC,CAC7E,YAAW,sBAAsB;IAEjC,OAAO,UAGJ;;CAuCJ;AAED,qBAAa,gBAAiB,SAAQ,uBAAuB,CAC3D,UAAU,CAAC,WAAW,CAAC,EACvB,oBAAoB,CACrB;;CAcA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/serialization/PlainText.ts"],"sourcesContent":["import { AssistantStreamEncoder } from \"../AssistantStream\";\nimport { AssistantStreamChunk } from \"../AssistantStreamChunk\";\nimport { AssistantTransformStream } from \"../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../utils/stream/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((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 \"part-start\":\n case \"part-finish\":\n case \"step-start\":\n case \"step-finish\":\n case \"message-finish\":\n case \"error\":\n break;\n\n default:\n const unsupportedType:\n | \"tool-call-args-text-finish\"\n | \"data\"\n | \"annotations\"\n | \"tool-call-begin\"\n | \"tool-call-delta\"\n | \"result\"\n | \"update-state\" = 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 extends PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const transform = new AssistantTransformStream<string>({\n transform(chunk, controller) {\n controller.appendText(chunk);\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":";AAEA,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AAEjC,IAAM,mBAAN,cACG,wBAEV;AAAA,EACE,UAAU,IAAI,QAAQ;AAAA,IACpB,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC7B,CAAC;AAAA,EAED,cAAc;AACZ,UAAM,CAAC,aAAa;AAClB,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;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH;AAAA,YAEF;AACE,oBAAM,kBAOe;AACrB,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,cAA+B,wBAGpC;AAAA,EACA,cAAc;AACZ,UAAM,CAAC,aAAa;AAClB,YAAM,YAAY,IAAI,yBAAiC;AAAA,QACrD,UAAU,OAAO,YAAY;AAC3B,qBAAW,WAAW,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/serialization/PlainText.ts"],"sourcesContent":["import { AssistantStreamEncoder } from \"../AssistantStream\";\nimport { AssistantStreamChunk } from \"../AssistantStreamChunk\";\nimport { AssistantTransformStream } from \"../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../utils/stream/PipeableTransformStream\";\n\nexport class PlainTextEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((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 \"part-start\":\n case \"part-finish\":\n case \"step-start\":\n case \"step-finish\":\n case \"message-finish\":\n case \"error\":\n break;\n\n default:\n const unsupportedType:\n | \"tool-call-args-text-finish\"\n | \"data\"\n | \"annotations\"\n | \"tool-call-begin\"\n | \"tool-call-delta\"\n | \"result\"\n | \"update-state\" = 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 extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const transform = new AssistantTransformStream<string>({\n transform(chunk, controller) {\n controller.appendText(chunk);\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":";AAEA,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AAEjC,IAAM,mBAAN,cACG,wBAEV;AAAA,EACE,UAAU,IAAI,QAAQ;AAAA,IACpB,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC7B,CAAC;AAAA,EAED,cAAc;AACZ,UAAM,CAAC,aAAa;AAClB,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;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH;AAAA,YAEF;AACE,oBAAM,kBAOe;AACrB,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,cAA+B,wBAGpC;AAAA,EACA,cAAc;AACZ,UAAM,CAAC,aAAa;AAClB,YAAM,YAAY,IAAI,yBAAiC;AAAA,QACrD,UAAU,OAAO,YAAY;AAC3B,qBAAW,WAAW,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAED,aAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,11 +1,11 @@
1
1
  import { AssistantStreamChunk } from "../../AssistantStreamChunk";
2
2
  import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream";
3
3
  import { AssistantStreamEncoder } from "../../AssistantStream";
4
- export declare class DataStreamEncoder extends PipeableTransformStream<AssistantStreamChunk, Uint8Array> implements AssistantStreamEncoder {
4
+ export declare class DataStreamEncoder extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>> implements AssistantStreamEncoder {
5
5
  headers: Headers;
6
6
  constructor();
7
7
  }
8
- export declare class DataStreamDecoder extends PipeableTransformStream<Uint8Array, AssistantStreamChunk> {
8
+ export declare class DataStreamDecoder extends PipeableTransformStream<Uint8Array<ArrayBuffer>, AssistantStreamChunk> {
9
9
  constructor();
10
10
  }
11
11
  //# sourceMappingURL=DataStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataStream.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAYrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qBAAa,iBACX,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,UAAU,CAChE,YAAW,sBAAsB;IAEjC,OAAO,UAGJ;;CAiLJ;AAeD,qBAAa,iBAAkB,SAAQ,uBAAuB,CAC5D,UAAU,EACV,oBAAoB,CACrB;;CAiMA"}
1
+ {"version":3,"file":"DataStream.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAYrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qBAAa,iBACX,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,UAAU,CAAC,WAAW,CAAC,CAC7E,YAAW,sBAAsB;IAEjC,OAAO,UAGJ;;CAiLJ;AAeD,qBAAa,iBAAkB,SAAQ,uBAAuB,CAC5D,UAAU,CAAC,WAAW,CAAC,EACvB,oBAAoB,CACrB;;CAiMA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { ToolCallStreamController } from \"../../modules/tool-call\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { DataStreamChunk, DataStreamStreamChunkType } from \"./chunk-types\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport {\n DataStreamChunkDecoder,\n DataStreamChunkEncoder,\n} from \"./serialization\";\nimport {\n AssistantMetaStreamChunk,\n AssistantMetaTransformStream,\n} from \"../../utils/stream/AssistantMetaTransformStream\";\nimport { TextStreamController } from \"../../modules/text\";\nimport { AssistantStreamEncoder } from \"../../AssistantStream\";\n\nexport class DataStreamEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((readable) => {\n const transform = new TransformStream<\n AssistantMetaStreamChunk,\n DataStreamChunk\n >({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"part-start\": {\n const part = chunk.part;\n if (part.type === \"tool-call\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartToolCall,\n value,\n });\n }\n if (part.type === \"source\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.Source,\n value,\n });\n }\n break;\n }\n case \"text-delta\": {\n const part = chunk.meta;\n switch (part.type) {\n case \"text\": {\n if (part.parentId) {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiTextDelta,\n value: {\n textDelta: chunk.textDelta,\n parentId: part.parentId,\n },\n });\n } else {\n controller.enqueue({\n type: DataStreamStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n }\n break;\n }\n case \"reasoning\": {\n if (part.parentId) {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiReasoningDelta,\n value: {\n reasoningDelta: chunk.textDelta,\n parentId: part.parentId,\n },\n });\n } else {\n controller.enqueue({\n type: DataStreamStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n }\n break;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallArgsTextDelta,\n value: {\n toolCallId: part.toolCallId,\n argsTextDelta: chunk.textDelta,\n },\n });\n break;\n }\n default:\n throw new Error(\n `Unsupported part type for text-delta: ${part.type}`,\n );\n }\n break;\n }\n case \"result\": {\n // Only tool-call parts can have results.\n const part = chunk.meta;\n if (part.type !== \"tool-call\") {\n throw new Error(\n `Result chunk on non-tool-call part not supported: ${part.type}`,\n );\n }\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallResult,\n value: {\n toolCallId: part.toolCallId,\n result: chunk.result,\n artifact: chunk.artifact,\n ...(chunk.isError ? { isError: chunk.isError } : {}),\n },\n });\n break;\n }\n case \"step-start\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartStep,\n value,\n });\n break;\n }\n case \"step-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishStep,\n value,\n });\n break;\n }\n case \"message-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishMessage,\n value,\n });\n break;\n }\n case \"error\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n case \"annotations\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n case \"data\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n case \"update-state\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiUpdateStateOperations,\n value: chunk.operations,\n });\n break;\n }\n\n // TODO ignore for now\n // in the future, we should create a handler that waits for text parts to finish before continuing\n case \"tool-call-args-text-finish\":\n case \"part-finish\":\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n });\n\n return readable\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeThrough(transform)\n .pipeThrough(new DataStreamChunkEncoder())\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst TOOL_CALL_ARGS_CLOSING_CHUNKS = [\n DataStreamStreamChunkType.StartToolCall,\n DataStreamStreamChunkType.ToolCall,\n DataStreamStreamChunkType.TextDelta,\n DataStreamStreamChunkType.ReasoningDelta,\n DataStreamStreamChunkType.Source,\n DataStreamStreamChunkType.Error,\n DataStreamStreamChunkType.FinishStep,\n DataStreamStreamChunkType.FinishMessage,\n DataStreamStreamChunkType.AuiTextDelta,\n DataStreamStreamChunkType.AuiReasoningDelta,\n];\n\nexport class DataStreamDecoder extends PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n const transform = new AssistantTransformStream<DataStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = chunk;\n\n if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n }\n\n switch (type) {\n case DataStreamStreamChunkType.ReasoningDelta:\n controller.appendReasoning(value);\n break;\n\n case DataStreamStreamChunkType.TextDelta:\n controller.appendText(value);\n break;\n\n case DataStreamStreamChunkType.AuiTextDelta:\n controller\n .withParentId(value.parentId)\n .appendText(value.textDelta);\n break;\n\n case DataStreamStreamChunkType.AuiReasoningDelta:\n controller\n .withParentId(value.parentId)\n .appendReasoning(value.reasoningDelta);\n break;\n\n case DataStreamStreamChunkType.StartToolCall: {\n const { toolCallId, toolName, parentId } = value;\n const ctrl = parentId\n ? controller.withParentId(parentId)\n : controller;\n const toolCallController = ctrl.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallArgsTextDelta: {\n const { toolCallId, argsTextDelta } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call with unknown id: \" + toolCallId,\n );\n toolCallController.argsText.append(argsTextDelta);\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallResult: {\n const { toolCallId, artifact, result, isError } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call result with unknown id: \" + toolCallId,\n );\n toolCallController.setResponse({\n artifact,\n result,\n isError,\n });\n break;\n }\n\n case DataStreamStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n\n let toolCallController = toolCallControllers.get(toolCallId);\n if (toolCallController) {\n toolCallController.argsText.close();\n } else {\n toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n args,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n }\n break;\n }\n\n case DataStreamStreamChunkType.FinishMessage:\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.StartStep:\n controller.enqueue({\n type: \"step-start\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.FinishStep:\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n ...value,\n });\n break;\n case DataStreamStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n path: [],\n data: value,\n });\n break;\n\n case DataStreamStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n path: [],\n annotations: value,\n });\n break;\n\n case DataStreamStreamChunkType.Source: {\n const { parentId, ...sourceData } = value;\n const ctrl = parentId\n ? controller.withParentId(parentId)\n : controller;\n ctrl.appendSource({\n type: \"source\",\n ...sourceData,\n });\n break;\n }\n\n case DataStreamStreamChunkType.Error:\n controller.enqueue({\n type: \"error\",\n path: [],\n error: value,\n });\n break;\n\n case DataStreamStreamChunkType.File:\n controller.appendFile({\n type: \"file\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.AuiUpdateStateOperations:\n controller.enqueue({\n type: \"update-state\",\n path: [],\n operations: value,\n });\n break;\n\n case DataStreamStreamChunkType.ReasoningSignature:\n case DataStreamStreamChunkType.RedactedReasoning:\n // ignore these for now\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n toolCallControllers.forEach((controller) => controller.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new DataStreamChunkDecoder())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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","names":["type"]}
1
+ {"version":3,"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { ToolCallStreamController } from \"../../modules/tool-call\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { DataStreamChunk, DataStreamStreamChunkType } from \"./chunk-types\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport {\n DataStreamChunkDecoder,\n DataStreamChunkEncoder,\n} from \"./serialization\";\nimport {\n AssistantMetaStreamChunk,\n AssistantMetaTransformStream,\n} from \"../../utils/stream/AssistantMetaTransformStream\";\nimport { TextStreamController } from \"../../modules/text\";\nimport { AssistantStreamEncoder } from \"../../AssistantStream\";\n\nexport class DataStreamEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((readable) => {\n const transform = new TransformStream<\n AssistantMetaStreamChunk,\n DataStreamChunk\n >({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"part-start\": {\n const part = chunk.part;\n if (part.type === \"tool-call\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartToolCall,\n value,\n });\n }\n if (part.type === \"source\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.Source,\n value,\n });\n }\n break;\n }\n case \"text-delta\": {\n const part = chunk.meta;\n switch (part.type) {\n case \"text\": {\n if (part.parentId) {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiTextDelta,\n value: {\n textDelta: chunk.textDelta,\n parentId: part.parentId,\n },\n });\n } else {\n controller.enqueue({\n type: DataStreamStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n }\n break;\n }\n case \"reasoning\": {\n if (part.parentId) {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiReasoningDelta,\n value: {\n reasoningDelta: chunk.textDelta,\n parentId: part.parentId,\n },\n });\n } else {\n controller.enqueue({\n type: DataStreamStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n }\n break;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallArgsTextDelta,\n value: {\n toolCallId: part.toolCallId,\n argsTextDelta: chunk.textDelta,\n },\n });\n break;\n }\n default:\n throw new Error(\n `Unsupported part type for text-delta: ${part.type}`,\n );\n }\n break;\n }\n case \"result\": {\n // Only tool-call parts can have results.\n const part = chunk.meta;\n if (part.type !== \"tool-call\") {\n throw new Error(\n `Result chunk on non-tool-call part not supported: ${part.type}`,\n );\n }\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallResult,\n value: {\n toolCallId: part.toolCallId,\n result: chunk.result,\n artifact: chunk.artifact,\n ...(chunk.isError ? { isError: chunk.isError } : {}),\n },\n });\n break;\n }\n case \"step-start\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartStep,\n value,\n });\n break;\n }\n case \"step-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishStep,\n value,\n });\n break;\n }\n case \"message-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishMessage,\n value,\n });\n break;\n }\n case \"error\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n case \"annotations\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n case \"data\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n case \"update-state\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.AuiUpdateStateOperations,\n value: chunk.operations,\n });\n break;\n }\n\n // TODO ignore for now\n // in the future, we should create a handler that waits for text parts to finish before continuing\n case \"tool-call-args-text-finish\":\n case \"part-finish\":\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n });\n\n return readable\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeThrough(transform)\n .pipeThrough(new DataStreamChunkEncoder())\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst TOOL_CALL_ARGS_CLOSING_CHUNKS = [\n DataStreamStreamChunkType.StartToolCall,\n DataStreamStreamChunkType.ToolCall,\n DataStreamStreamChunkType.TextDelta,\n DataStreamStreamChunkType.ReasoningDelta,\n DataStreamStreamChunkType.Source,\n DataStreamStreamChunkType.Error,\n DataStreamStreamChunkType.FinishStep,\n DataStreamStreamChunkType.FinishMessage,\n DataStreamStreamChunkType.AuiTextDelta,\n DataStreamStreamChunkType.AuiReasoningDelta,\n];\n\nexport class DataStreamDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n const transform = new AssistantTransformStream<DataStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = chunk;\n\n if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n }\n\n switch (type) {\n case DataStreamStreamChunkType.ReasoningDelta:\n controller.appendReasoning(value);\n break;\n\n case DataStreamStreamChunkType.TextDelta:\n controller.appendText(value);\n break;\n\n case DataStreamStreamChunkType.AuiTextDelta:\n controller\n .withParentId(value.parentId)\n .appendText(value.textDelta);\n break;\n\n case DataStreamStreamChunkType.AuiReasoningDelta:\n controller\n .withParentId(value.parentId)\n .appendReasoning(value.reasoningDelta);\n break;\n\n case DataStreamStreamChunkType.StartToolCall: {\n const { toolCallId, toolName, parentId } = value;\n const ctrl = parentId\n ? controller.withParentId(parentId)\n : controller;\n const toolCallController = ctrl.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallArgsTextDelta: {\n const { toolCallId, argsTextDelta } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call with unknown id: \" + toolCallId,\n );\n toolCallController.argsText.append(argsTextDelta);\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallResult: {\n const { toolCallId, artifact, result, isError } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call result with unknown id: \" + toolCallId,\n );\n toolCallController.setResponse({\n artifact,\n result,\n isError,\n });\n break;\n }\n\n case DataStreamStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n\n let toolCallController = toolCallControllers.get(toolCallId);\n if (toolCallController) {\n toolCallController.argsText.close();\n } else {\n toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n args,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n }\n break;\n }\n\n case DataStreamStreamChunkType.FinishMessage:\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.StartStep:\n controller.enqueue({\n type: \"step-start\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.FinishStep:\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n ...value,\n });\n break;\n case DataStreamStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n path: [],\n data: value,\n });\n break;\n\n case DataStreamStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n path: [],\n annotations: value,\n });\n break;\n\n case DataStreamStreamChunkType.Source: {\n const { parentId, ...sourceData } = value;\n const ctrl = parentId\n ? controller.withParentId(parentId)\n : controller;\n ctrl.appendSource({\n type: \"source\",\n ...sourceData,\n });\n break;\n }\n\n case DataStreamStreamChunkType.Error:\n controller.enqueue({\n type: \"error\",\n path: [],\n error: value,\n });\n break;\n\n case DataStreamStreamChunkType.File:\n controller.appendFile({\n type: \"file\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.AuiUpdateStateOperations:\n controller.enqueue({\n type: \"update-state\",\n path: [],\n operations: value,\n });\n break;\n\n case DataStreamStreamChunkType.ReasoningSignature:\n case DataStreamStreamChunkType.RedactedReasoning:\n // ignore these for now\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n toolCallControllers.forEach((controller) => controller.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new DataStreamChunkDecoder())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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","names":["type"]}
@@ -1,4 +1,4 @@
1
- import { JSONSchema7 } from "json-schema";
1
+ import type { JSONSchema7 } from "json-schema";
2
2
  import { DeepPartial, TypeAtPath, TypePath } from "./type-path-utils";
3
3
  import { AsyncIterableStream } from "../../utils";
4
4
  import type { StandardSchemaV1 } from "@standard-schema/spec";
@@ -1 +1 @@
1
- {"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../../../src/core/tool/tool-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../../../src/core/tool/tool-types.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { PipeableTransformStream } from "./PipeableTransformStream";
2
- export declare class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array> {
2
+ export declare class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array<ArrayBuffer>> {
3
3
  static readonly headers: Headers;
4
4
  headers: Headers;
5
5
  constructor();
6
6
  }
7
- export declare class SSEDecoder<T> extends PipeableTransformStream<Uint8Array, T> {
7
+ export declare class SSEDecoder<T> extends PipeableTransformStream<Uint8Array<ArrayBuffer>, T> {
8
8
  constructor();
9
9
  }
10
10
  //# sourceMappingURL=SSE.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SSE.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/SSE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,uBAAuB,CAAC,CAAC,EAAE,UAAU,CAAC;IACvE,MAAM,CAAC,QAAQ,CAAC,OAAO,UAIpB;IAEH,OAAO,UAAsB;;CAe9B;AAoED,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,uBAAuB,CAAC,UAAU,EAAE,CAAC,CAAC;;CAsBxE"}
1
+ {"version":3,"file":"SSE.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/SSE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,uBAAuB,CACxD,CAAC,EACD,UAAU,CAAC,WAAW,CAAC,CACxB;IACC,MAAM,CAAC,QAAQ,CAAC,OAAO,UAIpB;IAEH,OAAO,UAAsB;;CAe9B;AAoED,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,uBAAuB,CACxD,UAAU,CAAC,WAAW,CAAC,EACvB,CAAC,CACF;;CAsBA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/stream/SSE.ts"],"sourcesContent":["import { PipeableTransformStream } from \"./PipeableTransformStream\";\nimport { LineDecoderStream } from \"./LineDecoderStream\";\n\nexport class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array> {\n static readonly headers = new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n headers = SSEEncoder.headers;\n\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(\n new TransformStream<T, string>({\n transform(chunk, controller) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`);\n },\n }),\n )\n .pipeThrough(new TextEncoderStream()),\n );\n }\n}\n\ntype SSEEvent = {\n event: string;\n data: string;\n id?: string | undefined;\n retry?: number | undefined;\n};\n\nclass SSEEventStream extends TransformStream<string, SSEEvent> {\n constructor() {\n let eventBuffer: Partial<SSEEvent> = {};\n let dataLines: string[] = [];\n\n super({\n start() {\n eventBuffer = {};\n dataLines = [];\n },\n transform(line, controller) {\n if (line.startsWith(\":\")) return; // Ignore comments\n\n if (line === \"\") {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n eventBuffer = {};\n dataLines = [];\n return;\n }\n\n const [field, ...rest] = line.split(\":\");\n const value = rest.join(\":\").trimStart();\n\n switch (field) {\n case \"event\":\n eventBuffer.event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n eventBuffer.id = value;\n break;\n case \"retry\":\n eventBuffer.retry = Number(value);\n break;\n }\n },\n flush(controller) {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n },\n });\n }\n}\n\nexport class SSEDecoder<T> extends PipeableTransformStream<Uint8Array, T> {\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new SSEEventStream())\n .pipeThrough(\n new TransformStream<SSEEvent, T>({\n transform(event, controller) {\n switch (event.event) {\n case \"message\":\n controller.enqueue(JSON.parse(event.data));\n break;\n default:\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n },\n }),\n ),\n );\n }\n}\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,yBAAyB;AAE3B,IAAM,aAAN,MAAM,oBAAsB,wBAAuC;AAAA,EACxE,OAAgB,UAAU,IAAI,QAAQ;AAAA,IACpC,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,YAAY;AAAA,EACd,CAAC;AAAA,EAED,UAAU,YAAW;AAAA,EAErB,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG;AAAA,QACC,IAAI,gBAA2B;AAAA,UAC7B,UAAU,OAAO,YAAY;AAC3B,uBAAW,QAAQ,SAAS,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,CAAM;AAAA,UACzD;AAAA,QACF,CAAC;AAAA,MACH,EACC,YAAY,IAAI,kBAAkB,CAAC;AAAA,IACxC;AAAA,EACF;AACF;AASA,IAAM,iBAAN,cAA6B,gBAAkC;AAAA,EAC7D,cAAc;AACZ,QAAI,cAAiC,CAAC;AACtC,QAAI,YAAsB,CAAC;AAE3B,UAAM;AAAA,MACJ,QAAQ;AACN,sBAAc,CAAC;AACf,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY;AAC1B,YAAI,KAAK,WAAW,GAAG,EAAG;AAE1B,YAAI,SAAS,IAAI;AACf,cAAI,UAAU,SAAS,GAAG;AACxB,uBAAW,QAAQ;AAAA,cACjB,OAAO,YAAY,SAAS;AAAA,cAC5B,MAAM,UAAU,KAAK,IAAI;AAAA,cACzB,IAAI,YAAY;AAAA,cAChB,OAAO,YAAY;AAAA,YACrB,CAAC;AAAA,UACH;AACA,wBAAc,CAAC;AACf,sBAAY,CAAC;AACb;AAAA,QACF;AAEA,cAAM,CAAC,OAAO,GAAG,IAAI,IAAI,KAAK,MAAM,GAAG;AACvC,cAAM,QAAQ,KAAK,KAAK,GAAG,EAAE,UAAU;AAEvC,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,wBAAY,QAAQ;AACpB;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,KAAK;AACpB;AAAA,UACF,KAAK;AACH,wBAAY,KAAK;AACjB;AAAA,UACF,KAAK;AACH,wBAAY,QAAQ,OAAO,KAAK;AAChC;AAAA,QACJ;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAChB,YAAI,UAAU,SAAS,GAAG;AACxB,qBAAW,QAAQ;AAAA,YACjB,OAAO,YAAY,SAAS;AAAA,YAC5B,MAAM,UAAU,KAAK,IAAI;AAAA,YACzB,IAAI,YAAY;AAAA,YAChB,OAAO,YAAY;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,aAAN,cAA4B,wBAAuC;AAAA,EACxE,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,eAAe,CAAC,EAChC;AAAA,QACC,IAAI,gBAA6B;AAAA,UAC/B,UAAU,OAAO,YAAY;AAC3B,oBAAQ,MAAM,OAAO;AAAA,cACnB,KAAK;AACH,2BAAW,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;AACzC;AAAA,cACF;AACE,sBAAM,IAAI,MAAM,2BAA2B,MAAM,KAAK,EAAE;AAAA,YAC5D;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/utils/stream/SSE.ts"],"sourcesContent":["import { PipeableTransformStream } from \"./PipeableTransformStream\";\nimport { LineDecoderStream } from \"./LineDecoderStream\";\n\nexport class SSEEncoder<T> extends PipeableTransformStream<\n T,\n Uint8Array<ArrayBuffer>\n> {\n static readonly headers = new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n headers = SSEEncoder.headers;\n\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(\n new TransformStream<T, string>({\n transform(chunk, controller) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`);\n },\n }),\n )\n .pipeThrough(new TextEncoderStream()),\n );\n }\n}\n\ntype SSEEvent = {\n event: string;\n data: string;\n id?: string | undefined;\n retry?: number | undefined;\n};\n\nclass SSEEventStream extends TransformStream<string, SSEEvent> {\n constructor() {\n let eventBuffer: Partial<SSEEvent> = {};\n let dataLines: string[] = [];\n\n super({\n start() {\n eventBuffer = {};\n dataLines = [];\n },\n transform(line, controller) {\n if (line.startsWith(\":\")) return; // Ignore comments\n\n if (line === \"\") {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n eventBuffer = {};\n dataLines = [];\n return;\n }\n\n const [field, ...rest] = line.split(\":\");\n const value = rest.join(\":\").trimStart();\n\n switch (field) {\n case \"event\":\n eventBuffer.event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n eventBuffer.id = value;\n break;\n case \"retry\":\n eventBuffer.retry = Number(value);\n break;\n }\n },\n flush(controller) {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n },\n });\n }\n}\n\nexport class SSEDecoder<T> extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n T\n> {\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new SSEEventStream())\n .pipeThrough(\n new TransformStream<SSEEvent, T>({\n transform(event, controller) {\n switch (event.event) {\n case \"message\":\n controller.enqueue(JSON.parse(event.data));\n break;\n default:\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n },\n }),\n ),\n );\n }\n}\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,yBAAyB;AAE3B,IAAM,aAAN,MAAM,oBAAsB,wBAGjC;AAAA,EACA,OAAgB,UAAU,IAAI,QAAQ;AAAA,IACpC,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,YAAY;AAAA,EACd,CAAC;AAAA,EAED,UAAU,YAAW;AAAA,EAErB,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG;AAAA,QACC,IAAI,gBAA2B;AAAA,UAC7B,UAAU,OAAO,YAAY;AAC3B,uBAAW,QAAQ,SAAS,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,CAAM;AAAA,UACzD;AAAA,QACF,CAAC;AAAA,MACH,EACC,YAAY,IAAI,kBAAkB,CAAC;AAAA,IACxC;AAAA,EACF;AACF;AASA,IAAM,iBAAN,cAA6B,gBAAkC;AAAA,EAC7D,cAAc;AACZ,QAAI,cAAiC,CAAC;AACtC,QAAI,YAAsB,CAAC;AAE3B,UAAM;AAAA,MACJ,QAAQ;AACN,sBAAc,CAAC;AACf,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY;AAC1B,YAAI,KAAK,WAAW,GAAG,EAAG;AAE1B,YAAI,SAAS,IAAI;AACf,cAAI,UAAU,SAAS,GAAG;AACxB,uBAAW,QAAQ;AAAA,cACjB,OAAO,YAAY,SAAS;AAAA,cAC5B,MAAM,UAAU,KAAK,IAAI;AAAA,cACzB,IAAI,YAAY;AAAA,cAChB,OAAO,YAAY;AAAA,YACrB,CAAC;AAAA,UACH;AACA,wBAAc,CAAC;AACf,sBAAY,CAAC;AACb;AAAA,QACF;AAEA,cAAM,CAAC,OAAO,GAAG,IAAI,IAAI,KAAK,MAAM,GAAG;AACvC,cAAM,QAAQ,KAAK,KAAK,GAAG,EAAE,UAAU;AAEvC,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,wBAAY,QAAQ;AACpB;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,KAAK;AACpB;AAAA,UACF,KAAK;AACH,wBAAY,KAAK;AACjB;AAAA,UACF,KAAK;AACH,wBAAY,QAAQ,OAAO,KAAK;AAChC;AAAA,QACJ;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAChB,YAAI,UAAU,SAAS,GAAG;AACxB,qBAAW,QAAQ;AAAA,YACjB,OAAO,YAAY,SAAS;AAAA,YAC5B,MAAM,UAAU,KAAK,IAAI;AAAA,YACzB,IAAI,YAAY;AAAA,YAChB,OAAO,YAAY;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,aAAN,cAA4B,wBAGjC;AAAA,EACA,cAAc;AACZ;AAAA,MAAM,CAAC,aACL,SACG,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,eAAe,CAAC,EAChC;AAAA,QACC,IAAI,gBAA6B;AAAA,UAC/B,UAAU,OAAO,YAAY;AAC3B,oBAAQ,MAAM,OAAO;AAAA,cACnB,KAAK;AACH,2BAAW,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;AACzC;AAAA,cACF;AACE,sBAAM,IAAI,MAAM,2BAA2B,MAAM,KAAK,EAAE;AAAA,YAC5D;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,EACF;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-stream",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -8,10 +8,6 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "default": "./dist/index.js"
10
10
  },
11
- "./ai-sdk": {
12
- "types": "./dist/ai-sdk.d.ts",
13
- "default": "./dist/ai-sdk.js"
14
- },
15
11
  "./utils": {
16
12
  "types": "./dist/utils.d.ts",
17
13
  "default": "./dist/utils.js"
@@ -23,19 +19,16 @@
23
19
  "files": [
24
20
  "dist",
25
21
  "src",
26
- "ai-sdk",
27
22
  "utils",
28
23
  "README.md"
29
24
  ],
30
25
  "sideEffects": false,
31
26
  "devDependencies": {
32
27
  "@standard-schema/spec": "^1.0.0",
33
- "ai": "^4.3.16",
34
- "@types/node": "^24.0.4",
28
+ "@types/node": "^24.3.0",
35
29
  "eslint": "^9",
36
- "eslint-config-next": "15.3.4",
37
- "tsup": "8.5.0",
38
- "tsx": "^4.20.3",
30
+ "eslint-config-next": "15.4.6",
31
+ "tsx": "^4.20.4",
39
32
  "vitest": "^3.2.4",
40
33
  "@assistant-ui/x-buildutils": "0.0.1"
41
34
  },
@@ -3,7 +3,7 @@ import { AssistantStreamChunk } from "./AssistantStreamChunk";
3
3
  export type AssistantStream = ReadableStream<AssistantStreamChunk>;
4
4
 
5
5
  export type AssistantStreamEncoder = ReadableWritablePair<
6
- Uint8Array,
6
+ Uint8Array<ArrayBuffer>,
7
7
  AssistantStreamChunk
8
8
  > & {
9
9
  headers?: Headers;
@@ -18,21 +18,30 @@ export const AssistantStream = {
18
18
 
19
19
  fromResponse(
20
20
  response: Response,
21
- transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,
21
+ transformer: ReadableWritablePair<
22
+ AssistantStreamChunk,
23
+ Uint8Array<ArrayBuffer>
24
+ >,
22
25
  ) {
23
26
  return AssistantStream.fromByteStream(response.body!, transformer);
24
27
  },
25
28
 
26
29
  toByteStream(
27
30
  stream: AssistantStream,
28
- transformer: ReadableWritablePair<Uint8Array, AssistantStreamChunk>,
31
+ transformer: ReadableWritablePair<
32
+ Uint8Array<ArrayBuffer>,
33
+ AssistantStreamChunk
34
+ >,
29
35
  ) {
30
36
  return stream.pipeThrough(transformer);
31
37
  },
32
38
 
33
39
  fromByteStream(
34
- readable: ReadableStream<Uint8Array>,
35
- transformer: ReadableWritablePair<AssistantStreamChunk, Uint8Array>,
40
+ readable: ReadableStream<Uint8Array<ArrayBuffer>>,
41
+ transformer: ReadableWritablePair<
42
+ AssistantStreamChunk,
43
+ Uint8Array<ArrayBuffer>
44
+ >,
36
45
  ) {
37
46
  return readable.pipeThrough(transformer);
38
47
  },
@@ -54,7 +54,7 @@ export class ObjectStreamEncoder extends PipeableTransformStream<
54
54
  }
55
55
 
56
56
  export class ObjectStreamDecoder extends PipeableTransformStream<
57
- Uint8Array,
57
+ Uint8Array<ArrayBuffer>,
58
58
  ObjectStreamChunk
59
59
  > {
60
60
  constructor() {
@@ -4,7 +4,7 @@ import { AssistantTransformStream } from "../utils/stream/AssistantTransformStre
4
4
  import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream";
5
5
 
6
6
  export class PlainTextEncoder
7
- extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>
7
+ extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>
8
8
  implements AssistantStreamEncoder
9
9
  {
10
10
  headers = new Headers({
@@ -52,7 +52,7 @@ export class PlainTextEncoder
52
52
  }
53
53
 
54
54
  export class PlainTextDecoder extends PipeableTransformStream<
55
- Uint8Array,
55
+ Uint8Array<ArrayBuffer>,
56
56
  AssistantStreamChunk
57
57
  > {
58
58
  constructor() {
@@ -16,7 +16,7 @@ import { TextStreamController } from "../../modules/text";
16
16
  import { AssistantStreamEncoder } from "../../AssistantStream";
17
17
 
18
18
  export class DataStreamEncoder
19
- extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>
19
+ extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>
20
20
  implements AssistantStreamEncoder
21
21
  {
22
22
  headers = new Headers({
@@ -215,7 +215,7 @@ const TOOL_CALL_ARGS_CLOSING_CHUNKS = [
215
215
  ];
216
216
 
217
217
  export class DataStreamDecoder extends PipeableTransformStream<
218
- Uint8Array,
218
+ Uint8Array<ArrayBuffer>,
219
219
  AssistantStreamChunk
220
220
  > {
221
221
  constructor() {
@@ -1,4 +1,4 @@
1
- import { JSONSchema7 } from "json-schema";
1
+ import type { JSONSchema7 } from "json-schema";
2
2
  import { DeepPartial, TypeAtPath, TypePath } from "./type-path-utils";
3
3
  import { AsyncIterableStream } from "../../utils";
4
4
  import type { StandardSchemaV1 } from "@standard-schema/spec";
@@ -1,7 +1,10 @@
1
1
  import { PipeableTransformStream } from "./PipeableTransformStream";
2
2
  import { LineDecoderStream } from "./LineDecoderStream";
3
3
 
4
- export class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array> {
4
+ export class SSEEncoder<T> extends PipeableTransformStream<
5
+ T,
6
+ Uint8Array<ArrayBuffer>
7
+ > {
5
8
  static readonly headers = new Headers({
6
9
  "Content-Type": "text/event-stream",
7
10
  "Cache-Control": "no-cache",
@@ -91,7 +94,10 @@ class SSEEventStream extends TransformStream<string, SSEEvent> {
91
94
  }
92
95
  }
93
96
 
94
- export class SSEDecoder<T> extends PipeableTransformStream<Uint8Array, T> {
97
+ export class SSEDecoder<T> extends PipeableTransformStream<
98
+ Uint8Array<ArrayBuffer>,
99
+ T
100
+ > {
95
101
  constructor() {
96
102
  super((readable) =>
97
103
  readable
package/utils/README.md CHANGED
@@ -1 +1 @@
1
- This directory exists to support subpath imports for TypeScript projects using --moduleResolution node.
1
+ This directory exists to support subpath imports for TypeScript projects using --moduleResolution node.
package/ai-sdk/README.md DELETED
@@ -1 +0,0 @@
1
- This directory exists to support subpath imports for TypeScript projects using --moduleResolution node.
@@ -1,5 +0,0 @@
1
- {
2
- "type": "module",
3
- "main": "../dist/ai-sdk.js",
4
- "types": "../dist/ai-sdk.d.ts"
5
- }
@@ -1,5 +0,0 @@
1
- import type { TextStreamPart, ObjectStreamPart, Tool } from "ai";
2
- import { AssistantStream } from "../core/AssistantStream";
3
- export declare const fromStreamText: (stream: ReadableStream<TextStreamPart<Record<string, Tool>>>) => AssistantStream;
4
- export declare const fromStreamObject: (stream: ReadableStream<ObjectStreamPart<unknown>>, toolName: string) => AssistantStream;
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK1D,eAAO,MAAM,cAAc,GACzB,QAAQ,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAC3D,eAmJF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EACjD,UAAU,MAAM,KACf,eA2CF,CAAC"}
@@ -1,173 +0,0 @@
1
- // src/ai-sdk/index.ts
2
- import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream.js";
3
- var fromStreamText = (stream) => {
4
- const toolControllers = /* @__PURE__ */ new Map();
5
- let currentToolCallArgsText;
6
- const endCurrentToolCallArgsText = () => {
7
- if (!currentToolCallArgsText) return;
8
- currentToolCallArgsText.argsText.close();
9
- currentToolCallArgsText = void 0;
10
- };
11
- const transformer = new AssistantTransformStream({
12
- transform(chunk, controller) {
13
- const { type } = chunk;
14
- if (type !== "tool-call-delta" && type !== "tool-call" && type !== "error" && type !== "tool-result") {
15
- endCurrentToolCallArgsText();
16
- }
17
- switch (type) {
18
- case "text-delta": {
19
- const { textDelta } = chunk;
20
- controller.appendText(textDelta);
21
- break;
22
- }
23
- case "reasoning": {
24
- const { textDelta } = chunk;
25
- controller.appendReasoning(textDelta);
26
- break;
27
- }
28
- case "tool-call-streaming-start": {
29
- const { toolCallId, toolName } = chunk;
30
- currentToolCallArgsText = controller.addToolCallPart({
31
- toolCallId,
32
- toolName
33
- });
34
- toolControllers.set(toolCallId, currentToolCallArgsText);
35
- break;
36
- }
37
- case "tool-call-delta": {
38
- const { toolCallId, argsTextDelta } = chunk;
39
- const toolController = toolControllers.get(toolCallId);
40
- if (!toolController) throw new Error("Tool call not found");
41
- toolController.argsText.append(argsTextDelta);
42
- break;
43
- }
44
- case "tool-result": {
45
- const { toolCallId, result } = chunk;
46
- const toolController = toolControllers.get(toolCallId);
47
- if (!toolController) throw new Error("Tool call not found");
48
- toolController.setResponse({
49
- result
50
- });
51
- toolController.close();
52
- toolControllers.delete(toolCallId);
53
- break;
54
- }
55
- case "tool-call": {
56
- const { toolCallId, toolName, args } = chunk;
57
- const toolController = controller.addToolCallPart({
58
- toolCallId,
59
- toolName
60
- });
61
- toolController.argsText.append(JSON.stringify(args));
62
- toolController.argsText.close();
63
- toolControllers.set(toolCallId, toolController);
64
- break;
65
- }
66
- case "step-start":
67
- controller.enqueue({
68
- type: "step-start",
69
- path: [],
70
- messageId: chunk.messageId
71
- });
72
- break;
73
- case "step-finish":
74
- controller.enqueue({
75
- type: "step-finish",
76
- path: [],
77
- finishReason: chunk.finishReason,
78
- usage: chunk.usage,
79
- isContinued: chunk.isContinued
80
- });
81
- break;
82
- case "error":
83
- controller.enqueue({
84
- type: "error",
85
- path: [],
86
- error: String(chunk.error)
87
- });
88
- break;
89
- case "finish": {
90
- controller.enqueue({
91
- type: "message-finish",
92
- path: [],
93
- finishReason: chunk.finishReason,
94
- usage: chunk.usage
95
- });
96
- break;
97
- }
98
- case "source":
99
- controller.appendSource({
100
- type: "source",
101
- ...chunk.source
102
- });
103
- break;
104
- case "file":
105
- controller.appendFile({
106
- type: "file",
107
- mimeType: chunk.mimeType,
108
- data: chunk.base64
109
- });
110
- break;
111
- case "reasoning-signature":
112
- case "redacted-reasoning":
113
- break;
114
- default: {
115
- const unhandledType = type;
116
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
117
- }
118
- }
119
- },
120
- flush() {
121
- for (const toolController of toolControllers.values()) {
122
- toolController.close();
123
- }
124
- toolControllers.clear();
125
- }
126
- });
127
- return stream.pipeThrough(transformer);
128
- };
129
- var fromStreamObject = (stream, toolName) => {
130
- let toolCall;
131
- const transformer = new AssistantTransformStream({
132
- start(controller) {
133
- toolCall = controller.addToolCallPart(toolName);
134
- },
135
- transform(chunk, controller) {
136
- const { type } = chunk;
137
- switch (type) {
138
- case "text-delta": {
139
- const { textDelta } = chunk;
140
- toolCall.argsText.append(textDelta);
141
- break;
142
- }
143
- case "finish": {
144
- toolCall.argsText.close();
145
- toolCall.setResponse({
146
- result: "{}"
147
- });
148
- break;
149
- }
150
- case "object":
151
- break;
152
- case "error": {
153
- controller.enqueue({
154
- type: "error",
155
- path: [],
156
- error: String(chunk.error)
157
- });
158
- break;
159
- }
160
- default: {
161
- const unhandledType = type;
162
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
163
- }
164
- }
165
- }
166
- });
167
- return stream.pipeThrough(transformer);
168
- };
169
- export {
170
- fromStreamObject,
171
- fromStreamText
172
- };
173
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ai-sdk/index.ts"],"sourcesContent":["import type { TextStreamPart, ObjectStreamPart, Tool } from \"ai\";\nimport { AssistantStream } from \"../core/AssistantStream\";\nimport { AssistantTransformStream } from \"../core/utils/stream/AssistantTransformStream\";\nimport { ToolCallStreamController } from \"../core/modules/tool-call\";\nimport { ReadonlyJSONValue } from \"../utils/json/json-value\";\n\nexport const fromStreamText = (\n stream: ReadableStream<TextStreamPart<Record<string, Tool>>>,\n): AssistantStream => {\n const toolControllers = new Map<string, ToolCallStreamController>();\n let currentToolCallArgsText: ToolCallStreamController | undefined;\n\n const endCurrentToolCallArgsText = () => {\n if (!currentToolCallArgsText) return;\n currentToolCallArgsText.argsText.close();\n currentToolCallArgsText = undefined;\n };\n\n const transformer = new AssistantTransformStream<\n TextStreamPart<Record<string, Tool>>\n >({\n transform(chunk, controller) {\n const { type } = chunk;\n\n if (\n type !== \"tool-call-delta\" &&\n type !== \"tool-call\" &&\n type !== \"error\" &&\n (type as string) !== \"tool-result\"\n ) {\n endCurrentToolCallArgsText();\n }\n\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n controller.appendText(textDelta);\n break;\n }\n case \"reasoning\": {\n const { textDelta } = chunk;\n controller.appendReasoning(textDelta);\n break;\n }\n case \"tool-call-streaming-start\": {\n const { toolCallId, toolName } = chunk;\n currentToolCallArgsText = controller.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolControllers.set(toolCallId, currentToolCallArgsText);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, argsTextDelta } = chunk;\n const toolController = toolControllers.get(toolCallId);\n if (!toolController) throw new Error(\"Tool call not found\");\n toolController.argsText.append(argsTextDelta);\n break;\n }\n case \"tool-result\" as string: {\n const { toolCallId, result } = chunk as unknown as {\n toolCallId: string;\n result: ReadonlyJSONValue;\n };\n const toolController = toolControllers.get(toolCallId);\n if (!toolController) throw new Error(\"Tool call not found\");\n toolController.setResponse({\n result,\n });\n toolController.close();\n toolControllers.delete(toolCallId);\n break;\n }\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n const toolController = controller.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolController.argsText.append(JSON.stringify(args));\n toolController.argsText.close();\n toolControllers.set(toolCallId, toolController);\n break;\n }\n\n case \"step-start\":\n controller.enqueue({\n type: \"step-start\",\n path: [],\n messageId: chunk.messageId,\n });\n break;\n case \"step-finish\":\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n isContinued: chunk.isContinued,\n });\n break;\n case \"error\":\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(chunk.error),\n });\n break;\n\n case \"finish\": {\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n });\n break;\n }\n\n case \"source\":\n controller.appendSource({\n type: \"source\",\n ...chunk.source,\n });\n break;\n\n case \"file\":\n controller.appendFile({\n type: \"file\",\n mimeType: chunk.mimeType,\n data: chunk.base64,\n });\n break;\n\n case \"reasoning-signature\":\n case \"redacted-reasoning\":\n // ignore these for now\n break;\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush() {\n for (const toolController of toolControllers.values()) {\n toolController.close();\n }\n toolControllers.clear();\n },\n });\n\n return stream.pipeThrough(transformer);\n};\n\nexport const fromStreamObject = (\n stream: ReadableStream<ObjectStreamPart<unknown>>,\n toolName: string,\n): AssistantStream => {\n let toolCall!: ToolCallStreamController;\n const transformer = new AssistantTransformStream<ObjectStreamPart<unknown>>({\n start(controller) {\n toolCall = controller.addToolCallPart(toolName);\n },\n transform(chunk, controller) {\n const { type } = chunk;\n switch (type) {\n case \"text-delta\": {\n const { textDelta } = chunk;\n toolCall.argsText.append(textDelta);\n break;\n }\n case \"finish\": {\n toolCall.argsText.close();\n toolCall.setResponse({\n result: \"{}\",\n });\n break;\n }\n\n case \"object\":\n break;\n\n case \"error\": {\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(chunk.error),\n });\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 stream.pipeThrough(transformer);\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +0,0 @@
1
- import type { LanguageModelV1StreamPart } from "ai";
2
- import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream";
3
- export declare class LanguageModelV1StreamDecoder extends AssistantTransformStream<LanguageModelV1StreamPart> {
4
- constructor();
5
- }
6
- //# sourceMappingURL=language-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-model.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/language-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAOzF,qBAAa,4BAA6B,SAAQ,wBAAwB,CAAC,yBAAyB,CAAC;;CAiHpG"}
@@ -1,106 +0,0 @@
1
- // src/ai-sdk/language-model.ts
2
- import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream.js";
3
- function bufferToBase64(buffer) {
4
- return btoa(String.fromCharCode(...buffer));
5
- }
6
- var LanguageModelV1StreamDecoder = class extends AssistantTransformStream {
7
- constructor() {
8
- let currentToolCall;
9
- const endCurrentToolCall = () => {
10
- if (!currentToolCall) return;
11
- currentToolCall.controller.argsText.close();
12
- currentToolCall.controller.close();
13
- currentToolCall = void 0;
14
- };
15
- super({
16
- transform(chunk, controller) {
17
- const { type } = chunk;
18
- if (type === "text-delta" || type === "reasoning") {
19
- endCurrentToolCall();
20
- }
21
- switch (type) {
22
- case "text-delta": {
23
- controller.appendText(chunk.textDelta);
24
- break;
25
- }
26
- case "reasoning": {
27
- controller.appendReasoning(chunk.textDelta);
28
- break;
29
- }
30
- case "source": {
31
- controller.appendSource({
32
- type: "source",
33
- ...chunk.source
34
- });
35
- break;
36
- }
37
- case "file": {
38
- controller.appendFile({
39
- type: "file",
40
- mimeType: chunk.mimeType,
41
- data: typeof chunk.data === "string" ? chunk.data : bufferToBase64(chunk.data)
42
- });
43
- break;
44
- }
45
- case "tool-call-delta": {
46
- const { toolCallId, toolName, argsTextDelta } = chunk;
47
- if (currentToolCall?.toolCallId === toolCallId) {
48
- currentToolCall.controller.argsText.append(argsTextDelta);
49
- } else {
50
- endCurrentToolCall();
51
- currentToolCall = {
52
- toolCallId,
53
- controller: controller.addToolCallPart({
54
- toolCallId,
55
- toolName
56
- })
57
- };
58
- currentToolCall.controller.argsText.append(argsTextDelta);
59
- }
60
- break;
61
- }
62
- case "tool-call": {
63
- const { toolCallId, toolName, args } = chunk;
64
- if (currentToolCall?.toolCallId === toolCallId) {
65
- currentToolCall.controller.argsText.close();
66
- } else {
67
- const toolController = controller.addToolCallPart({
68
- toolCallId,
69
- toolName,
70
- argsText: args
71
- });
72
- toolController.close();
73
- }
74
- break;
75
- }
76
- case "finish": {
77
- controller.enqueue({
78
- type: "message-finish",
79
- finishReason: chunk.finishReason,
80
- usage: chunk.usage,
81
- path: []
82
- });
83
- controller.close();
84
- break;
85
- }
86
- case "error":
87
- case "response-metadata":
88
- case "reasoning-signature":
89
- case "redacted-reasoning":
90
- break;
91
- default: {
92
- const unhandledType = type;
93
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
94
- }
95
- }
96
- },
97
- flush() {
98
- endCurrentToolCall();
99
- }
100
- });
101
- }
102
- };
103
- export {
104
- LanguageModelV1StreamDecoder
105
- };
106
- //# sourceMappingURL=language-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ai-sdk/language-model.ts"],"sourcesContent":["import type { LanguageModelV1StreamPart } from \"ai\";\nimport { AssistantTransformStream } from \"../core/utils/stream/AssistantTransformStream\";\nimport { ToolCallStreamController } from \"../core/modules/tool-call\";\n\nfunction bufferToBase64(buffer: Uint8Array) {\n return btoa(String.fromCharCode(...buffer));\n}\n\nexport class LanguageModelV1StreamDecoder extends AssistantTransformStream<LanguageModelV1StreamPart> {\n constructor() {\n let currentToolCall:\n | { toolCallId: string; controller: ToolCallStreamController }\n | undefined;\n\n const endCurrentToolCall = () => {\n if (!currentToolCall) return;\n currentToolCall.controller.argsText.close();\n currentToolCall.controller.close();\n currentToolCall = undefined;\n };\n\n super({\n transform(chunk, controller) {\n const { type } = chunk;\n if (type === \"text-delta\" || type === \"reasoning\") {\n endCurrentToolCall();\n }\n\n switch (type) {\n case \"text-delta\": {\n controller.appendText(chunk.textDelta);\n break;\n }\n case \"reasoning\": {\n controller.appendReasoning(chunk.textDelta);\n break;\n }\n\n case \"source\": {\n controller.appendSource({\n type: \"source\",\n ...chunk.source,\n });\n break;\n }\n\n case \"file\": {\n controller.appendFile({\n type: \"file\",\n mimeType: chunk.mimeType,\n data:\n typeof chunk.data === \"string\"\n ? chunk.data\n : bufferToBase64(chunk.data),\n });\n break;\n }\n\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n if (currentToolCall?.toolCallId === toolCallId) {\n currentToolCall.controller.argsText.append(argsTextDelta);\n } else {\n endCurrentToolCall();\n currentToolCall = {\n toolCallId,\n controller: controller.addToolCallPart({\n toolCallId,\n toolName,\n }),\n };\n currentToolCall.controller.argsText.append(argsTextDelta);\n }\n\n break;\n }\n\n case \"tool-call\": {\n const { toolCallId, toolName, args } = chunk;\n\n if (currentToolCall?.toolCallId === toolCallId) {\n currentToolCall.controller.argsText.close();\n } else {\n const toolController = controller.addToolCallPart({\n toolCallId,\n toolName,\n argsText: args,\n });\n toolController.close();\n }\n\n break;\n }\n case \"finish\": {\n controller.enqueue({\n type: \"message-finish\",\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n path: [],\n });\n controller.close();\n break;\n }\n\n case \"error\":\n case \"response-metadata\":\n case \"reasoning-signature\":\n case \"redacted-reasoning\":\n break;\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush() {\n endCurrentToolCall();\n },\n });\n }\n}\n"],"mappings":";AACA,SAAS,gCAAgC;AAGzC,SAAS,eAAe,QAAoB;AAC1C,SAAO,KAAK,OAAO,aAAa,GAAG,MAAM,CAAC;AAC5C;AAEO,IAAM,+BAAN,cAA2C,yBAAoD;AAAA,EACpG,cAAc;AACZ,QAAI;AAIJ,UAAM,qBAAqB,MAAM;AAC/B,UAAI,CAAC,gBAAiB;AACtB,sBAAgB,WAAW,SAAS,MAAM;AAC1C,sBAAgB,WAAW,MAAM;AACjC,wBAAkB;AAAA,IACpB;AAEA,UAAM;AAAA,MACJ,UAAU,OAAO,YAAY;AAC3B,cAAM,EAAE,KAAK,IAAI;AACjB,YAAI,SAAS,gBAAgB,SAAS,aAAa;AACjD,6BAAmB;AAAA,QACrB;AAEA,gBAAQ,MAAM;AAAA,UACZ,KAAK,cAAc;AACjB,uBAAW,WAAW,MAAM,SAAS;AACrC;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAChB,uBAAW,gBAAgB,MAAM,SAAS;AAC1C;AAAA,UACF;AAAA,UAEA,KAAK,UAAU;AACb,uBAAW,aAAa;AAAA,cACtB,MAAM;AAAA,cACN,GAAG,MAAM;AAAA,YACX,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,QAAQ;AACX,uBAAW,WAAW;AAAA,cACpB,MAAM;AAAA,cACN,UAAU,MAAM;AAAA,cAChB,MACE,OAAO,MAAM,SAAS,WAClB,MAAM,OACN,eAAe,MAAM,IAAI;AAAA,YACjC,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,mBAAmB;AACtB,kBAAM,EAAE,YAAY,UAAU,cAAc,IAAI;AAChD,gBAAI,iBAAiB,eAAe,YAAY;AAC9C,8BAAgB,WAAW,SAAS,OAAO,aAAa;AAAA,YAC1D,OAAO;AACL,iCAAmB;AACnB,gCAAkB;AAAA,gBAChB;AAAA,gBACA,YAAY,WAAW,gBAAgB;AAAA,kBACrC;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH;AACA,8BAAgB,WAAW,SAAS,OAAO,aAAa;AAAA,YAC1D;AAEA;AAAA,UACF;AAAA,UAEA,KAAK,aAAa;AAChB,kBAAM,EAAE,YAAY,UAAU,KAAK,IAAI;AAEvC,gBAAI,iBAAiB,eAAe,YAAY;AAC9C,8BAAgB,WAAW,SAAS,MAAM;AAAA,YAC5C,OAAO;AACL,oBAAM,iBAAiB,WAAW,gBAAgB;AAAA,gBAChD;AAAA,gBACA;AAAA,gBACA,UAAU;AAAA,cACZ,CAAC;AACD,6BAAe,MAAM;AAAA,YACvB;AAEA;AAAA,UACF;AAAA,UACA,KAAK,UAAU;AACb,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,cAAc,MAAM;AAAA,cACpB,OAAO,MAAM;AAAA,cACb,MAAM,CAAC;AAAA,YACT,CAAC;AACD,uBAAW,MAAM;AACjB;AAAA,UACF;AAAA,UAEA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH;AAAA,UAEF,SAAS;AACP,kBAAM,gBAAuB;AAC7B,kBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AACN,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
package/dist/ai-sdk.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from "./ai-sdk/index";
2
- export { LanguageModelV1StreamDecoder } from "./ai-sdk/language-model";
3
- //# sourceMappingURL=ai-sdk.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-sdk.d.ts","sourceRoot":"","sources":["../src/ai-sdk.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/ai-sdk.js DELETED
@@ -1,7 +0,0 @@
1
- // src/ai-sdk.ts
2
- export * from "./ai-sdk/index.js";
3
- import { LanguageModelV1StreamDecoder } from "./ai-sdk/language-model.js";
4
- export {
5
- LanguageModelV1StreamDecoder
6
- };
7
- //# sourceMappingURL=ai-sdk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ai-sdk.ts"],"sourcesContent":["export * from \"./ai-sdk/index\";\nexport { LanguageModelV1StreamDecoder } from \"./ai-sdk/language-model\";\n"],"mappings":";AAAA,cAAc;AACd,SAAS,oCAAoC;","names":[]}
@@ -1,204 +0,0 @@
1
- import type { TextStreamPart, ObjectStreamPart, Tool } from "ai";
2
- import { AssistantStream } from "../core/AssistantStream";
3
- import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream";
4
- import { ToolCallStreamController } from "../core/modules/tool-call";
5
- import { ReadonlyJSONValue } from "../utils/json/json-value";
6
-
7
- export const fromStreamText = (
8
- stream: ReadableStream<TextStreamPart<Record<string, Tool>>>,
9
- ): AssistantStream => {
10
- const toolControllers = new Map<string, ToolCallStreamController>();
11
- let currentToolCallArgsText: ToolCallStreamController | undefined;
12
-
13
- const endCurrentToolCallArgsText = () => {
14
- if (!currentToolCallArgsText) return;
15
- currentToolCallArgsText.argsText.close();
16
- currentToolCallArgsText = undefined;
17
- };
18
-
19
- const transformer = new AssistantTransformStream<
20
- TextStreamPart<Record<string, Tool>>
21
- >({
22
- transform(chunk, controller) {
23
- const { type } = chunk;
24
-
25
- if (
26
- type !== "tool-call-delta" &&
27
- type !== "tool-call" &&
28
- type !== "error" &&
29
- (type as string) !== "tool-result"
30
- ) {
31
- endCurrentToolCallArgsText();
32
- }
33
-
34
- switch (type) {
35
- case "text-delta": {
36
- const { textDelta } = chunk;
37
- controller.appendText(textDelta);
38
- break;
39
- }
40
- case "reasoning": {
41
- const { textDelta } = chunk;
42
- controller.appendReasoning(textDelta);
43
- break;
44
- }
45
- case "tool-call-streaming-start": {
46
- const { toolCallId, toolName } = chunk;
47
- currentToolCallArgsText = controller.addToolCallPart({
48
- toolCallId,
49
- toolName,
50
- });
51
- toolControllers.set(toolCallId, currentToolCallArgsText);
52
- break;
53
- }
54
- case "tool-call-delta": {
55
- const { toolCallId, argsTextDelta } = chunk;
56
- const toolController = toolControllers.get(toolCallId);
57
- if (!toolController) throw new Error("Tool call not found");
58
- toolController.argsText.append(argsTextDelta);
59
- break;
60
- }
61
- case "tool-result" as string: {
62
- const { toolCallId, result } = chunk as unknown as {
63
- toolCallId: string;
64
- result: ReadonlyJSONValue;
65
- };
66
- const toolController = toolControllers.get(toolCallId);
67
- if (!toolController) throw new Error("Tool call not found");
68
- toolController.setResponse({
69
- result,
70
- });
71
- toolController.close();
72
- toolControllers.delete(toolCallId);
73
- break;
74
- }
75
- case "tool-call": {
76
- const { toolCallId, toolName, args } = chunk;
77
- const toolController = controller.addToolCallPart({
78
- toolCallId,
79
- toolName,
80
- });
81
- toolController.argsText.append(JSON.stringify(args));
82
- toolController.argsText.close();
83
- toolControllers.set(toolCallId, toolController);
84
- break;
85
- }
86
-
87
- case "step-start":
88
- controller.enqueue({
89
- type: "step-start",
90
- path: [],
91
- messageId: chunk.messageId,
92
- });
93
- break;
94
- case "step-finish":
95
- controller.enqueue({
96
- type: "step-finish",
97
- path: [],
98
- finishReason: chunk.finishReason,
99
- usage: chunk.usage,
100
- isContinued: chunk.isContinued,
101
- });
102
- break;
103
- case "error":
104
- controller.enqueue({
105
- type: "error",
106
- path: [],
107
- error: String(chunk.error),
108
- });
109
- break;
110
-
111
- case "finish": {
112
- controller.enqueue({
113
- type: "message-finish",
114
- path: [],
115
- finishReason: chunk.finishReason,
116
- usage: chunk.usage,
117
- });
118
- break;
119
- }
120
-
121
- case "source":
122
- controller.appendSource({
123
- type: "source",
124
- ...chunk.source,
125
- });
126
- break;
127
-
128
- case "file":
129
- controller.appendFile({
130
- type: "file",
131
- mimeType: chunk.mimeType,
132
- data: chunk.base64,
133
- });
134
- break;
135
-
136
- case "reasoning-signature":
137
- case "redacted-reasoning":
138
- // ignore these for now
139
- break;
140
-
141
- default: {
142
- const unhandledType: never = type;
143
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
144
- }
145
- }
146
- },
147
- flush() {
148
- for (const toolController of toolControllers.values()) {
149
- toolController.close();
150
- }
151
- toolControllers.clear();
152
- },
153
- });
154
-
155
- return stream.pipeThrough(transformer);
156
- };
157
-
158
- export const fromStreamObject = (
159
- stream: ReadableStream<ObjectStreamPart<unknown>>,
160
- toolName: string,
161
- ): AssistantStream => {
162
- let toolCall!: ToolCallStreamController;
163
- const transformer = new AssistantTransformStream<ObjectStreamPart<unknown>>({
164
- start(controller) {
165
- toolCall = controller.addToolCallPart(toolName);
166
- },
167
- transform(chunk, controller) {
168
- const { type } = chunk;
169
- switch (type) {
170
- case "text-delta": {
171
- const { textDelta } = chunk;
172
- toolCall.argsText.append(textDelta);
173
- break;
174
- }
175
- case "finish": {
176
- toolCall.argsText.close();
177
- toolCall.setResponse({
178
- result: "{}",
179
- });
180
- break;
181
- }
182
-
183
- case "object":
184
- break;
185
-
186
- case "error": {
187
- controller.enqueue({
188
- type: "error",
189
- path: [],
190
- error: String(chunk.error),
191
- });
192
- break;
193
- }
194
-
195
- default: {
196
- const unhandledType: never = type;
197
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
198
- }
199
- }
200
- },
201
- });
202
-
203
- return stream.pipeThrough(transformer);
204
- };
@@ -1,122 +0,0 @@
1
- import type { LanguageModelV1StreamPart } from "ai";
2
- import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream";
3
- import { ToolCallStreamController } from "../core/modules/tool-call";
4
-
5
- function bufferToBase64(buffer: Uint8Array) {
6
- return btoa(String.fromCharCode(...buffer));
7
- }
8
-
9
- export class LanguageModelV1StreamDecoder extends AssistantTransformStream<LanguageModelV1StreamPart> {
10
- constructor() {
11
- let currentToolCall:
12
- | { toolCallId: string; controller: ToolCallStreamController }
13
- | undefined;
14
-
15
- const endCurrentToolCall = () => {
16
- if (!currentToolCall) return;
17
- currentToolCall.controller.argsText.close();
18
- currentToolCall.controller.close();
19
- currentToolCall = undefined;
20
- };
21
-
22
- super({
23
- transform(chunk, controller) {
24
- const { type } = chunk;
25
- if (type === "text-delta" || type === "reasoning") {
26
- endCurrentToolCall();
27
- }
28
-
29
- switch (type) {
30
- case "text-delta": {
31
- controller.appendText(chunk.textDelta);
32
- break;
33
- }
34
- case "reasoning": {
35
- controller.appendReasoning(chunk.textDelta);
36
- break;
37
- }
38
-
39
- case "source": {
40
- controller.appendSource({
41
- type: "source",
42
- ...chunk.source,
43
- });
44
- break;
45
- }
46
-
47
- case "file": {
48
- controller.appendFile({
49
- type: "file",
50
- mimeType: chunk.mimeType,
51
- data:
52
- typeof chunk.data === "string"
53
- ? chunk.data
54
- : bufferToBase64(chunk.data),
55
- });
56
- break;
57
- }
58
-
59
- case "tool-call-delta": {
60
- const { toolCallId, toolName, argsTextDelta } = chunk;
61
- if (currentToolCall?.toolCallId === toolCallId) {
62
- currentToolCall.controller.argsText.append(argsTextDelta);
63
- } else {
64
- endCurrentToolCall();
65
- currentToolCall = {
66
- toolCallId,
67
- controller: controller.addToolCallPart({
68
- toolCallId,
69
- toolName,
70
- }),
71
- };
72
- currentToolCall.controller.argsText.append(argsTextDelta);
73
- }
74
-
75
- break;
76
- }
77
-
78
- case "tool-call": {
79
- const { toolCallId, toolName, args } = chunk;
80
-
81
- if (currentToolCall?.toolCallId === toolCallId) {
82
- currentToolCall.controller.argsText.close();
83
- } else {
84
- const toolController = controller.addToolCallPart({
85
- toolCallId,
86
- toolName,
87
- argsText: args,
88
- });
89
- toolController.close();
90
- }
91
-
92
- break;
93
- }
94
- case "finish": {
95
- controller.enqueue({
96
- type: "message-finish",
97
- finishReason: chunk.finishReason,
98
- usage: chunk.usage,
99
- path: [],
100
- });
101
- controller.close();
102
- break;
103
- }
104
-
105
- case "error":
106
- case "response-metadata":
107
- case "reasoning-signature":
108
- case "redacted-reasoning":
109
- break;
110
-
111
- default: {
112
- const unhandledType: never = type;
113
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
114
- }
115
- }
116
- },
117
- flush() {
118
- endCurrentToolCall();
119
- },
120
- });
121
- }
122
- }
package/src/ai-sdk.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "./ai-sdk/index";
2
- export { LanguageModelV1StreamDecoder } from "./ai-sdk/language-model";