assistant-stream 0.3.15 → 0.3.16

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 (232) hide show
  1. package/README.md +6 -4
  2. package/dist/core/AssistantStream.d.ts +35 -31
  3. package/dist/core/AssistantStream.d.ts.map +1 -1
  4. package/dist/core/AssistantStream.js +39 -37
  5. package/dist/core/AssistantStream.js.map +1 -1
  6. package/dist/core/AssistantStreamChunk.d.ts +71 -78
  7. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  8. package/dist/core/AssistantStreamChunk.js +0 -2
  9. package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
  10. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
  11. package/dist/core/accumulators/AssistantMessageStream.js +52 -48
  12. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
  13. package/dist/core/accumulators/TimingTracker.d.ts +15 -11
  14. package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
  15. package/dist/core/accumulators/TimingTracker.js +36 -43
  16. package/dist/core/accumulators/TimingTracker.js.map +1 -1
  17. package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
  18. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  19. package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
  20. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  21. package/dist/core/converters/toGenericMessages.d.ts +49 -47
  22. package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
  23. package/dist/core/converters/toGenericMessages.js +122 -136
  24. package/dist/core/converters/toGenericMessages.js.map +1 -1
  25. package/dist/core/modules/assistant-stream.d.ts +62 -66
  26. package/dist/core/modules/assistant-stream.d.ts.map +1 -1
  27. package/dist/core/modules/assistant-stream.js +174 -182
  28. package/dist/core/modules/assistant-stream.js.map +1 -1
  29. package/dist/core/modules/text.d.ts +11 -7
  30. package/dist/core/modules/text.d.ts.map +1 -1
  31. package/dist/core/modules/text.js +45 -45
  32. package/dist/core/modules/text.js.map +1 -1
  33. package/dist/core/modules/tool-call.d.ts +15 -11
  34. package/dist/core/modules/tool-call.d.ts.map +1 -1
  35. package/dist/core/modules/tool-call.js +81 -96
  36. package/dist/core/modules/tool-call.js.map +1 -1
  37. package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
  38. package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
  39. package/dist/core/object/ObjectStreamAccumulator.js +44 -52
  40. package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
  41. package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
  42. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  43. package/dist/core/object/ObjectStreamResponse.js +52 -71
  44. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  45. package/dist/core/object/createObjectStream.d.ts +14 -8
  46. package/dist/core/object/createObjectStream.d.ts.map +1 -1
  47. package/dist/core/object/createObjectStream.js +50 -47
  48. package/dist/core/object/createObjectStream.js.map +1 -1
  49. package/dist/core/object/types.d.ts +14 -11
  50. package/dist/core/object/types.d.ts.map +1 -1
  51. package/dist/core/object/types.js +0 -2
  52. package/dist/core/serialization/PlainText.d.ts +11 -7
  53. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  54. package/dist/core/serialization/PlainText.js +40 -48
  55. package/dist/core/serialization/PlainText.js.map +1 -1
  56. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
  57. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
  58. package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
  59. package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
  60. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
  61. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  62. package/dist/core/serialization/data-stream/DataStream.js +320 -371
  63. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  64. package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
  65. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  66. package/dist/core/serialization/data-stream/chunk-types.js +27 -23
  67. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
  68. package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
  69. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
  70. package/dist/core/serialization/data-stream/serialization.js +23 -24
  71. package/dist/core/serialization/data-stream/serialization.js.map +1 -1
  72. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
  73. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
  74. package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
  75. package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
  76. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
  77. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
  78. package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
  79. package/dist/core/tool/ToolCallReader.d.ts +34 -30
  80. package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
  81. package/dist/core/tool/ToolCallReader.js +264 -317
  82. package/dist/core/tool/ToolCallReader.js.map +1 -1
  83. package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
  84. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
  85. package/dist/core/tool/ToolExecutionStream.js +123 -146
  86. package/dist/core/tool/ToolExecutionStream.js.map +1 -1
  87. package/dist/core/tool/ToolResponse.d.ts +41 -41
  88. package/dist/core/tool/ToolResponse.d.ts.map +1 -1
  89. package/dist/core/tool/ToolResponse.js +50 -56
  90. package/dist/core/tool/ToolResponse.js.map +1 -1
  91. package/dist/core/tool/schema-utils.d.ts +19 -15
  92. package/dist/core/tool/schema-utils.d.ts.map +1 -1
  93. package/dist/core/tool/schema-utils.js +50 -84
  94. package/dist/core/tool/schema-utils.js.map +1 -1
  95. package/dist/core/tool/tool-types.d.ts +103 -122
  96. package/dist/core/tool/tool-types.d.ts.map +1 -1
  97. package/dist/core/tool/tool-types.js +0 -2
  98. package/dist/core/tool/toolResultStream.d.ts +11 -9
  99. package/dist/core/tool/toolResultStream.d.ts.map +1 -1
  100. package/dist/core/tool/toolResultStream.js +127 -157
  101. package/dist/core/tool/toolResultStream.js.map +1 -1
  102. package/dist/core/tool/type-path-utils.d.ts +8 -19
  103. package/dist/core/tool/type-path-utils.d.ts.map +1 -1
  104. package/dist/core/tool/type-path-utils.js +0 -2
  105. package/dist/core/utils/Counter.d.ts +6 -3
  106. package/dist/core/utils/Counter.d.ts.map +1 -1
  107. package/dist/core/utils/Counter.js +10 -6
  108. package/dist/core/utils/Counter.js.map +1 -1
  109. package/dist/core/utils/generateId.d.ts +4 -1
  110. package/dist/core/utils/generateId.d.ts.map +1 -1
  111. package/dist/core/utils/generateId.js +5 -1
  112. package/dist/core/utils/generateId.js.map +1 -1
  113. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
  114. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
  115. package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
  116. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
  117. package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
  118. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
  119. package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
  120. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
  121. package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
  122. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
  123. package/dist/core/utils/stream/LineDecoderStream.js +23 -26
  124. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  125. package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
  126. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
  127. package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
  128. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
  129. package/dist/core/utils/stream/SSE.d.ts +10 -6
  130. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  131. package/dist/core/utils/stream/SSE.js +79 -91
  132. package/dist/core/utils/stream/SSE.js.map +1 -1
  133. package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
  134. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
  135. package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
  136. package/dist/core/utils/stream/merge.d.ts +11 -7
  137. package/dist/core/utils/stream/merge.d.ts.map +1 -1
  138. package/dist/core/utils/stream/merge.js +68 -170
  139. package/dist/core/utils/stream/merge.js.map +1 -1
  140. package/dist/core/utils/stream/path-utils.d.ts +11 -7
  141. package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
  142. package/dist/core/utils/stream/path-utils.js +46 -52
  143. package/dist/core/utils/stream/path-utils.js.map +1 -1
  144. package/dist/core/utils/types.d.ts +109 -113
  145. package/dist/core/utils/types.d.ts.map +1 -1
  146. package/dist/core/utils/types.js +0 -2
  147. package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
  148. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
  149. package/dist/core/utils/withPromiseOrValue.js +12 -15
  150. package/dist/core/utils/withPromiseOrValue.js.map +1 -1
  151. package/dist/index.d.ts +23 -24
  152. package/dist/index.js +16 -16
  153. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
  154. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
  155. package/dist/resumable/ResumableStreamContext.d.ts +28 -24
  156. package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
  157. package/dist/resumable/ResumableStreamContext.js +99 -114
  158. package/dist/resumable/ResumableStreamContext.js.map +1 -1
  159. package/dist/resumable/constants.d.ts +4 -1
  160. package/dist/resumable/constants.d.ts.map +1 -1
  161. package/dist/resumable/constants.js +5 -1
  162. package/dist/resumable/constants.js.map +1 -1
  163. package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
  164. package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
  165. package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
  166. package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
  167. package/dist/resumable/errors.d.ts +8 -5
  168. package/dist/resumable/errors.d.ts.map +1 -1
  169. package/dist/resumable/errors.js +14 -12
  170. package/dist/resumable/errors.js.map +1 -1
  171. package/dist/resumable/index.d.ts +7 -7
  172. package/dist/resumable/index.js +5 -5
  173. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
  174. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
  175. package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
  176. package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
  177. package/dist/resumable/stores/ioredis.d.ts +9 -5
  178. package/dist/resumable/stores/ioredis.d.ts.map +1 -1
  179. package/dist/resumable/stores/ioredis.js +70 -82
  180. package/dist/resumable/stores/ioredis.js.map +1 -1
  181. package/dist/resumable/stores/redis-impl.d.ts +51 -48
  182. package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
  183. package/dist/resumable/stores/redis-impl.js +176 -176
  184. package/dist/resumable/stores/redis-impl.js.map +1 -1
  185. package/dist/resumable/stores/redis.d.ts +31 -28
  186. package/dist/resumable/stores/redis.d.ts.map +1 -1
  187. package/dist/resumable/stores/redis.js +87 -95
  188. package/dist/resumable/stores/redis.js.map +1 -1
  189. package/dist/resumable/types.d.ts +29 -26
  190. package/dist/resumable/types.d.ts.map +1 -1
  191. package/dist/resumable/types.js +0 -2
  192. package/dist/utils/AsyncIterableStream.d.ts +5 -2
  193. package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
  194. package/dist/utils/AsyncIterableStream.js +17 -16
  195. package/dist/utils/AsyncIterableStream.js.map +1 -1
  196. package/dist/utils/json/fix-json.d.ts +4 -1
  197. package/dist/utils/json/fix-json.d.ts.map +1 -1
  198. package/dist/utils/json/fix-json.js +286 -380
  199. package/dist/utils/json/fix-json.js.map +1 -1
  200. package/dist/utils/json/is-json.d.ts +8 -4
  201. package/dist/utils/json/is-json.d.ts.map +1 -1
  202. package/dist/utils/json/is-json.js +13 -21
  203. package/dist/utils/json/is-json.js.map +1 -1
  204. package/dist/utils/json/json-value.d.ts +7 -4
  205. package/dist/utils/json/json-value.d.ts.map +1 -1
  206. package/dist/utils/json/json-value.js +0 -2
  207. package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
  208. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
  209. package/dist/utils/json/parse-partial-json-object.js +50 -62
  210. package/dist/utils/json/parse-partial-json-object.js.map +1 -1
  211. package/dist/utils/promiseWithResolvers.d.ts +7 -4
  212. package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
  213. package/dist/utils/promiseWithResolvers.js +17 -10
  214. package/dist/utils/promiseWithResolvers.js.map +1 -1
  215. package/dist/utils.d.ts +6 -6
  216. package/dist/utils.js +5 -5
  217. package/package.json +3 -3
  218. package/dist/core/AssistantStreamChunk.js.map +0 -1
  219. package/dist/core/object/types.js.map +0 -1
  220. package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
  221. package/dist/core/tool/tool-types.js.map +0 -1
  222. package/dist/core/tool/type-path-utils.js.map +0 -1
  223. package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
  224. package/dist/core/utils/types.js.map +0 -1
  225. package/dist/index.d.ts.map +0 -1
  226. package/dist/index.js.map +0 -1
  227. package/dist/resumable/index.d.ts.map +0 -1
  228. package/dist/resumable/index.js.map +0 -1
  229. package/dist/resumable/types.js.map +0 -1
  230. package/dist/utils/json/json-value.js.map +0 -1
  231. package/dist/utils.d.ts.map +0 -1
  232. package/dist/utils.js.map +0 -1
