assistant-stream 0.1.8 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/ai-sdk/package.json +2 -2
  2. package/dist/ai-sdk/index.js +7 -34
  3. package/dist/ai-sdk/index.js.map +1 -1
  4. package/dist/ai-sdk/language-model.js +5 -31
  5. package/dist/ai-sdk/language-model.js.map +1 -1
  6. package/dist/ai-sdk.js +4 -32
  7. package/dist/ai-sdk.js.map +1 -1
  8. package/dist/core/AssistantStream.js +3 -29
  9. package/dist/core/AssistantStream.js.map +1 -1
  10. package/dist/core/AssistantStreamChunk.js +0 -18
  11. package/dist/core/AssistantStreamChunk.js.map +1 -1
  12. package/dist/core/accumulators/AssistantMessageStream.js +9 -35
  13. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
  14. package/dist/core/accumulators/assistant-message-accumulator.js +22 -48
  15. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  16. package/dist/core/index.js +16 -46
  17. package/dist/core/index.js.map +1 -1
  18. package/dist/core/modules/assistant-stream.js +29 -52
  19. package/dist/core/modules/assistant-stream.js.map +1 -1
  20. package/dist/core/modules/text.js +6 -33
  21. package/dist/core/modules/text.js.map +1 -1
  22. package/dist/core/modules/tool-call.js +8 -35
  23. package/dist/core/modules/tool-call.js.map +1 -1
  24. package/dist/core/serialization/PlainText.js +9 -36
  25. package/dist/core/serialization/PlainText.js.map +1 -1
  26. package/dist/core/serialization/data-stream/DataStream.js +57 -79
  27. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  28. package/dist/core/serialization/data-stream/chunk-types.js +2 -28
  29. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
  30. package/dist/core/serialization/data-stream/serialization.js +6 -33
  31. package/dist/core/serialization/data-stream/serialization.js.map +1 -1
  32. package/dist/core/tool/ToolCallReader.js +30 -55
  33. package/dist/core/tool/ToolCallReader.js.map +1 -1
  34. package/dist/core/tool/ToolExecutionStream.js +18 -52
  35. package/dist/core/tool/ToolExecutionStream.js.map +1 -1
  36. package/dist/core/tool/ToolResponse.js +5 -31
  37. package/dist/core/tool/ToolResponse.js.map +1 -1
  38. package/dist/core/tool/index.js +9 -35
  39. package/dist/core/tool/index.js.map +1 -1
  40. package/dist/core/tool/tool-types.js +0 -18
  41. package/dist/core/tool/tool-types.js.map +1 -1
  42. package/dist/core/tool/toolResultStream.js +8 -35
  43. package/dist/core/tool/toolResultStream.js.map +1 -1
  44. package/dist/core/tool/type-path-utils.js +0 -18
  45. package/dist/core/tool/type-path-utils.js.map +1 -1
  46. package/dist/core/utils/Counter.js +4 -30
  47. package/dist/core/utils/Counter.js.map +1 -1
  48. package/dist/core/utils/generateId.js +4 -30
  49. package/dist/core/utils/generateId.js.map +1 -1
  50. package/dist/core/utils/stream/AssistantMetaTransformStream.js +4 -30
  51. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
  52. package/dist/core/utils/stream/AssistantTransformStream.js +8 -32
  53. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
  54. package/dist/core/utils/stream/LineDecoderStream.js +4 -30
  55. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  56. package/dist/core/utils/stream/PipeableTransformStream.js +4 -30
  57. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
  58. package/dist/core/utils/stream/UnderlyingReadable.js +0 -18
  59. package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -1
  60. package/dist/core/utils/stream/merge.js +5 -31
  61. package/dist/core/utils/stream/merge.js.map +1 -1
  62. package/dist/core/utils/stream/path-utils.js +10 -38
  63. package/dist/core/utils/stream/path-utils.js.map +1 -1
  64. package/dist/core/utils/types.js +0 -18
  65. package/dist/core/utils/types.js.map +1 -1
  66. package/dist/core/utils/withPromiseOrValue.js +2 -28
  67. package/dist/core/utils/withPromiseOrValue.js.map +1 -1
  68. package/dist/index.js +1 -24
  69. package/dist/index.js.map +1 -1
  70. package/dist/utils/AsyncIterableStream.js +2 -28
  71. package/dist/utils/AsyncIterableStream.js.map +1 -1
  72. package/dist/utils/json/fix-json.js +2 -28
  73. package/dist/utils/json/fix-json.js.map +1 -1
  74. package/dist/utils/json/is-json.js +2 -30
  75. package/dist/utils/json/is-json.js.map +1 -1
  76. package/dist/utils/json/json-value.js +0 -18
  77. package/dist/utils/json/json-value.js.map +1 -1
  78. package/dist/utils/json/parse-partial-json-object.js +12 -50
  79. package/dist/utils/json/parse-partial-json-object.js.map +1 -1
  80. package/dist/utils/promiseWithResolvers.js +3 -29
  81. package/dist/utils/promiseWithResolvers.js.map +1 -1
  82. package/dist/utils.js +9 -32
  83. package/dist/utils.js.map +1 -1
  84. package/package.json +7 -9
  85. package/{dist/ai-sdk/index.mjs → src/ai-sdk/index.ts} +64 -33
  86. package/{dist/ai-sdk/language-model.mjs → src/ai-sdk/language-model.ts} +35 -19
  87. package/src/ai-sdk.ts +2 -0
  88. package/src/core/AssistantStream.ts +39 -0
  89. package/src/core/AssistantStreamChunk.ts +93 -0
  90. package/src/core/accumulators/AssistantMessageStream.ts +56 -0
  91. package/{dist/core/accumulators/assistant-message-accumulator.mjs → src/core/accumulators/assistant-message-accumulator.ts} +152 -67
  92. package/src/core/index.ts +17 -0
  93. package/{dist/core/modules/assistant-stream.mjs → src/core/modules/assistant-stream.ts} +122 -60
  94. package/src/core/modules/text.ts +64 -0
  95. package/{dist/core/modules/tool-call.mjs → src/core/modules/tool-call.ts} +48 -27
  96. package/src/core/serialization/PlainText.ts +68 -0
  97. package/{dist/core/serialization/data-stream/DataStream.mjs → src/core/serialization/data-stream/DataStream.ts} +111 -67
  98. package/src/core/serialization/data-stream/chunk-types.ts +93 -0
  99. package/src/core/serialization/data-stream/serialization.ts +32 -0
  100. package/src/core/tool/ToolCallReader.ts +432 -0
  101. package/{dist/core/tool/ToolExecutionStream.mjs → src/core/tool/ToolExecutionStream.ts} +83 -35
  102. package/src/core/tool/ToolResponse.ts +31 -0
  103. package/src/core/tool/index.ts +8 -0
  104. package/src/core/tool/tool-types.ts +107 -0
  105. package/src/core/tool/toolResultStream.ts +119 -0
  106. package/src/core/tool/type-path-utils.ts +36 -0
  107. package/src/core/utils/Counter.ts +7 -0
  108. package/src/core/utils/generateId.tsx +6 -0
  109. package/src/core/utils/stream/AssistantMetaTransformStream.ts +74 -0
  110. package/src/core/utils/stream/AssistantTransformStream.ts +74 -0
  111. package/{dist/core/utils/stream/LineDecoderStream.mjs → src/core/utils/stream/LineDecoderStream.ts} +12 -10
  112. package/src/core/utils/stream/PipeableTransformStream.ts +10 -0
  113. package/src/core/utils/stream/UnderlyingReadable.ts +5 -0
  114. package/src/core/utils/stream/merge.ts +212 -0
  115. package/src/core/utils/stream/path-utils.ts +71 -0
  116. package/src/core/utils/types.ts +150 -0
  117. package/src/core/utils/withPromiseOrValue.ts +20 -0
  118. package/src/index.ts +1 -0
  119. package/src/utils/AsyncIterableStream.ts +24 -0
  120. package/{dist/utils/json/fix-json.mjs → src/utils/json/fix-json.ts} +146 -20
  121. package/src/utils/json/is-json.ts +43 -0
  122. package/src/utils/json/json-value.ts +13 -0
  123. package/src/utils/json/parse-partial-json-object.test.ts +225 -0
  124. package/src/utils/json/parse-partial-json-object.ts +103 -0
  125. package/src/utils/promiseWithResolvers.ts +10 -0
  126. package/src/utils.ts +13 -0
  127. package/dist/ai-sdk/index.mjs.map +0 -1
  128. package/dist/ai-sdk/language-model.mjs.map +0 -1
  129. package/dist/ai-sdk.mjs +0 -7
  130. package/dist/ai-sdk.mjs.map +0 -1
  131. package/dist/core/AssistantStream.mjs +0 -21
  132. package/dist/core/AssistantStream.mjs.map +0 -1
  133. package/dist/core/AssistantStreamChunk.mjs +0 -1
  134. package/dist/core/AssistantStreamChunk.mjs.map +0 -1
  135. package/dist/core/accumulators/AssistantMessageStream.mjs +0 -54
  136. package/dist/core/accumulators/AssistantMessageStream.mjs.map +0 -1
  137. package/dist/core/accumulators/assistant-message-accumulator.mjs.map +0 -1
  138. package/dist/core/index.mjs +0 -26
  139. package/dist/core/index.mjs.map +0 -1
  140. package/dist/core/modules/assistant-stream.mjs.map +0 -1
  141. package/dist/core/modules/text.mjs +0 -52
  142. package/dist/core/modules/text.mjs.map +0 -1
  143. package/dist/core/modules/tool-call.mjs.map +0 -1
  144. package/dist/core/serialization/PlainText.mjs +0 -44
  145. package/dist/core/serialization/PlainText.mjs.map +0 -1
  146. package/dist/core/serialization/data-stream/DataStream.mjs.map +0 -1
  147. package/dist/core/serialization/data-stream/chunk-types.mjs +0 -24
  148. package/dist/core/serialization/data-stream/chunk-types.mjs.map +0 -1
  149. package/dist/core/serialization/data-stream/serialization.mjs +0 -30
  150. package/dist/core/serialization/data-stream/serialization.mjs.map +0 -1
  151. package/dist/core/tool/ToolCallReader.mjs +0 -315
  152. package/dist/core/tool/ToolCallReader.mjs.map +0 -1
  153. package/dist/core/tool/ToolExecutionStream.mjs.map +0 -1
  154. package/dist/core/tool/ToolResponse.mjs +0 -22
  155. package/dist/core/tool/ToolResponse.mjs.map +0 -1
  156. package/dist/core/tool/index.mjs +0 -14
  157. package/dist/core/tool/index.mjs.map +0 -1
  158. package/dist/core/tool/tool-types.mjs +0 -1
  159. package/dist/core/tool/tool-types.mjs.map +0 -1
  160. package/dist/core/tool/toolResultStream.mjs +0 -78
  161. package/dist/core/tool/toolResultStream.mjs.map +0 -1
  162. package/dist/core/tool/type-path-utils.mjs +0 -1
  163. package/dist/core/tool/type-path-utils.mjs.map +0 -1
  164. package/dist/core/utils/Counter.mjs +0 -11
  165. package/dist/core/utils/Counter.mjs.map +0 -1
  166. package/dist/core/utils/generateId.mjs +0 -10
  167. package/dist/core/utils/generateId.mjs.map +0 -1
  168. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs +0 -44
  169. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs.map +0 -1
  170. package/dist/core/utils/stream/AssistantTransformStream.mjs +0 -46
  171. package/dist/core/utils/stream/AssistantTransformStream.mjs.map +0 -1
  172. package/dist/core/utils/stream/LineDecoderStream.mjs.map +0 -1
  173. package/dist/core/utils/stream/PipeableTransformStream.mjs +0 -15
  174. package/dist/core/utils/stream/PipeableTransformStream.mjs.map +0 -1
  175. package/dist/core/utils/stream/UnderlyingReadable.mjs +0 -1
  176. package/dist/core/utils/stream/UnderlyingReadable.mjs.map +0 -1
  177. package/dist/core/utils/stream/merge.mjs +0 -85
  178. package/dist/core/utils/stream/merge.mjs.map +0 -1
  179. package/dist/core/utils/stream/path-utils.mjs +0 -61
  180. package/dist/core/utils/stream/path-utils.mjs.map +0 -1
  181. package/dist/core/utils/types.mjs +0 -1
  182. package/dist/core/utils/types.mjs.map +0 -1
  183. package/dist/core/utils/withPromiseOrValue.mjs +0 -17
  184. package/dist/core/utils/withPromiseOrValue.mjs.map +0 -1
  185. package/dist/index.mjs +0 -3
  186. package/dist/index.mjs.map +0 -1
  187. package/dist/utils/AsyncIterableStream.mjs +0 -21
  188. package/dist/utils/AsyncIterableStream.mjs.map +0 -1
  189. package/dist/utils/json/fix-json.mjs.map +0 -1
  190. package/dist/utils/json/is-json.mjs +0 -29
  191. package/dist/utils/json/is-json.mjs.map +0 -1
  192. package/dist/utils/json/json-value.mjs +0 -1
  193. package/dist/utils/json/json-value.mjs.map +0 -1
  194. package/dist/utils/json/parse-partial-json-object.mjs +0 -65
  195. package/dist/utils/json/parse-partial-json-object.mjs.map +0 -1
  196. package/dist/utils/promiseWithResolvers.mjs +0 -15
  197. package/dist/utils/promiseWithResolvers.mjs.map +0 -1
  198. package/dist/utils.mjs +0 -14
  199. package/dist/utils.mjs.map +0 -1
  200. package/utils/README.md +0 -1
  201. package/utils/package.json +0 -5
