assistant-stream 0.2.45 → 0.2.47

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 (183) hide show
  1. package/dist/core/AssistantStream.d.ts +1 -1
  2. package/dist/core/AssistantStream.d.ts.map +1 -1
  3. package/dist/core/AssistantStream.js +15 -19
  4. package/dist/core/AssistantStream.js.map +1 -1
  5. package/dist/core/AssistantStreamChunk.d.ts +2 -2
  6. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  7. package/dist/core/AssistantStreamChunk.js +1 -0
  8. package/dist/core/AssistantStreamChunk.js.map +1 -1
  9. package/dist/core/accumulators/AssistantMessageStream.d.ts +2 -2
  10. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
  11. package/dist/core/accumulators/AssistantMessageStream.js +45 -50
  12. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
  13. package/dist/core/accumulators/assistant-message-accumulator.d.ts +3 -3
  14. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  15. package/dist/core/accumulators/assistant-message-accumulator.js +339 -329
  16. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  17. package/dist/core/index.d.ts +17 -16
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +10 -44
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/modules/assistant-stream.d.ts +7 -7
  22. package/dist/core/modules/assistant-stream.d.ts.map +1 -1
  23. package/dist/core/modules/assistant-stream.js +159 -188
  24. package/dist/core/modules/assistant-stream.js.map +1 -1
  25. package/dist/core/modules/text.d.ts +2 -2
  26. package/dist/core/modules/text.d.ts.map +1 -1
  27. package/dist/core/modules/text.js +43 -47
  28. package/dist/core/modules/text.js.map +1 -1
  29. package/dist/core/modules/tool-call.d.ts +5 -5
  30. package/dist/core/modules/tool-call.d.ts.map +1 -1
  31. package/dist/core/modules/tool-call.js +88 -89
  32. package/dist/core/modules/tool-call.js.map +1 -1
  33. package/dist/core/object/ObjectStreamAccumulator.d.ts +2 -2
  34. package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
  35. package/dist/core/object/ObjectStreamAccumulator.js +49 -58
  36. package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
  37. package/dist/core/object/ObjectStreamResponse.d.ts +2 -2
  38. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  39. package/dist/core/object/ObjectStreamResponse.js +70 -74
  40. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  41. package/dist/core/object/createObjectStream.d.ts +2 -2
  42. package/dist/core/object/createObjectStream.d.ts.map +1 -1
  43. package/dist/core/object/createObjectStream.js +45 -56
  44. package/dist/core/object/createObjectStream.js.map +1 -1
  45. package/dist/core/object/types.d.ts +1 -1
  46. package/dist/core/object/types.d.ts.map +1 -1
  47. package/dist/core/object/types.js +1 -0
  48. package/dist/core/object/types.js.map +1 -1
  49. package/dist/core/serialization/PlainText.d.ts +3 -3
  50. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  51. package/dist/core/serialization/PlainText.js +46 -47
  52. package/dist/core/serialization/PlainText.js.map +1 -1
  53. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +3 -3
  54. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
  55. package/dist/core/serialization/assistant-transport/AssistantTransport.js +117 -112
  56. package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
  57. package/dist/core/serialization/data-stream/DataStream.d.ts +3 -3
  58. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  59. package/dist/core/serialization/data-stream/DataStream.js +355 -354
  60. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  61. package/dist/core/serialization/data-stream/chunk-types.d.ts +2 -2
  62. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  63. package/dist/core/serialization/data-stream/chunk-types.js +22 -26
  64. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
  65. package/dist/core/serialization/data-stream/serialization.d.ts +1 -1
  66. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
  67. package/dist/core/serialization/data-stream/serialization.js +23 -28
  68. package/dist/core/serialization/data-stream/serialization.js.map +1 -1
  69. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +19 -0
  70. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -0
  71. package/dist/core/serialization/ui-message-stream/UIMessageStream.js +231 -0
  72. package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -0
  73. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +78 -0
  74. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -0
  75. package/dist/core/serialization/ui-message-stream/chunk-types.js +2 -0
  76. package/dist/core/serialization/ui-message-stream/chunk-types.js.map +1 -0
  77. package/dist/core/tool/ToolCallReader.d.ts +4 -4
  78. package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
  79. package/dist/core/tool/ToolCallReader.js +303 -303
  80. package/dist/core/tool/ToolCallReader.js.map +1 -1
  81. package/dist/core/tool/ToolExecutionStream.d.ts +5 -5
  82. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
  83. package/dist/core/tool/ToolExecutionStream.js +140 -143
  84. package/dist/core/tool/ToolExecutionStream.js.map +1 -1
  85. package/dist/core/tool/ToolResponse.d.ts +1 -1
  86. package/dist/core/tool/ToolResponse.d.ts.map +1 -1
  87. package/dist/core/tool/ToolResponse.js +25 -29
  88. package/dist/core/tool/ToolResponse.js.map +1 -1
  89. package/dist/core/tool/index.d.ts +5 -5
  90. package/dist/core/tool/index.d.ts.map +1 -1
  91. package/dist/core/tool/index.js +3 -13
  92. package/dist/core/tool/index.js.map +1 -1
  93. package/dist/core/tool/tool-types.d.ts +3 -3
  94. package/dist/core/tool/tool-types.d.ts.map +1 -1
  95. package/dist/core/tool/tool-types.js +1 -0
  96. package/dist/core/tool/tool-types.js.map +1 -1
  97. package/dist/core/tool/toolResultStream.d.ts +3 -3
  98. package/dist/core/tool/toolResultStream.d.ts.map +1 -1
  99. package/dist/core/tool/toolResultStream.js +118 -125
  100. package/dist/core/tool/toolResultStream.js.map +1 -1
  101. package/dist/core/tool/type-path-utils.js +1 -0
  102. package/dist/core/tool/type-path-utils.js.map +1 -1
  103. package/dist/core/utils/Counter.js +6 -10
  104. package/dist/core/utils/Counter.js.map +1 -1
  105. package/dist/core/utils/generateId.js +1 -8
  106. package/dist/core/utils/generateId.js.map +1 -1
  107. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +1 -1
  108. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
  109. package/dist/core/utils/stream/AssistantMetaTransformStream.js +42 -43
  110. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
  111. package/dist/core/utils/stream/AssistantTransformStream.d.ts +2 -2
  112. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
  113. package/dist/core/utils/stream/AssistantTransformStream.js +35 -45
  114. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
  115. package/dist/core/utils/stream/LineDecoderStream.js +24 -26
  116. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  117. package/dist/core/utils/stream/PipeableTransformStream.js +10 -14
  118. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
  119. package/dist/core/utils/stream/SSE.d.ts +1 -1
  120. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  121. package/dist/core/utils/stream/SSE.js +90 -98
  122. package/dist/core/utils/stream/SSE.js.map +1 -1
  123. package/dist/core/utils/stream/UnderlyingReadable.js +1 -0
  124. package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -1
  125. package/dist/core/utils/stream/merge.d.ts +1 -1
  126. package/dist/core/utils/stream/merge.d.ts.map +1 -1
  127. package/dist/core/utils/stream/merge.js +169 -81
  128. package/dist/core/utils/stream/merge.js.map +1 -1
  129. package/dist/core/utils/stream/path-utils.d.ts +2 -2
  130. package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
  131. package/dist/core/utils/stream/path-utils.js +49 -56
  132. package/dist/core/utils/stream/path-utils.js.map +1 -1
  133. package/dist/core/utils/types.d.ts +1 -1
  134. package/dist/core/utils/types.d.ts.map +1 -1
  135. package/dist/core/utils/types.js +1 -0
  136. package/dist/core/utils/types.js.map +1 -1
  137. package/dist/core/utils/withPromiseOrValue.js +14 -14
  138. package/dist/core/utils/withPromiseOrValue.js.map +1 -1
  139. package/dist/index.d.ts +1 -1
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +0 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/utils/AsyncIterableStream.js +15 -16
  144. package/dist/utils/AsyncIterableStream.js.map +1 -1
  145. package/dist/utils/index.d.ts +2 -2
  146. package/dist/utils/index.d.ts.map +1 -1
  147. package/dist/utils/index.js +1 -7
  148. package/dist/utils/index.js.map +1 -1
  149. package/dist/utils/json/fix-json.js +365 -343
  150. package/dist/utils/json/fix-json.js.map +1 -1
  151. package/dist/utils/json/index.d.ts +1 -1
  152. package/dist/utils/json/index.d.ts.map +1 -1
  153. package/dist/utils/json/index.js +1 -0
  154. package/dist/utils/json/index.js.map +1 -1
  155. package/dist/utils/json/is-json.d.ts +1 -1
  156. package/dist/utils/json/is-json.d.ts.map +1 -1
  157. package/dist/utils/json/is-json.js +21 -25
  158. package/dist/utils/json/is-json.js.map +1 -1
  159. package/dist/utils/json/json-value.js +1 -0
  160. package/dist/utils/json/json-value.js.map +1 -1
  161. package/dist/utils/json/parse-partial-json-object.d.ts +1 -1
  162. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
  163. package/dist/utils/json/parse-partial-json-object.js +61 -56
  164. package/dist/utils/json/parse-partial-json-object.js.map +1 -1
  165. package/dist/utils/promiseWithResolvers.js +10 -13
  166. package/dist/utils/promiseWithResolvers.js.map +1 -1
  167. package/dist/utils.d.ts +5 -5
  168. package/dist/utils.d.ts.map +1 -1
  169. package/dist/utils.js +4 -17
  170. package/dist/utils.js.map +1 -1
  171. package/package.json +26 -14
  172. package/src/core/index.ts +6 -0
  173. package/src/core/serialization/ui-message-stream/UIMessageStream.test.ts +370 -0
  174. package/src/core/serialization/ui-message-stream/UIMessageStream.ts +300 -0
  175. package/src/core/serialization/ui-message-stream/chunk-types.ts +60 -0
  176. package/dist/core/object/ObjectStream.test.d.ts +0 -2
  177. package/dist/core/object/ObjectStream.test.d.ts.map +0 -1
  178. package/dist/core/serialization/assistant-transport/AssistantTransport.test.d.ts +0 -2
  179. package/dist/core/serialization/assistant-transport/AssistantTransport.test.d.ts.map +0 -1
  180. package/dist/core/tool/toolResultStream.test.d.ts +0 -2
  181. package/dist/core/tool/toolResultStream.test.d.ts.map +0 -1
  182. package/dist/utils/json/parse-partial-json-object.test.d.ts +0 -2
  183. package/dist/utils/json/parse-partial-json-object.test.d.ts.map +0 -1