@@ -1,173 +1,71 @@
1
1
  import { promiseWithResolvers } from "../../../utils/promiseWithResolvers.js";
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
- });
40
- }
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
- };
2
+ //#region src/core/utils/stream/merge.ts
3
+ const createMergeStream = () => {
4
+ const list = [];
5
+ let sealed = false;
6
+ let controller;
7
+ let currentPull;
8
+ const handlePull = (item) => {
9
+ if (!item.promise) item.promise = item.reader.read().then(({ done, value }) => {
10
+ item.promise = void 0;
11
+ if (done) {
12
+ list.splice(list.indexOf(item), 1);
13
+ if (sealed && list.length === 0) controller.close();
14
+ } else controller.enqueue(value);
15
+ currentPull?.resolve();
16
+ currentPull = void 0;
17
+ }).catch((e) => {
18
+ console.error(e);
19
+ list.forEach((item) => {
20
+ item.reader.cancel();
21
+ });
22
+ list.length = 0;
23
+ controller.error(e);
24
+ currentPull?.reject(e);
25
+ currentPull = void 0;
26
+ });
27
+ };
28
+ return {
29
+ readable: new ReadableStream({
30
+ start(c) {
31
+ controller = c;
32
+ },
33
+ pull() {
34
+ currentPull = promiseWithResolvers();
35
+ list.forEach((item) => {
36
+ handlePull(item);
37
+ });
38
+ return currentPull.promise;
39
+ },
40
+ cancel() {
41
+ list.forEach((item) => {
42
+ item.reader.cancel();
43
+ });
44
+ list.length = 0;
45
+ }
46
+ }),
47
+ isSealed() {
48
+ return sealed;
49
+ },
50
+ seal() {
51
+ sealed = true;
52
+ if (list.length === 0) controller.close();
53
+ },
54
+ addStream(stream) {
55
+ if (sealed) throw new Error("Cannot add streams after the run callback has settled.");
56
+ const item = { reader: stream.getReader() };
57
+ list.push(item);
58
+ handlePull(item);
59
+ },
60
+ enqueue(chunk) {
61
+ this.addStream(new ReadableStream({ start(c) {
62
+ c.enqueue(chunk);
63
+ c.close();
64
+ } }));
65
+ }
66
+ };
86
67
  };
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
- // }
68
+ //#endregion
69
+ export { createMergeStream };
70
+
173
71
  //# sourceMappingURL=merge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","names":[],"sources":["../../../../src/core/utils/stream/merge.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { promiseWithResolvers } from \"../../../utils/promiseWithResolvers\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nexport const createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers<void>> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n // TODO for most streams, we can directly pipeTo to avoid the microTask queue\n // add an option to eagerly pipe the stream to the merge stream\n // ideally, using assistant-stream w sync run method + piping to a sync WritableStream runs in the same microtask\n // this is useful because we often use AssistantStreams internally as a serialization utility, e. g. AssistantTransformStream\n // idea: avoid reader.read() by instead using a WritableStream & if (!hasPendingPull) await waitForPull()?\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n console.error(e);\n\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n pull() {\n currentPull = promiseWithResolvers();\n list.forEach((item) => {\n handlePull(item);\n });\n\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n readable,\n isSealed() {\n return sealed;\n },\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: ReadableStream<AssistantStreamChunk>) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.getReader() };\n list.push(item);\n handlePull(item);\n },\n enqueue(chunk: AssistantStreamChunk) {\n this.addStream(\n new ReadableStream({\n start(c) {\n c.enqueue(chunk);\n c.close();\n },\n }),\n );\n },\n };\n};\n\n// TODO\n// export class SpanContainerMerger {\n// public get isSealed() {\n// return this.mergeStream.isSealed();\n// }\n\n// public get readable() {\n// return this.mergeStream.readable;\n// }\n\n// private subAllocator = new Counter();\n// private mergeStream = createMergeStream();\n\n// constructor() {\n// // id 0 is auto allocated\n// this.subAllocator.up();\n// }\n\n// add(stream: ReadableStream<AssistantStreamChunk>) {\n// this.mergeStream.addStream(\n// stream.pipeThrough(new SpanParentEncoder(this.subAllocator)),\n// );\n// }\n\n// enqueue(chunk: AssistantStreamChunk & { parentId: 0 }) {\n// this.mergeStream.addStream(\n// new ReadableStream({\n// start(c) {\n// c.enqueue(chunk);\n// c.close();\n// },\n// }),\n// );\n// }\n\n// seal() {\n// this.mergeStream.seal();\n// }\n// }\n\n// export class SpanContainerSplitter {\n// public writable;\n\n// private isSealed = false;\n// private writers = new Map<\n// number,\n// WritableStreamDefaultWriter<AssistantStreamChunk>\n// >();\n\n// private closeTasks: Promise<void>[] = [];\n\n// private allocator = new Counter();\n// private subAllocator = new Counter();\n\n// constructor() {\n// // id 0 is auto-allocated\n// this.allocator.up();\n\n// this.writable = new WritableStream({\n// write: (chunk) => {\n// const { type, parentId } = chunk;\n\n// const writer = this.writers.get(parentId);\n// if (writer === undefined) throw new Error(\"Parent id not found\");\n\n// writer.write(chunk);\n\n// if (type === \"span\") {\n// // allocate a new span id\n// this.writers.set(this.allocator.up(), writer);\n// }\n// if (type === \"finish\") {\n// this.writers.delete(parentId);\n// writer.close();\n\n// if (this.writers.size === 0) {\n// const closeTask = this.writable.close();\n// this.closeTasks.push(closeTask);\n// closeTask.then(() => {\n// this.closeTasks.splice(this.closeTasks.indexOf(closeTask), 1);\n// });\n// }\n// }\n// },\n// close: async () => {\n// if (this.writers.size > 0) throw new Error(\"Not all writers closed\");\n\n// // await and throw on any errors\n// await Promise.all(this.closeTasks);\n// },\n// });\n// }\n\n// add(stream: WritableStream<AssistantStreamChunk>) {\n// if (this.isSealed) throw new Error(\"Cannot add streams after sealing\");\n\n// const decoder = new SpanParentDecoder(this.subAllocator);\n// decoder.readable.pipeTo(stream);\n\n// this.writers.set(this.allocator.up(), decoder.writable.getWriter());\n// }\n\n// seal() {\n// this.isSealed = true;\n// if (this.writers.size === 0) this.writable.close();\n// }\n// }\n"],"mappings":";;AAQA,MAAa,0BAA0B;CACrC,MAAM,OAA0B,CAAC;CACjC,IAAI,SAAS;CACb,IAAI;CACJ,IAAI;CAEJ,MAAM,cAAc,SAA0B;EAC5C,IAAI,CAAC,KAAK,SAMR,KAAK,UAAU,KAAK,OACjB,KAAK,EACL,MAAM,EAAE,MAAM,YAAY;GACzB,KAAK,UAAU,KAAA;GACf,IAAI,MAAM;IACR,KAAK,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC;IACjC,IAAI,UAAU,KAAK,WAAW,GAC5B,WAAW,MAAM;GAErB,OACE,WAAW,QAAQ,KAAK;GAG1B,aAAa,QAAQ;GACrB,cAAc,KAAA;EAChB,CAAC,EACA,OAAO,MAAM;GACZ,QAAQ,MAAM,CAAC;GAEf,KAAK,SAAS,SAAS;IACrB,KAAK,OAAO,OAAO;GACrB,CAAC;GACD,KAAK,SAAS;GAEd,WAAW,MAAM,CAAC;GAElB,aAAa,OAAO,CAAC;GACrB,cAAc,KAAA;EAChB,CAAC;CAEP;CAsBA,OAAO;EACL,UAAA,IArBmB,eAAqC;GACxD,MAAM,GAAG;IACP,aAAa;GACf;GACA,OAAO;IACL,cAAc,qBAAqB;IACnC,KAAK,SAAS,SAAS;KACrB,WAAW,IAAI;IACjB,CAAC;IAED,OAAO,YAAY;GACrB;GACA,SAAS;IACP,KAAK,SAAS,SAAS;KACrB,KAAK,OAAO,OAAO;IACrB,CAAC;IACD,KAAK,SAAS;GAChB;EACF,CAGS;EACP,WAAW;GACT,OAAO;EACT;EACA,OAAO;GACL,SAAS;GACT,IAAI,KAAK,WAAW,GAAG,WAAW,MAAM;EAC1C;EACA,UAAU,QAA8C;GACtD,IAAI,QACF,MAAM,IAAI,MACR,wDACF;GAEF,MAAM,OAAO,EAAE,QAAQ,OAAO,UAAU,EAAE;GAC1C,KAAK,KAAK,IAAI;GACd,WAAW,IAAI;EACjB;EACA,QAAQ,OAA6B;GACnC,KAAK,UACH,IAAI,eAAe,EACjB,MAAM,GAAG;IACP,EAAE,QAAQ,KAAK;IACf,EAAE,MAAM;GACV,EACF,CAAC,CACH;EACF;CACF;AACF"}
