assistant-stream 0.3.15 → 0.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/core/AssistantStream.d.ts +35 -31
- package/dist/core/AssistantStream.d.ts.map +1 -1
- package/dist/core/AssistantStream.js +39 -37
- package/dist/core/AssistantStream.js.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +71 -78
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
- package/dist/core/AssistantStreamChunk.js +0 -2
- package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.js +52 -48
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/TimingTracker.d.ts +15 -11
- package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
- package/dist/core/accumulators/TimingTracker.js +36 -43
- package/dist/core/accumulators/TimingTracker.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/converters/toGenericMessages.d.ts +49 -47
- package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
- package/dist/core/converters/toGenericMessages.js +122 -136
- package/dist/core/converters/toGenericMessages.js.map +1 -1
- package/dist/core/modules/assistant-stream.d.ts +62 -66
- package/dist/core/modules/assistant-stream.d.ts.map +1 -1
- package/dist/core/modules/assistant-stream.js +176 -182
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/text.d.ts +11 -7
- package/dist/core/modules/text.d.ts.map +1 -1
- package/dist/core/modules/text.js +45 -45
- package/dist/core/modules/text.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts +15 -11
- package/dist/core/modules/tool-call.d.ts.map +1 -1
- package/dist/core/modules/tool-call.js +81 -96
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
- package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.js +44 -52
- package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
- package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
- package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamResponse.js +52 -71
- package/dist/core/object/ObjectStreamResponse.js.map +1 -1
- package/dist/core/object/createObjectStream.d.ts +14 -8
- package/dist/core/object/createObjectStream.d.ts.map +1 -1
- package/dist/core/object/createObjectStream.js +50 -47
- package/dist/core/object/createObjectStream.js.map +1 -1
- package/dist/core/object/types.d.ts +14 -11
- package/dist/core/object/types.d.ts.map +1 -1
- package/dist/core/object/types.js +0 -2
- package/dist/core/serialization/PlainText.d.ts +11 -7
- package/dist/core/serialization/PlainText.d.ts.map +1 -1
- package/dist/core/serialization/PlainText.js +40 -48
- package/dist/core/serialization/PlainText.js.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
- package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.js +320 -371
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.js +27 -23
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/serialization.js +23 -24
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
- package/dist/core/tool/ToolCallReader.d.ts +34 -30
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
- package/dist/core/tool/ToolCallReader.js +264 -317
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
- package/dist/core/tool/ToolExecutionStream.js +123 -146
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts +41 -41
- package/dist/core/tool/ToolResponse.d.ts.map +1 -1
- package/dist/core/tool/ToolResponse.js +50 -56
- package/dist/core/tool/ToolResponse.js.map +1 -1
- package/dist/core/tool/schema-utils.d.ts +19 -15
- package/dist/core/tool/schema-utils.d.ts.map +1 -1
- package/dist/core/tool/schema-utils.js +50 -84
- package/dist/core/tool/schema-utils.js.map +1 -1
- package/dist/core/tool/tool-types.d.ts +103 -122
- package/dist/core/tool/tool-types.d.ts.map +1 -1
- package/dist/core/tool/tool-types.js +0 -2
- package/dist/core/tool/toolResultStream.d.ts +11 -9
- package/dist/core/tool/toolResultStream.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.js +127 -157
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/tool/type-path-utils.d.ts +8 -19
- package/dist/core/tool/type-path-utils.d.ts.map +1 -1
- package/dist/core/tool/type-path-utils.js +0 -2
- package/dist/core/utils/Counter.d.ts +6 -3
- package/dist/core/utils/Counter.d.ts.map +1 -1
- package/dist/core/utils/Counter.js +10 -6
- package/dist/core/utils/Counter.js.map +1 -1
- package/dist/core/utils/generateId.d.ts +4 -1
- package/dist/core/utils/generateId.d.ts.map +1 -1
- package/dist/core/utils/generateId.js +5 -1
- package/dist/core/utils/generateId.js.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
- package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.js +23 -26
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
- package/dist/core/utils/stream/SSE.d.ts +10 -6
- package/dist/core/utils/stream/SSE.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.js +79 -91
- package/dist/core/utils/stream/SSE.js.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
- package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
- package/dist/core/utils/stream/merge.d.ts +11 -7
- package/dist/core/utils/stream/merge.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.js +68 -170
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts +11 -7
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
- package/dist/core/utils/stream/path-utils.js +46 -52
- package/dist/core/utils/stream/path-utils.js.map +1 -1
- package/dist/core/utils/types.d.ts +109 -113
- package/dist/core/utils/types.d.ts.map +1 -1
- package/dist/core/utils/types.js +0 -2
- package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
- package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
- package/dist/core/utils/withPromiseOrValue.js +12 -15
- package/dist/core/utils/withPromiseOrValue.js.map +1 -1
- package/dist/index.d.ts +23 -24
- package/dist/index.js +16 -16
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
- package/dist/resumable/ResumableStreamContext.d.ts +28 -24
- package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
- package/dist/resumable/ResumableStreamContext.js +99 -114
- package/dist/resumable/ResumableStreamContext.js.map +1 -1
- package/dist/resumable/constants.d.ts +4 -1
- package/dist/resumable/constants.d.ts.map +1 -1
- package/dist/resumable/constants.js +5 -1
- package/dist/resumable/constants.js.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
- package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
- package/dist/resumable/errors.d.ts +8 -5
- package/dist/resumable/errors.d.ts.map +1 -1
- package/dist/resumable/errors.js +14 -12
- package/dist/resumable/errors.js.map +1 -1
- package/dist/resumable/index.d.ts +7 -7
- package/dist/resumable/index.js +5 -5
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
- package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
- package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
- package/dist/resumable/stores/ioredis.d.ts +9 -5
- package/dist/resumable/stores/ioredis.d.ts.map +1 -1
- package/dist/resumable/stores/ioredis.js +70 -82
- package/dist/resumable/stores/ioredis.js.map +1 -1
- package/dist/resumable/stores/redis-impl.d.ts +51 -48
- package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
- package/dist/resumable/stores/redis-impl.js +176 -176
- package/dist/resumable/stores/redis-impl.js.map +1 -1
- package/dist/resumable/stores/redis.d.ts +31 -28
- package/dist/resumable/stores/redis.d.ts.map +1 -1
- package/dist/resumable/stores/redis.js +87 -95
- package/dist/resumable/stores/redis.js.map +1 -1
- package/dist/resumable/types.d.ts +29 -26
- package/dist/resumable/types.d.ts.map +1 -1
- package/dist/resumable/types.js +0 -2
- package/dist/utils/AsyncIterableStream.d.ts +5 -2
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
- package/dist/utils/AsyncIterableStream.js +17 -16
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/json/fix-json.d.ts +4 -1
- package/dist/utils/json/fix-json.d.ts.map +1 -1
- package/dist/utils/json/fix-json.js +286 -380
- package/dist/utils/json/fix-json.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +8 -4
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/is-json.js +13 -21
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/json/json-value.d.ts +7 -4
- package/dist/utils/json/json-value.d.ts.map +1 -1
- package/dist/utils/json/json-value.js +0 -2
- package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
- package/dist/utils/json/parse-partial-json-object.js +50 -62
- package/dist/utils/json/parse-partial-json-object.js.map +1 -1
- package/dist/utils/promiseWithResolvers.d.ts +7 -4
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
- package/dist/utils/promiseWithResolvers.js +17 -10
- package/dist/utils/promiseWithResolvers.js.map +1 -1
- package/dist/utils.d.ts +6 -6
- package/dist/utils.js +5 -5
- package/package.json +3 -3
- package/src/core/modules/assistant-stream.test.ts +104 -0
- package/src/core/modules/assistant-stream.ts +13 -4
- package/dist/core/AssistantStreamChunk.js.map +0 -1
- package/dist/core/object/types.js.map +0 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
- package/dist/core/tool/tool-types.js.map +0 -1
- package/dist/core/tool/type-path-utils.js.map +0 -1
- package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
- package/dist/core/utils/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resumable/index.d.ts.map +0 -1
- package/dist/resumable/index.js.map +0 -1
- package/dist/resumable/types.js.map +0 -1
- package/dist/utils/json/json-value.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
|
@@ -1,173 +1,71 @@
|
|
|
1
1
|
import { promiseWithResolvers } from "../../../utils/promiseWithResolvers.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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","
|
|
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
|
|
1
|
+
import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
|
|
2
2
|
import { Counter } from "../Counter.js";
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
+
declare class PathAppendDecoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
|
|
9
|
+
constructor(idx: number);
|
|
8
10
|
}
|
|
9
|
-
|
|
10
|
-
|
|
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","
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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","
|
|
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"}
|