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.
Files changed (261) hide show
  1. package/dist/ai-sdk/index.d.ts +5 -0
  2. package/dist/ai-sdk/index.d.ts.map +1 -0
  3. package/dist/ai-sdk/index.js +199 -0
  4. package/dist/ai-sdk/index.js.map +1 -0
  5. package/dist/ai-sdk/index.mjs +173 -0
  6. package/dist/ai-sdk/index.mjs.map +1 -0
  7. package/dist/ai-sdk/language-model.d.ts +6 -0
  8. package/dist/ai-sdk/language-model.d.ts.map +1 -0
  9. package/dist/ai-sdk/language-model.js +131 -0
  10. package/dist/ai-sdk/language-model.js.map +1 -0
  11. package/dist/ai-sdk/language-model.mjs +106 -0
  12. package/dist/ai-sdk/language-model.mjs.map +1 -0
  13. package/dist/ai-sdk.d.ts +3 -24
  14. package/dist/ai-sdk.d.ts.map +1 -0
  15. package/dist/ai-sdk.js +5 -782
  16. package/dist/ai-sdk.js.map +1 -1
  17. package/dist/ai-sdk.mjs +4 -276
  18. package/dist/ai-sdk.mjs.map +1 -1
  19. package/dist/core/AssistantStream.d.ts +12 -0
  20. package/dist/core/AssistantStream.d.ts.map +1 -0
  21. package/dist/core/AssistantStream.js +46 -0
  22. package/dist/core/AssistantStream.js.map +1 -0
  23. package/dist/core/AssistantStream.mjs +21 -0
  24. package/dist/core/AssistantStream.mjs.map +1 -0
  25. package/dist/core/AssistantStreamChunk.d.ts +64 -0
  26. package/dist/core/AssistantStreamChunk.d.ts.map +1 -0
  27. package/dist/core/AssistantStreamChunk.js +19 -0
  28. package/dist/core/AssistantStreamChunk.js.map +1 -0
  29. package/dist/core/AssistantStreamChunk.mjs +1 -0
  30. package/dist/core/AssistantStreamChunk.mjs.map +1 -0
  31. package/dist/core/accumulators/AssistantMessageStream.d.ts +13 -0
  32. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -0
  33. package/dist/core/accumulators/AssistantMessageStream.js +79 -0
  34. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -0
  35. package/dist/core/accumulators/AssistantMessageStream.mjs +54 -0
  36. package/dist/core/accumulators/AssistantMessageStream.mjs.map +1 -0
  37. package/dist/core/accumulators/assistant-message-accumulator.d.ts +8 -0
  38. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -0
  39. package/dist/core/accumulators/assistant-message-accumulator.js +334 -0
  40. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -0
  41. package/dist/core/accumulators/assistant-message-accumulator.mjs +309 -0
  42. package/dist/core/accumulators/assistant-message-accumulator.mjs.map +1 -0
  43. package/dist/core/index.d.ts +11 -0
  44. package/dist/core/index.d.ts.map +1 -0
  45. package/dist/core/index.js +55 -0
  46. package/dist/core/index.js.map +1 -0
  47. package/dist/core/index.mjs +26 -0
  48. package/dist/core/index.mjs.map +1 -0
  49. package/dist/core/modules/assistant-stream.d.ts +31 -0
  50. package/dist/core/modules/assistant-stream.d.ts.map +1 -0
  51. package/dist/core/modules/assistant-stream.js +224 -0
  52. package/dist/core/modules/assistant-stream.js.map +1 -0
  53. package/dist/core/modules/assistant-stream.mjs +202 -0
  54. package/dist/core/modules/assistant-stream.mjs.map +1 -0
  55. package/dist/core/modules/text.d.ts +9 -0
  56. package/dist/core/modules/text.d.ts.map +1 -0
  57. package/dist/core/modules/text.js +78 -0
  58. package/dist/core/modules/text.js.map +1 -0
  59. package/dist/core/modules/text.mjs +52 -0
  60. package/dist/core/modules/text.mjs.map +1 -0
  61. package/dist/core/modules/tool-call.d.ts +13 -0
  62. package/dist/core/modules/tool-call.d.ts.map +1 -0
  63. package/dist/core/modules/tool-call.js +110 -0
  64. package/dist/core/modules/tool-call.js.map +1 -0
  65. package/dist/core/modules/tool-call.mjs +84 -0
  66. package/dist/core/modules/tool-call.mjs.map +1 -0
  67. package/dist/core/serialization/PlainText.d.ts +11 -0
  68. package/dist/core/serialization/PlainText.d.ts.map +1 -0
  69. package/dist/core/serialization/PlainText.js +70 -0
  70. package/dist/core/serialization/PlainText.js.map +1 -0
  71. package/dist/core/serialization/PlainText.mjs +44 -0
  72. package/dist/core/serialization/PlainText.mjs.map +1 -0
  73. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -0
  74. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -0
  75. package/dist/core/serialization/data-stream/DataStream.js +332 -0
  76. package/dist/core/serialization/data-stream/DataStream.js.map +1 -0
  77. package/dist/core/serialization/data-stream/DataStream.mjs +311 -0
  78. package/dist/core/serialization/data-stream/DataStream.mjs.map +1 -0
  79. package/dist/core/serialization/data-stream/chunk-types.d.ts +86 -0
  80. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -0
  81. package/dist/core/serialization/data-stream/chunk-types.js +49 -0
  82. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -0
  83. package/dist/core/serialization/data-stream/chunk-types.mjs +24 -0
  84. package/dist/core/serialization/data-stream/chunk-types.mjs.map +1 -0
  85. package/dist/core/serialization/data-stream/serialization.d.ts +8 -0
  86. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -0
  87. package/dist/core/serialization/data-stream/serialization.js +56 -0
  88. package/dist/core/serialization/data-stream/serialization.js.map +1 -0
  89. package/dist/core/serialization/data-stream/serialization.mjs +30 -0
  90. package/dist/core/serialization/data-stream/serialization.mjs.map +1 -0
  91. package/dist/core/tool/ToolCallReader.d.ts +33 -0
  92. package/dist/core/tool/ToolCallReader.d.ts.map +1 -0
  93. package/dist/core/tool/ToolCallReader.js +339 -0
  94. package/dist/core/tool/ToolCallReader.js.map +1 -0
  95. package/dist/core/tool/ToolCallReader.mjs +315 -0
  96. package/dist/core/tool/ToolCallReader.mjs.map +1 -0
  97. package/dist/core/tool/ToolExecutionStream.d.ts +24 -0
  98. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -0
  99. package/dist/core/tool/ToolExecutionStream.js +165 -0
  100. package/dist/core/tool/ToolExecutionStream.js.map +1 -0
  101. package/dist/core/tool/ToolExecutionStream.mjs +132 -0
  102. package/dist/core/tool/ToolExecutionStream.mjs.map +1 -0
  103. package/dist/core/tool/ToolResponse.d.ts +17 -0
  104. package/dist/core/tool/ToolResponse.d.ts.map +1 -0
  105. package/dist/core/tool/ToolResponse.js +47 -0
  106. package/dist/core/tool/ToolResponse.js.map +1 -0
  107. package/dist/core/tool/ToolResponse.mjs +22 -0
  108. package/dist/core/tool/ToolResponse.mjs.map +1 -0
  109. package/dist/core/tool/index.d.ts +6 -0
  110. package/dist/core/tool/index.d.ts.map +1 -0
  111. package/dist/core/tool/index.js +39 -0
  112. package/dist/core/tool/index.js.map +1 -0
  113. package/dist/core/tool/index.mjs +14 -0
  114. package/dist/core/tool/index.mjs.map +1 -0
  115. package/dist/core/tool/tool-types.d.ts +76 -0
  116. package/dist/core/tool/tool-types.d.ts.map +1 -0
  117. package/dist/core/tool/tool-types.js +19 -0
  118. package/dist/core/tool/tool-types.js.map +1 -0
  119. package/dist/core/tool/tool-types.mjs +1 -0
  120. package/dist/core/tool/tool-types.mjs.map +1 -0
  121. package/dist/core/tool/toolResultStream.d.ts +6 -0
  122. package/dist/core/tool/toolResultStream.d.ts.map +1 -0
  123. package/dist/core/tool/toolResultStream.js +104 -0
  124. package/dist/core/tool/toolResultStream.js.map +1 -0
  125. package/dist/core/tool/toolResultStream.mjs +78 -0
  126. package/dist/core/tool/toolResultStream.mjs.map +1 -0
  127. package/dist/core/tool/type-path-utils.d.ts +23 -0
  128. package/dist/core/tool/type-path-utils.d.ts.map +1 -0
  129. package/dist/core/tool/type-path-utils.js +19 -0
  130. package/dist/core/tool/type-path-utils.js.map +1 -0
  131. package/dist/core/tool/type-path-utils.mjs +1 -0
  132. package/dist/core/tool/type-path-utils.mjs.map +1 -0
  133. package/dist/core/utils/Counter.d.ts +5 -0
  134. package/dist/core/utils/Counter.d.ts.map +1 -0
  135. package/dist/core/utils/Counter.js +36 -0
  136. package/dist/core/utils/Counter.js.map +1 -0
  137. package/dist/core/utils/Counter.mjs +11 -0
  138. package/dist/core/utils/Counter.mjs.map +1 -0
  139. package/dist/core/utils/generateId.d.ts +2 -0
  140. package/dist/core/utils/generateId.d.ts.map +1 -0
  141. package/dist/core/utils/generateId.js +35 -0
  142. package/dist/core/utils/generateId.js.map +1 -0
  143. package/dist/core/utils/generateId.mjs +10 -0
  144. package/dist/core/utils/generateId.mjs.map +1 -0
  145. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +20 -0
  146. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -0
  147. package/dist/core/utils/stream/AssistantMetaTransformStream.js +69 -0
  148. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -0
  149. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs +44 -0
  150. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs.map +1 -0
  151. package/dist/core/utils/stream/AssistantTransformStream.d.ts +15 -0
  152. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -0
  153. package/dist/core/utils/stream/AssistantTransformStream.js +69 -0
  154. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -0
  155. package/dist/core/utils/stream/AssistantTransformStream.mjs +46 -0
  156. package/dist/core/utils/stream/AssistantTransformStream.mjs.map +1 -0
  157. package/dist/core/utils/stream/LineDecoderStream.d.ts +5 -0
  158. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -0
  159. package/dist/core/utils/stream/LineDecoderStream.js +52 -0
  160. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -0
  161. package/dist/core/utils/stream/LineDecoderStream.mjs +27 -0
  162. package/dist/core/utils/stream/LineDecoderStream.mjs.map +1 -0
  163. package/dist/core/utils/stream/PipeableTransformStream.d.ts +4 -0
  164. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -0
  165. package/dist/core/utils/stream/PipeableTransformStream.js +40 -0
  166. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -0
  167. package/dist/core/utils/stream/PipeableTransformStream.mjs +15 -0
  168. package/dist/core/utils/stream/PipeableTransformStream.mjs.map +1 -0
  169. package/dist/core/utils/stream/UnderlyingReadable.d.ts +6 -0
  170. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -0
  171. package/dist/core/utils/stream/UnderlyingReadable.js +19 -0
  172. package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -0
  173. package/dist/core/utils/stream/UnderlyingReadable.mjs +1 -0
  174. package/dist/core/utils/stream/UnderlyingReadable.mjs.map +1 -0
  175. package/dist/core/utils/stream/merge.d.ts +9 -0
  176. package/dist/core/utils/stream/merge.d.ts.map +1 -0
  177. package/dist/core/utils/stream/merge.js +110 -0
  178. package/dist/core/utils/stream/merge.js.map +1 -0
  179. package/dist/core/utils/stream/merge.mjs +85 -0
  180. package/dist/core/utils/stream/merge.mjs.map +1 -0
  181. package/dist/core/utils/stream/path-utils.d.ts +12 -0
  182. package/dist/core/utils/stream/path-utils.d.ts.map +1 -0
  183. package/dist/core/utils/stream/path-utils.js +88 -0
  184. package/dist/core/utils/stream/path-utils.js.map +1 -0
  185. package/dist/core/utils/stream/path-utils.mjs +61 -0
  186. package/dist/core/utils/stream/path-utils.mjs.map +1 -0
  187. package/dist/core/utils/types.d.ts +102 -0
  188. package/dist/core/utils/types.d.ts.map +1 -0
  189. package/dist/core/utils/types.js +19 -0
  190. package/dist/core/utils/types.js.map +1 -0
  191. package/dist/core/utils/types.mjs +1 -0
  192. package/dist/core/utils/types.mjs.map +1 -0
  193. package/dist/core/utils/withPromiseOrValue.d.ts +2 -0
  194. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -0
  195. package/dist/core/utils/withPromiseOrValue.js +42 -0
  196. package/dist/core/utils/withPromiseOrValue.js.map +1 -0
  197. package/dist/core/utils/withPromiseOrValue.mjs +17 -0
  198. package/dist/core/utils/withPromiseOrValue.mjs.map +1 -0
  199. package/dist/index.d.ts +2 -153
  200. package/dist/index.d.ts.map +1 -0
  201. package/dist/index.js +3 -2318
  202. package/dist/index.js.map +1 -1
  203. package/dist/index.mjs +2 -957
  204. package/dist/index.mjs.map +1 -1
  205. package/dist/utils/AsyncIterableStream.d.ts +3 -0
  206. package/dist/utils/AsyncIterableStream.d.ts.map +1 -0
  207. package/dist/utils/AsyncIterableStream.js +46 -0
  208. package/dist/utils/AsyncIterableStream.js.map +1 -0
  209. package/dist/utils/AsyncIterableStream.mjs +21 -0
  210. package/dist/utils/AsyncIterableStream.mjs.map +1 -0
  211. package/dist/utils/json/fix-json.d.ts +2 -0
  212. package/dist/utils/json/fix-json.d.ts.map +1 -0
  213. package/dist/{chunk-PQLDKUPN.mjs → utils/json/fix-json.js} +28 -66
  214. package/dist/utils/json/fix-json.js.map +1 -0
  215. package/dist/utils/json/fix-json.mjs +362 -0
  216. package/dist/utils/json/fix-json.mjs.map +1 -0
  217. package/dist/utils/json/is-json.d.ts +5 -0
  218. package/dist/utils/json/is-json.d.ts.map +1 -0
  219. package/dist/utils/json/is-json.js +56 -0
  220. package/dist/utils/json/is-json.js.map +1 -0
  221. package/dist/utils/json/is-json.mjs +29 -0
  222. package/dist/utils/json/is-json.mjs.map +1 -0
  223. package/dist/utils/json/json-value.d.ts +6 -0
  224. package/dist/utils/json/json-value.d.ts.map +1 -0
  225. package/dist/utils/json/json-value.js +19 -0
  226. package/dist/utils/json/json-value.js.map +1 -0
  227. package/dist/utils/json/json-value.mjs +1 -0
  228. package/dist/utils/json/json-value.mjs.map +1 -0
  229. package/dist/utils/json/parse-partial-json-object.d.ts +14 -0
  230. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -0
  231. package/dist/utils/json/parse-partial-json-object.js +102 -0
  232. package/dist/utils/json/parse-partial-json-object.js.map +1 -0
  233. package/dist/utils/json/parse-partial-json-object.mjs +65 -0
  234. package/dist/utils/json/parse-partial-json-object.mjs.map +1 -0
  235. package/dist/utils/json/parse-partial-json-object.test.d.ts +2 -0
  236. package/dist/utils/json/parse-partial-json-object.test.d.ts.map +1 -0
  237. package/dist/utils/promiseWithResolvers.d.ts +6 -0
  238. package/dist/utils/promiseWithResolvers.d.ts.map +1 -0
  239. package/dist/utils/promiseWithResolvers.js +40 -0
  240. package/dist/utils/promiseWithResolvers.js.map +1 -0
  241. package/dist/utils/promiseWithResolvers.mjs +15 -0
  242. package/dist/utils/promiseWithResolvers.mjs.map +1 -0
  243. package/dist/utils.d.ts +4 -16
  244. package/dist/utils.d.ts.map +1 -0
  245. package/dist/utils.js +5 -451
  246. package/dist/utils.js.map +1 -1
  247. package/dist/utils.mjs +7 -21
  248. package/dist/utils.mjs.map +1 -1
  249. package/package.json +2 -1
  250. package/dist/AsyncIterableStream-C3C8ZoXv.d.mts +0 -4
  251. package/dist/AsyncIterableStream-C3C8ZoXv.d.ts +0 -4
  252. package/dist/ai-sdk.d.mts +0 -24
  253. package/dist/assistant-stream-ISFjQ0mQ.d.mts +0 -225
  254. package/dist/assistant-stream-kAoIMgvk.d.ts +0 -225
  255. package/dist/chunk-EDE6WQ2R.mjs +0 -943
  256. package/dist/chunk-EDE6WQ2R.mjs.map +0 -1
  257. package/dist/chunk-PQLDKUPN.mjs.map +0 -1
  258. package/dist/index.d.mts +0 -153
  259. package/dist/json-value-Ch5eKkQ_.d.mts +0 -7
  260. package/dist/json-value-Ch5eKkQ_.d.ts +0 -7
  261. package/dist/utils.d.mts +0 -16
