assistant-stream 0.1.5 → 0.1.7
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/ai-sdk/index.d.ts +5 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +199 -0
- package/dist/ai-sdk/index.js.map +1 -0
- package/dist/ai-sdk/index.mjs +173 -0
- package/dist/ai-sdk/index.mjs.map +1 -0
- package/dist/ai-sdk/language-model.d.ts +6 -0
- package/dist/ai-sdk/language-model.d.ts.map +1 -0
- package/dist/ai-sdk/language-model.js +131 -0
- package/dist/ai-sdk/language-model.js.map +1 -0
- package/dist/ai-sdk/language-model.mjs +106 -0
- package/dist/ai-sdk/language-model.mjs.map +1 -0
- package/dist/ai-sdk.d.ts +3 -24
- package/dist/ai-sdk.d.ts.map +1 -0
- package/dist/ai-sdk.js +5 -782
- package/dist/ai-sdk.js.map +1 -1
- package/dist/ai-sdk.mjs +4 -276
- package/dist/ai-sdk.mjs.map +1 -1
- package/dist/core/AssistantStream.d.ts +12 -0
- package/dist/core/AssistantStream.d.ts.map +1 -0
- package/dist/core/AssistantStream.js +46 -0
- package/dist/core/AssistantStream.js.map +1 -0
- package/dist/core/AssistantStream.mjs +21 -0
- package/dist/core/AssistantStream.mjs.map +1 -0
- package/dist/core/AssistantStreamChunk.d.ts +64 -0
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -0
- package/dist/core/AssistantStreamChunk.js +19 -0
- package/dist/core/AssistantStreamChunk.js.map +1 -0
- package/dist/core/AssistantStreamChunk.mjs +1 -0
- package/dist/core/AssistantStreamChunk.mjs.map +1 -0
- package/dist/core/accumulators/AssistantMessageStream.d.ts +13 -0
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -0
- package/dist/core/accumulators/AssistantMessageStream.js +79 -0
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -0
- package/dist/core/accumulators/AssistantMessageStream.mjs +54 -0
- package/dist/core/accumulators/AssistantMessageStream.mjs.map +1 -0
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +8 -0
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -0
- package/dist/core/accumulators/assistant-message-accumulator.js +334 -0
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -0
- package/dist/core/accumulators/assistant-message-accumulator.mjs +309 -0
- package/dist/core/accumulators/assistant-message-accumulator.mjs.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +55 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +26 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/core/modules/assistant-stream.d.ts +31 -0
- package/dist/core/modules/assistant-stream.d.ts.map +1 -0
- package/dist/core/modules/assistant-stream.js +224 -0
- package/dist/core/modules/assistant-stream.js.map +1 -0
- package/dist/core/modules/assistant-stream.mjs +202 -0
- package/dist/core/modules/assistant-stream.mjs.map +1 -0
- package/dist/core/modules/text.d.ts +9 -0
- package/dist/core/modules/text.d.ts.map +1 -0
- package/dist/core/modules/text.js +78 -0
- package/dist/core/modules/text.js.map +1 -0
- package/dist/core/modules/text.mjs +52 -0
- package/dist/core/modules/text.mjs.map +1 -0
- package/dist/core/modules/tool-call.d.ts +13 -0
- package/dist/core/modules/tool-call.d.ts.map +1 -0
- package/dist/core/modules/tool-call.js +110 -0
- package/dist/core/modules/tool-call.js.map +1 -0
- package/dist/core/modules/tool-call.mjs +84 -0
- package/dist/core/modules/tool-call.mjs.map +1 -0
- package/dist/core/serialization/PlainText.d.ts +11 -0
- package/dist/core/serialization/PlainText.d.ts.map +1 -0
- package/dist/core/serialization/PlainText.js +70 -0
- package/dist/core/serialization/PlainText.js.map +1 -0
- package/dist/core/serialization/PlainText.mjs +44 -0
- package/dist/core/serialization/PlainText.mjs.map +1 -0
- package/dist/core/serialization/data-stream/DataStream.d.ts +11 -0
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/DataStream.js +332 -0
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -0
- package/dist/core/serialization/data-stream/DataStream.mjs +311 -0
- package/dist/core/serialization/data-stream/DataStream.mjs.map +1 -0
- package/dist/core/serialization/data-stream/chunk-types.d.ts +86 -0
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/chunk-types.js +49 -0
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -0
- package/dist/core/serialization/data-stream/chunk-types.mjs +24 -0
- package/dist/core/serialization/data-stream/chunk-types.mjs.map +1 -0
- package/dist/core/serialization/data-stream/serialization.d.ts +8 -0
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/serialization.js +56 -0
- package/dist/core/serialization/data-stream/serialization.js.map +1 -0
- package/dist/core/serialization/data-stream/serialization.mjs +30 -0
- package/dist/core/serialization/data-stream/serialization.mjs.map +1 -0
- package/dist/core/tool/ToolCallReader.d.ts +33 -0
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -0
- package/dist/core/tool/ToolCallReader.js +339 -0
- package/dist/core/tool/ToolCallReader.js.map +1 -0
- package/dist/core/tool/ToolCallReader.mjs +315 -0
- package/dist/core/tool/ToolCallReader.mjs.map +1 -0
- package/dist/core/tool/ToolExecutionStream.d.ts +24 -0
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -0
- package/dist/core/tool/ToolExecutionStream.js +165 -0
- package/dist/core/tool/ToolExecutionStream.js.map +1 -0
- package/dist/core/tool/ToolExecutionStream.mjs +132 -0
- package/dist/core/tool/ToolExecutionStream.mjs.map +1 -0
- package/dist/core/tool/ToolResponse.d.ts +17 -0
- package/dist/core/tool/ToolResponse.d.ts.map +1 -0
- package/dist/core/tool/ToolResponse.js +47 -0
- package/dist/core/tool/ToolResponse.js.map +1 -0
- package/dist/core/tool/ToolResponse.mjs +22 -0
- package/dist/core/tool/ToolResponse.mjs.map +1 -0
- package/dist/core/tool/index.d.ts +6 -0
- package/dist/core/tool/index.d.ts.map +1 -0
- package/dist/core/tool/index.js +39 -0
- package/dist/core/tool/index.js.map +1 -0
- package/dist/core/tool/index.mjs +14 -0
- package/dist/core/tool/index.mjs.map +1 -0
- package/dist/core/tool/tool-types.d.ts +76 -0
- package/dist/core/tool/tool-types.d.ts.map +1 -0
- package/dist/core/tool/tool-types.js +19 -0
- package/dist/core/tool/tool-types.js.map +1 -0
- package/dist/core/tool/tool-types.mjs +1 -0
- package/dist/core/tool/tool-types.mjs.map +1 -0
- package/dist/core/tool/toolResultStream.d.ts +6 -0
- package/dist/core/tool/toolResultStream.d.ts.map +1 -0
- package/dist/core/tool/toolResultStream.js +104 -0
- package/dist/core/tool/toolResultStream.js.map +1 -0
- package/dist/core/tool/toolResultStream.mjs +78 -0
- package/dist/core/tool/toolResultStream.mjs.map +1 -0
- package/dist/core/tool/type-path-utils.d.ts +23 -0
- package/dist/core/tool/type-path-utils.d.ts.map +1 -0
- package/dist/core/tool/type-path-utils.js +19 -0
- package/dist/core/tool/type-path-utils.js.map +1 -0
- package/dist/core/tool/type-path-utils.mjs +1 -0
- package/dist/core/tool/type-path-utils.mjs.map +1 -0
- package/dist/core/utils/Counter.d.ts +5 -0
- package/dist/core/utils/Counter.d.ts.map +1 -0
- package/dist/core/utils/Counter.js +36 -0
- package/dist/core/utils/Counter.js.map +1 -0
- package/dist/core/utils/Counter.mjs +11 -0
- package/dist/core/utils/Counter.mjs.map +1 -0
- package/dist/core/utils/generateId.d.ts +2 -0
- package/dist/core/utils/generateId.d.ts.map +1 -0
- package/dist/core/utils/generateId.js +35 -0
- package/dist/core/utils/generateId.js.map +1 -0
- package/dist/core/utils/generateId.mjs +10 -0
- package/dist/core/utils/generateId.mjs.map +1 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +20 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +69 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.mjs +44 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.mjs.map +1 -0
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +15 -0
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/AssistantTransformStream.js +69 -0
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -0
- package/dist/core/utils/stream/AssistantTransformStream.mjs +46 -0
- package/dist/core/utils/stream/AssistantTransformStream.mjs.map +1 -0
- package/dist/core/utils/stream/LineDecoderStream.d.ts +5 -0
- package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -0
- package/dist/core/utils/stream/LineDecoderStream.js +52 -0
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -0
- package/dist/core/utils/stream/LineDecoderStream.mjs +27 -0
- package/dist/core/utils/stream/LineDecoderStream.mjs.map +1 -0
- package/dist/core/utils/stream/PipeableTransformStream.d.ts +4 -0
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/PipeableTransformStream.js +40 -0
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -0
- package/dist/core/utils/stream/PipeableTransformStream.mjs +15 -0
- package/dist/core/utils/stream/PipeableTransformStream.mjs.map +1 -0
- package/dist/core/utils/stream/UnderlyingReadable.d.ts +6 -0
- package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -0
- package/dist/core/utils/stream/UnderlyingReadable.js +19 -0
- package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -0
- package/dist/core/utils/stream/UnderlyingReadable.mjs +1 -0
- package/dist/core/utils/stream/UnderlyingReadable.mjs.map +1 -0
- package/dist/core/utils/stream/merge.d.ts +9 -0
- package/dist/core/utils/stream/merge.d.ts.map +1 -0
- package/dist/core/utils/stream/merge.js +110 -0
- package/dist/core/utils/stream/merge.js.map +1 -0
- package/dist/core/utils/stream/merge.mjs +85 -0
- package/dist/core/utils/stream/merge.mjs.map +1 -0
- package/dist/core/utils/stream/path-utils.d.ts +12 -0
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -0
- package/dist/core/utils/stream/path-utils.js +88 -0
- package/dist/core/utils/stream/path-utils.js.map +1 -0
- package/dist/core/utils/stream/path-utils.mjs +61 -0
- package/dist/core/utils/stream/path-utils.mjs.map +1 -0
- package/dist/core/utils/types.d.ts +102 -0
- package/dist/core/utils/types.d.ts.map +1 -0
- package/dist/core/utils/types.js +19 -0
- package/dist/core/utils/types.js.map +1 -0
- package/dist/core/utils/types.mjs +1 -0
- package/dist/core/utils/types.mjs.map +1 -0
- package/dist/core/utils/withPromiseOrValue.d.ts +2 -0
- package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -0
- package/dist/core/utils/withPromiseOrValue.js +42 -0
- package/dist/core/utils/withPromiseOrValue.js.map +1 -0
- package/dist/core/utils/withPromiseOrValue.mjs +17 -0
- package/dist/core/utils/withPromiseOrValue.mjs.map +1 -0
- package/dist/index.d.ts +2 -153
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -2318
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -957
- package/dist/index.mjs.map +1 -1
- package/dist/utils/AsyncIterableStream.d.ts +3 -0
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -0
- package/dist/utils/AsyncIterableStream.js +46 -0
- package/dist/utils/AsyncIterableStream.js.map +1 -0
- package/dist/utils/AsyncIterableStream.mjs +21 -0
- package/dist/utils/AsyncIterableStream.mjs.map +1 -0
- package/dist/utils/json/fix-json.d.ts +2 -0
- package/dist/utils/json/fix-json.d.ts.map +1 -0
- package/dist/{chunk-PQLDKUPN.mjs → utils/json/fix-json.js} +28 -66
- package/dist/utils/json/fix-json.js.map +1 -0
- package/dist/utils/json/fix-json.mjs +362 -0
- package/dist/utils/json/fix-json.mjs.map +1 -0
- package/dist/utils/json/is-json.d.ts +5 -0
- package/dist/utils/json/is-json.d.ts.map +1 -0
- package/dist/utils/json/is-json.js +56 -0
- package/dist/utils/json/is-json.js.map +1 -0
- package/dist/utils/json/is-json.mjs +29 -0
- package/dist/utils/json/is-json.mjs.map +1 -0
- package/dist/utils/json/json-value.d.ts +6 -0
- package/dist/utils/json/json-value.d.ts.map +1 -0
- package/dist/utils/json/json-value.js +19 -0
- package/dist/utils/json/json-value.js.map +1 -0
- package/dist/utils/json/json-value.mjs +1 -0
- package/dist/utils/json/json-value.mjs.map +1 -0
- package/dist/utils/json/parse-partial-json-object.d.ts +14 -0
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -0
- package/dist/utils/json/parse-partial-json-object.js +102 -0
- package/dist/utils/json/parse-partial-json-object.js.map +1 -0
- package/dist/utils/json/parse-partial-json-object.mjs +65 -0
- package/dist/utils/json/parse-partial-json-object.mjs.map +1 -0
- package/dist/utils/json/parse-partial-json-object.test.d.ts +2 -0
- package/dist/utils/json/parse-partial-json-object.test.d.ts.map +1 -0
- package/dist/utils/promiseWithResolvers.d.ts +6 -0
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -0
- package/dist/utils/promiseWithResolvers.js +40 -0
- package/dist/utils/promiseWithResolvers.js.map +1 -0
- package/dist/utils/promiseWithResolvers.mjs +15 -0
- package/dist/utils/promiseWithResolvers.mjs.map +1 -0
- package/dist/utils.d.ts +4 -16
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +5 -451
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs +7 -21
- package/dist/utils.mjs.map +1 -1
- package/package.json +2 -1
- package/dist/AsyncIterableStream-C3C8ZoXv.d.mts +0 -4
- package/dist/AsyncIterableStream-C3C8ZoXv.d.ts +0 -4
- package/dist/ai-sdk.d.mts +0 -24
- package/dist/assistant-stream-ISFjQ0mQ.d.mts +0 -225
- package/dist/assistant-stream-kAoIMgvk.d.ts +0 -225
- package/dist/chunk-EDE6WQ2R.mjs +0 -943
- package/dist/chunk-EDE6WQ2R.mjs.map +0 -1
- package/dist/chunk-PQLDKUPN.mjs.map +0 -1
- package/dist/index.d.mts +0 -153
- package/dist/json-value-Ch5eKkQ_.d.mts +0 -7
- package/dist/json-value-Ch5eKkQ_.d.ts +0 -7
- package/dist/utils.d.mts +0 -16
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/core/serialization/data-stream/DataStream.ts
|
|
21
|
+
var DataStream_exports = {};
|
|
22
|
+
__export(DataStream_exports, {
|
|
23
|
+
DataStreamDecoder: () => DataStreamDecoder,
|
|
24
|
+
DataStreamEncoder: () => DataStreamEncoder
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(DataStream_exports);
|
|
27
|
+
var import_AssistantTransformStream = require("../../utils/stream/AssistantTransformStream.js");
|
|
28
|
+
var import_PipeableTransformStream = require("../../utils/stream/PipeableTransformStream.js");
|
|
29
|
+
var import_chunk_types = require("./chunk-types.js");
|
|
30
|
+
var import_LineDecoderStream = require("../../utils/stream/LineDecoderStream.js");
|
|
31
|
+
var import_serialization = require("./serialization.js");
|
|
32
|
+
var import_AssistantMetaTransformStream = require("../../utils/stream/AssistantMetaTransformStream.js");
|
|
33
|
+
var DataStreamEncoder = class extends import_PipeableTransformStream.PipeableTransformStream {
|
|
34
|
+
headers = new Headers({
|
|
35
|
+
"Content-Type": "text/plain; charset=utf-8",
|
|
36
|
+
"x-vercel-ai-data-stream": "v1"
|
|
37
|
+
});
|
|
38
|
+
constructor() {
|
|
39
|
+
super((readable) => {
|
|
40
|
+
const transform = new TransformStream({
|
|
41
|
+
transform(chunk, controller) {
|
|
42
|
+
const type = chunk.type;
|
|
43
|
+
switch (type) {
|
|
44
|
+
case "part-start": {
|
|
45
|
+
const part = chunk.part;
|
|
46
|
+
if (part.type === "tool-call") {
|
|
47
|
+
const { type: type2, ...value } = part;
|
|
48
|
+
controller.enqueue({
|
|
49
|
+
type: import_chunk_types.DataStreamStreamChunkType.StartToolCall,
|
|
50
|
+
value
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (part.type === "source") {
|
|
54
|
+
const { type: type2, ...value } = part;
|
|
55
|
+
controller.enqueue({
|
|
56
|
+
type: import_chunk_types.DataStreamStreamChunkType.Source,
|
|
57
|
+
value
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "text-delta": {
|
|
63
|
+
const part = chunk.meta;
|
|
64
|
+
switch (part.type) {
|
|
65
|
+
case "text": {
|
|
66
|
+
controller.enqueue({
|
|
67
|
+
type: import_chunk_types.DataStreamStreamChunkType.TextDelta,
|
|
68
|
+
value: chunk.textDelta
|
|
69
|
+
});
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case "reasoning": {
|
|
73
|
+
controller.enqueue({
|
|
74
|
+
type: import_chunk_types.DataStreamStreamChunkType.ReasoningDelta,
|
|
75
|
+
value: chunk.textDelta
|
|
76
|
+
});
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case "tool-call": {
|
|
80
|
+
controller.enqueue({
|
|
81
|
+
type: import_chunk_types.DataStreamStreamChunkType.ToolCallArgsTextDelta,
|
|
82
|
+
value: {
|
|
83
|
+
toolCallId: part.toolCallId,
|
|
84
|
+
argsTextDelta: chunk.textDelta
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
throw new Error(
|
|
91
|
+
`Unsupported part type for text-delta: ${part.type}`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case "result": {
|
|
97
|
+
const part = chunk.meta;
|
|
98
|
+
if (part.type !== "tool-call") {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Result chunk on non-tool-call part not supported: ${part.type}`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
controller.enqueue({
|
|
104
|
+
type: import_chunk_types.DataStreamStreamChunkType.ToolCallResult,
|
|
105
|
+
value: {
|
|
106
|
+
toolCallId: part.toolCallId,
|
|
107
|
+
result: chunk.result,
|
|
108
|
+
artifact: chunk.artifact,
|
|
109
|
+
...chunk.isError ? { isError: chunk.isError } : {}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case "step-start": {
|
|
115
|
+
const { type: type2, ...value } = chunk;
|
|
116
|
+
controller.enqueue({
|
|
117
|
+
type: import_chunk_types.DataStreamStreamChunkType.StartStep,
|
|
118
|
+
value
|
|
119
|
+
});
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "step-finish": {
|
|
123
|
+
const { type: type2, ...value } = chunk;
|
|
124
|
+
controller.enqueue({
|
|
125
|
+
type: import_chunk_types.DataStreamStreamChunkType.FinishStep,
|
|
126
|
+
value
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case "message-finish": {
|
|
131
|
+
const { type: type2, ...value } = chunk;
|
|
132
|
+
controller.enqueue({
|
|
133
|
+
type: import_chunk_types.DataStreamStreamChunkType.FinishMessage,
|
|
134
|
+
value
|
|
135
|
+
});
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case "error": {
|
|
139
|
+
controller.enqueue({
|
|
140
|
+
type: import_chunk_types.DataStreamStreamChunkType.Error,
|
|
141
|
+
value: chunk.error
|
|
142
|
+
});
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case "annotations": {
|
|
146
|
+
controller.enqueue({
|
|
147
|
+
type: import_chunk_types.DataStreamStreamChunkType.Annotation,
|
|
148
|
+
value: chunk.annotations
|
|
149
|
+
});
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case "data": {
|
|
153
|
+
controller.enqueue({
|
|
154
|
+
type: import_chunk_types.DataStreamStreamChunkType.Data,
|
|
155
|
+
value: chunk.data
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
// TODO ignore for now
|
|
160
|
+
// in the future, we should create a handler that waits for text parts to finish before continuing
|
|
161
|
+
case "tool-call-args-text-finish":
|
|
162
|
+
case "part-finish":
|
|
163
|
+
break;
|
|
164
|
+
default: {
|
|
165
|
+
const exhaustiveCheck = type;
|
|
166
|
+
throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
return readable.pipeThrough(new import_AssistantMetaTransformStream.AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new import_serialization.DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
|
|
176
|
+
import_chunk_types.DataStreamStreamChunkType.StartToolCall,
|
|
177
|
+
import_chunk_types.DataStreamStreamChunkType.ToolCall,
|
|
178
|
+
import_chunk_types.DataStreamStreamChunkType.TextDelta,
|
|
179
|
+
import_chunk_types.DataStreamStreamChunkType.ReasoningDelta,
|
|
180
|
+
import_chunk_types.DataStreamStreamChunkType.Source,
|
|
181
|
+
import_chunk_types.DataStreamStreamChunkType.Error,
|
|
182
|
+
import_chunk_types.DataStreamStreamChunkType.FinishStep,
|
|
183
|
+
import_chunk_types.DataStreamStreamChunkType.FinishMessage
|
|
184
|
+
];
|
|
185
|
+
var DataStreamDecoder = class extends import_PipeableTransformStream.PipeableTransformStream {
|
|
186
|
+
constructor() {
|
|
187
|
+
super((readable) => {
|
|
188
|
+
const toolCallControllers = /* @__PURE__ */ new Map();
|
|
189
|
+
let activeToolCallArgsText;
|
|
190
|
+
const transform = new import_AssistantTransformStream.AssistantTransformStream({
|
|
191
|
+
transform(chunk, controller) {
|
|
192
|
+
const { type, value } = chunk;
|
|
193
|
+
if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
|
|
194
|
+
activeToolCallArgsText?.close();
|
|
195
|
+
activeToolCallArgsText = void 0;
|
|
196
|
+
}
|
|
197
|
+
switch (type) {
|
|
198
|
+
case import_chunk_types.DataStreamStreamChunkType.ReasoningDelta:
|
|
199
|
+
controller.appendReasoning(value);
|
|
200
|
+
break;
|
|
201
|
+
case import_chunk_types.DataStreamStreamChunkType.TextDelta:
|
|
202
|
+
controller.appendText(value);
|
|
203
|
+
break;
|
|
204
|
+
case import_chunk_types.DataStreamStreamChunkType.StartToolCall: {
|
|
205
|
+
const { toolCallId, toolName } = value;
|
|
206
|
+
const toolCallController = controller.addToolCallPart({
|
|
207
|
+
toolCallId,
|
|
208
|
+
toolName
|
|
209
|
+
});
|
|
210
|
+
toolCallControllers.set(toolCallId, toolCallController);
|
|
211
|
+
activeToolCallArgsText = toolCallController.argsText;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case import_chunk_types.DataStreamStreamChunkType.ToolCallArgsTextDelta: {
|
|
215
|
+
const { toolCallId, argsTextDelta } = value;
|
|
216
|
+
const toolCallController = toolCallControllers.get(toolCallId);
|
|
217
|
+
if (!toolCallController)
|
|
218
|
+
throw new Error(
|
|
219
|
+
"Encountered tool call with unknown id: " + toolCallId
|
|
220
|
+
);
|
|
221
|
+
toolCallController.argsText.append(argsTextDelta);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case import_chunk_types.DataStreamStreamChunkType.ToolCallResult: {
|
|
225
|
+
const { toolCallId, artifact, result, isError } = value;
|
|
226
|
+
const toolCallController = toolCallControllers.get(toolCallId);
|
|
227
|
+
if (!toolCallController)
|
|
228
|
+
throw new Error(
|
|
229
|
+
"Encountered tool call result with unknown id: " + toolCallId
|
|
230
|
+
);
|
|
231
|
+
toolCallController.setResponse({
|
|
232
|
+
artifact,
|
|
233
|
+
result,
|
|
234
|
+
isError
|
|
235
|
+
});
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case import_chunk_types.DataStreamStreamChunkType.ToolCall: {
|
|
239
|
+
const { toolCallId, toolName, args } = value;
|
|
240
|
+
let toolCallController = toolCallControllers.get(toolCallId);
|
|
241
|
+
if (toolCallController) {
|
|
242
|
+
toolCallController.argsText.close();
|
|
243
|
+
} else {
|
|
244
|
+
toolCallController = controller.addToolCallPart({
|
|
245
|
+
toolCallId,
|
|
246
|
+
toolName,
|
|
247
|
+
args
|
|
248
|
+
});
|
|
249
|
+
toolCallControllers.set(toolCallId, toolCallController);
|
|
250
|
+
}
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case import_chunk_types.DataStreamStreamChunkType.FinishMessage:
|
|
254
|
+
controller.enqueue({
|
|
255
|
+
type: "message-finish",
|
|
256
|
+
path: [],
|
|
257
|
+
...value
|
|
258
|
+
});
|
|
259
|
+
break;
|
|
260
|
+
case import_chunk_types.DataStreamStreamChunkType.StartStep:
|
|
261
|
+
controller.enqueue({
|
|
262
|
+
type: "step-start",
|
|
263
|
+
path: [],
|
|
264
|
+
...value
|
|
265
|
+
});
|
|
266
|
+
break;
|
|
267
|
+
case import_chunk_types.DataStreamStreamChunkType.FinishStep:
|
|
268
|
+
controller.enqueue({
|
|
269
|
+
type: "step-finish",
|
|
270
|
+
path: [],
|
|
271
|
+
...value
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case import_chunk_types.DataStreamStreamChunkType.Data:
|
|
275
|
+
controller.enqueue({
|
|
276
|
+
type: "data",
|
|
277
|
+
path: [],
|
|
278
|
+
data: value
|
|
279
|
+
});
|
|
280
|
+
break;
|
|
281
|
+
case import_chunk_types.DataStreamStreamChunkType.Annotation:
|
|
282
|
+
controller.enqueue({
|
|
283
|
+
type: "annotations",
|
|
284
|
+
path: [],
|
|
285
|
+
annotations: value
|
|
286
|
+
});
|
|
287
|
+
break;
|
|
288
|
+
case import_chunk_types.DataStreamStreamChunkType.Source:
|
|
289
|
+
controller.appendSource({
|
|
290
|
+
type: "source",
|
|
291
|
+
...value
|
|
292
|
+
});
|
|
293
|
+
break;
|
|
294
|
+
case import_chunk_types.DataStreamStreamChunkType.Error:
|
|
295
|
+
controller.enqueue({
|
|
296
|
+
type: "error",
|
|
297
|
+
path: [],
|
|
298
|
+
error: value
|
|
299
|
+
});
|
|
300
|
+
break;
|
|
301
|
+
case import_chunk_types.DataStreamStreamChunkType.File:
|
|
302
|
+
controller.appendFile({
|
|
303
|
+
type: "file",
|
|
304
|
+
...value
|
|
305
|
+
});
|
|
306
|
+
break;
|
|
307
|
+
case import_chunk_types.DataStreamStreamChunkType.ReasoningSignature:
|
|
308
|
+
case import_chunk_types.DataStreamStreamChunkType.RedactedReasoning:
|
|
309
|
+
break;
|
|
310
|
+
default: {
|
|
311
|
+
const exhaustiveCheck = type;
|
|
312
|
+
throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
flush() {
|
|
317
|
+
activeToolCallArgsText?.close();
|
|
318
|
+
activeToolCallArgsText = void 0;
|
|
319
|
+
toolCallControllers.forEach((controller) => controller.close());
|
|
320
|
+
toolCallControllers.clear();
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new import_LineDecoderStream.LineDecoderStream()).pipeThrough(new import_serialization.DataStreamChunkDecoder()).pipeThrough(transform);
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
328
|
+
0 && (module.exports = {
|
|
329
|
+
DataStreamDecoder,
|
|
330
|
+
DataStreamEncoder
|
|
331
|
+
});
|
|
332
|
+
//# sourceMappingURL=DataStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { ToolCallStreamController } from \"../../modules/tool-call\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { DataStreamChunk, DataStreamStreamChunkType } from \"./chunk-types\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport {\n DataStreamChunkDecoder,\n DataStreamChunkEncoder,\n} from \"./serialization\";\nimport {\n AssistantMetaStreamChunk,\n AssistantMetaTransformStream,\n} from \"../../utils/stream/AssistantMetaTransformStream\";\nimport { TextStreamController } from \"../../modules/text\";\nimport { AssistantStreamEncoder } from \"../../AssistantStream\";\n\nexport class DataStreamEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((readable) => {\n const transform = new TransformStream<\n AssistantMetaStreamChunk,\n DataStreamChunk\n >({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"part-start\": {\n const part = chunk.part;\n if (part.type === \"tool-call\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartToolCall,\n value,\n });\n }\n if (part.type === \"source\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.Source,\n value,\n });\n }\n break;\n }\n case \"text-delta\": {\n const part = chunk.meta;\n switch (part.type) {\n case \"text\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"reasoning\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallArgsTextDelta,\n value: {\n toolCallId: part.toolCallId,\n argsTextDelta: chunk.textDelta,\n },\n });\n break;\n }\n default:\n throw new Error(\n `Unsupported part type for text-delta: ${part.type}`,\n );\n }\n break;\n }\n case \"result\": {\n // Only tool-call parts can have results.\n const part = chunk.meta;\n if (part.type !== \"tool-call\") {\n throw new Error(\n `Result chunk on non-tool-call part not supported: ${part.type}`,\n );\n }\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallResult,\n value: {\n toolCallId: part.toolCallId,\n result: chunk.result,\n artifact: chunk.artifact,\n ...(chunk.isError ? { isError: chunk.isError } : {}),\n },\n });\n break;\n }\n case \"step-start\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartStep,\n value,\n });\n break;\n }\n case \"step-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishStep,\n value,\n });\n break;\n }\n case \"message-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishMessage,\n value,\n });\n break;\n }\n case \"error\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n case \"annotations\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n case \"data\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // TODO ignore for now\n // in the future, we should create a handler that waits for text parts to finish before continuing\n case \"tool-call-args-text-finish\":\n case \"part-finish\":\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n });\n\n return readable\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeThrough(transform)\n .pipeThrough(new DataStreamChunkEncoder())\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst TOOL_CALL_ARGS_CLOSING_CHUNKS = [\n DataStreamStreamChunkType.StartToolCall,\n DataStreamStreamChunkType.ToolCall,\n DataStreamStreamChunkType.TextDelta,\n DataStreamStreamChunkType.ReasoningDelta,\n DataStreamStreamChunkType.Source,\n DataStreamStreamChunkType.Error,\n DataStreamStreamChunkType.FinishStep,\n DataStreamStreamChunkType.FinishMessage,\n];\n\nexport class DataStreamDecoder extends PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n const transform = new AssistantTransformStream<DataStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = chunk;\n\n if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n }\n\n switch (type) {\n case DataStreamStreamChunkType.ReasoningDelta:\n controller.appendReasoning(value);\n break;\n\n case DataStreamStreamChunkType.TextDelta:\n controller.appendText(value);\n break;\n\n case DataStreamStreamChunkType.StartToolCall: {\n const { toolCallId, toolName } = value;\n const toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallArgsTextDelta: {\n const { toolCallId, argsTextDelta } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call with unknown id: \" + toolCallId,\n );\n toolCallController.argsText.append(argsTextDelta);\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallResult: {\n const { toolCallId, artifact, result, isError } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call result with unknown id: \" + toolCallId,\n );\n toolCallController.setResponse({\n artifact,\n result,\n isError,\n });\n break;\n }\n\n case DataStreamStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n\n let toolCallController = toolCallControllers.get(toolCallId);\n if (toolCallController) {\n toolCallController.argsText.close();\n } else {\n toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n args,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n }\n break;\n }\n\n case DataStreamStreamChunkType.FinishMessage:\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.StartStep:\n controller.enqueue({\n type: \"step-start\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.FinishStep:\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n ...value,\n });\n break;\n case DataStreamStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n path: [],\n data: value,\n });\n break;\n\n case DataStreamStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n path: [],\n annotations: value,\n });\n break;\n\n case DataStreamStreamChunkType.Source:\n controller.appendSource({\n type: \"source\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.Error:\n controller.enqueue({\n type: \"error\",\n path: [],\n error: value,\n });\n break;\n\n case DataStreamStreamChunkType.File:\n controller.appendFile({\n type: \"file\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.ReasoningSignature:\n case DataStreamStreamChunkType.RedactedReasoning:\n // ignore these for now\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n toolCallControllers.forEach((controller) => controller.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new DataStreamChunkDecoder())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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","names":["type"]}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
// src/core/serialization/data-stream/DataStream.ts
|
|
2
|
+
import { AssistantTransformStream } from "../../utils/stream/AssistantTransformStream.mjs";
|
|
3
|
+
import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.mjs";
|
|
4
|
+
import { DataStreamStreamChunkType } from "./chunk-types.mjs";
|
|
5
|
+
import { LineDecoderStream } from "../../utils/stream/LineDecoderStream.mjs";
|
|
6
|
+
import {
|
|
7
|
+
DataStreamChunkDecoder,
|
|
8
|
+
DataStreamChunkEncoder
|
|
9
|
+
} from "./serialization.mjs";
|
|
10
|
+
import {
|
|
11
|
+
AssistantMetaTransformStream
|
|
12
|
+
} from "../../utils/stream/AssistantMetaTransformStream.mjs";
|
|
13
|
+
var DataStreamEncoder = class extends PipeableTransformStream {
|
|
14
|
+
headers = new Headers({
|
|
15
|
+
"Content-Type": "text/plain; charset=utf-8",
|
|
16
|
+
"x-vercel-ai-data-stream": "v1"
|
|
17
|
+
});
|
|
18
|
+
constructor() {
|
|
19
|
+
super((readable) => {
|
|
20
|
+
const transform = new TransformStream({
|
|
21
|
+
transform(chunk, controller) {
|
|
22
|
+
const type = chunk.type;
|
|
23
|
+
switch (type) {
|
|
24
|
+
case "part-start": {
|
|
25
|
+
const part = chunk.part;
|
|
26
|
+
if (part.type === "tool-call") {
|
|
27
|
+
const { type: type2, ...value } = part;
|
|
28
|
+
controller.enqueue({
|
|
29
|
+
type: DataStreamStreamChunkType.StartToolCall,
|
|
30
|
+
value
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (part.type === "source") {
|
|
34
|
+
const { type: type2, ...value } = part;
|
|
35
|
+
controller.enqueue({
|
|
36
|
+
type: DataStreamStreamChunkType.Source,
|
|
37
|
+
value
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case "text-delta": {
|
|
43
|
+
const part = chunk.meta;
|
|
44
|
+
switch (part.type) {
|
|
45
|
+
case "text": {
|
|
46
|
+
controller.enqueue({
|
|
47
|
+
type: DataStreamStreamChunkType.TextDelta,
|
|
48
|
+
value: chunk.textDelta
|
|
49
|
+
});
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "reasoning": {
|
|
53
|
+
controller.enqueue({
|
|
54
|
+
type: DataStreamStreamChunkType.ReasoningDelta,
|
|
55
|
+
value: chunk.textDelta
|
|
56
|
+
});
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case "tool-call": {
|
|
60
|
+
controller.enqueue({
|
|
61
|
+
type: DataStreamStreamChunkType.ToolCallArgsTextDelta,
|
|
62
|
+
value: {
|
|
63
|
+
toolCallId: part.toolCallId,
|
|
64
|
+
argsTextDelta: chunk.textDelta
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
default:
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Unsupported part type for text-delta: ${part.type}`
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case "result": {
|
|
77
|
+
const part = chunk.meta;
|
|
78
|
+
if (part.type !== "tool-call") {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`Result chunk on non-tool-call part not supported: ${part.type}`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
controller.enqueue({
|
|
84
|
+
type: DataStreamStreamChunkType.ToolCallResult,
|
|
85
|
+
value: {
|
|
86
|
+
toolCallId: part.toolCallId,
|
|
87
|
+
result: chunk.result,
|
|
88
|
+
artifact: chunk.artifact,
|
|
89
|
+
...chunk.isError ? { isError: chunk.isError } : {}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case "step-start": {
|
|
95
|
+
const { type: type2, ...value } = chunk;
|
|
96
|
+
controller.enqueue({
|
|
97
|
+
type: DataStreamStreamChunkType.StartStep,
|
|
98
|
+
value
|
|
99
|
+
});
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case "step-finish": {
|
|
103
|
+
const { type: type2, ...value } = chunk;
|
|
104
|
+
controller.enqueue({
|
|
105
|
+
type: DataStreamStreamChunkType.FinishStep,
|
|
106
|
+
value
|
|
107
|
+
});
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case "message-finish": {
|
|
111
|
+
const { type: type2, ...value } = chunk;
|
|
112
|
+
controller.enqueue({
|
|
113
|
+
type: DataStreamStreamChunkType.FinishMessage,
|
|
114
|
+
value
|
|
115
|
+
});
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case "error": {
|
|
119
|
+
controller.enqueue({
|
|
120
|
+
type: DataStreamStreamChunkType.Error,
|
|
121
|
+
value: chunk.error
|
|
122
|
+
});
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case "annotations": {
|
|
126
|
+
controller.enqueue({
|
|
127
|
+
type: DataStreamStreamChunkType.Annotation,
|
|
128
|
+
value: chunk.annotations
|
|
129
|
+
});
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case "data": {
|
|
133
|
+
controller.enqueue({
|
|
134
|
+
type: DataStreamStreamChunkType.Data,
|
|
135
|
+
value: chunk.data
|
|
136
|
+
});
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
// TODO ignore for now
|
|
140
|
+
// in the future, we should create a handler that waits for text parts to finish before continuing
|
|
141
|
+
case "tool-call-args-text-finish":
|
|
142
|
+
case "part-finish":
|
|
143
|
+
break;
|
|
144
|
+
default: {
|
|
145
|
+
const exhaustiveCheck = type;
|
|
146
|
+
throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return readable.pipeThrough(new AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
|
|
156
|
+
DataStreamStreamChunkType.StartToolCall,
|
|
157
|
+
DataStreamStreamChunkType.ToolCall,
|
|
158
|
+
DataStreamStreamChunkType.TextDelta,
|
|
159
|
+
DataStreamStreamChunkType.ReasoningDelta,
|
|
160
|
+
DataStreamStreamChunkType.Source,
|
|
161
|
+
DataStreamStreamChunkType.Error,
|
|
162
|
+
DataStreamStreamChunkType.FinishStep,
|
|
163
|
+
DataStreamStreamChunkType.FinishMessage
|
|
164
|
+
];
|
|
165
|
+
var DataStreamDecoder = class extends PipeableTransformStream {
|
|
166
|
+
constructor() {
|
|
167
|
+
super((readable) => {
|
|
168
|
+
const toolCallControllers = /* @__PURE__ */ new Map();
|
|
169
|
+
let activeToolCallArgsText;
|
|
170
|
+
const transform = new AssistantTransformStream({
|
|
171
|
+
transform(chunk, controller) {
|
|
172
|
+
const { type, value } = chunk;
|
|
173
|
+
if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
|
|
174
|
+
activeToolCallArgsText?.close();
|
|
175
|
+
activeToolCallArgsText = void 0;
|
|
176
|
+
}
|
|
177
|
+
switch (type) {
|
|
178
|
+
case DataStreamStreamChunkType.ReasoningDelta:
|
|
179
|
+
controller.appendReasoning(value);
|
|
180
|
+
break;
|
|
181
|
+
case DataStreamStreamChunkType.TextDelta:
|
|
182
|
+
controller.appendText(value);
|
|
183
|
+
break;
|
|
184
|
+
case DataStreamStreamChunkType.StartToolCall: {
|
|
185
|
+
const { toolCallId, toolName } = value;
|
|
186
|
+
const toolCallController = controller.addToolCallPart({
|
|
187
|
+
toolCallId,
|
|
188
|
+
toolName
|
|
189
|
+
});
|
|
190
|
+
toolCallControllers.set(toolCallId, toolCallController);
|
|
191
|
+
activeToolCallArgsText = toolCallController.argsText;
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case DataStreamStreamChunkType.ToolCallArgsTextDelta: {
|
|
195
|
+
const { toolCallId, argsTextDelta } = value;
|
|
196
|
+
const toolCallController = toolCallControllers.get(toolCallId);
|
|
197
|
+
if (!toolCallController)
|
|
198
|
+
throw new Error(
|
|
199
|
+
"Encountered tool call with unknown id: " + toolCallId
|
|
200
|
+
);
|
|
201
|
+
toolCallController.argsText.append(argsTextDelta);
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case DataStreamStreamChunkType.ToolCallResult: {
|
|
205
|
+
const { toolCallId, artifact, result, isError } = value;
|
|
206
|
+
const toolCallController = toolCallControllers.get(toolCallId);
|
|
207
|
+
if (!toolCallController)
|
|
208
|
+
throw new Error(
|
|
209
|
+
"Encountered tool call result with unknown id: " + toolCallId
|
|
210
|
+
);
|
|
211
|
+
toolCallController.setResponse({
|
|
212
|
+
artifact,
|
|
213
|
+
result,
|
|
214
|
+
isError
|
|
215
|
+
});
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case DataStreamStreamChunkType.ToolCall: {
|
|
219
|
+
const { toolCallId, toolName, args } = value;
|
|
220
|
+
let toolCallController = toolCallControllers.get(toolCallId);
|
|
221
|
+
if (toolCallController) {
|
|
222
|
+
toolCallController.argsText.close();
|
|
223
|
+
} else {
|
|
224
|
+
toolCallController = controller.addToolCallPart({
|
|
225
|
+
toolCallId,
|
|
226
|
+
toolName,
|
|
227
|
+
args
|
|
228
|
+
});
|
|
229
|
+
toolCallControllers.set(toolCallId, toolCallController);
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
case DataStreamStreamChunkType.FinishMessage:
|
|
234
|
+
controller.enqueue({
|
|
235
|
+
type: "message-finish",
|
|
236
|
+
path: [],
|
|
237
|
+
...value
|
|
238
|
+
});
|
|
239
|
+
break;
|
|
240
|
+
case DataStreamStreamChunkType.StartStep:
|
|
241
|
+
controller.enqueue({
|
|
242
|
+
type: "step-start",
|
|
243
|
+
path: [],
|
|
244
|
+
...value
|
|
245
|
+
});
|
|
246
|
+
break;
|
|
247
|
+
case DataStreamStreamChunkType.FinishStep:
|
|
248
|
+
controller.enqueue({
|
|
249
|
+
type: "step-finish",
|
|
250
|
+
path: [],
|
|
251
|
+
...value
|
|
252
|
+
});
|
|
253
|
+
break;
|
|
254
|
+
case DataStreamStreamChunkType.Data:
|
|
255
|
+
controller.enqueue({
|
|
256
|
+
type: "data",
|
|
257
|
+
path: [],
|
|
258
|
+
data: value
|
|
259
|
+
});
|
|
260
|
+
break;
|
|
261
|
+
case DataStreamStreamChunkType.Annotation:
|
|
262
|
+
controller.enqueue({
|
|
263
|
+
type: "annotations",
|
|
264
|
+
path: [],
|
|
265
|
+
annotations: value
|
|
266
|
+
});
|
|
267
|
+
break;
|
|
268
|
+
case DataStreamStreamChunkType.Source:
|
|
269
|
+
controller.appendSource({
|
|
270
|
+
type: "source",
|
|
271
|
+
...value
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case DataStreamStreamChunkType.Error:
|
|
275
|
+
controller.enqueue({
|
|
276
|
+
type: "error",
|
|
277
|
+
path: [],
|
|
278
|
+
error: value
|
|
279
|
+
});
|
|
280
|
+
break;
|
|
281
|
+
case DataStreamStreamChunkType.File:
|
|
282
|
+
controller.appendFile({
|
|
283
|
+
type: "file",
|
|
284
|
+
...value
|
|
285
|
+
});
|
|
286
|
+
break;
|
|
287
|
+
case DataStreamStreamChunkType.ReasoningSignature:
|
|
288
|
+
case DataStreamStreamChunkType.RedactedReasoning:
|
|
289
|
+
break;
|
|
290
|
+
default: {
|
|
291
|
+
const exhaustiveCheck = type;
|
|
292
|
+
throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
flush() {
|
|
297
|
+
activeToolCallArgsText?.close();
|
|
298
|
+
activeToolCallArgsText = void 0;
|
|
299
|
+
toolCallControllers.forEach((controller) => controller.close());
|
|
300
|
+
toolCallControllers.clear();
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new DataStreamChunkDecoder()).pipeThrough(transform);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
export {
|
|
308
|
+
DataStreamDecoder,
|
|
309
|
+
DataStreamEncoder
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=DataStream.mjs.map
|