assistant-stream 0.2.44 → 0.2.46
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/dist/core/AssistantStream.d.ts +1 -1
- package/dist/core/AssistantStream.d.ts.map +1 -1
- package/dist/core/AssistantStream.js +15 -19
- package/dist/core/AssistantStream.js.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +2 -2
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
- package/dist/core/AssistantStreamChunk.js +1 -0
- package/dist/core/AssistantStreamChunk.js.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.d.ts +2 -2
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.js +45 -50
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +3 -3
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.js +339 -329
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/index.d.ts +16 -16
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -44
- package/dist/core/index.js.map +1 -1
- package/dist/core/modules/assistant-stream.d.ts +7 -7
- package/dist/core/modules/assistant-stream.d.ts.map +1 -1
- package/dist/core/modules/assistant-stream.js +159 -188
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/text.d.ts +2 -2
- package/dist/core/modules/text.d.ts.map +1 -1
- package/dist/core/modules/text.js +43 -47
- package/dist/core/modules/text.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts +5 -5
- package/dist/core/modules/tool-call.d.ts.map +1 -1
- package/dist/core/modules/tool-call.js +88 -89
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.d.ts +2 -2
- package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.js +49 -58
- package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
- package/dist/core/object/ObjectStreamResponse.d.ts +2 -2
- package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamResponse.js +70 -74
- package/dist/core/object/ObjectStreamResponse.js.map +1 -1
- package/dist/core/object/createObjectStream.d.ts +2 -2
- package/dist/core/object/createObjectStream.d.ts.map +1 -1
- package/dist/core/object/createObjectStream.js +45 -56
- package/dist/core/object/createObjectStream.js.map +1 -1
- package/dist/core/object/types.d.ts +1 -1
- package/dist/core/object/types.d.ts.map +1 -1
- package/dist/core/object/types.js +1 -0
- package/dist/core/object/types.js.map +1 -1
- package/dist/core/serialization/PlainText.d.ts +3 -3
- package/dist/core/serialization/PlainText.d.ts.map +1 -1
- package/dist/core/serialization/PlainText.js +46 -47
- package/dist/core/serialization/PlainText.js.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +3 -3
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js +117 -112
- package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.d.ts +3 -3
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.js +355 -354
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +2 -2
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.js +22 -26
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/serialization.js +23 -28
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/tool/ToolCallReader.d.ts +4 -4
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
- package/dist/core/tool/ToolCallReader.js +303 -303
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts +5 -5
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
- package/dist/core/tool/ToolExecutionStream.js +140 -143
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts +1 -1
- package/dist/core/tool/ToolResponse.d.ts.map +1 -1
- package/dist/core/tool/ToolResponse.js +25 -29
- package/dist/core/tool/ToolResponse.js.map +1 -1
- package/dist/core/tool/index.d.ts +5 -5
- package/dist/core/tool/index.d.ts.map +1 -1
- package/dist/core/tool/index.js +3 -13
- package/dist/core/tool/index.js.map +1 -1
- package/dist/core/tool/tool-types.d.ts +3 -3
- package/dist/core/tool/tool-types.d.ts.map +1 -1
- package/dist/core/tool/tool-types.js +1 -0
- package/dist/core/tool/tool-types.js.map +1 -1
- package/dist/core/tool/toolResultStream.d.ts +3 -3
- package/dist/core/tool/toolResultStream.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.js +118 -125
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/tool/type-path-utils.js +1 -0
- package/dist/core/tool/type-path-utils.js.map +1 -1
- package/dist/core/utils/Counter.js +6 -10
- package/dist/core/utils/Counter.js.map +1 -1
- package/dist/core/utils/generateId.js +1 -8
- package/dist/core/utils/generateId.js.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +42 -43
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +2 -2
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.js +35 -45
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.js +24 -26
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.js +10 -14
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
- package/dist/core/utils/stream/SSE.d.ts +1 -1
- package/dist/core/utils/stream/SSE.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.js +90 -98
- package/dist/core/utils/stream/SSE.js.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.js +1 -0
- package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -1
- package/dist/core/utils/stream/merge.d.ts +1 -1
- package/dist/core/utils/stream/merge.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.js +169 -81
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts +2 -2
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
- package/dist/core/utils/stream/path-utils.js +49 -56
- package/dist/core/utils/stream/path-utils.js.map +1 -1
- package/dist/core/utils/types.d.ts +1 -1
- package/dist/core/utils/types.d.ts.map +1 -1
- package/dist/core/utils/types.js +1 -0
- package/dist/core/utils/types.js.map +1 -1
- package/dist/core/utils/withPromiseOrValue.js +14 -14
- package/dist/core/utils/withPromiseOrValue.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/AsyncIterableStream.js +15 -16
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -7
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/json/fix-json.js +365 -343
- package/dist/utils/json/fix-json.js.map +1 -1
- package/dist/utils/json/index.d.ts +1 -1
- package/dist/utils/json/index.d.ts.map +1 -1
- package/dist/utils/json/index.js +1 -0
- package/dist/utils/json/index.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +1 -1
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/is-json.js +21 -25
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/json/json-value.js +1 -0
- package/dist/utils/json/json-value.js.map +1 -1
- package/dist/utils/json/parse-partial-json-object.d.ts +1 -1
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
- package/dist/utils/json/parse-partial-json-object.js +61 -56
- package/dist/utils/json/parse-partial-json-object.js.map +1 -1
- package/dist/utils/promiseWithResolvers.js +10 -13
- package/dist/utils/promiseWithResolvers.js.map +1 -1
- package/dist/utils.d.ts +5 -5
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -17
- package/dist/utils.js.map +1 -1
- package/package.json +26 -14
- package/dist/core/object/ObjectStream.test.d.ts +0 -2
- package/dist/core/object/ObjectStream.test.d.ts.map +0 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.test.d.ts +0 -2
- package/dist/core/serialization/assistant-transport/AssistantTransport.test.d.ts.map +0 -1
- package/dist/core/tool/toolResultStream.test.d.ts +0 -2
- package/dist/core/tool/toolResultStream.test.d.ts.map +0 -1
- package/dist/utils/json/parse-partial-json-object.test.d.ts +0 -2
- package/dist/utils/json/parse-partial-json-object.test.d.ts.map +0 -1
|
@@ -1,322 +1,322 @@
|
|
|
1
|
-
// src/core/tool/ToolCallReader.ts
|
|
2
1
|
import { promiseWithResolvers } from "../../utils/promiseWithResolvers.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "../../utils/json/parse-partial-json-object.js";
|
|
7
|
-
import {
|
|
8
|
-
asAsyncIterableStream
|
|
9
|
-
} from "../../utils/index.js";
|
|
2
|
+
import { parsePartialJsonObject, getPartialJsonObjectFieldState, } from "../../utils/json/parse-partial-json-object.js";
|
|
3
|
+
import { asAsyncIterableStream, } from "../../utils.js";
|
|
4
|
+
// TODO: remove dispose
|
|
10
5
|
function getField(obj, fieldPath) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
let current = obj;
|
|
7
|
+
for (const key of fieldPath) {
|
|
8
|
+
if (current === undefined || current === null) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
current = current[key];
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
return current;
|
|
13
|
+
return current;
|
|
19
14
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
15
|
+
class GetHandle {
|
|
16
|
+
resolve;
|
|
17
|
+
reject;
|
|
18
|
+
disposed = false;
|
|
19
|
+
fieldPath;
|
|
20
|
+
constructor(resolve, reject, fieldPath) {
|
|
21
|
+
this.resolve = resolve;
|
|
22
|
+
this.reject = reject;
|
|
23
|
+
this.fieldPath = fieldPath;
|
|
24
|
+
}
|
|
25
|
+
update(args) {
|
|
26
|
+
if (this.disposed)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
// Check if the field is complete
|
|
30
|
+
if (getPartialJsonObjectFieldState(args, this.fieldPath) === "complete") {
|
|
31
|
+
const value = getField(args, this.fieldPath);
|
|
32
|
+
if (value !== undefined) {
|
|
33
|
+
this.resolve(value);
|
|
34
|
+
this.dispose();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
this.reject(e);
|
|
40
|
+
this.dispose();
|
|
41
41
|
}
|
|
42
|
-
}
|
|
43
|
-
} catch (e) {
|
|
44
|
-
this.reject(e);
|
|
45
|
-
this.dispose();
|
|
46
42
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.disposed = true;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
var StreamValuesHandle = class {
|
|
53
|
-
controller;
|
|
54
|
-
disposed = false;
|
|
55
|
-
fieldPath;
|
|
56
|
-
constructor(controller, fieldPath) {
|
|
57
|
-
this.controller = controller;
|
|
58
|
-
this.fieldPath = fieldPath;
|
|
59
|
-
}
|
|
60
|
-
update(args) {
|
|
61
|
-
if (this.disposed) return;
|
|
62
|
-
try {
|
|
63
|
-
const value = getField(args, this.fieldPath);
|
|
64
|
-
if (value !== void 0) {
|
|
65
|
-
this.controller.enqueue(value);
|
|
66
|
-
}
|
|
67
|
-
if (getPartialJsonObjectFieldState(
|
|
68
|
-
args,
|
|
69
|
-
this.fieldPath
|
|
70
|
-
) === "complete") {
|
|
71
|
-
this.controller.close();
|
|
72
|
-
this.dispose();
|
|
73
|
-
}
|
|
74
|
-
} catch (e) {
|
|
75
|
-
this.controller.error(e);
|
|
76
|
-
this.dispose();
|
|
43
|
+
dispose() {
|
|
44
|
+
this.disposed = true;
|
|
77
45
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
fieldPath;
|
|
87
|
-
lastValue = void 0;
|
|
88
|
-
constructor(controller, fieldPath) {
|
|
89
|
-
this.controller = controller;
|
|
90
|
-
this.fieldPath = fieldPath;
|
|
91
|
-
}
|
|
92
|
-
update(args) {
|
|
93
|
-
if (this.disposed) return;
|
|
94
|
-
try {
|
|
95
|
-
const value = getField(args, this.fieldPath);
|
|
96
|
-
if (value !== void 0 && typeof value === "string") {
|
|
97
|
-
const delta = value.substring(this.lastValue?.length || 0);
|
|
98
|
-
this.lastValue = value;
|
|
99
|
-
this.controller.enqueue(delta);
|
|
100
|
-
}
|
|
101
|
-
if (getPartialJsonObjectFieldState(
|
|
102
|
-
args,
|
|
103
|
-
this.fieldPath
|
|
104
|
-
) === "complete") {
|
|
105
|
-
this.controller.close();
|
|
106
|
-
this.dispose();
|
|
107
|
-
}
|
|
108
|
-
} catch (e) {
|
|
109
|
-
this.controller.error(e);
|
|
110
|
-
this.dispose();
|
|
46
|
+
}
|
|
47
|
+
class StreamValuesHandle {
|
|
48
|
+
controller;
|
|
49
|
+
disposed = false;
|
|
50
|
+
fieldPath;
|
|
51
|
+
constructor(controller, fieldPath) {
|
|
52
|
+
this.controller = controller;
|
|
53
|
+
this.fieldPath = fieldPath;
|
|
111
54
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
update(args) {
|
|
127
|
-
if (this.disposed) return;
|
|
128
|
-
try {
|
|
129
|
-
const array = getField(args, this.fieldPath);
|
|
130
|
-
if (!Array.isArray(array)) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
for (let i = 0; i < array.length; i++) {
|
|
134
|
-
if (!this.processedIndexes.has(i)) {
|
|
135
|
-
const elementPath = [...this.fieldPath, i];
|
|
136
|
-
if (getPartialJsonObjectFieldState(
|
|
137
|
-
args,
|
|
138
|
-
elementPath
|
|
139
|
-
) === "complete") {
|
|
140
|
-
this.controller.enqueue(array[i]);
|
|
141
|
-
this.processedIndexes.add(i);
|
|
142
|
-
}
|
|
55
|
+
update(args) {
|
|
56
|
+
if (this.disposed)
|
|
57
|
+
return;
|
|
58
|
+
try {
|
|
59
|
+
const value = getField(args, this.fieldPath);
|
|
60
|
+
if (value !== undefined) {
|
|
61
|
+
this.controller.enqueue(value);
|
|
62
|
+
}
|
|
63
|
+
// Check if the field is complete, if so close the stream
|
|
64
|
+
if (getPartialJsonObjectFieldState(args, this.fieldPath) === "complete") {
|
|
65
|
+
this.controller.close();
|
|
66
|
+
this.dispose();
|
|
67
|
+
}
|
|
143
68
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
69
|
+
catch (e) {
|
|
70
|
+
this.controller.error(e);
|
|
71
|
+
this.dispose();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
dispose() {
|
|
75
|
+
this.disposed = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class StreamTextHandle {
|
|
79
|
+
controller;
|
|
80
|
+
disposed = false;
|
|
81
|
+
fieldPath;
|
|
82
|
+
lastValue = undefined;
|
|
83
|
+
constructor(controller, fieldPath) {
|
|
84
|
+
this.controller = controller;
|
|
85
|
+
this.fieldPath = fieldPath;
|
|
155
86
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
87
|
+
update(args) {
|
|
88
|
+
if (this.disposed)
|
|
89
|
+
return;
|
|
90
|
+
try {
|
|
91
|
+
const value = getField(args, this.fieldPath);
|
|
92
|
+
if (value !== undefined && typeof value === "string") {
|
|
93
|
+
const delta = value.substring(this.lastValue?.length || 0);
|
|
94
|
+
this.lastValue = value;
|
|
95
|
+
this.controller.enqueue(delta);
|
|
96
|
+
}
|
|
97
|
+
// Check if the field is complete, if so close the stream
|
|
98
|
+
if (getPartialJsonObjectFieldState(args, this.fieldPath) === "complete") {
|
|
99
|
+
this.controller.close();
|
|
100
|
+
this.dispose();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
this.controller.error(e);
|
|
105
|
+
this.dispose();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
dispose() {
|
|
109
|
+
this.disposed = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
class ForEachHandle {
|
|
113
|
+
controller;
|
|
114
|
+
disposed = false;
|
|
115
|
+
fieldPath;
|
|
116
|
+
processedIndexes = new Set();
|
|
117
|
+
constructor(controller, fieldPath) {
|
|
118
|
+
this.controller = controller;
|
|
119
|
+
this.fieldPath = fieldPath;
|
|
120
|
+
}
|
|
121
|
+
update(args) {
|
|
122
|
+
if (this.disposed)
|
|
123
|
+
return;
|
|
124
|
+
try {
|
|
125
|
+
const array = getField(args, this.fieldPath);
|
|
126
|
+
if (!Array.isArray(array)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Check each array element and emit completed ones that haven't been processed
|
|
130
|
+
for (let i = 0; i < array.length; i++) {
|
|
131
|
+
if (!this.processedIndexes.has(i)) {
|
|
132
|
+
const elementPath = [...this.fieldPath, i];
|
|
133
|
+
if (getPartialJsonObjectFieldState(args, elementPath) === "complete") {
|
|
134
|
+
this.controller.enqueue(array[i]);
|
|
135
|
+
this.processedIndexes.add(i);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Check if the entire array is complete
|
|
140
|
+
if (getPartialJsonObjectFieldState(args, this.fieldPath) === "complete") {
|
|
141
|
+
this.controller.close();
|
|
142
|
+
this.dispose();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
this.controller.error(e);
|
|
147
|
+
this.dispose();
|
|
183
148
|
}
|
|
184
|
-
}
|
|
185
|
-
} catch (error) {
|
|
186
|
-
console.error("Error processing argument stream:", error);
|
|
187
|
-
for (const handle of this.handles) {
|
|
188
|
-
handle.dispose();
|
|
189
|
-
}
|
|
190
149
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
150
|
+
dispose() {
|
|
151
|
+
this.disposed = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Implementation of ToolCallReader that uses stream of partial JSON
|
|
155
|
+
export class ToolCallArgsReaderImpl {
|
|
156
|
+
argTextDeltas;
|
|
157
|
+
handles = new Set();
|
|
158
|
+
args = parsePartialJsonObject("");
|
|
159
|
+
constructor(argTextDeltas) {
|
|
160
|
+
this.argTextDeltas = argTextDeltas;
|
|
161
|
+
this.processStream();
|
|
162
|
+
}
|
|
163
|
+
async processStream() {
|
|
164
|
+
try {
|
|
165
|
+
let accumulatedText = "";
|
|
166
|
+
const reader = this.argTextDeltas.getReader();
|
|
167
|
+
while (true) {
|
|
168
|
+
const { value, done } = await reader.read();
|
|
169
|
+
if (done)
|
|
170
|
+
break;
|
|
171
|
+
accumulatedText += value;
|
|
172
|
+
const parsedArgs = parsePartialJsonObject(accumulatedText);
|
|
173
|
+
if (parsedArgs !== undefined) {
|
|
174
|
+
this.args = parsedArgs;
|
|
175
|
+
// Notify all handles of the updated args
|
|
176
|
+
for (const handle of this.handles) {
|
|
177
|
+
handle.update(parsedArgs);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
207
181
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const simplePath = fieldPath;
|
|
215
|
-
const stream = new ReadableStream({
|
|
216
|
-
start: (controller) => {
|
|
217
|
-
const handle = new StreamValuesHandle(controller, simplePath);
|
|
218
|
-
this.handles.add(handle);
|
|
219
|
-
handle.update(this.args);
|
|
220
|
-
},
|
|
221
|
-
cancel: () => {
|
|
222
|
-
for (const handle of this.handles) {
|
|
223
|
-
if (handle instanceof StreamValuesHandle) {
|
|
224
|
-
handle.dispose();
|
|
225
|
-
this.handles.delete(handle);
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error("Error processing argument stream:", error);
|
|
184
|
+
// Notify handles of the error
|
|
185
|
+
for (const handle of this.handles) {
|
|
186
|
+
handle.dispose();
|
|
187
|
+
}
|
|
228
188
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
189
|
+
}
|
|
190
|
+
get(...fieldPath) {
|
|
191
|
+
return new Promise((resolve, reject) => {
|
|
192
|
+
const handle = new GetHandle(resolve, reject, fieldPath);
|
|
193
|
+
// Check if the field is already complete in current args
|
|
194
|
+
if (this.args &&
|
|
195
|
+
getPartialJsonObjectFieldState(this.args, fieldPath) === "complete") {
|
|
196
|
+
const value = getField(this.args, fieldPath);
|
|
197
|
+
if (value !== undefined) {
|
|
198
|
+
resolve(value);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
this.handles.add(handle);
|
|
203
|
+
handle.update(this.args);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
streamValues(...fieldPath) {
|
|
207
|
+
// Use a type assertion to convert the complex TypePath to a simple array
|
|
208
|
+
const simplePath = fieldPath;
|
|
209
|
+
const stream = new ReadableStream({
|
|
210
|
+
start: (controller) => {
|
|
211
|
+
const handle = new StreamValuesHandle(controller, simplePath);
|
|
212
|
+
this.handles.add(handle);
|
|
213
|
+
// Check current args immediately
|
|
214
|
+
handle.update(this.args);
|
|
215
|
+
},
|
|
216
|
+
cancel: () => {
|
|
217
|
+
// Find and dispose the corresponding handle
|
|
218
|
+
for (const handle of this.handles) {
|
|
219
|
+
if (handle instanceof StreamValuesHandle) {
|
|
220
|
+
handle.dispose();
|
|
221
|
+
this.handles.delete(handle);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
return asAsyncIterableStream(stream);
|
|
228
|
+
}
|
|
229
|
+
streamText(...fieldPath) {
|
|
230
|
+
// Use a type assertion to convert the complex TypePath to a simple array
|
|
231
|
+
const simplePath = fieldPath;
|
|
232
|
+
const stream = new ReadableStream({
|
|
233
|
+
start: (controller) => {
|
|
234
|
+
const handle = new StreamTextHandle(controller, simplePath);
|
|
235
|
+
this.handles.add(handle);
|
|
236
|
+
// Check current args immediately
|
|
237
|
+
handle.update(this.args);
|
|
238
|
+
},
|
|
239
|
+
cancel: () => {
|
|
240
|
+
// Find and dispose the corresponding handle
|
|
241
|
+
for (const handle of this.handles) {
|
|
242
|
+
if (handle instanceof StreamTextHandle) {
|
|
243
|
+
handle.dispose();
|
|
244
|
+
this.handles.delete(handle);
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
return asAsyncIterableStream(stream);
|
|
251
|
+
}
|
|
252
|
+
forEach(...fieldPath) {
|
|
253
|
+
// Use a type assertion to convert the complex TypePath to a simple array
|
|
254
|
+
const simplePath = fieldPath;
|
|
255
|
+
const stream = new ReadableStream({
|
|
256
|
+
start: (controller) => {
|
|
257
|
+
const handle = new ForEachHandle(controller, simplePath);
|
|
258
|
+
this.handles.add(handle);
|
|
259
|
+
// Check current args immediately
|
|
260
|
+
handle.update(this.args);
|
|
261
|
+
},
|
|
262
|
+
cancel: () => {
|
|
263
|
+
// Find and dispose the corresponding handle
|
|
264
|
+
for (const handle of this.handles) {
|
|
265
|
+
if (handle instanceof ForEachHandle) {
|
|
266
|
+
handle.dispose();
|
|
267
|
+
this.handles.delete(handle);
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
return asAsyncIterableStream(stream);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export class ToolCallResponseReaderImpl {
|
|
277
|
+
promise;
|
|
278
|
+
constructor(promise) {
|
|
279
|
+
this.promise = promise;
|
|
280
|
+
}
|
|
281
|
+
get() {
|
|
282
|
+
return this.promise;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
export class ToolCallReaderImpl {
|
|
286
|
+
args;
|
|
287
|
+
response;
|
|
288
|
+
writable;
|
|
289
|
+
resolve;
|
|
290
|
+
argsText = "";
|
|
291
|
+
constructor() {
|
|
292
|
+
const stream = new TransformStream();
|
|
293
|
+
this.writable = stream.writable;
|
|
294
|
+
this.args = new ToolCallArgsReaderImpl(stream.readable);
|
|
295
|
+
const { promise, resolve } = promiseWithResolvers();
|
|
296
|
+
this.resolve = resolve;
|
|
297
|
+
this.response = new ToolCallResponseReaderImpl(promise);
|
|
298
|
+
}
|
|
299
|
+
async appendArgsTextDelta(text) {
|
|
300
|
+
const writer = this.writable.getWriter();
|
|
301
|
+
try {
|
|
302
|
+
await writer.write(text);
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
console.warn(err);
|
|
248
306
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
return asAsyncIterableStream(stream);
|
|
252
|
-
}
|
|
253
|
-
forEach(...fieldPath) {
|
|
254
|
-
const simplePath = fieldPath;
|
|
255
|
-
const stream = new ReadableStream({
|
|
256
|
-
start: (controller) => {
|
|
257
|
-
const handle = new ForEachHandle(controller, simplePath);
|
|
258
|
-
this.handles.add(handle);
|
|
259
|
-
handle.update(this.args);
|
|
260
|
-
},
|
|
261
|
-
cancel: () => {
|
|
262
|
-
for (const handle of this.handles) {
|
|
263
|
-
if (handle instanceof ForEachHandle) {
|
|
264
|
-
handle.dispose();
|
|
265
|
-
this.handles.delete(handle);
|
|
266
|
-
break;
|
|
267
|
-
}
|
|
307
|
+
finally {
|
|
308
|
+
writer.releaseLock();
|
|
268
309
|
}
|
|
269
|
-
|
|
270
|
-
});
|
|
271
|
-
return asAsyncIterableStream(stream);
|
|
272
|
-
}
|
|
273
|
-
};
|
|
274
|
-
var ToolCallResponseReaderImpl = class {
|
|
275
|
-
constructor(promise) {
|
|
276
|
-
this.promise = promise;
|
|
277
|
-
}
|
|
278
|
-
get() {
|
|
279
|
-
return this.promise;
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
var ToolCallReaderImpl = class {
|
|
283
|
-
args;
|
|
284
|
-
response;
|
|
285
|
-
writable;
|
|
286
|
-
resolve;
|
|
287
|
-
argsText = "";
|
|
288
|
-
constructor() {
|
|
289
|
-
const stream = new TransformStream();
|
|
290
|
-
this.writable = stream.writable;
|
|
291
|
-
this.args = new ToolCallArgsReaderImpl(stream.readable);
|
|
292
|
-
const { promise, resolve } = promiseWithResolvers();
|
|
293
|
-
this.resolve = resolve;
|
|
294
|
-
this.response = new ToolCallResponseReaderImpl(promise);
|
|
295
|
-
}
|
|
296
|
-
async appendArgsTextDelta(text) {
|
|
297
|
-
const writer = this.writable.getWriter();
|
|
298
|
-
try {
|
|
299
|
-
await writer.write(text);
|
|
300
|
-
} catch (err) {
|
|
301
|
-
console.warn(err);
|
|
302
|
-
} finally {
|
|
303
|
-
writer.releaseLock();
|
|
310
|
+
this.argsText += text;
|
|
304
311
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
setResponse(value) {
|
|
308
|
-
this.resolve(value);
|
|
309
|
-
}
|
|
310
|
-
result = {
|
|
311
|
-
get: async () => {
|
|
312
|
-
const response = await this.response.get();
|
|
313
|
-
return response.result;
|
|
312
|
+
setResponse(value) {
|
|
313
|
+
this.resolve(value);
|
|
314
314
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
315
|
+
result = {
|
|
316
|
+
get: async () => {
|
|
317
|
+
const response = await this.response.get();
|
|
318
|
+
return response.result;
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
322
|
//# sourceMappingURL=ToolCallReader.js.map
|