@@ -1,40 +1,52 @@
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";
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk";
2
+ import { ToolCallStreamController } from "../../modules/tool-call";
3
+ import { AssistantTransformStream } from "../../utils/stream/AssistantTransformStream";
4
+ import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream";
5
+ import { DataStreamChunk, DataStreamStreamChunkType } from "./chunk-types";
6
+ import { LineDecoderStream } from "../../utils/stream/LineDecoderStream";
6
7
  import {
7
8
  DataStreamChunkDecoder,
8
- DataStreamChunkEncoder
9
- } from "./serialization.mjs";
9
+ DataStreamChunkEncoder,
10
+ } from "./serialization";
10
11
  import {
11
- AssistantMetaTransformStream
12
- } from "../../utils/stream/AssistantMetaTransformStream.mjs";
13
- var DataStreamEncoder = class extends PipeableTransformStream {
12
+ AssistantMetaStreamChunk,
13
+ AssistantMetaTransformStream,
14
+ } from "../../utils/stream/AssistantMetaTransformStream";
15
+ import { TextStreamController } from "../../modules/text";
16
+ import { AssistantStreamEncoder } from "../../AssistantStream";
17
+
18
+ export class DataStreamEncoder
19
+ extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>
20
+ implements AssistantStreamEncoder
21
+ {
14
22
  headers = new Headers({
15
23
  "Content-Type": "text/plain; charset=utf-8",
16
- "x-vercel-ai-data-stream": "v1"
24
+ "x-vercel-ai-data-stream": "v1",
17
25
  });
26
+
18
27
  constructor() {
19
28
  super((readable) => {
20
- const transform = new TransformStream({
29
+ const transform = new TransformStream<
30
+ AssistantMetaStreamChunk,
31
+ DataStreamChunk
32
+ >({
21
33
  transform(chunk, controller) {
22
34
  const type = chunk.type;
23
35
  switch (type) {
24
36
  case "part-start": {
25
37
  const part = chunk.part;
26
38
  if (part.type === "tool-call") {
27
- const { type: type2, ...value } = part;
39
+ const { type, ...value } = part;
28
40
  controller.enqueue({
29
41
  type: DataStreamStreamChunkType.StartToolCall,
30
- value
42
+ value,
31
43
  });
32
44
  }
33
45
  if (part.type === "source") {
34
- const { type: type2, ...value } = part;
46
+ const { type, ...value } = part;
35
47
  controller.enqueue({
36
48
  type: DataStreamStreamChunkType.Source,
37
- value
49
+ value,
38
50
  });
39
51
  }
40
52
  break;
@@ -45,14 +57,14 @@ var DataStreamEncoder = class extends PipeableTransformStream {
45
57
  case "text": {
46
58
  controller.enqueue({
47
59
  type: DataStreamStreamChunkType.TextDelta,
48
- value: chunk.textDelta
60
+ value: chunk.textDelta,
49
61
  });
50
62
  break;
51
63
  }
52
64
  case "reasoning": {
53
65
  controller.enqueue({
54
66
  type: DataStreamStreamChunkType.ReasoningDelta,
55
- value: chunk.textDelta
67
+ value: chunk.textDelta,
56
68
  });
57
69
  break;
58
70
  }
@@ -61,23 +73,24 @@ var DataStreamEncoder = class extends PipeableTransformStream {
61
73
  type: DataStreamStreamChunkType.ToolCallArgsTextDelta,
62
74
  value: {
63
75
  toolCallId: part.toolCallId,
64
- argsTextDelta: chunk.textDelta
65
- }
76
+ argsTextDelta: chunk.textDelta,
77
+ },
66
78
  });
67
79
  break;
68
80
  }
69
81
  default:
70
82
  throw new Error(
71
- `Unsupported part type for text-delta: ${part.type}`
83
+ `Unsupported part type for text-delta: ${part.type}`,
72
84
  );
73
85
  }
74
86
  break;
75
87
  }
76
88
  case "result": {
89
+ // Only tool-call parts can have results.
77
90
  const part = chunk.meta;
78
91
  if (part.type !== "tool-call") {
79
92
  throw new Error(
80
- `Result chunk on non-tool-call part not supported: ${part.type}`
93
+ `Result chunk on non-tool-call part not supported: ${part.type}`,
81
94
  );
82
95
  }
83
96
  controller.enqueue({
@@ -86,73 +99,81 @@ var DataStreamEncoder = class extends PipeableTransformStream {
86
99
  toolCallId: part.toolCallId,
87
100
  result: chunk.result,
88
101
  artifact: chunk.artifact,
89
- ...chunk.isError ? { isError: chunk.isError } : {}
90
- }
102
+ ...(chunk.isError ? { isError: chunk.isError } : {}),
103
+ },
91
104
  });
92
105
  break;
93
106
  }
94
107
  case "step-start": {
95
- const { type: type2, ...value } = chunk;
108
+ const { type, ...value } = chunk;
96
109
  controller.enqueue({
97
110
  type: DataStreamStreamChunkType.StartStep,
98
- value
111
+ value,
99
112
  });
100
113
  break;
101
114
  }
102
115
  case "step-finish": {
103
- const { type: type2, ...value } = chunk;
116
+ const { type, ...value } = chunk;
104
117
  controller.enqueue({
105
118
  type: DataStreamStreamChunkType.FinishStep,
106
- value
119
+ value,
107
120
  });
108
121
  break;
109
122
  }
110
123
  case "message-finish": {
111
- const { type: type2, ...value } = chunk;
124
+ const { type, ...value } = chunk;
112
125
  controller.enqueue({
113
126
  type: DataStreamStreamChunkType.FinishMessage,
114
- value
127
+ value,
115
128
  });
116
129
  break;
117
130
  }
118
131
  case "error": {
119
132
  controller.enqueue({
120
133
  type: DataStreamStreamChunkType.Error,
121
- value: chunk.error
134
+ value: chunk.error,
122
135
  });
123
136
  break;
124
137
  }
125
138
  case "annotations": {
126
139
  controller.enqueue({
127
140
  type: DataStreamStreamChunkType.Annotation,
128
- value: chunk.annotations
141
+ value: chunk.annotations,
129
142
  });
130
143
  break;
131
144
  }
132
145
  case "data": {
133
146
  controller.enqueue({
134
147
  type: DataStreamStreamChunkType.Data,
135
- value: chunk.data
148
+ value: chunk.data,
136
149
  });
137
150
  break;
138
151
  }
152
+
139
153
  // TODO ignore for now
140
154
  // in the future, we should create a handler that waits for text parts to finish before continuing
141
155
  case "tool-call-args-text-finish":
142
156
  case "part-finish":
143
157
  break;
158
+
144
159
  default: {
145
- const exhaustiveCheck = type;
160
+ const exhaustiveCheck: never = type;
146
161
  throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
147
162
  }
148
163
  }
149
- }
164
+ },
150
165
  });
151
- return readable.pipeThrough(new AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
166
+
167
+ return readable
168
+ .pipeThrough(new AssistantMetaTransformStream())
169
+ .pipeThrough(transform)
170
+ .pipeThrough(new DataStreamChunkEncoder())
171
+ .pipeThrough(new TextEncoderStream());
152
172
  });