@@ -1,27 +1,25 @@
1
- // src/core/utils/stream/LineDecoderStream.ts
2
- var LineDecoderStream = class extends TransformStream {
3
- buffer = "";
4
- constructor() {
5
- super({
6
- transform: (chunk, controller) => {
7
- this.buffer += chunk;
8
- const lines = this.buffer.split("\n");
9
- for (let i = 0; i < lines.length - 1; i++) {
10
- controller.enqueue(lines[i]);
11
- }
12
- this.buffer = lines[lines.length - 1] || "";
13
- },
14
- flush: () => {
15
- if (this.buffer) {
16
- throw new Error(
17
- `Stream ended with an incomplete line: "${this.buffer}"`
18
- );
19
- }
20
- }
21
- });
22
- }
23
- };
24
- export {
25
- LineDecoderStream
26
- };
1
+ export class LineDecoderStream extends TransformStream {
2
+ buffer = "";
3
+ constructor() {
4
+ super({
5
+ transform: (chunk, controller) => {
6
+ this.buffer += chunk;
7
+ const lines = this.buffer.split("\n");
8
+ // Process all complete lines
9
+ for (let i = 0; i < lines.length - 1; i++) {
10
+ controller.enqueue(lines[i]);
11
+ }
12
+ // Keep the last incomplete line in the buffer
13
+ this.buffer = lines[lines.length - 1] || "";
14
+ },
15
+ flush: () => {
16
+ // If there's content in the buffer when the stream ends, it means
17
+ // the stream ended with an incomplete line (no trailing newline)
18
+ if (this.buffer) {
19
+ throw new Error(`Stream ended with an incomplete line: "${this.buffer}"`);
20
+ }
21
+ },
22
+ });
23
+ }
24
+ }
27
25
  //# sourceMappingURL=LineDecoderStream.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"sourcesContent":["export class LineDecoderStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1] || \"\";\n },\n flush: () => {\n // If there's content in the buffer when the stream ends, it means\n // the stream ended with an incomplete line (no trailing newline)\n if (this.buffer) {\n throw new Error(\n `Stream ended with an incomplete line: \"${this.buffer}\"`,\n );\n }\n },\n });\n }\n}\n"],"mappings":";AAAO,IAAM,oBAAN,cAAgC,gBAAgC;AAAA,EAC7D,SAAS;AAAA,EAEjB,cAAc;AACZ,UAAM;AAAA,MACJ,WAAW,CAAC,OAAO,eAAe;AAChC,aAAK,UAAU;AACf,cAAM,QAAQ,KAAK,OAAO,MAAM,IAAI;AAGpC,iBAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,qBAAW,QAAQ,MAAM,CAAC,CAAC;AAAA,QAC7B;AAGA,aAAK,SAAS,MAAM,MAAM,SAAS,CAAC,KAAK;AAAA,MAC3C;AAAA,MACA,OAAO,MAAM;AAGX,YAAI,KAAK,QAAQ;AACf,gBAAM,IAAI;AAAA,YACR,0CAA0C,KAAK,MAAM;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"file":"LineDecoderStream.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,eAA+B;IAC5D,MAAM,GAAG,EAAE,CAAC;IAEpB;QACE,KAAK,CAAC;YACJ,SAAS,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBAC/B,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEtC,6BAA6B;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAED,8CAA8C;gBAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,kEAAkE;gBAClE,iEAAiE;gBACjE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,0CAA0C,IAAI,CAAC,MAAM,GAAG,CACzD,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,15 +1,11 @@
