assistant-stream 0.2.45 → 0.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +17 -16
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -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/serialization/ui-message-stream/UIMessageStream.d.ts +19 -0
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -0
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js +231 -0
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -0
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +78 -0
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -0
- package/dist/core/serialization/ui-message-stream/chunk-types.js +2 -0
- package/dist/core/serialization/ui-message-stream/chunk-types.js.map +1 -0
- 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/src/core/index.ts +6 -0
- package/src/core/serialization/ui-message-stream/UIMessageStream.test.ts +370 -0
- package/src/core/serialization/ui-message-stream/UIMessageStream.ts +300 -0
- package/src/core/serialization/ui-message-stream/chunk-types.ts +60 -0
- 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,52 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this._controller = controller;
|
|
7
|
-
}
|
|
8
|
-
append(textDelta) {
|
|
9
|
-
this._controller.enqueue({
|
|
10
|
-
type: "text-delta",
|
|
11
|
-
path: [],
|
|
12
|
-
textDelta
|
|
13
|
-
});
|
|
14
|
-
return this;
|
|
15
|
-
}
|
|
16
|
-
close() {
|
|
17
|
-
if (this._isClosed) return;
|
|
18
|
-
this._isClosed = true;
|
|
19
|
-
this._controller.enqueue({
|
|
20
|
-
type: "part-finish",
|
|
21
|
-
path: []
|
|
22
|
-
});
|
|
23
|
-
this._controller.close();
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
var createTextStream = (readable) => {
|
|
27
|
-
return new ReadableStream({
|
|
28
|
-
start(c) {
|
|
29
|
-
return readable.start?.(new TextStreamControllerImpl(c));
|
|
30
|
-
},
|
|
31
|
-
pull(c) {
|
|
32
|
-
return readable.pull?.(new TextStreamControllerImpl(c));
|
|
33
|
-
},
|
|
34
|
-
cancel(c) {
|
|
35
|
-
return readable.cancel?.(c);
|
|
1
|
+
class TextStreamControllerImpl {
|
|
2
|
+
_controller;
|
|
3
|
+
_isClosed = false;
|
|
4
|
+
constructor(controller) {
|
|
5
|
+
this._controller = controller;
|
|
36
6
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
7
|
+
append(textDelta) {
|
|
8
|
+
this._controller.enqueue({
|
|
9
|
+
type: "text-delta",
|
|
10
|
+
path: [],
|
|
11
|
+
textDelta,
|
|
12
|
+
});
|
|
13
|
+
return this;
|
|
44
14
|
}
|
|
45
|
-
|
|
46
|
-
|
|
15
|
+
close() {
|
|
16
|
+
if (this._isClosed)
|
|
17
|
+
return;
|
|
18
|
+
this._isClosed = true;
|
|
19
|
+
this._controller.enqueue({
|
|
20
|
+
type: "part-finish",
|
|
21
|
+
path: [],
|
|
22
|
+
});
|
|
23
|
+
this._controller.close();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export const createTextStream = (readable) => {
|
|
27
|
+
return new ReadableStream({
|
|
28
|
+
start(c) {
|
|
29
|
+
return readable.start?.(new TextStreamControllerImpl(c));
|
|
30
|
+
},
|
|
31
|
+
pull(c) {
|
|
32
|
+
return readable.pull?.(new TextStreamControllerImpl(c));
|
|
33
|
+
},
|
|
34
|
+
cancel(c) {
|
|
35
|
+
return readable.cancel?.(c);
|
|
36
|
+
},
|
|
37
|
+
});
|
|
47
38
|
};
|
|
48
|
-
export {
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
export const createTextStreamController = () => {
|
|
40
|
+
let controller;
|
|
41
|
+
const stream = createTextStream({
|
|
42
|
+
start(c) {
|
|
43
|
+
controller = c;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return [stream, controller];
|
|
51
47
|
};
|
|
52
48
|
//# sourceMappingURL=text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/core/modules/text.ts"],"names":[],"mappings":"AASA,MAAM,wBAAwB;IACpB,WAAW,CAAwD;IACnE,SAAS,GAAG,KAAK,CAAC;IAE1B,YACE,UAAiE;QAEjE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,EAAE;YACR,SAAS;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAkD,EACjC,EAAE;IACnB,OAAO,IAAI,cAAc,CAAC;QACxB,KAAK,CAAC,CAAC;YACL,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,CAAC;YACJ,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,CAAC;YACN,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,IAAI,UAAiC,CAAC;IACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,KAAK,CAAC,CAAC;YACL,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,EAAE,UAAU,CAAU,CAAC;AACvC,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AssistantStream } from "../AssistantStream";
|
|
2
|
-
import { ToolResponseLike } from "../tool/ToolResponse";
|
|
3
|
-
import { ReadonlyJSONValue } from "../../utils/json/json-value";
|
|
4
|
-
import { UnderlyingReadable } from "../utils/stream/UnderlyingReadable";
|
|
5
|
-
import { TextStreamController } from "./text";
|
|
1
|
+
import { AssistantStream } from "../AssistantStream.js";
|
|
2
|
+
import { ToolResponseLike } from "../tool/ToolResponse.js";
|
|
3
|
+
import { ReadonlyJSONValue } from "../../utils/json/json-value.js";
|
|
4
|
+
import { UnderlyingReadable } from "../utils/stream/UnderlyingReadable.js";
|
|
5
|
+
import { TextStreamController } from "./text.js";
|
|
6
6
|
export type ToolCallStreamController = {
|
|
7
7
|
argsText: TextStreamController;
|
|
8
8
|
setResponse(response: ToolResponseLike<ReadonlyJSONValue>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../src/core/modules/tool-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../src/core/modules/tool-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,8BAA2B;AAErD,OAAO,EAAE,gBAAgB,EAAE,gCAA6B;AACxD,OAAO,EAAE,iBAAiB,EAAE,uCAAoC;AAChE,OAAO,EAAE,kBAAkB,EAAE,8CAA2C;AACxE,OAAO,EAAoB,oBAAoB,EAAE,kBAAe;AAEhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,oBAAoB,CAAC;IAE/B,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAoFF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,kBAAkB,CAAC,wBAAwB,CAAC,KACrD,eAYF,CAAC;AAEF,eAAO,MAAM,8BAA8B,4DAQ1C,CAAC"}
|
|
@@ -1,95 +1,94 @@
|
|
|
1
|
-
// src/core/modules/tool-call.ts
|
|
2
1
|
import { createTextStream } from "./text.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
this.
|
|
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
|
-
_mergeTask;
|
|
42
|
-
get argsText() {
|
|
43
|
-
return this._argsTextController;
|
|
44
|
-
}
|
|
45
|
-
_argsTextController;
|
|
46
|
-
async setResponse(response) {
|
|
47
|
-
this._argsTextController.close();
|
|
48
|
-
await Promise.resolve();
|
|
49
|
-
this._controller.enqueue({
|
|
50
|
-
type: "result",
|
|
51
|
-
path: [],
|
|
52
|
-
...response.artifact !== void 0 ? { artifact: response.artifact } : {},
|
|
53
|
-
result: response.result,
|
|
54
|
-
isError: response.isError ?? false
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
async close() {
|
|
58
|
-
if (this._isClosed) return;
|
|
59
|
-
this._isClosed = true;
|
|
60
|
-
this._argsTextController.close();
|
|
61
|
-
await this._mergeTask;
|
|
62
|
-
this._controller.enqueue({
|
|
63
|
-
type: "part-finish",
|
|
64
|
-
path: []
|
|
65
|
-
});
|
|
66
|
-
this._controller.close();
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
var createToolCallStream = (readable) => {
|
|
70
|
-
return new ReadableStream({
|
|
71
|
-
start(c) {
|
|
72
|
-
return readable.start?.(new ToolCallStreamControllerImpl(c));
|
|
73
|
-
},
|
|
74
|
-
pull(c) {
|
|
75
|
-
return readable.pull?.(new ToolCallStreamControllerImpl(c));
|
|
76
|
-
},
|
|
77
|
-
cancel(c) {
|
|
78
|
-
return readable.cancel?.(c);
|
|
2
|
+
class ToolCallStreamControllerImpl {
|
|
3
|
+
_controller;
|
|
4
|
+
_isClosed = false;
|
|
5
|
+
_mergeTask;
|
|
6
|
+
constructor(_controller) {
|
|
7
|
+
this._controller = _controller;
|
|
8
|
+
const stream = createTextStream({
|
|
9
|
+
start: (c) => {
|
|
10
|
+
this._argsTextController = c;
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
let hasArgsText = false;
|
|
14
|
+
this._mergeTask = stream.pipeTo(new WritableStream({
|
|
15
|
+
write: (chunk) => {
|
|
16
|
+
switch (chunk.type) {
|
|
17
|
+
case "text-delta":
|
|
18
|
+
hasArgsText = true;
|
|
19
|
+
this._controller.enqueue(chunk);
|
|
20
|
+
break;
|
|
21
|
+
case "part-finish":
|
|
22
|
+
if (!hasArgsText) {
|
|
23
|
+
// if no argsText was provided, assume empty object
|
|
24
|
+
this._controller.enqueue({
|
|
25
|
+
type: "text-delta",
|
|
26
|
+
textDelta: "{}",
|
|
27
|
+
path: [],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
this._controller.enqueue({
|
|
31
|
+
type: "tool-call-args-text-finish",
|
|
32
|
+
path: [],
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
throw new Error(`Unexpected chunk type: ${chunk.type}`);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
}));
|
|
79
40
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
var createToolCallStreamController = () => {
|
|
83
|
-
let controller;
|
|
84
|
-
const stream = createToolCallStream({
|
|
85
|
-
start(c) {
|
|
86
|
-
controller = c;
|
|
41
|
+
get argsText() {
|
|
42
|
+
return this._argsTextController;
|
|
87
43
|
}
|
|
88
|
-
|
|
89
|
-
|
|
44
|
+
_argsTextController;
|
|
45
|
+
async setResponse(response) {
|
|
46
|
+
this._argsTextController.close();
|
|
47
|
+
await Promise.resolve(); // flush microtask queue
|
|
48
|
+
// TODO switch argsTextController to be something that doesn'#t require this
|
|
49
|
+
this._controller.enqueue({
|
|
50
|
+
type: "result",
|
|
51
|
+
path: [],
|
|
52
|
+
...(response.artifact !== undefined
|
|
53
|
+
? { artifact: response.artifact }
|
|
54
|
+
: {}),
|
|
55
|
+
result: response.result,
|
|
56
|
+
isError: response.isError ?? false,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async close() {
|
|
60
|
+
if (this._isClosed)
|
|
61
|
+
return;
|
|
62
|
+
this._isClosed = true;
|
|
63
|
+
this._argsTextController.close();
|
|
64
|
+
await this._mergeTask;
|
|
65
|
+
this._controller.enqueue({
|
|
66
|
+
type: "part-finish",
|
|
67
|
+
path: [],
|
|
68
|
+
});
|
|
69
|
+
this._controller.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export const createToolCallStream = (readable) => {
|
|
73
|
+
return new ReadableStream({
|
|
74
|
+
start(c) {
|
|
75
|
+
return readable.start?.(new ToolCallStreamControllerImpl(c));
|
|
76
|
+
},
|
|
77
|
+
pull(c) {
|
|
78
|
+
return readable.pull?.(new ToolCallStreamControllerImpl(c));
|
|
79
|
+
},
|
|
80
|
+
cancel(c) {
|
|
81
|
+
return readable.cancel?.(c);
|
|
82
|
+
},
|
|
83
|
+
});
|
|
90
84
|
};
|
|
91
|
-
export {
|
|
92
|
-
|
|
93
|
-
|
|
85
|
+
export const createToolCallStreamController = () => {
|
|
86
|
+
let controller;
|
|
87
|
+
const stream = createToolCallStream({
|
|
88
|
+
start(c) {
|
|
89
|
+
controller = c;
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
return [stream, controller];
|
|
94
93
|
};
|
|
95
94
|
//# sourceMappingURL=tool-call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"tool-call.js","sourceRoot":"","sources":["../../../src/core/modules/tool-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReadonlyJSONValue } from "../../utils";
|
|
2
|
-
import { ObjectStreamOperation } from "./types";
|
|
1
|
+
import { ReadonlyJSONValue } from "../../utils.js";
|
|
2
|
+
import { ObjectStreamOperation } from "./types.js";
|
|
3
3
|
export declare class ObjectStreamAccumulator {
|
|
4
4
|
private _state;
|
|
5
5
|
constructor(initialValue?: ReadonlyJSONValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectStreamAccumulator.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamAccumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,
|
|
1
|
+
{"version":3,"file":"ObjectStreamAccumulator.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamAccumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,uBAAoB;AACpE,OAAO,EAAE,qBAAqB,EAAE,mBAAgB;AAEhD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,YAAY,GAAE,iBAAwB;IAIlD,IAAI,KAAK,sBAER;IAED,MAAM,CAAC,GAAG,EAAE,SAAS,qBAAqB,EAAE;IAO5C,OAAO,CAAC,MAAM,CAAC,KAAK;IAuBpB,OAAO,CAAC,MAAM,CAAC,UAAU;CAiC1B"}
|
|
@@ -1,62 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
this._state = initialValue;
|
|
6
|
-
}
|
|
7
|
-
get state() {
|
|
8
|
-
return this._state;
|
|
9
|
-
}
|
|
10
|
-
append(ops) {
|
|
11
|
-
this._state = ops.reduce(
|
|
12
|
-
(state, op) => _ObjectStreamAccumulator.apply(state, op),
|
|
13
|
-
this._state
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
static apply(state, op) {
|
|
17
|
-
const type = op.type;
|
|
18
|
-
switch (type) {
|
|
19
|
-
case "set":
|
|
20
|
-
return _ObjectStreamAccumulator.updatePath(
|
|
21
|
-
state,
|
|
22
|
-
op.path,
|
|
23
|
-
() => op.value
|
|
24
|
-
);
|
|
25
|
-
case "append-text":
|
|
26
|
-
return _ObjectStreamAccumulator.updatePath(state, op.path, (current) => {
|
|
27
|
-
if (typeof current !== "string")
|
|
28
|
-
throw new Error(`Expected string at path [${op.path.join(", ")}]`);
|
|
29
|
-
return current + op.value;
|
|
30
|
-
});
|
|
31
|
-
default: {
|
|
32
|
-
const _exhaustiveCheck = type;
|
|
33
|
-
throw new Error(`Invalid operation type: ${_exhaustiveCheck}`);
|
|
34
|
-
}
|
|
1
|
+
export class ObjectStreamAccumulator {
|
|
2
|
+
_state;
|
|
3
|
+
constructor(initialValue = null) {
|
|
4
|
+
this._state = initialValue;
|
|
35
5
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (path.length === 0) return updater(state);
|
|
39
|
-
state ??= {};
|
|
40
|
-
if (typeof state !== "object") {
|
|
41
|
-
throw new Error(`Invalid path: [${path.join(", ")}]`);
|
|
6
|
+
get state() {
|
|
7
|
+
return this._state;
|
|
42
8
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const idx = Number(key);
|
|
46
|
-
if (Number.isNaN(idx))
|
|
47
|
-
throw new Error(`Expected array index at [${path.join(", ")}]`);
|
|
48
|
-
if (idx > state.length || idx < 0)
|
|
49
|
-
throw new Error(`Insert array index out of bounds`);
|
|
50
|
-
const nextState2 = [...state];
|
|
51
|
-
nextState2[idx] = this.updatePath(nextState2[idx], rest, updater);
|
|
52
|
-
return nextState2;
|
|
9
|
+
append(ops) {
|
|
10
|
+
this._state = ops.reduce((state, op) => ObjectStreamAccumulator.apply(state, op), this._state);
|
|
53
11
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
12
|
+
static apply(state, op) {
|
|
13
|
+
const type = op.type;
|
|
14
|
+
switch (type) {
|
|
15
|
+
case "set":
|
|
16
|
+
return ObjectStreamAccumulator.updatePath(state, op.path, () => op.value);
|
|
17
|
+
case "append-text":
|
|
18
|
+
return ObjectStreamAccumulator.updatePath(state, op.path, (current) => {
|
|
19
|
+
if (typeof current !== "string")
|
|
20
|
+
throw new Error(`Expected string at path [${op.path.join(", ")}]`);
|
|
21
|
+
return current + op.value;
|
|
22
|
+
});
|
|
23
|
+
default: {
|
|
24
|
+
const _exhaustiveCheck = type;
|
|
25
|
+
throw new Error(`Invalid operation type: ${_exhaustiveCheck}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static updatePath(state, path, updater) {
|
|
30
|
+
if (path.length === 0)
|
|
31
|
+
return updater(state);
|
|
32
|
+
// Initialize state as empty object if it's null and we're trying to set a property
|
|
33
|
+
state ??= {};
|
|
34
|
+
if (typeof state !== "object") {
|
|
35
|
+
throw new Error(`Invalid path: [${path.join(", ")}]`);
|
|
36
|
+
}
|
|
37
|
+
const [key, ...rest] = path;
|
|
38
|
+
if (Array.isArray(state)) {
|
|
39
|
+
const idx = Number(key);
|
|
40
|
+
if (Number.isNaN(idx))
|
|
41
|
+
throw new Error(`Expected array index at [${path.join(", ")}]`);
|
|
42
|
+
if (idx > state.length || idx < 0)
|
|
43
|
+
throw new Error(`Insert array index out of bounds`);
|
|
44
|
+
const nextState = [...state];
|
|
45
|
+
nextState[idx] = this.updatePath(nextState[idx], rest, updater);
|
|
46
|
+
return nextState;
|
|
47
|
+
}
|
|
48
|
+
const nextState = { ...state };
|
|
49
|
+
nextState[key] = this.updatePath(nextState[key], rest, updater);
|
|
50
|
+
return nextState;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
62
53
|
//# sourceMappingURL=ObjectStreamAccumulator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/object/ObjectStreamAccumulator.ts"],"
|
|
1
|
+
{"version":3,"file":"ObjectStreamAccumulator.js","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamAccumulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream";
|
|
2
|
-
import { ObjectStreamChunk } from "./types";
|
|
1
|
+
import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";
|
|
2
|
+
import { ObjectStreamChunk } from "./types.js";
|
|
3
3
|
export declare class ObjectStreamEncoder extends PipeableTransformStream<ObjectStreamChunk, Uint8Array> {
|
|
4
4
|
constructor();
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectStreamResponse.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"ObjectStreamResponse.d.ts","sourceRoot":"","sources":["../../../src/core/object/ObjectStreamResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,mDAAgD;AAGlF,OAAO,EAAE,iBAAiB,EAAyB,mBAAgB;AAEnE,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,iBAAiB,EACjB,UAAU,CACX;;CA6CA;AAED,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,UAAU,CAAC,WAAW,CAAC,EACvB,iBAAiB,CAClB;;CAsBA;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,IAAI,EAAE,cAAc,CAAC,iBAAiB,CAAC;CAUpD;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAU,QAAQ,KACjB,cAAc,CAAC,iBAAiB,CAWlC,CAAC"}
|