153
173
  }
154
- };
155
- var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
174
+ }
175
+
176
+ const TOOL_CALL_ARGS_CLOSING_CHUNKS = [
156
177
  DataStreamStreamChunkType.StartToolCall,
157
178
  DataStreamStreamChunkType.ToolCall,
158
179
  DataStreamStreamChunkType.TextDelta,
@@ -160,63 +181,76 @@ var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
160
181
  DataStreamStreamChunkType.Source,
161
182
  DataStreamStreamChunkType.Error,
162
183
  DataStreamStreamChunkType.FinishStep,
163
- DataStreamStreamChunkType.FinishMessage
184
+ DataStreamStreamChunkType.FinishMessage,
164
185
  ];
165
- var DataStreamDecoder = class extends PipeableTransformStream {
186
+
187
+ export class DataStreamDecoder extends PipeableTransformStream<
188
+ Uint8Array,
189
+ AssistantStreamChunk
190
+ > {
166
191
  constructor() {
167
192
  super((readable) => {
168
- const toolCallControllers = /* @__PURE__ */ new Map();
169
- let activeToolCallArgsText;
170
- const transform = new AssistantTransformStream({
193
+ const toolCallControllers = new Map<string, ToolCallStreamController>();
194
+ let activeToolCallArgsText: TextStreamController | undefined;
195
+ const transform = new AssistantTransformStream<DataStreamChunk>({
171
196
  transform(chunk, controller) {
172
197
  const { type, value } = chunk;
198
+
173
199
  if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
174
200
  activeToolCallArgsText?.close();
175
- activeToolCallArgsText = void 0;
201
+ activeToolCallArgsText = undefined;
176
202
  }
203
+
177
204
  switch (type) {
178
205
  case DataStreamStreamChunkType.ReasoningDelta:
179
206
  controller.appendReasoning(value);
180
207
  break;
208
+
181
209
  case DataStreamStreamChunkType.TextDelta:
182
210
  controller.appendText(value);
183
211
  break;
212
+
184
213
  case DataStreamStreamChunkType.StartToolCall: {
185
214
  const { toolCallId, toolName } = value;
186
215
  const toolCallController = controller.addToolCallPart({
187
216
  toolCallId,
188
- toolName
217
+ toolName,
189
218
  });
190
219
  toolCallControllers.set(toolCallId, toolCallController);
220
+
191
221
  activeToolCallArgsText = toolCallController.argsText;
192
222
  break;
193
223
  }
224
+
194
225
  case DataStreamStreamChunkType.ToolCallArgsTextDelta: {
195
226
  const { toolCallId, argsTextDelta } = value;
196
227
  const toolCallController = toolCallControllers.get(toolCallId);
197
228
  if (!toolCallController)
198
229
  throw new Error(
199
- "Encountered tool call with unknown id: " + toolCallId
230
+ "Encountered tool call with unknown id: " + toolCallId,
200
231
  );
201
232
  toolCallController.argsText.append(argsTextDelta);
202
233
  break;
203
234
  }
235
+
204
236
  case DataStreamStreamChunkType.ToolCallResult: {
205
237
  const { toolCallId, artifact, result, isError } = value;
206
238
  const toolCallController = toolCallControllers.get(toolCallId);
207
239
  if (!toolCallController)
208
240
  throw new Error(
209
- "Encountered tool call result with unknown id: " + toolCallId
241
+ "Encountered tool call result with unknown id: " + toolCallId,
210
242
  );
211
243
  toolCallController.setResponse({
212
244
  artifact,
213
245
  result,
214
- isError
246
+ isError,
215
247
  });
216
248
  break;
217
249
  }
250
+
218
251
  case DataStreamStreamChunkType.ToolCall: {
219
252
  const { toolCallId, toolName, args } = value;
253
+
220
254
  let toolCallController = toolCallControllers.get(toolCallId);
221
255
  if (toolCallController) {
222
256
  toolCallController.argsText.close();
@@ -224,88 +258,98 @@ var DataStreamDecoder = class extends PipeableTransformStream {
224
258
  toolCallController = controller.addToolCallPart({
225
259
  toolCallId,
226
260
  toolName,
227
- args
261
+ args,
228
262
  });
229
263
  toolCallControllers.set(toolCallId, toolCallController);
230
264
  }
231
265
  break;
232
266
  }
267
+
233
268
  case DataStreamStreamChunkType.FinishMessage:
234
269
  controller.enqueue({
235
270
  type: "message-finish",
236
271
  path: [],
237
- ...value
272
+ ...value,
238
273
  });
239
274
  break;
275
+
240
276
  case DataStreamStreamChunkType.StartStep:
241
277
  controller.enqueue({
242
278
  type: "step-start",
243
279
  path: [],
244
- ...value
280
+ ...value,
245
281
  });
246
282
  break;
283
+
247
284
  case DataStreamStreamChunkType.FinishStep:
248
285
  controller.enqueue({
249
286
  type: "step-finish",
250
287
  path: [],
251
- ...value
288
+ ...value,
252
289
  });
253
290
  break;
254
291
  case DataStreamStreamChunkType.Data:
255
292
  controller.enqueue({
256
293
  type: "data",
257
294
  path: [],
258
- data: value
295
+ data: value,
259
296
  });
260
297
  break;
298
+
261
299
  case DataStreamStreamChunkType.Annotation:
262
300
  controller.enqueue({
263
301
  type: "annotations",
264
302
  path: [],
265
- annotations: value
303
+ annotations: value,
266
304
  });
267
305
  break;
306
+
268
307
  case DataStreamStreamChunkType.Source:
269
308
  controller.appendSource({
270
309
  type: "source",
271
- ...value
310
+ ...value,
272
311
  });
273
312
  break;
313
+
274
314
  case DataStreamStreamChunkType.Error:
275
315
  controller.enqueue({
276
316
  type: "error",
277
317
  path: [],
278
- error: value
318
+ error: value,
279
319
  });
280
320
  break;
321
+
281
322
  case DataStreamStreamChunkType.File:
282
323
  controller.appendFile({
283
324
  type: "file",
284
- ...value
325
+ ...value,
285
326
  });
286
327
  break;
328
+
287
329
  case DataStreamStreamChunkType.ReasoningSignature:
288
330
  case DataStreamStreamChunkType.RedactedReasoning:
331
+ // ignore these for now
289
332
  break;
333
+
290
334
  default: {
291
- const exhaustiveCheck = type;
335
+ const exhaustiveCheck: never = type;
292
336
  throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
293
337
  }
294
338
  }
295
339
  },
296
340
  flush() {
297
341
  activeToolCallArgsText?.close();
298
- activeToolCallArgsText = void 0;
342
+ activeToolCallArgsText = undefined;
299
343
  toolCallControllers.forEach((controller) => controller.close());
300
344
  toolCallControllers.clear();
301
- }
345
+ },
302
346
  });
303
- return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new DataStreamChunkDecoder()).pipeThrough(transform);
347
+
348
+ return readable
349
+ .pipeThrough(new TextDecoderStream())
350
+ .pipeThrough(new LineDecoderStream())
351
+ .pipeThrough(new DataStreamChunkDecoder())
352
+ .pipeThrough(transform);
304
353
  });
305
354
  }
306
- };
307
- export {
308
- DataStreamDecoder,
309
- DataStreamEncoder
310
- };
311
- //# sourceMappingURL=DataStream.mjs.map
355
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ ReadonlyJSONObject,
3
+ ReadonlyJSONValue,
4
+ } from "../../../utils/json/json-value";
5
+
6
+ export type DataStreamChunk = {
7
+ [K in DataStreamStreamChunkType]: {
8
+ type: K;
9
+ value: DataStreamStreamChunkValue[K];
10
+ };
11
+ }[DataStreamStreamChunkType];
12
+
13
+ type LanguageModelV1FinishReason =
14
+ | "stop"
15
+ | "length"
16
+ | "content-filter"
17
+ | "tool-calls"
18
+ | "error"
19
+ | "other"
20
+ | "unknown";
21
+
22
+ type LanguageModelV1Usage = {
23
+ promptTokens: number;
24
+ completionTokens: number;
25
+ };
26
+
27
+ export enum DataStreamStreamChunkType {
28
+ TextDelta = "0",
29
+ Data = "2",
30
+ Error = "3",
31
+ Annotation = "8",
32
+ ToolCall = "9",
33
+ ToolCallResult = "a",
34
+ StartToolCall = "b",
35
+ ToolCallArgsTextDelta = "c",
36
+ FinishMessage = "d",
37
+ FinishStep = "e",
38
+ StartStep = "f",
39
+ ReasoningDelta = "g",
40
+ Source = "h",
41
+ RedactedReasoning = "i",
42
+ ReasoningSignature = "j",
43
+ File = "k",
44
+ }
45
+ type DataStreamStreamChunkValue = {
46
+ [DataStreamStreamChunkType.TextDelta]: string;
47
+ [DataStreamStreamChunkType.Data]: ReadonlyJSONValue[];
48
+ [DataStreamStreamChunkType.Annotation]: ReadonlyJSONValue[];
49
+ [DataStreamStreamChunkType.ToolCall]: {
50
+ toolCallId: string;
51
+ toolName: string;
52
+ args: ReadonlyJSONObject;
53
+ };
54
+ [DataStreamStreamChunkType.StartToolCall]: {
55
+ toolCallId: string;
56
+ toolName: string;
57
+ };
58
+ [DataStreamStreamChunkType.ToolCallArgsTextDelta]: {
59
+ toolCallId: string;
60
+ argsTextDelta: string;
61
+ };
62
+ [DataStreamStreamChunkType.ToolCallResult]: {
63
+ toolCallId: string;
64
+ result: ReadonlyJSONValue;
65
+
66
+ // aui-extensions
67
+ artifact?: ReadonlyJSONValue | undefined;
68
+ isError?: boolean;
69
+ };
70
+ [DataStreamStreamChunkType.Error]: string;
71
+ [DataStreamStreamChunkType.FinishStep]: {
72
+ finishReason: LanguageModelV1FinishReason;
73
+ usage: LanguageModelV1Usage;
74
+ isContinued: boolean;
75
+ };
76
+ [DataStreamStreamChunkType.FinishMessage]: {
77
+ finishReason: LanguageModelV1FinishReason;
78
+ usage: LanguageModelV1Usage;
79
+ };
80
+ [DataStreamStreamChunkType.StartStep]: {
81
+ messageId: string;
82
+ };
83
+ [DataStreamStreamChunkType.ReasoningDelta]: string;
84
+ [DataStreamStreamChunkType.Source]: {
85
+ sourceType: "url";
86
+ id: string;
87
+ url: string;
88
+ title?: string;
89
+ };
90
+ [DataStreamStreamChunkType.RedactedReasoning]: { data: string };
91
+ [DataStreamStreamChunkType.ReasoningSignature]: { signature: string };
92
+ [DataStreamStreamChunkType.File]: { data: string; mimeType: string };
93
+ };
@@ -0,0 +1,32 @@
1
+ import { DataStreamChunk, DataStreamStreamChunkType } from "./chunk-types";
2
+
3
+ export class DataStreamChunkEncoder extends TransformStream<
4
+ DataStreamChunk,
5
+ string
6
+ > {
7
+ constructor() {
8
+ super({
9
+ transform: (chunk, controller) => {
10
+ controller.enqueue(`${chunk.type}:${JSON.stringify(chunk.value)}\n`);
11
+ },
12
+ });
13
+ }
14
+ }
15
+
16
+ export class DataStreamChunkDecoder extends TransformStream<
17
+ string,
18
+ DataStreamChunk
19
+ > {
20
+ constructor() {
21
+ super({
22
+ transform: (chunk, controller) => {
23
+ const index = chunk.indexOf(":");
24
+ if (index === -1) throw new Error("Invalid stream part");
25
+ controller.enqueue({
26
+ type: chunk.slice(0, index) as DataStreamStreamChunkType,
27
+ value: JSON.parse(chunk.slice(index + 1)),
28
+ });
29
+ },
30
+ });
31
+ }
32
+ }