@@ -1,12 +1,16 @@
1
- import type { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
2
2
  import { Counter } from "../Counter.js";
3
- export declare class PathAppendEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
4
- constructor(idx: number);
3
+
4
+ //#region src/core/utils/stream/path-utils.d.ts
5
+ declare class PathAppendEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
6
+ constructor(idx: number);
5
7
  }
6
- export declare class PathAppendDecoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
7
- constructor(idx: number);
8
+ declare class PathAppendDecoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
9
+ constructor(idx: number);
8
10
  }
9
- export declare class PathMergeEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
10
- constructor(counter: Counter);
11
+ declare class PathMergeEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
12
+ constructor(counter: Counter);
11
13
  }
14
+ //#endregion
15
+ export { PathAppendDecoder, PathAppendEncoder, PathMergeEncoder };
12
16
  //# sourceMappingURL=path-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sCAAmC;AACvE,OAAO,EAAE,OAAO,EAAE,sBAAmB;AAErC,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAUxB;AAED,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAiBxB;AAED,qBAAa,gBAAiB,SAAQ,eAAe,CACnD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,OAAO,EAAE,OAAO;CAwB7B"}
1
+ {"version":3,"file":"path-utils.d.ts","names":[],"sources":["../../../../src/core/utils/stream/path-utils.ts"],"mappings":";;;;cAGa,iBAAA,SAA0B,eAAA,CACrC,oBAAA,EACA,oBAAA;cAEY,GAAA;AAAA;AAAA,cAYD,iBAAA,SAA0B,eAAA,CACrC,oBAAA,EACA,oBAAA;cAEY,GAAA;AAAA;AAAA,cAmBD,gBAAA,SAAyB,eAAA,CACpC,oBAAA,EACA,oBAAA;cAEY,OAAA,EAAS,OAAA;AAAA"}
@@ -1,54 +1,48 @@
1
1
  import { Counter } from "../Counter.js";