1
- // src/core/utils/stream/PipeableTransformStream.ts
2
- var PipeableTransformStream = class extends TransformStream {
3
- constructor(transform) {
4
- super();
5
- const readable = transform(super.readable);
6
- Object.defineProperty(this, "readable", {
7
- value: readable,
8
- writable: false
9
- });
10
- }
11
- };
12
- export {
13
- PipeableTransformStream
14
- };
1
+ export class PipeableTransformStream extends TransformStream {
2
+ constructor(transform) {
3
+ super();
4
+ const readable = transform(super.readable);
5
+ Object.defineProperty(this, "readable", {
6
+ value: readable,
7
+ writable: false,
8
+ });
9
+ }
10
+ }
15
11
  //# sourceMappingURL=PipeableTransformStream.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"sourcesContent":["export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as unknown as ReadableStream<I>);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n"],"mappings":";AAAO,IAAM,0BAAN,cAA4C,gBAAsB;AAAA,EACvE,YAAY,WAA+D;AACzE,UAAM;AACN,UAAM,WAAW,UAAU,MAAM,QAAwC;AACzE,WAAO,eAAe,MAAM,YAAY;AAAA,MACtC,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"file":"PipeableTransformStream.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAA8B,SAAQ,eAAqB;IACtE,YAAY,SAA6D;QACvE,KAAK,EAAE,CAAC;QACR,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAwC,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;YACtC,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { PipeableTransformStream } from "./PipeableTransformStream";
