assistant-stream 0.1.6 → 0.1.8

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 +12 -27
  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
@@ -0,0 +1,224 @@
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/modules/assistant-stream.ts
21
+ var assistant_stream_exports = {};
22
+ __export(assistant_stream_exports, {
23
+ createAssistantStream: () => createAssistantStream,
24
+ createAssistantStreamController: () => createAssistantStreamController,
25
+ createAssistantStreamResponse: () => createAssistantStreamResponse
26
+ });
27
+ module.exports = __toCommonJS(assistant_stream_exports);
28
+ var import_AssistantStream = require("../AssistantStream.js");
29
+ var import_merge = require("../utils/stream/merge.js");
30
+ var import_text = require("./text.js");
31
+ var import_tool_call = require("./tool-call.js");
32
+ var import_Counter = require("../utils/Counter.js");
33
+ var import_path_utils = require("../utils/stream/path-utils.js");
34
+ var import_DataStream = require("../serialization/data-stream/DataStream.js");
35
+ var import_generateId = require("../utils/generateId.js");
36
+ var import_promiseWithResolvers = require("../../utils/promiseWithResolvers.js");
37
+ var AssistantStreamControllerImpl = class {
38
+ _merger = (0, import_merge.createMergeStream)();
39
+ _append;
40
+ _contentCounter = new import_Counter.Counter();
41
+ get __internal_isClosed() {
42
+ return this._merger.isSealed();
43
+ }
44
+ __internal_getReadable() {
45
+ return this._merger.readable;
46
+ }
47
+ _closeSubscriber;
48
+ __internal_subscribeToClose(callback) {
49
+ this._closeSubscriber = callback;
50
+ }
51
+ _addPart(part, stream) {
52
+ if (this._append) {
53
+ this._append.controller.close();
54
+ this._append = void 0;
55
+ }
56
+ this.enqueue({
57
+ type: "part-start",
58
+ part,
59
+ path: []
60
+ });
61
+ this._merger.addStream(
62
+ stream.pipeThrough(new import_path_utils.PathAppendEncoder(this._contentCounter.value))
63
+ );
64
+ }
65
+ merge(stream) {
66
+ this._merger.addStream(
67
+ stream.pipeThrough(new import_path_utils.PathMergeEncoder(this._contentCounter))
68
+ );
69
+ }
70
+ appendText(textDelta) {
71
+ if (this._append?.kind !== "text") {
72
+ this._append = {
73
+ kind: "text",
74
+ controller: this.addTextPart()
75
+ };
76
+ }
77
+ this._append.controller.append(textDelta);
78
+ }
79
+ appendReasoning(textDelta) {
80
+ if (this._append?.kind !== "reasoning") {
81
+ this._append = {
82
+ kind: "reasoning",
83
+ controller: this.addReasoningPart()
84
+ };
85
+ }
86
+ this._append.controller.append(textDelta);
87
+ }
88
+ addTextPart() {
89
+ const [stream, controller] = (0, import_text.createTextStreamController)();
90
+ this._addPart({ type: "text" }, stream);
91
+ return controller;
92
+ }
93
+ addReasoningPart() {
94
+ const [stream, controller] = (0, import_text.createTextStreamController)();
95
+ this._addPart({ type: "reasoning" }, stream);
96
+ return controller;
97
+ }
98
+ addToolCallPart(options) {
99
+ const opt = typeof options === "string" ? { toolName: options } : options;
100
+ const toolName = opt.toolName;
101
+ const toolCallId = opt.toolCallId ?? (0, import_generateId.generateId)();
102
+ const [stream, controller] = (0, import_tool_call.createToolCallStreamController)();
103
+ this._addPart({ type: "tool-call", toolName, toolCallId }, stream);
104
+ if (opt.argsText !== void 0) {
105
+ controller.argsText.append(opt.argsText);
106
+ controller.argsText.close();
107
+ }
108
+ if (opt.args !== void 0) {
109
+ controller.argsText.append(JSON.stringify(opt.args));
110
+ controller.argsText.close();
111
+ }
112
+ if (opt.response !== void 0) {
113
+ controller.setResponse(opt.response);
114
+ }
115
+ return controller;
116
+ }
117
+ appendSource(options) {
118
+ this._addPart(
119
+ options,
120
+ new ReadableStream({
121
+ start(controller) {
122
+ controller.enqueue({
123
+ type: "part-finish",
124
+ path: []
125
+ });
126
+ controller.close();
127
+ }
128
+ })
129
+ );
130
+ }
131
+ appendFile(options) {
132
+ this._addPart(
133
+ options,
134
+ new ReadableStream({
135
+ start(controller) {
136
+ controller.enqueue({
137
+ type: "part-finish",
138
+ path: []
139
+ });
140
+ controller.close();
141
+ }
142
+ })
143
+ );
144
+ }
145
+ enqueue(chunk) {
146
+ this._merger.enqueue(chunk);
147
+ if (chunk.type === "part-start" && chunk.path.length === 0) {
148
+ this._contentCounter.up();
149
+ }
150
+ }
151
+ close() {
152
+ this._merger.seal();
153
+ this._append?.controller?.close();
154
+ this._closeSubscriber?.();
155
+ }
156
+ };
157
+ function createAssistantStream(callback) {
158
+ const controller = new AssistantStreamControllerImpl();
159
+ let promiseOrVoid;
160
+ try {
161
+ promiseOrVoid = callback(controller);
162
+ } catch (e) {
163
+ if (!controller.__internal_isClosed) {
164
+ controller.enqueue({
165
+ type: "error",
166
+ path: [],
167
+ error: String(e)
168
+ });
169
+ controller.close();
170
+ }
171
+ throw e;
172
+ }
173
+ if (promiseOrVoid instanceof Promise) {
174
+ const runTask = async () => {
175
+ try {
176
+ await promiseOrVoid;
177
+ } catch (e) {
178
+ if (!controller.__internal_isClosed) {
179
+ controller.enqueue({
180
+ type: "error",
181
+ path: [],
182
+ error: String(e)
183
+ });
184
+ }
185
+ throw e;
186
+ } finally {
187
+ if (!controller.__internal_isClosed) {
188
+ controller.close();
189
+ }
190
+ }
191
+ };
192
+ runTask();
193
+ } else {
194
+ if (!controller.__internal_isClosed) {
195
+ controller.close();
196
+ }
197
+ }
198
+ return controller.__internal_getReadable();
199
+ }
200
+ function createAssistantStreamController() {
201
+ const { resolve, promise } = (0, import_promiseWithResolvers.promiseWithResolvers)();
202
+ let controller;
203
+ const stream = createAssistantStream((c) => {
204
+ controller = c;
205
+ controller.__internal_subscribeToClose(
206
+ resolve
207
+ );
208
+ return promise;
209
+ });
210
+ return [stream, controller];
211
+ }
212
+ function createAssistantStreamResponse(callback) {
213
+ return import_AssistantStream.AssistantStream.toResponse(
214
+ createAssistantStream(callback),
215
+ new import_DataStream.DataStreamEncoder()
216
+ );
217
+ }
218
+ // Annotate the CommonJS export names for ESM import in node:
219
+ 0 && (module.exports = {
220
+ createAssistantStream,
221
+ createAssistantStreamController,
222
+ createAssistantStreamResponse
223
+ });
224
+ //# sourceMappingURL=assistant-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/modules/assistant-stream.ts"],"sourcesContent":["import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantStreamChunk, PartInit } from \"../AssistantStreamChunk\";\nimport { createMergeStream } from \"../utils/stream/merge\";\nimport { createTextStreamController, TextStreamController } from \"./text\";\nimport {\n createToolCallStreamController,\n ToolCallStreamController,\n} from \"./tool-call\";\nimport { Counter } from \"../utils/Counter\";\nimport {\n PathAppendEncoder,\n PathMergeEncoder,\n} from \"../utils/stream/path-utils\";\nimport { DataStreamEncoder } from \"../serialization/data-stream/DataStream\";\nimport { FilePart, SourcePart } from \"../utils/types\";\nimport { generateId } from \"../utils/generateId\";\nimport {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"../../utils/json/json-value\";\nimport { ToolResponseInit } from \"../tool/ToolResponse\";\nimport { promiseWithResolvers } from \"../../utils/promiseWithResolvers\";\n\ntype ToolCallPartInit = {\n toolCallId?: string;\n toolName: string;\n argsText?: string;\n args?: ReadonlyJSONObject;\n response?: ToolResponseInit<ReadonlyJSONValue>;\n};\n\nexport type AssistantStreamController = {\n appendText(textDelta: string): void;\n appendReasoning(reasoningDelta: string): void;\n appendSource(options: SourcePart): void;\n appendFile(options: FilePart): void;\n addTextPart(): TextStreamController;\n addToolCallPart(options: string): ToolCallStreamController;\n addToolCallPart(options: ToolCallPartInit): ToolCallStreamController;\n enqueue(chunk: AssistantStreamChunk): void;\n merge(stream: AssistantStream): void;\n close(): void;\n};\n\nclass AssistantStreamControllerImpl implements AssistantStreamController {\n private _merger = createMergeStream();\n private _append:\n | {\n controller: TextStreamController;\n kind: \"text\" | \"reasoning\";\n }\n | undefined;\n private _contentCounter = new Counter();\n\n get __internal_isClosed() {\n return this._merger.isSealed();\n }\n\n __internal_getReadable() {\n return this._merger.readable;\n }\n\n private _closeSubscriber: undefined | (() => void);\n __internal_subscribeToClose(callback: () => void) {\n this._closeSubscriber = callback;\n }\n\n private _addPart(part: PartInit, stream: AssistantStream) {\n if (this._append) {\n this._append.controller.close();\n this._append = undefined;\n }\n\n this.enqueue({\n type: \"part-start\",\n part,\n path: [],\n });\n this._merger.addStream(\n stream.pipeThrough(new PathAppendEncoder(this._contentCounter.value)),\n );\n }\n\n merge(stream: AssistantStream) {\n this._merger.addStream(\n stream.pipeThrough(new PathMergeEncoder(this._contentCounter)),\n );\n }\n\n appendText(textDelta: string) {\n if (this._append?.kind !== \"text\") {\n this._append = {\n kind: \"text\",\n controller: this.addTextPart(),\n };\n }\n this._append.controller.append(textDelta);\n }\n\n appendReasoning(textDelta: string) {\n if (this._append?.kind !== \"reasoning\") {\n this._append = {\n kind: \"reasoning\",\n controller: this.addReasoningPart(),\n };\n }\n this._append.controller.append(textDelta);\n }\n\n addTextPart() {\n const [stream, controller] = createTextStreamController();\n this._addPart({ type: \"text\" }, stream);\n return controller;\n }\n\n addReasoningPart() {\n const [stream, controller] = createTextStreamController();\n this._addPart({ type: \"reasoning\" }, stream);\n return controller;\n }\n\n addToolCallPart(\n options: string | ToolCallPartInit,\n ): ToolCallStreamController {\n const opt = typeof options === \"string\" ? { toolName: options } : options;\n const toolName = opt.toolName;\n const toolCallId = opt.toolCallId ?? generateId();\n\n const [stream, controller] = createToolCallStreamController();\n this._addPart({ type: \"tool-call\", toolName, toolCallId }, stream);\n\n if (opt.argsText !== undefined) {\n controller.argsText.append(opt.argsText);\n controller.argsText.close();\n }\n if (opt.args !== undefined) {\n controller.argsText.append(JSON.stringify(opt.args));\n controller.argsText.close();\n }\n if (opt.response !== undefined) {\n controller.setResponse(opt.response);\n }\n\n return controller;\n }\n\n appendSource(options: SourcePart) {\n this._addPart(\n options,\n new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n controller.close();\n },\n }),\n );\n }\n\n appendFile(options: FilePart) {\n this._addPart(\n options,\n new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n controller.close();\n },\n }),\n );\n }\n\n enqueue(chunk: AssistantStreamChunk) {\n this._merger.enqueue(chunk);\n\n if (chunk.type === \"part-start\" && chunk.path.length === 0) {\n this._contentCounter.up();\n }\n }\n\n close() {\n this._merger.seal();\n this._append?.controller?.close();\n\n this._closeSubscriber?.();\n }\n}\n\nexport function createAssistantStream(\n callback: (controller: AssistantStreamController) => PromiseLike<void> | void,\n): AssistantStream {\n const controller = new AssistantStreamControllerImpl();\n\n let promiseOrVoid: PromiseLike<void> | void;\n try {\n promiseOrVoid = callback(controller);\n } catch (e) {\n if (!controller.__internal_isClosed) {\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(e),\n });\n controller.close();\n }\n throw e;\n }\n\n if (promiseOrVoid instanceof Promise) {\n const runTask = async () => {\n try {\n await promiseOrVoid;\n } catch (e) {\n if (!controller.__internal_isClosed) {\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(e),\n });\n }\n throw e;\n } finally {\n if (!controller.__internal_isClosed) {\n controller.close();\n }\n }\n };\n runTask();\n } else {\n if (!controller.__internal_isClosed) {\n controller.close();\n }\n }\n\n return controller.__internal_getReadable();\n}\n\nexport function createAssistantStreamController() {\n const { resolve, promise } = promiseWithResolvers<void>();\n let controller!: AssistantStreamController;\n const stream = createAssistantStream((c) => {\n controller = c;\n\n (controller as AssistantStreamControllerImpl).__internal_subscribeToClose(\n resolve,\n );\n\n return promise;\n });\n return [stream, controller] as const;\n}\n\nexport function createAssistantStreamResponse(\n callback: (controller: AssistantStreamController) => PromiseLike<void> | void,\n) {\n return AssistantStream.toResponse(\n createAssistantStream(callback),\n new DataStreamEncoder(),\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,202 @@
1
+ // src/core/modules/assistant-stream.ts
2
+ import { AssistantStream } from "../AssistantStream.mjs";
3
+ import { createMergeStream } from "../utils/stream/merge.mjs";
4
+ import { createTextStreamController } from "./text.mjs";
5
+ import {
6
+ createToolCallStreamController
7
+ } from "./tool-call.mjs";
8
+ import { Counter } from "../utils/Counter.mjs";
9
+ import {
10
+ PathAppendEncoder,
11
+ PathMergeEncoder
12
+ } from "../utils/stream/path-utils.mjs";
13
+ import { DataStreamEncoder } from "../serialization/data-stream/DataStream.mjs";
14
+ import { generateId } from "../utils/generateId.mjs";
15
+ import { promiseWithResolvers } from "../../utils/promiseWithResolvers.mjs";
16
+ var AssistantStreamControllerImpl = class {
17
+ _merger = createMergeStream();
18
+ _append;
19
+ _contentCounter = new Counter();
20
+ get __internal_isClosed() {
21
+ return this._merger.isSealed();
22
+ }
23
+ __internal_getReadable() {
24
+ return this._merger.readable;
25
+ }
26
+ _closeSubscriber;
27
+ __internal_subscribeToClose(callback) {
28
+ this._closeSubscriber = callback;
29
+ }
30
+ _addPart(part, stream) {
31
+ if (this._append) {
32
+ this._append.controller.close();
33
+ this._append = void 0;
34
+ }
35
+ this.enqueue({
36
+ type: "part-start",
37
+ part,
38
+ path: []
39
+ });
40
+ this._merger.addStream(
41
+ stream.pipeThrough(new PathAppendEncoder(this._contentCounter.value))
42
+ );
43
+ }
44
+ merge(stream) {
45
+ this._merger.addStream(
46
+ stream.pipeThrough(new PathMergeEncoder(this._contentCounter))
47
+ );
48
+ }
49
+ appendText(textDelta) {
50
+ if (this._append?.kind !== "text") {
51
+ this._append = {
52
+ kind: "text",
53
+ controller: this.addTextPart()
54
+ };
55
+ }
56
+ this._append.controller.append(textDelta);
57
+ }
58
+ appendReasoning(textDelta) {
59
+ if (this._append?.kind !== "reasoning") {
60
+ this._append = {
61
+ kind: "reasoning",
62
+ controller: this.addReasoningPart()
63
+ };
64
+ }
65
+ this._append.controller.append(textDelta);
66
+ }
67
+ addTextPart() {
68
+ const [stream, controller] = createTextStreamController();
69
+ this._addPart({ type: "text" }, stream);
70
+ return controller;
71
+ }
72
+ addReasoningPart() {
73
+ const [stream, controller] = createTextStreamController();
74
+ this._addPart({ type: "reasoning" }, stream);
75
+ return controller;
76
+ }
77
+ addToolCallPart(options) {
78
+ const opt = typeof options === "string" ? { toolName: options } : options;
79
+ const toolName = opt.toolName;
80
+ const toolCallId = opt.toolCallId ?? generateId();
81
+ const [stream, controller] = createToolCallStreamController();
82
+ this._addPart({ type: "tool-call", toolName, toolCallId }, stream);
83
+ if (opt.argsText !== void 0) {
84
+ controller.argsText.append(opt.argsText);
85
+ controller.argsText.close();
86
+ }
87
+ if (opt.args !== void 0) {
88
+ controller.argsText.append(JSON.stringify(opt.args));
89
+ controller.argsText.close();
90
+ }
91
+ if (opt.response !== void 0) {
92
+ controller.setResponse(opt.response);
93
+ }
94
+ return controller;
95
+ }
96
+ appendSource(options) {
97
+ this._addPart(
98
+ options,
99
+ new ReadableStream({
100
+ start(controller) {
101
+ controller.enqueue({
102
+ type: "part-finish",
103
+ path: []
104
+ });
105
+ controller.close();
106
+ }
107
+ })
108
+ );
109
+ }
110
+ appendFile(options) {
111
+ this._addPart(
112
+ options,
113
+ new ReadableStream({
114
+ start(controller) {
115
+ controller.enqueue({
116
+ type: "part-finish",
117
+ path: []
118
+ });
119
+ controller.close();
120
+ }
121
+ })
122
+ );
123
+ }
124
+ enqueue(chunk) {
125
+ this._merger.enqueue(chunk);
126
+ if (chunk.type === "part-start" && chunk.path.length === 0) {
127
+ this._contentCounter.up();
128
+ }
129
+ }
130
+ close() {
131
+ this._merger.seal();
132
+ this._append?.controller?.close();
133
+ this._closeSubscriber?.();
134
+ }
135
+ };
136
+ function createAssistantStream(callback) {
137
+ const controller = new AssistantStreamControllerImpl();
138
+ let promiseOrVoid;
139
+ try {
140
+ promiseOrVoid = callback(controller);
141
+ } catch (e) {
142
+ if (!controller.__internal_isClosed) {
143
+ controller.enqueue({
144
+ type: "error",
145
+ path: [],
146
+ error: String(e)
147
+ });
148
+ controller.close();
149
+ }
150
+ throw e;
151
+ }
152
+ if (promiseOrVoid instanceof Promise) {
153
+ const runTask = async () => {
154
+ try {
155
+ await promiseOrVoid;
156
+ } catch (e) {
157
+ if (!controller.__internal_isClosed) {
158
+ controller.enqueue({
159
+ type: "error",
160
+ path: [],
161
+ error: String(e)
162
+ });
163
+ }
164
+ throw e;
165
+ } finally {
166
+ if (!controller.__internal_isClosed) {
167
+ controller.close();
168
+ }
169
+ }
170
+ };
171
+ runTask();
172
+ } else {
173
+ if (!controller.__internal_isClosed) {
174
+ controller.close();
175
+ }
176
+ }
177
+ return controller.__internal_getReadable();
178
+ }
179
+ function createAssistantStreamController() {
180
+ const { resolve, promise } = promiseWithResolvers();
181
+ let controller;
182
+ const stream = createAssistantStream((c) => {
183
+ controller = c;
184
+ controller.__internal_subscribeToClose(
185
+ resolve
186
+ );
187
+ return promise;
188
+ });
189
+ return [stream, controller];
190
+ }
191
+ function createAssistantStreamResponse(callback) {
192
+ return AssistantStream.toResponse(
193
+ createAssistantStream(callback),
194
+ new DataStreamEncoder()
195
+ );
196
+ }
197
+ export {
198
+ createAssistantStream,
199
+ createAssistantStreamController,
200
+ createAssistantStreamResponse
201
+ };
202
+ //# sourceMappingURL=assistant-stream.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/modules/assistant-stream.ts"],"sourcesContent":["import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantStreamChunk, PartInit } from \"../AssistantStreamChunk\";\nimport { createMergeStream } from \"../utils/stream/merge\";\nimport { createTextStreamController, TextStreamController } from \"./text\";\nimport {\n createToolCallStreamController,\n ToolCallStreamController,\n} from \"./tool-call\";\nimport { Counter } from \"../utils/Counter\";\nimport {\n PathAppendEncoder,\n PathMergeEncoder,\n} from \"../utils/stream/path-utils\";\nimport { DataStreamEncoder } from \"../serialization/data-stream/DataStream\";\nimport { FilePart, SourcePart } from \"../utils/types\";\nimport { generateId } from \"../utils/generateId\";\nimport {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"../../utils/json/json-value\";\nimport { ToolResponseInit } from \"../tool/ToolResponse\";\nimport { promiseWithResolvers } from \"../../utils/promiseWithResolvers\";\n\ntype ToolCallPartInit = {\n toolCallId?: string;\n toolName: string;\n argsText?: string;\n args?: ReadonlyJSONObject;\n response?: ToolResponseInit<ReadonlyJSONValue>;\n};\n\nexport type AssistantStreamController = {\n appendText(textDelta: string): void;\n appendReasoning(reasoningDelta: string): void;\n appendSource(options: SourcePart): void;\n appendFile(options: FilePart): void;\n addTextPart(): TextStreamController;\n addToolCallPart(options: string): ToolCallStreamController;\n addToolCallPart(options: ToolCallPartInit): ToolCallStreamController;\n enqueue(chunk: AssistantStreamChunk): void;\n merge(stream: AssistantStream): void;\n close(): void;\n};\n\nclass AssistantStreamControllerImpl implements AssistantStreamController {\n private _merger = createMergeStream();\n private _append:\n | {\n controller: TextStreamController;\n kind: \"text\" | \"reasoning\";\n }\n | undefined;\n private _contentCounter = new Counter();\n\n get __internal_isClosed() {\n return this._merger.isSealed();\n }\n\n __internal_getReadable() {\n return this._merger.readable;\n }\n\n private _closeSubscriber: undefined | (() => void);\n __internal_subscribeToClose(callback: () => void) {\n this._closeSubscriber = callback;\n }\n\n private _addPart(part: PartInit, stream: AssistantStream) {\n if (this._append) {\n this._append.controller.close();\n this._append = undefined;\n }\n\n this.enqueue({\n type: \"part-start\",\n part,\n path: [],\n });\n this._merger.addStream(\n stream.pipeThrough(new PathAppendEncoder(this._contentCounter.value)),\n );\n }\n\n merge(stream: AssistantStream) {\n this._merger.addStream(\n stream.pipeThrough(new PathMergeEncoder(this._contentCounter)),\n );\n }\n\n appendText(textDelta: string) {\n if (this._append?.kind !== \"text\") {\n this._append = {\n kind: \"text\",\n controller: this.addTextPart(),\n };\n }\n this._append.controller.append(textDelta);\n }\n\n appendReasoning(textDelta: string) {\n if (this._append?.kind !== \"reasoning\") {\n this._append = {\n kind: \"reasoning\",\n controller: this.addReasoningPart(),\n };\n }\n this._append.controller.append(textDelta);\n }\n\n addTextPart() {\n const [stream, controller] = createTextStreamController();\n this._addPart({ type: \"text\" }, stream);\n return controller;\n }\n\n addReasoningPart() {\n const [stream, controller] = createTextStreamController();\n this._addPart({ type: \"reasoning\" }, stream);\n return controller;\n }\n\n addToolCallPart(\n options: string | ToolCallPartInit,\n ): ToolCallStreamController {\n const opt = typeof options === \"string\" ? { toolName: options } : options;\n const toolName = opt.toolName;\n const toolCallId = opt.toolCallId ?? generateId();\n\n const [stream, controller] = createToolCallStreamController();\n this._addPart({ type: \"tool-call\", toolName, toolCallId }, stream);\n\n if (opt.argsText !== undefined) {\n controller.argsText.append(opt.argsText);\n controller.argsText.close();\n }\n if (opt.args !== undefined) {\n controller.argsText.append(JSON.stringify(opt.args));\n controller.argsText.close();\n }\n if (opt.response !== undefined) {\n controller.setResponse(opt.response);\n }\n\n return controller;\n }\n\n appendSource(options: SourcePart) {\n this._addPart(\n options,\n new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n controller.close();\n },\n }),\n );\n }\n\n appendFile(options: FilePart) {\n this._addPart(\n options,\n new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n controller.close();\n },\n }),\n );\n }\n\n enqueue(chunk: AssistantStreamChunk) {\n this._merger.enqueue(chunk);\n\n if (chunk.type === \"part-start\" && chunk.path.length === 0) {\n this._contentCounter.up();\n }\n }\n\n close() {\n this._merger.seal();\n this._append?.controller?.close();\n\n this._closeSubscriber?.();\n }\n}\n\nexport function createAssistantStream(\n callback: (controller: AssistantStreamController) => PromiseLike<void> | void,\n): AssistantStream {\n const controller = new AssistantStreamControllerImpl();\n\n let promiseOrVoid: PromiseLike<void> | void;\n try {\n promiseOrVoid = callback(controller);\n } catch (e) {\n if (!controller.__internal_isClosed) {\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(e),\n });\n controller.close();\n }\n throw e;\n }\n\n if (promiseOrVoid instanceof Promise) {\n const runTask = async () => {\n try {\n await promiseOrVoid;\n } catch (e) {\n if (!controller.__internal_isClosed) {\n controller.enqueue({\n type: \"error\",\n path: [],\n error: String(e),\n });\n }\n throw e;\n } finally {\n if (!controller.__internal_isClosed) {\n controller.close();\n }\n }\n };\n runTask();\n } else {\n if (!controller.__internal_isClosed) {\n controller.close();\n }\n }\n\n return controller.__internal_getReadable();\n}\n\nexport function createAssistantStreamController() {\n const { resolve, promise } = promiseWithResolvers<void>();\n let controller!: AssistantStreamController;\n const stream = createAssistantStream((c) => {\n controller = c;\n\n (controller as AssistantStreamControllerImpl).__internal_subscribeToClose(\n resolve,\n );\n\n return promise;\n });\n return [stream, controller] as const;\n}\n\nexport function createAssistantStreamResponse(\n callback: (controller: AssistantStreamController) => PromiseLike<void> | void,\n) {\n return AssistantStream.toResponse(\n createAssistantStream(callback),\n new DataStreamEncoder(),\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,9 @@
1
+ import { AssistantStream } from "../AssistantStream";
2
+ import { UnderlyingReadable } from "../utils/stream/UnderlyingReadable";
3
+ export type TextStreamController = {
4
+ append(textDelta: string): void;
5
+ close(): void;
6
+ };
7
+ export declare const createTextStream: (readable: UnderlyingReadable<TextStreamController>) => AssistantStream;
8
+ export declare const createTextStreamController: () => readonly [AssistantStream, TextStreamController];
9
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/core/modules/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAgCF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,kBAAkB,CAAC,oBAAoB,CAAC,KACjD,eAYF,CAAC;AAEF,eAAO,MAAM,0BAA0B,wDAQtC,CAAC"}
@@ -0,0 +1,78 @@
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/modules/text.ts
21
+ var text_exports = {};
22
+ __export(text_exports, {
23
+ createTextStream: () => createTextStream,
24
+ createTextStreamController: () => createTextStreamController
25
+ });
26
+ module.exports = __toCommonJS(text_exports);
27
+ var TextStreamControllerImpl = class {
28
+ _controller;
29
+ _isClosed = false;
30
+ constructor(controller) {
31
+ this._controller = controller;
32
+ }
33
+ append(textDelta) {
34
+ this._controller.enqueue({
35
+ type: "text-delta",
36
+ path: [],
37
+ textDelta
38
+ });
39
+ return this;
40
+ }
41
+ close() {
42
+ if (this._isClosed) return;
43
+ this._isClosed = true;
44
+ this._controller.enqueue({
45
+ type: "part-finish",
46
+ path: []
47
+ });
48
+ this._controller.close();
49
+ }
50
+ };
51
+ var createTextStream = (readable) => {
52
+ return new ReadableStream({
53
+ start(c) {
54
+ return readable.start?.(new TextStreamControllerImpl(c));
55
+ },
56
+ pull(c) {
57
+ return readable.pull?.(new TextStreamControllerImpl(c));
58
+ },
59
+ cancel(c) {
60
+ return readable.cancel?.(c);
61
+ }
62
+ });
63
+ };
64
+ var createTextStreamController = () => {
65
+ let controller;
66
+ const stream = createTextStream({
67
+ start(c) {
68
+ controller = c;
69
+ }
70
+ });
71
+ return [stream, controller];
72
+ };
73
+ // Annotate the CommonJS export names for ESM import in node:
74
+ 0 && (module.exports = {
75
+ createTextStream,
76
+ createTextStreamController
77
+ });
78
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/modules/text.ts"],"sourcesContent":["import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantStreamChunk } from \"../AssistantStreamChunk\";\nimport { UnderlyingReadable } from \"../utils/stream/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n private _isClosed = false;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n path: [],\n textDelta,\n });\n return this;\n }\n\n close() {\n if (this._isClosed) return;\n this._isClosed = true;\n this._controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n });\n};\n\nexport const createTextStreamController = () => {\n let controller!: TextStreamController;\n const stream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n return [stream, controller] as const;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,IAAM,2BAAN,MAA+D;AAAA,EACrD;AAAA,EACA,YAAY;AAAA,EAEpB,YACE,YACA;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAO,WAAmB;AACxB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,IACT,CAAC;AACD,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAEO,IAAM,mBAAmB,CAC9B,aACoB;AACpB,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,GAAG;AACP,aAAO,SAAS,QAAQ,IAAI,yBAAyB,CAAC,CAAC;AAAA,IACzD;AAAA,IACA,KAAK,GAAG;AACN,aAAO,SAAS,OAAO,IAAI,yBAAyB,CAAC,CAAC;AAAA,IACxD;AAAA,IACA,OAAO,GAAG;AACR,aAAO,SAAS,SAAS,CAAC;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAEO,IAAM,6BAA6B,MAAM;AAC9C,MAAI;AACJ,QAAM,SAAS,iBAAiB;AAAA,IAC9B,MAAM,GAAG;AACP,mBAAa;AAAA,IACf;AAAA,EACF,CAAC;AACD,SAAO,CAAC,QAAQ,UAAU;AAC5B;","names":[]}
@@ -0,0 +1,52 @@
1
+ // src/core/modules/text.ts
2
+ var TextStreamControllerImpl = class {
3
+ _controller;
4
+ _isClosed = false;
5
+ constructor(controller) {
6
+ this._controller = controller;
7
+ }
8
+ append(textDelta) {
9
+ this._controller.enqueue({
10
+ type: "text-delta",
11
+ path: [],
12
+ textDelta
13
+ });
14
+ return this;
15
+ }
16
+ close() {
17
+ if (this._isClosed) return;
18
+ this._isClosed = true;
19
+ this._controller.enqueue({
20
+ type: "part-finish",
21
+ path: []
22
+ });
23
+ this._controller.close();
24
+ }
25
+ };
26
+ var createTextStream = (readable) => {
27
+ return new ReadableStream({
28
+ start(c) {
29
+ return readable.start?.(new TextStreamControllerImpl(c));
30
+ },
31
+ pull(c) {
32
+ return readable.pull?.(new TextStreamControllerImpl(c));
33
+ },
34
+ cancel(c) {
35
+ return readable.cancel?.(c);
36
+ }
37
+ });
38
+ };
39
+ var createTextStreamController = () => {
40
+ let controller;
41
+ const stream = createTextStream({
42
+ start(c) {
43
+ controller = c;
44
+ }
45
+ });
46
+ return [stream, controller];
47
+ };
48
+ export {
49
+ createTextStream,
50
+ createTextStreamController
51
+ };
52
+ //# sourceMappingURL=text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/modules/text.ts"],"sourcesContent":["import { AssistantStream } from \"../AssistantStream\";\nimport { AssistantStreamChunk } from \"../AssistantStreamChunk\";\nimport { UnderlyingReadable } from \"../utils/stream/UnderlyingReadable\";\n\nexport type TextStreamController = {\n append(textDelta: string): void;\n close(): void; // TODO reason? error?\n};\n\nclass TextStreamControllerImpl implements TextStreamController {\n private _controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n private _isClosed = false;\n\n constructor(\n controller: ReadableStreamDefaultController<AssistantStreamChunk>,\n ) {\n this._controller = controller;\n }\n\n append(textDelta: string) {\n this._controller.enqueue({\n type: \"text-delta\",\n path: [],\n textDelta,\n });\n return this;\n }\n\n close() {\n if (this._isClosed) return;\n this._isClosed = true;\n this._controller.enqueue({\n type: \"part-finish\",\n path: [],\n });\n this._controller.close();\n }\n}\n\nexport const createTextStream = (\n readable: UnderlyingReadable<TextStreamController>,\n): AssistantStream => {\n return new ReadableStream({\n start(c) {\n return readable.start?.(new TextStreamControllerImpl(c));\n },\n pull(c) {\n return readable.pull?.(new TextStreamControllerImpl(c));\n },\n cancel(c) {\n return readable.cancel?.(c);\n },\n });\n};\n\nexport const createTextStreamController = () => {\n let controller!: TextStreamController;\n const stream = createTextStream({\n start(c) {\n controller = c;\n },\n });\n return [stream, controller] as const;\n};\n"],"mappings":";AASA,IAAM,2BAAN,MAA+D;AAAA,EACrD;AAAA,EACA,YAAY;AAAA,EAEpB,YACE,YACA;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAO,WAAmB;AACxB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,SAAK,YAAY,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,IACT,CAAC;AACD,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAEO,IAAM,mBAAmB,CAC9B,aACoB;AACpB,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,GAAG;AACP,aAAO,SAAS,QAAQ,IAAI,yBAAyB,CAAC,CAAC;AAAA,IACzD;AAAA,IACA,KAAK,GAAG;AACN,aAAO,SAAS,OAAO,IAAI,yBAAyB,CAAC,CAAC;AAAA,IACxD;AAAA,IACA,OAAO,GAAG;AACR,aAAO,SAAS,SAAS,CAAC;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAEO,IAAM,6BAA6B,MAAM;AAC9C,MAAI;AACJ,QAAM,SAAS,iBAAiB;AAAA,IAC9B,MAAM,GAAG;AACP,mBAAa;AAAA,IACf;AAAA,EACF,CAAC;AACD,SAAO,CAAC,QAAQ,UAAU;AAC5B;","names":[]}
@@ -0,0 +1,13 @@
1
+ import { AssistantStream } from "../AssistantStream";
2
+ import { ToolResponseInit } from "../tool/ToolResponse";
3
+ import { ReadonlyJSONValue } from "../../utils/json/json-value";
4
+ import { UnderlyingReadable } from "../utils/stream/UnderlyingReadable";
5
+ import { TextStreamController } from "./text";
6
+ export type ToolCallStreamController = {
7
+ argsText: TextStreamController;
8
+ setResponse(response: ToolResponseInit<ReadonlyJSONValue>): void;
9
+ close(): void;
10
+ };
11
+ export declare const createToolCallStream: (readable: UnderlyingReadable<ToolCallStreamController>) => AssistantStream;
12
+ export declare const createToolCallStreamController: () => readonly [AssistantStream, ToolCallStreamController];
13
+ //# sourceMappingURL=tool-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../src/core/modules/tool-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAoB,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,oBAAoB,CAAC;IAE/B,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAoEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,kBAAkB,CAAC,wBAAwB,CAAC,KACrD,eAYF,CAAC;AAEF,eAAO,MAAM,8BAA8B,4DAQ1C,CAAC"}