2
- export class PathAppendEncoder extends TransformStream {
3
- constructor(idx) {
4
- super({
5
- transform(chunk, controller) {
6
- controller.enqueue({
7
- ...chunk,
8
- path: [idx, ...chunk.path],
9
- });
10
- },
11
- });
12
- }
13
- }
14
- export class PathAppendDecoder extends TransformStream {
15
- constructor(idx) {
16
- super({
17
- transform(chunk, controller) {
18
- const { path: [idx2, ...path], } = chunk;
19
- if (idx !== idx2)
20
- throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);
21
- controller.enqueue({
22
- ...chunk,
23
- path,
24
- });
25
- },
26
- });
27
- }
28
- }
29
- export class PathMergeEncoder extends TransformStream {
30
- constructor(counter) {
31
- const innerCounter = new Counter();
32
- const mapping = new Map();
33
- super({
34
- transform(chunk, controller) {
35
- if (chunk.type === "part-start" && chunk.path.length === 0) {
36
- mapping.set(innerCounter.up(), counter.up());
37
- }
38
- const [idx, ...path] = chunk.path;
39
- if (idx === undefined) {
40
- controller.enqueue(chunk);
41
- return;
42
- }
43
- const mappedIdx = mapping.get(idx);
44
- if (mappedIdx === undefined)
45
- throw new Error("Path not found");
46
- controller.enqueue({
47
- ...chunk,
48
- path: [mappedIdx, ...path],
49
- });
50
- },
51
- });
52
- }
53
- }
2
+ //#region src/core/utils/stream/path-utils.ts
3
+ var PathAppendEncoder = class extends TransformStream {
4
+ constructor(idx) {
5
+ super({ transform(chunk, controller) {
6
+ controller.enqueue({
7
+ ...chunk,
8
+ path: [idx, ...chunk.path]
9
+ });
10
+ } });
11
+ }
12
+ };
13
+ var PathAppendDecoder = class extends TransformStream {
14
+ constructor(idx) {
15
+ super({ transform(chunk, controller) {
16
+ const { path: [idx2, ...path] } = chunk;
17
+ if (idx !== idx2) throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);
18
+ controller.enqueue({
19
+ ...chunk,
20
+ path
21
+ });
22
+ } });
23
+ }
24
+ };
25
+ var PathMergeEncoder = class extends TransformStream {
26
+ constructor(counter) {
27
+ const innerCounter = new Counter();
28
+ const mapping = /* @__PURE__ */ new Map();
29
+ super({ transform(chunk, controller) {
30
+ if (chunk.type === "part-start" && chunk.path.length === 0) mapping.set(innerCounter.up(), counter.up());
31
+ const [idx, ...path] = chunk.path;
32
+ if (idx === void 0) {
33
+ controller.enqueue(chunk);
34
+ return;
35
+ }
36
+ const mappedIdx = mapping.get(idx);
37
+ if (mappedIdx === void 0) throw new Error("Path not found");
38
+ controller.enqueue({
39
+ ...chunk,
40
+ path: [mappedIdx, ...path]
41
+ });
42
+ } });
43
+ }
44
+ };
45
+ //#endregion
46
+ export { PathAppendDecoder, PathAppendEncoder, PathMergeEncoder };
47
+
54
48
  //# sourceMappingURL=path-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/path-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,sBAAmB;AAErC,MAAM,OAAO,iBAAkB,SAAQ,eAGtC;IACC,YAAY,GAAW;QACrB,KAAK,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,UAAU,CAAC,OAAO,CAAC;oBACjB,GAAG,KAAK;oBACR,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,eAGtC;IACC,YAAY,GAAW;QACrB,KAAK,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,MAAM,EACJ,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GACtB,GAAG,KAAK,CAAC;gBAEV,IAAI,GAAG,KAAK,IAAI;oBACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;gBAEjE,UAAU,CAAC,OAAO,CAAC;oBACjB,GAAG,KAAK;oBACR,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,eAGrC;IACC,YAAY,OAAgB;QAC1B,MAAM,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBAED,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,SAAS,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAE/D,UAAU,CAAC,OAAO,CAAC;oBACjB,GAAG,KAAK;oBACR,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"path-utils.js","names":[],"sources":["../../../../src/core/utils/stream/path-utils.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { Counter } from \"../Counter\";\n\nexport class PathAppendEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n controller.enqueue({\n ...chunk,\n path: [idx, ...chunk.path],\n });\n },\n });\n }\n}\n\nexport class PathAppendDecoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n const {\n path: [idx2, ...path],\n } = chunk;\n\n if (idx !== idx2)\n throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);\n\n controller.enqueue({\n ...chunk,\n path,\n });\n },\n });\n }\n}\n\nexport class PathMergeEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(counter: Counter) {\n const innerCounter = new Counter();\n const mapping = new Map<number, number>();\n super({\n transform(chunk, controller) {\n if (chunk.type === \"part-start\" && chunk.path.length === 0) {\n mapping.set(innerCounter.up(), counter.up());\n }\n\n const [idx, ...path] = chunk.path;\n if (idx === undefined) {\n controller.enqueue(chunk);\n return;\n }\n const mappedIdx = mapping.get(idx);\n if (mappedIdx === undefined) throw new Error(\"Path not found\");\n\n controller.enqueue({\n ...chunk,\n path: [mappedIdx, ...path],\n });\n },\n });\n }\n}\n"],"mappings":";;AAGA,IAAa,oBAAb,cAAuC,gBAGrC;CACA,YAAY,KAAa;EACvB,MAAM,EACJ,UAAU,OAAO,YAAY;GAC3B,WAAW,QAAQ;IACjB,GAAG;IACH,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI;GAC3B,CAAC;EACH,EACF,CAAC;CACH;AACF;AAEA,IAAa,oBAAb,cAAuC,gBAGrC;CACA,YAAY,KAAa;EACvB,MAAM,EACJ,UAAU,OAAO,YAAY;GAC3B,MAAM,EACJ,MAAM,CAAC,MAAM,GAAG,UACd;GAEJ,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,2BAA2B,IAAI,QAAQ,MAAM;GAE/D,WAAW,QAAQ;IACjB,GAAG;IACH;GACF,CAAC;EACH,EACF,CAAC;CACH;AACF;AAEA,IAAa,mBAAb,cAAsC,gBAGpC;CACA,YAAY,SAAkB;EAC5B,MAAM,eAAe,IAAI,QAAQ;EACjC,MAAM,0BAAU,IAAI,IAAoB;EACxC,MAAM,EACJ,UAAU,OAAO,YAAY;GAC3B,IAAI,MAAM,SAAS,gBAAgB,MAAM,KAAK,WAAW,GACvD,QAAQ,IAAI,aAAa,GAAG,GAAG,QAAQ,GAAG,CAAC;GAG7C,MAAM,CAAC,KAAK,GAAG,QAAQ,MAAM;GAC7B,IAAI,QAAQ,KAAA,GAAW;IACrB,WAAW,QAAQ,KAAK;IACxB;GACF;GACA,MAAM,YAAY,QAAQ,IAAI,GAAG;GACjC,IAAI,cAAc,KAAA,GAAW,MAAM,IAAI,MAAM,gBAAgB;GAE7D,WAAW,QAAQ;IACjB,GAAG;IACH,MAAM,CAAC,WAAW,GAAG,IAAI;GAC3B,CAAC;EACH,EACF,CAAC;CACH;AACF"}