1
+ import { PipeableTransformStream } from "./PipeableTransformStream.js";
2
2
  export declare class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array<ArrayBuffer>> {
3
3
  static readonly headers: Headers;
4
4
  headers: Headers;
@@ -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,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
+ {"version":3,"file":"SSE.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/SSE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qCAAkC;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,102 +1,94 @@
1
- // src/core/utils/stream/SSE.ts
2
1
  import { PipeableTransformStream } from "./PipeableTransformStream.js";
3
2
  import { LineDecoderStream } from "./LineDecoderStream.js";
4
- var SSEEncoder = class _SSEEncoder extends PipeableTransformStream {
5
- static headers = new Headers({
6
- "Content-Type": "text/event-stream",
7
- "Cache-Control": "no-cache",
8
- Connection: "keep-alive"
9
- });
10
- headers = _SSEEncoder.headers;
11
- constructor() {
12
- super(
13
- (readable) => readable.pipeThrough(
14
- new TransformStream({
15
- transform(chunk, controller) {
16
- controller.enqueue(`data: ${JSON.stringify(chunk)}
17
-
18
- `);
19
- }
20
- })
21
- ).pipeThrough(new TextEncoderStream())
22
- );
23
- }
24
- };
25
- var SSEEventStream = class extends TransformStream {
26
- constructor() {
27
- let eventBuffer = {};
28
- let dataLines = [];
29
- super({
30
- start() {
31
- eventBuffer = {};
32
- dataLines = [];
33
- },
34
- transform(line, controller) {
35
- if (line.startsWith(":")) return;
36
- if (line === "") {
37
- if (dataLines.length > 0) {
38
- controller.enqueue({
39
- event: eventBuffer.event || "message",
40
- data: dataLines.join("\n"),
41
- id: eventBuffer.id,
42
- retry: eventBuffer.retry
43
- });
44
- }
45
- eventBuffer = {};
46
- dataLines = [];
47
- return;
48
- }
49
- const [field, ...rest] = line.split(":");
50
- const value = rest.join(":").trimStart();
51
- switch (field) {
52
- case "event":
53
- eventBuffer.event = value;
54
- break;
55
- case "data":
56
- dataLines.push(value);
57
- break;
58
- case "id":
59
- eventBuffer.id = value;
60
- break;
61
- case "retry":
62
- eventBuffer.retry = Number(value);
63
- break;
64
- }
65
- },
66
- flush(controller) {
67
- if (dataLines.length > 0) {
68
- controller.enqueue({
69
- event: eventBuffer.event || "message",
70
- data: dataLines.join("\n"),
71
- id: eventBuffer.id,
72
- retry: eventBuffer.retry
73
- });
74
- }
75
- }
3
+ export class SSEEncoder extends PipeableTransformStream {
4
+ static headers = new Headers({
5
+ "Content-Type": "text/event-stream",
6
+ "Cache-Control": "no-cache",
7
+ Connection: "keep-alive",
76
8
  });
77
- }
78
- };
79
- var SSEDecoder = class extends PipeableTransformStream {
80
- constructor() {
81
- super(
82
- (readable) => readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new SSEEventStream()).pipeThrough(
83
- new TransformStream({
84
- transform(event, controller) {
85
- switch (event.event) {
86
- case "message":
87
- controller.enqueue(JSON.parse(event.data));
88
- break;
89
- default:
90
- throw new Error(`Unknown SSE event type: ${event.event}`);
91
- }
92
- }
93
- })
94
- )
95
- );
96
- }
97
- };
98
- export {
99
- SSEDecoder,
100
- SSEEncoder
101
- };
9
+ headers = SSEEncoder.headers;
10
+ constructor() {
11
+ super((readable) => readable
12
+ .pipeThrough(new TransformStream({
13
+ transform(chunk, controller) {
14
+ controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);
15
+ },
16
+ }))
17
+ .pipeThrough(new TextEncoderStream()));
18
+ }
19
+ }
20
+ class SSEEventStream extends TransformStream {
21
+ constructor() {
22
+ let eventBuffer = {};
23
+ let dataLines = [];
24
+ super({
25
+ start() {
26
+ eventBuffer = {};
27
+ dataLines = [];
28
+ },
29
+ transform(line, controller) {
30
+ if (line.startsWith(":"))
31
+ return; // Ignore comments
32
+ if (line === "") {
33
+ if (dataLines.length > 0) {
34
+ controller.enqueue({
35
+ event: eventBuffer.event || "message",
36
+ data: dataLines.join("\n"),
37
+ id: eventBuffer.id,
38
+ retry: eventBuffer.retry,
39
+ });
40
+ }
41
+ eventBuffer = {};
42
+ dataLines = [];
43
+ return;
44
+ }
45
+ const [field, ...rest] = line.split(":");
46
+ const value = rest.join(":").trimStart();
47
+ switch (field) {
48
+ case "event":
49
+ eventBuffer.event = value;
50
+ break;
51
+ case "data":
52
+ dataLines.push(value);
53
+ break;
54
+ case "id":
55
+ eventBuffer.id = value;
56
+ break;
57
+ case "retry":
58
+ eventBuffer.retry = Number(value);
59
+ break;
60
+ }
61
+ },
62
+ flush(controller) {
63
+ if (dataLines.length > 0) {
64
+ controller.enqueue({
65
+ event: eventBuffer.event || "message",
66
+ data: dataLines.join("\n"),
67
+ id: eventBuffer.id,
68
+ retry: eventBuffer.retry,
69
+ });
70
+ }
71
+ },
72
+ });
73
+ }
74
+ }
75
+ export class SSEDecoder extends PipeableTransformStream {
76
+ constructor() {
77
+ super((readable) => readable
78
+ .pipeThrough(new TextDecoderStream())
79
+ .pipeThrough(new LineDecoderStream())
80
+ .pipeThrough(new SSEEventStream())
81
+ .pipeThrough(new TransformStream({
82
+ transform(event, controller) {
83
+ switch (event.event) {
84
+ case "message":
85
+ controller.enqueue(JSON.parse(event.data));
86
+ break;
87
+ default:
88
+ throw new Error(`Unknown SSE event type: ${event.event}`);
89
+ }
90
+ },
91
+ })));
92
+ }
93
+ }
102
94
  //# sourceMappingURL=SSE.js.map
@@ -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<\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":[]}
1
+ {"version":3,"file":"SSE.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/SSE.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
+ export {};
1
2
  //# sourceMappingURL=UnderlyingReadable.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"UnderlyingReadable.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/UnderlyingReadable.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { AssistantStreamChunk } from "../../AssistantStreamChunk";
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
2
2
  export declare const createMergeStream: () => {
3
3
  readable: ReadableStream<AssistantStreamChunk>;
4
4
  isSealed(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAQlE,eAAO,MAAM,iBAAiB;;;;sBA0ER,cAAc,CAAC,oBAAoB,CAAC;mBAUvC,oBAAoB;CAWtC,CAAC"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,sCAAmC;AAQlE,eAAO,MAAM,iBAAiB;;;;sBA0ER,cAAc,CAAC,oBAAoB,CAAC;mBAUvC,oBAAoB;CAWtC,CAAC"}
@@ -1,85 +1,173 @@
1
- // src/core/utils/stream/merge.ts
2
1
  import { promiseWithResolvers } from "../../../utils/promiseWithResolvers.js";
3
- var createMergeStream = () => {
4
- const list = [];
5
- let sealed = false;
6
- let controller;
7
- let currentPull;
8
- const handlePull = (item) => {
9
- if (!item.promise) {
10
- item.promise = item.reader.read().then(({ done, value }) => {
11
- item.promise = void 0;
12
- if (done) {
13
- list.splice(list.indexOf(item), 1);
14
- if (sealed && list.length === 0) {
15
- controller.close();
16
- }
17
- } else {
18
- controller.enqueue(value);
2
+ export const createMergeStream = () => {
3
+ const list = [];
4
+ let sealed = false;
5
+ let controller;
6
+ let currentPull;
7
+ const handlePull = (item) => {
8
+ if (!item.promise) {
9
+ // TODO for most streams, we can directly pipeTo to avoid the microTask queue
10
+ // add an option to eagerly pipe the stream to the merge stream
11
+ // ideally, using assistant-stream w sync run method + piping to a sync WritableStream runs in the same microtask
12
+ // this is useful because we often use AssistantStreams internally as a serialization utility, e. g. AssistantTransformStream
13
+ // idea: avoid reader.read() by instead using a WritableStream & if (!hasPendingPull) await waitForPull()?
14
+ item.promise = item.reader
15
+ .read()
16
+ .then(({ done, value }) => {
17
+ item.promise = undefined;
18
+ if (done) {
19
+ list.splice(list.indexOf(item), 1);
20
+ if (sealed && list.length === 0) {
21
+ controller.close();
22
+ }
23
+ }
24
+ else {
25
+ controller.enqueue(value);
26
+ }
27
+ currentPull?.resolve();
28
+ currentPull = undefined;
29
+ })
30
+ .catch((e) => {
31
+ console.error(e);
32
+ list.forEach((item) => {
33
+ item.reader.cancel();
34
+ });
35
+ list.length = 0;
36
+ controller.error(e);
37
+ currentPull?.reject(e);
38
+ currentPull = undefined;
39
+ });
19
40
  }
20
- currentPull?.resolve();
21
- currentPull = void 0;
22
- }).catch((e) => {
23
- console.error(e);
24
- list.forEach((item2) => {
25
- item2.reader.cancel();
26
- });
27
- list.length = 0;
28
- controller.error(e);
29
- currentPull?.reject(e);
30
- currentPull = void 0;
31
- });
32
- }
33
- };
34
- const readable = new ReadableStream({
35
- start(c) {
36
- controller = c;
37
- },
38
- pull() {
39
- currentPull = promiseWithResolvers();
40
- list.forEach((item) => {
41
- handlePull(item);
42
- });
43
- return currentPull.promise;
44
- },
45
- cancel() {
46
- list.forEach((item) => {
47
- item.reader.cancel();
48
- });
49
- list.length = 0;
50
- }
51
- });
52
- return {
53
- readable,
54
- isSealed() {
55
- return sealed;
56
- },
57
- seal() {
58
- sealed = true;
59
- if (list.length === 0) controller.close();
60
- },
61
- addStream(stream) {
62
- if (sealed)
63
- throw new Error(
64
- "Cannot add streams after the run callback has settled."
65
- );
66
- const item = { reader: stream.getReader() };
67
- list.push(item);
68
- handlePull(item);
69
- },
70
- enqueue(chunk) {
71
- this.addStream(
72
- new ReadableStream({
73
- start(c) {
74
- c.enqueue(chunk);
75
- c.close();
76
- }
77
- })
78
- );
79
- }
80
- };
81
- };
82
- export {
83
- createMergeStream
41
+ };
42
+ const readable = new ReadableStream({
43
+ start(c) {
44
+ controller = c;
45
+ },
46
+ pull() {
47
+ currentPull = promiseWithResolvers();
48
+ list.forEach((item) => {
49
+ handlePull(item);
50
+ });
51
+ return currentPull.promise;
52
+ },
53
+ cancel() {
54
+ list.forEach((item) => {
55
+ item.reader.cancel();
56
+ });
57
+ list.length = 0;
58
+ },
59
+ });
60
+ return {
61
+ readable,
62
+ isSealed() {
63
+ return sealed;
64
+ },
65
+ seal() {
66
+ sealed = true;
67
+ if (list.length === 0)
68
+ controller.close();
69
+ },
70
+ addStream(stream) {
71
+ if (sealed)
72
+ throw new Error("Cannot add streams after the run callback has settled.");
73
+ const item = { reader: stream.getReader() };
74
+ list.push(item);
75
+ handlePull(item);
76
+ },
77
+ enqueue(chunk) {
78
+ this.addStream(new ReadableStream({
79
+ start(c) {
80
+ c.enqueue(chunk);
81
+ c.close();
82
+ },
83
+ }));
84
+ },
85
+ };
84
86
  };
87
+ // TODO
88
+ // export class SpanContainerMerger {
89
+ // public get isSealed() {
90
+ // return this.mergeStream.isSealed();
91
+ // }
92
+ // public get readable() {
93
+ // return this.mergeStream.readable;
94
+ // }
95
+ // private subAllocator = new Counter();
96
+ // private mergeStream = createMergeStream();
97
+ // constructor() {
98
+ // // id 0 is auto allocated
99
+ // this.subAllocator.up();
100
+ // }
101
+ // add(stream: ReadableStream<AssistantStreamChunk>) {
102
+ // this.mergeStream.addStream(
103
+ // stream.pipeThrough(new SpanParentEncoder(this.subAllocator)),
104
+ // );
105
+ // }
106
+ // enqueue(chunk: AssistantStreamChunk & { parentId: 0 }) {
107
+ // this.mergeStream.addStream(
108
+ // new ReadableStream({
109
+ // start(c) {
110
+ // c.enqueue(chunk);
111
+ // c.close();
112
+ // },
113
+ // }),
114
+ // );
115
+ // }
116
+ // seal() {
117
+ // this.mergeStream.seal();
118
+ // }
119
+ // }
120
+ // export class SpanContainerSplitter {
121
+ // public writable;
122
+ // private isSealed = false;
123
+ // private writers = new Map<
124
+ // number,
125
+ // WritableStreamDefaultWriter<AssistantStreamChunk>
126
+ // >();
127
+ // private closeTasks: Promise<void>[] = [];
128
+ // private allocator = new Counter();
129
+ // private subAllocator = new Counter();
130
+ // constructor() {
131
+ // // id 0 is auto-allocated
132
+ // this.allocator.up();
133
+ // this.writable = new WritableStream({
134
+ // write: (chunk) => {
135
+ // const { type, parentId } = chunk;
136
+ // const writer = this.writers.get(parentId);
137
+ // if (writer === undefined) throw new Error("Parent id not found");
138
+ // writer.write(chunk);
139
+ // if (type === "span") {
140
+ // // allocate a new span id
141
+ // this.writers.set(this.allocator.up(), writer);
142
+ // }
143
+ // if (type === "finish") {
144
+ // this.writers.delete(parentId);
145
+ // writer.close();
146
+ // if (this.writers.size === 0) {
147
+ // const closeTask = this.writable.close();
148
+ // this.closeTasks.push(closeTask);
149
+ // closeTask.then(() => {
150
+ // this.closeTasks.splice(this.closeTasks.indexOf(closeTask), 1);
151
+ // });
152
+ // }
153
+ // }
154
+ // },
155
+ // close: async () => {
156
+ // if (this.writers.size > 0) throw new Error("Not all writers closed");
157
+ // // await and throw on any errors
158
+ // await Promise.all(this.closeTasks);
159
+ // },
160
+ // });
161
+ // }
162
+ // add(stream: WritableStream<AssistantStreamChunk>) {
163
+ // if (this.isSealed) throw new Error("Cannot add streams after sealing");
164
+ // const decoder = new SpanParentDecoder(this.subAllocator);
165
+ // decoder.readable.pipeTo(stream);
166
+ // this.writers.set(this.allocator.up(), decoder.writable.getWriter());
167
+ // }
168
+ // seal() {
169
+ // this.isSealed = true;
170
+ // if (this.writers.size === 0) this.writable.close();
171
+ // }
172
+ // }
85
173
  //# sourceMappingURL=merge.js.map