@@ -1,943 +0,0 @@
1
- // src/core/AssistantStream.ts
2
- var AssistantStream = {
3
- toResponse(stream, transformer) {
4
- return new Response(AssistantStream.toByteStream(stream, transformer), {
5
- headers: transformer.headers ?? {}
6
- });
7
- },
8
- fromResponse(response, transformer) {
9
- return AssistantStream.fromByteStream(response.body, transformer);
10
- },
11
- toByteStream(stream, transformer) {
12
- return stream.pipeThrough(transformer);
13
- },
14
- fromByteStream(readable, transformer) {
15
- return readable.pipeThrough(transformer);
16
- }
17
- };
18
-
19
- // src/utils/promiseWithResolvers.ts
20
- var promiseWithResolvers = function() {
21
- let resolve;
22
- let reject;
23
- const promise = new Promise((res, rej) => {
24
- resolve = res;
25
- reject = rej;
26
- });
27
- if (!resolve || !reject) throw new Error("Failed to create promise");
28
- return { promise, resolve, reject };
29
- };
30
-
31
- // src/core/utils/stream/merge.ts
32
- var createMergeStream = () => {
33
- const list = [];
34
- let sealed = false;
35
- let controller;
36
- let currentPull;
37
- const handlePull = (item) => {
38
- if (!item.promise) {
39
- item.promise = item.reader.read().then(({ done, value }) => {
40
- item.promise = void 0;
41
- if (done) {
42
- list.splice(list.indexOf(item), 1);
43
- if (sealed && list.length === 0) {
44
- controller.close();
45
- }
46
- } else {
47
- controller.enqueue(value);
48
- }
49
- currentPull?.resolve();
50
- currentPull = void 0;
51
- }).catch((e) => {
52
- console.error(e);
53
- list.forEach((item2) => {
54
- item2.reader.cancel();
55
- });
56
- list.length = 0;
57
- controller.error(e);
58
- currentPull?.reject(e);
59
- currentPull = void 0;
60
- });
61
- }
62
- };
63
- const readable = new ReadableStream({
64
- start(c) {
65
- controller = c;
66
- },
67
- pull() {
68
- currentPull = promiseWithResolvers();
69
- list.forEach((item) => {
70
- handlePull(item);
71
- });
72
- return currentPull.promise;
73
- },
74
- cancel() {
75
- list.forEach((item) => {
76
- item.reader.cancel();
77
- });
78
- list.length = 0;
79
- }
80
- });
81
- return {
82
- readable,
83
- isSealed() {
84
- return sealed;
85
- },
86
- seal() {
87
- sealed = true;
88
- if (list.length === 0) controller.close();
89
- },
90
- addStream(stream) {
91
- if (sealed)
92
- throw new Error(
93
- "Cannot add streams after the run callback has settled."
94
- );
95
- const item = { reader: stream.getReader() };
96
- list.push(item);
97
- handlePull(item);
98
- },
99
- enqueue(chunk) {
100
- this.addStream(
101
- new ReadableStream({
102
- start(c) {
103
- c.enqueue(chunk);
104
- c.close();
105
- }
106
- })
107
- );
108
- }
109
- };
110
- };
111
-
112
- // src/core/modules/text.ts
113
- var TextStreamControllerImpl = class {
114
- _controller;
115
- _isClosed = false;
116
- constructor(controller) {
117
- this._controller = controller;
118
- }
119
- append(textDelta) {
120
- this._controller.enqueue({
121
- type: "text-delta",
122
- path: [],
123
- textDelta
124
- });
125
- return this;
126
- }
127
- close() {
128
- if (this._isClosed) return;
129
- this._isClosed = true;
130
- this._controller.enqueue({
131
- type: "part-finish",
132
- path: []
133
- });
134
- this._controller.close();
135
- }
136
- };
137
- var createTextStream = (readable) => {
138
- return new ReadableStream({
139
- start(c) {
140
- return readable.start?.(new TextStreamControllerImpl(c));
141
- },
142
- pull(c) {
143
- return readable.pull?.(new TextStreamControllerImpl(c));
144
- },
145
- cancel(c) {
146
- return readable.cancel?.(c);
147
- }
148
- });
149
- };
150
- var createTextStreamController = () => {
151
- let controller;
152
- const stream = createTextStream({
153
- start(c) {
154
- controller = c;
155
- }
156
- });
157
- return [stream, controller];
158
- };
159
-
160
- // src/core/modules/tool-call.ts
161
- var ToolCallStreamControllerImpl = class {
162
- constructor(_controller) {
163
- this._controller = _controller;
164
- const stream = createTextStream({
165
- start: (c) => {
166
- this._argsTextController = c;
167
- }
168
- });
169
- this._mergeTask = stream.pipeTo(
170
- new WritableStream({
171
- write: (chunk) => {
172
- switch (chunk.type) {
173
- case "text-delta":
174
- this._controller.enqueue(chunk);
175
- break;
176
- case "part-finish":
177
- this._controller.enqueue({
178
- type: "tool-call-args-text-finish",
179
- path: []
180
- });
181
- break;
182
- default:
183
- throw new Error(`Unexpected chunk type: ${chunk.type}`);
184
- }
185
- }
186
- })
187
- );
188
- }
189
- _isClosed = false;
190
- _mergeTask;
191
- get argsText() {
192
- return this._argsTextController;
193
- }
194
- _argsTextController;
195
- setResponse(response) {
196
- this._controller.enqueue({
197
- type: "result",
198
- path: [],
199
- artifact: response.artifact,
200
- result: response.result,
201
- isError: response.isError ?? false
202
- });
203
- }
204
- async close() {
205
- if (this._isClosed) return;
206
- this._isClosed = true;
207
- this._argsTextController.close();
208
- await this._mergeTask;
209
- this._controller.enqueue({
210
- type: "part-finish",
211
- path: []
212
- });
213
- this._controller.close();
214
- }
215
- };
216
- var createToolCallStream = (readable) => {
217
- return new ReadableStream({
218
- start(c) {
219
- return readable.start?.(new ToolCallStreamControllerImpl(c));
220
- },
221
- pull(c) {
222
- return readable.pull?.(new ToolCallStreamControllerImpl(c));
223
- },
224
- cancel(c) {
225
- return readable.cancel?.(c);
226
- }
227
- });
228
- };
229
- var createToolCallStreamController = () => {
230
- let controller;
231
- const stream = createToolCallStream({
232
- start(c) {
233
- controller = c;
234
- }
235
- });
236
- return [stream, controller];
237
- };
238
-
239
- // src/core/utils/Counter.ts
240
- var Counter = class {
241
- value = -1;
242
- up() {
243
- return ++this.value;
244
- }
245
- };
246
-
247
- // src/core/utils/stream/path-utils.ts
248
- var PathAppendEncoder = class extends TransformStream {
249
- constructor(idx) {
250
- super({
251
- transform(chunk, controller) {
252
- controller.enqueue({
253
- ...chunk,
254
- path: [idx, ...chunk.path]
255
- });
256
- }
257
- });
258
- }
259
- };
260
- var PathAppendDecoder = class extends TransformStream {
261
- constructor(idx) {
262
- super({
263
- transform(chunk, controller) {
264
- const {
265
- path: [idx2, ...path]
266
- } = chunk;
267
- if (idx !== idx2)
268
- throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);
269
- controller.enqueue({
270
- ...chunk,
271
- path
272
- });
273
- }
274
- });
275
- }
276
- };
277
- var PathMergeEncoder = class extends TransformStream {
278
- constructor(counter) {
279
- const innerCounter = new Counter();
280
- const mapping = /* @__PURE__ */ new Map();
281
- super({
282
- transform(chunk, controller) {
283
- if (chunk.type === "part-start" && chunk.path.length === 0) {
284
- mapping.set(innerCounter.up(), counter.up());
285
- }
286
- const [idx, ...path] = chunk.path;
287
- if (idx === void 0) {
288
- controller.enqueue(chunk);
289
- return;
290
- }
291
- const mappedIdx = mapping.get(idx);
292
- if (mappedIdx === void 0) throw new Error("Path not found");
293
- controller.enqueue({
294
- ...chunk,
295
- path: [mappedIdx, ...path]
296
- });
297
- }
298
- });
299
- }
300
- };
301
-
302
- // src/core/utils/generateId.tsx
303
- import { customAlphabet } from "nanoid/non-secure";
304
- var generateId = customAlphabet(
305
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
306
- 7
307
- );
308
-
309
- // src/core/modules/assistant-stream.ts
310
- var AssistantStreamControllerImpl = class {
311
- _merger = createMergeStream();
312
- _append;
313
- _contentCounter = new Counter();
314
- get __internal_isClosed() {
315
- return this._merger.isSealed();
316
- }
317
- __internal_getReadable() {
318
- return this._merger.readable;
319
- }
320
- _closeSubscriber;
321
- __internal_subscribeToClose(callback) {
322
- this._closeSubscriber = callback;
323
- }
324
- _addPart(part, stream) {
325
- if (this._append) {
326
- this._append.controller.close();
327
- this._append = void 0;
328
- }
329
- this.enqueue({
330
- type: "part-start",
331
- part,
332
- path: []
333
- });
334
- this._merger.addStream(
335
- stream.pipeThrough(new PathAppendEncoder(this._contentCounter.value))
336
- );
337
- }
338
- merge(stream) {
339
- this._merger.addStream(
340
- stream.pipeThrough(new PathMergeEncoder(this._contentCounter))
341
- );
342
- }
343
- appendText(textDelta) {
344
- if (this._append?.kind !== "text") {
345
- this._append = {
346
- kind: "text",
347
- controller: this.addTextPart()
348
- };
349
- }
350
- this._append.controller.append(textDelta);
351
- }
352
- appendReasoning(textDelta) {
353
- if (this._append?.kind !== "reasoning") {
354
- this._append = {
355
- kind: "reasoning",
356
- controller: this.addReasoningPart()
357
- };
358
- }
359
- this._append.controller.append(textDelta);
360
- }
361
- addTextPart() {
362
- const [stream, controller] = createTextStreamController();
363
- this._addPart({ type: "text" }, stream);
364
- return controller;
365
- }
366
- addReasoningPart() {
367
- const [stream, controller] = createTextStreamController();
368
- this._addPart({ type: "reasoning" }, stream);
369
- return controller;
370
- }
371
- addToolCallPart(options) {
372
- const opt = typeof options === "string" ? { toolName: options } : options;
373
- const toolName = opt.toolName;
374
- const toolCallId = opt.toolCallId ?? generateId();
375
- const [stream, controller] = createToolCallStreamController();
376
- this._addPart({ type: "tool-call", toolName, toolCallId }, stream);
377
- if (opt.argsText !== void 0) {
378
- controller.argsText.append(opt.argsText);
379
- controller.argsText.close();
380
- }
381
- if (opt.args !== void 0) {
382
- controller.argsText.append(JSON.stringify(opt.args));
383
- controller.argsText.close();
384
- }
385
- if (opt.response !== void 0) {
386
- controller.setResponse(opt.response);
387
- }
388
- return controller;
389
- }
390
- appendSource(options) {
391
- this._addPart(
392
- options,
393
- new ReadableStream({
394
- start(controller) {
395
- controller.enqueue({
396
- type: "part-finish",
397
- path: []
398
- });
399
- controller.close();
400
- }
401
- })
402
- );
403
- }
404
- appendFile(options) {
405
- this._addPart(
406
- options,
407
- new ReadableStream({
408
- start(controller) {
409
- controller.enqueue({
410
- type: "part-finish",
411
- path: []
412
- });
413
- controller.close();
414
- }
415
- })
416
- );
417
- }
418
- enqueue(chunk) {
419
- this._merger.enqueue(chunk);
420
- if (chunk.type === "part-start" && chunk.path.length === 0) {
421
- this._contentCounter.up();
422
- }
423
- }
424
- close() {
425
- this._merger.seal();
426
- this._append?.controller?.close();
427
- this._closeSubscriber?.();
428
- }
429
- };
430
- function createAssistantStream(callback) {
431
- const controller = new AssistantStreamControllerImpl();
432
- let promiseOrVoid;
433
- try {
434
- promiseOrVoid = callback(controller);
435
- } catch (e) {
436
- if (!controller.__internal_isClosed) {
437
- controller.enqueue({
438
- type: "error",
439
- path: [],
440
- error: String(e)
441
- });
442
- controller.close();
443
- }
444
- throw e;
445
- }
446
- if (promiseOrVoid instanceof Promise) {
447
- const runTask = async () => {
448
- try {
449
- await promiseOrVoid;
450
- } catch (e) {
451
- if (!controller.__internal_isClosed) {
452
- controller.enqueue({
453
- type: "error",
454
- path: [],
455
- error: String(e)
456
- });
457
- }
458
- throw e;
459
- } finally {
460
- if (!controller.__internal_isClosed) {
461
- controller.close();
462
- }
463
- }
464
- };
465
- runTask();
466
- } else {
467
- if (!controller.__internal_isClosed) {
468
- controller.close();
469
- }
470
- }
471
- return controller.__internal_getReadable();
472
- }
473
- function createAssistantStreamController() {
474
- const { resolve, promise } = promiseWithResolvers();
475
- let controller;
476
- const stream = createAssistantStream((c) => {
477
- controller = c;
478
- controller.__internal_subscribeToClose(
479
- resolve
480
- );
481
- return promise;
482
- });
483
- return [stream, controller];
484
- }
485
- function createAssistantStreamResponse(callback) {
486
- return AssistantStream.toResponse(
487
- createAssistantStream(callback),
488
- new DataStreamEncoder()
489
- );
490
- }
491
-
492
- // src/core/utils/stream/AssistantTransformStream.ts
493
- var AssistantTransformStream = class extends TransformStream {
494
- constructor(transformer, writableStrategy, readableStrategy) {
495
- const [stream, runController] = createAssistantStreamController();
496
- let runPipeTask;
497
- super(
498
- {
499
- start(controller) {
500
- runPipeTask = stream.pipeTo(
501
- new WritableStream({
502
- write(chunk) {
503
- controller.enqueue(chunk);
504
- },
505
- abort(reason) {
506
- controller.error(reason);
507
- },
508
- close() {
509
- controller.terminate();
510
- }
511
- })
512
- ).catch((error) => {
513
- controller.error(error);
514
- });
515
- return transformer.start?.(runController);
516
- },
517
- transform(chunk) {
518
- return transformer.transform?.(chunk, runController);
519
- },
520
- async flush() {
521
- await transformer.flush?.(runController);
522
- runController.close();
523
- await runPipeTask;
524
- }
525
- },
526
- writableStrategy,
527
- readableStrategy
528
- );
529
- }
530
- };
531
-
532
- // src/core/utils/stream/PipeableTransformStream.ts
533
- var PipeableTransformStream = class extends TransformStream {
534
- constructor(transform) {
535
- super();
536
- const readable = transform(super.readable);
537
- Object.defineProperty(this, "readable", {
538
- value: readable,
539
- writable: false
540
- });
541
- }
542
- };
543
-
544
- // src/core/utils/stream/LineDecoderStream.ts
545
- var LineDecoderStream = class extends TransformStream {
546
- buffer = "";
547
- constructor() {
548
- super({
549
- transform: (chunk, controller) => {
550
- this.buffer += chunk;
551
- const lines = this.buffer.split("\n");
552
- for (let i = 0; i < lines.length - 1; i++) {
553
- controller.enqueue(lines[i]);
554
- }
555
- this.buffer = lines[lines.length - 1] || "";
556
- },
557
- flush: () => {
558
- if (this.buffer) {
559
- throw new Error(
560
- `Stream ended with an incomplete line: "${this.buffer}"`
561
- );
562
- }
563
- }
564
- });
565
- }
566
- };
567
-
568
- // src/core/serialization/data-stream/serialization.ts
569
- var DataStreamChunkEncoder = class extends TransformStream {
570
- constructor() {
571
- super({
572
- transform: (chunk, controller) => {
573
- controller.enqueue(`${chunk.type}:${JSON.stringify(chunk.value)}
574
- `);
575
- }
576
- });
577
- }
578
- };
579
- var DataStreamChunkDecoder = class extends TransformStream {
580
- constructor() {
581
- super({
582
- transform: (chunk, controller) => {
583
- const index = chunk.indexOf(":");
584
- if (index === -1) throw new Error("Invalid stream part");
585
- controller.enqueue({
586
- type: chunk.slice(0, index),
587
- value: JSON.parse(chunk.slice(index + 1))
588
- });
589
- }
590
- });
591
- }
592
- };
593
-
594
- // src/core/utils/stream/AssistantMetaTransformStream.ts
595
- var AssistantMetaTransformStream = class extends TransformStream {
596
- constructor() {
597
- const parts = [];
598
- super({
599
- transform(chunk, controller) {
600
- if (chunk.type === "part-start") {
601
- if (chunk.path.length !== 0) {
602
- controller.error(new Error("Nested parts are not supported"));
603
- return;
604
- }
605
- parts.push(chunk.part);
606
- controller.enqueue(chunk);
607
- return;
608
- }
609
- if (chunk.type === "text-delta" || chunk.type === "result" || chunk.type === "part-finish" || chunk.type === "tool-call-args-text-finish") {
610
- if (chunk.path.length !== 1) {
611
- controller.error(
612
- new Error(`${chunk.type} chunks must have a path of length 1`)
613
- );
614
- return;
615
- }
616
- const idx = chunk.path[0];
617
- if (idx < 0 || idx >= parts.length) {
618
- controller.error(new Error(`Invalid path index: ${idx}`));
619
- return;
620
- }
621
- const part = parts[idx];
622
- controller.enqueue({
623
- ...chunk,
624
- meta: part
625
- // TODO
626
- });
627
- return;
628
- }
629
- controller.enqueue(chunk);
630
- }
631
- });
632
- }
633
- };
634
-
635
- // src/core/serialization/data-stream/DataStream.ts
636
- var DataStreamEncoder = class extends PipeableTransformStream {
637
- headers = new Headers({
638
- "Content-Type": "text/plain; charset=utf-8",
639
- "x-vercel-ai-data-stream": "v1"
640
- });
641
- constructor() {
642
- super((readable) => {
643
- const transform = new TransformStream({
644
- transform(chunk, controller) {
645
- const type = chunk.type;
646
- switch (type) {
647
- case "part-start": {
648
- const part = chunk.part;
649
- if (part.type === "tool-call") {
650
- const { type: type2, ...value } = part;
651
- controller.enqueue({
652
- type: "b" /* StartToolCall */,
653
- value
654
- });
655
- }
656
- if (part.type === "source") {
657
- const { type: type2, ...value } = part;
658
- controller.enqueue({
659
- type: "h" /* Source */,
660
- value
661
- });
662
- }
663
- break;
664
- }
665
- case "text-delta": {
666
- const part = chunk.meta;
667
- switch (part.type) {
668
- case "text": {
669
- controller.enqueue({
670
- type: "0" /* TextDelta */,
671
- value: chunk.textDelta
672
- });
673
- break;
674
- }
675
- case "reasoning": {
676
- controller.enqueue({
677
- type: "g" /* ReasoningDelta */,
678
- value: chunk.textDelta
679
- });
680
- break;
681
- }
682
- case "tool-call": {
683
- controller.enqueue({
684
- type: "c" /* ToolCallArgsTextDelta */,
685
- value: {
686
- toolCallId: part.toolCallId,
687
- argsTextDelta: chunk.textDelta
688
- }
689
- });
690
- break;
691
- }
692
- default:
693
- throw new Error(
694
- `Unsupported part type for text-delta: ${part.type}`
695
- );
696
- }
697
- break;
698
- }
699
- case "result": {
700
- const part = chunk.meta;
701
- if (part.type !== "tool-call") {
702
- throw new Error(
703
- `Result chunk on non-tool-call part not supported: ${part.type}`
704
- );
705
- }
706
- controller.enqueue({
707
- type: "a" /* ToolCallResult */,
708
- value: {
709
- toolCallId: part.toolCallId,
710
- result: chunk.result,
711
- artifact: chunk.artifact,
712
- ...chunk.isError ? { isError: chunk.isError } : {}
713
- }
714
- });
715
- break;
716
- }
717
- case "step-start": {
718
- const { type: type2, ...value } = chunk;
719
- controller.enqueue({
720
- type: "f" /* StartStep */,
721
- value
722
- });
723
- break;
724
- }
725
- case "step-finish": {
726
- const { type: type2, ...value } = chunk;
727
- controller.enqueue({
728
- type: "e" /* FinishStep */,
729
- value
730
- });
731
- break;
732
- }
733
- case "message-finish": {
734
- const { type: type2, ...value } = chunk;
735
- controller.enqueue({
736
- type: "d" /* FinishMessage */,
737
- value
738
- });
739
- break;
740
- }
741
- case "error": {
742
- controller.enqueue({
743
- type: "3" /* Error */,
744
- value: chunk.error
745
- });
746
- break;
747
- }
748
- case "annotations": {
749
- controller.enqueue({
750
- type: "8" /* Annotation */,
751
- value: chunk.annotations
752
- });
753
- break;
754
- }
755
- case "data": {
756
- controller.enqueue({
757
- type: "2" /* Data */,
758
- value: chunk.data
759
- });
760
- break;
761
- }
762
- // TODO ignore for now
763
- // in the future, we should create a handler that waits for text parts to finish before continuing
764
- case "tool-call-args-text-finish":
765
- case "part-finish":
766
- break;
767
- default: {
768
- const exhaustiveCheck = type;
769
- throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
770
- }
771
- }
772
- }
773
- });
774
- return readable.pipeThrough(new AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
775
- });
776
- }
777
- };
778
- var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
779
- "b" /* StartToolCall */,
780
- "9" /* ToolCall */,
781
- "0" /* TextDelta */,
782
- "g" /* ReasoningDelta */,
783
- "h" /* Source */,
784
- "3" /* Error */,
785
- "e" /* FinishStep */,
786
- "d" /* FinishMessage */
787
- ];
788
- var DataStreamDecoder = class extends PipeableTransformStream {
789
- constructor() {
790
- super((readable) => {
791
- const toolCallControllers = /* @__PURE__ */ new Map();
792
- let activeToolCallArgsText;
793
- const transform = new AssistantTransformStream({
794
- transform(chunk, controller) {
795
- const { type, value } = chunk;
796
- if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
797
- activeToolCallArgsText?.close();
798
- activeToolCallArgsText = void 0;
799
- }
800
- switch (type) {
801
- case "g" /* ReasoningDelta */:
802
- controller.appendReasoning(value);
803
- break;
804
- case "0" /* TextDelta */:
805
- controller.appendText(value);
806
- break;
807
- case "b" /* StartToolCall */: {
808
- const { toolCallId, toolName } = value;
809
- const toolCallController = controller.addToolCallPart({
810
- toolCallId,
811
- toolName
812
- });
813
- toolCallControllers.set(toolCallId, toolCallController);
814
- activeToolCallArgsText = toolCallController.argsText;
815
- break;
816
- }
817
- case "c" /* ToolCallArgsTextDelta */: {
818
- const { toolCallId, argsTextDelta } = value;
819
- const toolCallController = toolCallControllers.get(toolCallId);
820
- if (!toolCallController)
821
- throw new Error(
822
- "Encountered tool call with unknown id: " + toolCallId
823
- );
824
- toolCallController.argsText.append(argsTextDelta);
825
- break;
826
- }
827
- case "a" /* ToolCallResult */: {
828
- const { toolCallId, artifact, result, isError } = value;
829
- const toolCallController = toolCallControllers.get(toolCallId);
830
- if (!toolCallController)
831
- throw new Error(
832
- "Encountered tool call result with unknown id: " + toolCallId
833
- );
834
- toolCallController.setResponse({
835
- artifact,
836
- result,
837
- isError
838
- });
839
- break;
840
- }
841
- case "9" /* ToolCall */: {
842
- const { toolCallId, toolName, args } = value;
843
- let toolCallController = toolCallControllers.get(toolCallId);
844
- if (toolCallController) {
845
- toolCallController.argsText.close();
846
- } else {
847
- toolCallController = controller.addToolCallPart({
848
- toolCallId,
849
- toolName,
850
- args
851
- });
852
- toolCallControllers.set(toolCallId, toolCallController);
853
- }
854
- break;
855
- }
856
- case "d" /* FinishMessage */:
857
- controller.enqueue({
858
- type: "message-finish",
859
- path: [],
860
- ...value
861
- });
862
- break;
863
- case "f" /* StartStep */:
864
- controller.enqueue({
865
- type: "step-start",
866
- path: [],
867
- ...value
868
- });
869
- break;
870
- case "e" /* FinishStep */:
871
- controller.enqueue({
872
- type: "step-finish",
873
- path: [],
874
- ...value
875
- });
876
- break;
877
- case "2" /* Data */:
878
- controller.enqueue({
879
- type: "data",
880
- path: [],
881
- data: value
882
- });
883
- break;
884
- case "8" /* Annotation */:
885
- controller.enqueue({
886
- type: "annotations",
887
- path: [],
888
- annotations: value
889
- });
890
- break;
891
- case "h" /* Source */:
892
- controller.appendSource({
893
- type: "source",
894
- ...value
895
- });
896
- break;
897
- case "3" /* Error */:
898
- controller.enqueue({
899
- type: "error",
900
- path: [],
901
- error: value
902
- });
903
- break;
904
- case "k" /* File */:
905
- controller.appendFile({
906
- type: "file",
907
- ...value
908
- });
909
- break;
910
- case "j" /* ReasoningSignature */:
911
- case "i" /* RedactedReasoning */:
912
- break;
913
- default: {
914
- const exhaustiveCheck = type;
915
- throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
916
- }
917
- }
918
- },
919
- flush() {
920
- activeToolCallArgsText?.close();
921
- activeToolCallArgsText = void 0;
922
- toolCallControllers.forEach((controller) => controller.close());
923
- toolCallControllers.clear();
924
- }
925
- });
926
- return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new DataStreamChunkDecoder()).pipeThrough(transform);
927
- });
928
- }
929
- };
930
-
931
- export {
932
- AssistantStream,
933
- promiseWithResolvers,
934
- PipeableTransformStream,
935
- AssistantMetaTransformStream,
936
- DataStreamEncoder,
937
- DataStreamDecoder,
938
- generateId,
939
- createAssistantStream,
940
- createAssistantStreamResponse,
941
- AssistantTransformStream
942
- };
943
- //# sourceMappingURL=chunk-EDE6WQ2R.mjs.map