ai 6.0.33 → 6.0.35

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 (357) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/index.d.mts +50 -21
  3. package/dist/index.d.ts +50 -21
  4. package/dist/index.js +348 -286
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +280 -219
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/internal/index.js +1 -1
  9. package/dist/internal/index.mjs +1 -1
  10. package/docs/02-foundations/03-prompts.mdx +2 -2
  11. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1 -1
  12. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +1 -1
  13. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  14. package/package.json +6 -4
  15. package/src/agent/agent.ts +116 -0
  16. package/src/agent/create-agent-ui-stream-response.test.ts +258 -0
  17. package/src/agent/create-agent-ui-stream-response.ts +50 -0
  18. package/src/agent/create-agent-ui-stream.ts +73 -0
  19. package/src/agent/index.ts +33 -0
  20. package/src/agent/infer-agent-tools.ts +7 -0
  21. package/src/agent/infer-agent-ui-message.test-d.ts +54 -0
  22. package/src/agent/infer-agent-ui-message.ts +11 -0
  23. package/src/agent/pipe-agent-ui-stream-to-response.ts +52 -0
  24. package/src/agent/tool-loop-agent-on-finish-callback.ts +31 -0
  25. package/src/agent/tool-loop-agent-on-step-finish-callback.ts +11 -0
  26. package/src/agent/tool-loop-agent-settings.ts +182 -0
  27. package/src/agent/tool-loop-agent.test-d.ts +114 -0
  28. package/src/agent/tool-loop-agent.test.ts +442 -0
  29. package/src/agent/tool-loop-agent.ts +114 -0
  30. package/src/embed/__snapshots__/embed-many.test.ts.snap +191 -0
  31. package/src/embed/__snapshots__/embed.test.ts.snap +81 -0
  32. package/src/embed/embed-many-result.ts +53 -0
  33. package/src/embed/embed-many.test.ts +653 -0
  34. package/src/embed/embed-many.ts +378 -0
  35. package/src/embed/embed-result.ts +50 -0
  36. package/src/embed/embed.test.ts +298 -0
  37. package/src/embed/embed.ts +211 -0
  38. package/src/embed/index.ts +4 -0
  39. package/src/error/index.ts +35 -0
  40. package/src/error/invalid-argument-error.ts +34 -0
  41. package/src/error/invalid-stream-part-error.ts +28 -0
  42. package/src/error/invalid-tool-approval-error.ts +26 -0
  43. package/src/error/invalid-tool-input-error.ts +33 -0
  44. package/src/error/no-image-generated-error.ts +39 -0
  45. package/src/error/no-object-generated-error.ts +70 -0
  46. package/src/error/no-output-generated-error.ts +26 -0
  47. package/src/error/no-speech-generated-error.ts +18 -0
  48. package/src/error/no-such-tool-error.ts +35 -0
  49. package/src/error/no-transcript-generated-error.ts +20 -0
  50. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  51. package/src/error/tool-call-repair-error.ts +30 -0
  52. package/src/error/ui-message-stream-error.ts +48 -0
  53. package/src/error/unsupported-model-version-error.ts +23 -0
  54. package/src/error/verify-no-object-generated-error.ts +27 -0
  55. package/src/generate-image/generate-image-result.ts +42 -0
  56. package/src/generate-image/generate-image.test.ts +1420 -0
  57. package/src/generate-image/generate-image.ts +360 -0
  58. package/src/generate-image/index.ts +18 -0
  59. package/src/generate-object/__snapshots__/generate-object.test.ts.snap +133 -0
  60. package/src/generate-object/__snapshots__/stream-object.test.ts.snap +297 -0
  61. package/src/generate-object/generate-object-result.ts +67 -0
  62. package/src/generate-object/generate-object.test-d.ts +49 -0
  63. package/src/generate-object/generate-object.test.ts +1191 -0
  64. package/src/generate-object/generate-object.ts +518 -0
  65. package/src/generate-object/index.ts +9 -0
  66. package/src/generate-object/inject-json-instruction.test.ts +181 -0
  67. package/src/generate-object/inject-json-instruction.ts +30 -0
  68. package/src/generate-object/output-strategy.ts +415 -0
  69. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  70. package/src/generate-object/repair-text.ts +12 -0
  71. package/src/generate-object/stream-object-result.ts +120 -0
  72. package/src/generate-object/stream-object.test-d.ts +74 -0
  73. package/src/generate-object/stream-object.test.ts +1950 -0
  74. package/src/generate-object/stream-object.ts +986 -0
  75. package/src/generate-object/validate-object-generation-input.ts +144 -0
  76. package/src/generate-speech/generate-speech-result.ts +30 -0
  77. package/src/generate-speech/generate-speech.test.ts +300 -0
  78. package/src/generate-speech/generate-speech.ts +190 -0
  79. package/src/generate-speech/generated-audio-file.ts +65 -0
  80. package/src/generate-speech/index.ts +3 -0
  81. package/src/generate-text/__snapshots__/generate-text.test.ts.snap +1872 -0
  82. package/src/generate-text/__snapshots__/stream-text.test.ts.snap +1255 -0
  83. package/src/generate-text/collect-tool-approvals.test.ts +553 -0
  84. package/src/generate-text/collect-tool-approvals.ts +116 -0
  85. package/src/generate-text/content-part.ts +25 -0
  86. package/src/generate-text/execute-tool-call.ts +129 -0
  87. package/src/generate-text/extract-reasoning-content.ts +17 -0
  88. package/src/generate-text/extract-text-content.ts +15 -0
  89. package/src/generate-text/generate-text-result.ts +168 -0
  90. package/src/generate-text/generate-text.test-d.ts +68 -0
  91. package/src/generate-text/generate-text.test.ts +7011 -0
  92. package/src/generate-text/generate-text.ts +1223 -0
  93. package/src/generate-text/generated-file.ts +70 -0
  94. package/src/generate-text/index.ts +57 -0
  95. package/src/generate-text/is-approval-needed.ts +29 -0
  96. package/src/generate-text/output-utils.ts +23 -0
  97. package/src/generate-text/output.test.ts +698 -0
  98. package/src/generate-text/output.ts +590 -0
  99. package/src/generate-text/parse-tool-call.test.ts +570 -0
  100. package/src/generate-text/parse-tool-call.ts +188 -0
  101. package/src/generate-text/prepare-step.ts +103 -0
  102. package/src/generate-text/prune-messages.test.ts +720 -0
  103. package/src/generate-text/prune-messages.ts +167 -0
  104. package/src/generate-text/reasoning-output.ts +20 -0
  105. package/src/generate-text/reasoning.ts +8 -0
  106. package/src/generate-text/response-message.ts +10 -0
  107. package/src/generate-text/run-tools-transformation.test.ts +1143 -0
  108. package/src/generate-text/run-tools-transformation.ts +420 -0
  109. package/src/generate-text/smooth-stream.test.ts +2101 -0
  110. package/src/generate-text/smooth-stream.ts +162 -0
  111. package/src/generate-text/step-result.ts +238 -0
  112. package/src/generate-text/stop-condition.ts +29 -0
  113. package/src/generate-text/stream-text-result.ts +463 -0
  114. package/src/generate-text/stream-text.test-d.ts +200 -0
  115. package/src/generate-text/stream-text.test.ts +19979 -0
  116. package/src/generate-text/stream-text.ts +2505 -0
  117. package/src/generate-text/to-response-messages.test.ts +922 -0
  118. package/src/generate-text/to-response-messages.ts +163 -0
  119. package/src/generate-text/tool-approval-request-output.ts +21 -0
  120. package/src/generate-text/tool-call-repair-function.ts +27 -0
  121. package/src/generate-text/tool-call.ts +47 -0
  122. package/src/generate-text/tool-error.ts +34 -0
  123. package/src/generate-text/tool-output-denied.ts +21 -0
  124. package/src/generate-text/tool-output.ts +7 -0
  125. package/src/generate-text/tool-result.ts +36 -0
  126. package/src/generate-text/tool-set.ts +14 -0
  127. package/src/global.ts +24 -0
  128. package/src/index.ts +50 -0
  129. package/src/logger/index.ts +6 -0
  130. package/src/logger/log-warnings.test.ts +351 -0
  131. package/src/logger/log-warnings.ts +119 -0
  132. package/src/middleware/__snapshots__/simulate-streaming-middleware.test.ts.snap +64 -0
  133. package/src/middleware/add-tool-input-examples-middleware.test.ts +476 -0
  134. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  135. package/src/middleware/default-embedding-settings-middleware.test.ts +126 -0
  136. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  137. package/src/middleware/default-settings-middleware.test.ts +388 -0
  138. package/src/middleware/default-settings-middleware.ts +33 -0
  139. package/src/middleware/extract-json-middleware.test.ts +827 -0
  140. package/src/middleware/extract-json-middleware.ts +197 -0
  141. package/src/middleware/extract-reasoning-middleware.test.ts +1028 -0
  142. package/src/middleware/extract-reasoning-middleware.ts +238 -0
  143. package/src/middleware/index.ts +10 -0
  144. package/src/middleware/simulate-streaming-middleware.test.ts +911 -0
  145. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  146. package/src/middleware/wrap-embedding-model.test.ts +358 -0
  147. package/src/middleware/wrap-embedding-model.ts +86 -0
  148. package/src/middleware/wrap-image-model.test.ts +423 -0
  149. package/src/middleware/wrap-image-model.ts +85 -0
  150. package/src/middleware/wrap-language-model.test.ts +518 -0
  151. package/src/middleware/wrap-language-model.ts +104 -0
  152. package/src/middleware/wrap-provider.test.ts +120 -0
  153. package/src/middleware/wrap-provider.ts +51 -0
  154. package/src/model/as-embedding-model-v3.test.ts +319 -0
  155. package/src/model/as-embedding-model-v3.ts +24 -0
  156. package/src/model/as-image-model-v3.test.ts +409 -0
  157. package/src/model/as-image-model-v3.ts +24 -0
  158. package/src/model/as-language-model-v3.test.ts +508 -0
  159. package/src/model/as-language-model-v3.ts +103 -0
  160. package/src/model/as-provider-v3.ts +36 -0
  161. package/src/model/as-speech-model-v3.test.ts +356 -0
  162. package/src/model/as-speech-model-v3.ts +24 -0
  163. package/src/model/as-transcription-model-v3.test.ts +529 -0
  164. package/src/model/as-transcription-model-v3.ts +24 -0
  165. package/src/model/resolve-model.test.ts +244 -0
  166. package/src/model/resolve-model.ts +126 -0
  167. package/src/prompt/call-settings.ts +148 -0
  168. package/src/prompt/content-part.ts +209 -0
  169. package/src/prompt/convert-to-language-model-prompt.test.ts +2018 -0
  170. package/src/prompt/convert-to-language-model-prompt.ts +442 -0
  171. package/src/prompt/create-tool-model-output.test.ts +508 -0
  172. package/src/prompt/create-tool-model-output.ts +34 -0
  173. package/src/prompt/data-content.test.ts +15 -0
  174. package/src/prompt/data-content.ts +134 -0
  175. package/src/prompt/index.ts +27 -0
  176. package/src/prompt/invalid-data-content-error.ts +29 -0
  177. package/src/prompt/invalid-message-role-error.ts +27 -0
  178. package/src/prompt/message-conversion-error.ts +28 -0
  179. package/src/prompt/message.ts +68 -0
  180. package/src/prompt/prepare-call-settings.test.ts +159 -0
  181. package/src/prompt/prepare-call-settings.ts +108 -0
  182. package/src/prompt/prepare-tools-and-tool-choice.test.ts +461 -0
  183. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  184. package/src/prompt/prompt.ts +43 -0
  185. package/src/prompt/split-data-url.ts +17 -0
  186. package/src/prompt/standardize-prompt.test.ts +82 -0
  187. package/src/prompt/standardize-prompt.ts +99 -0
  188. package/src/prompt/wrap-gateway-error.ts +29 -0
  189. package/src/registry/custom-provider.test.ts +211 -0
  190. package/src/registry/custom-provider.ts +155 -0
  191. package/src/registry/index.ts +7 -0
  192. package/src/registry/no-such-provider-error.ts +41 -0
  193. package/src/registry/provider-registry.test.ts +691 -0
  194. package/src/registry/provider-registry.ts +328 -0
  195. package/src/rerank/index.ts +2 -0
  196. package/src/rerank/rerank-result.ts +70 -0
  197. package/src/rerank/rerank.test.ts +516 -0
  198. package/src/rerank/rerank.ts +237 -0
  199. package/src/telemetry/assemble-operation-name.ts +21 -0
  200. package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
  201. package/src/telemetry/get-tracer.ts +20 -0
  202. package/src/telemetry/noop-tracer.ts +69 -0
  203. package/src/telemetry/record-span.ts +63 -0
  204. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  205. package/src/telemetry/select-temetry-attributes.test.ts +114 -0
  206. package/src/telemetry/stringify-for-telemetry.test.ts +114 -0
  207. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  208. package/src/telemetry/telemetry-settings.ts +44 -0
  209. package/src/test/mock-embedding-model-v2.ts +35 -0
  210. package/src/test/mock-embedding-model-v3.ts +48 -0
  211. package/src/test/mock-image-model-v2.ts +28 -0
  212. package/src/test/mock-image-model-v3.ts +28 -0
  213. package/src/test/mock-language-model-v2.ts +72 -0
  214. package/src/test/mock-language-model-v3.ts +77 -0
  215. package/src/test/mock-provider-v2.ts +68 -0
  216. package/src/test/mock-provider-v3.ts +80 -0
  217. package/src/test/mock-reranking-model-v3.ts +25 -0
  218. package/src/test/mock-server-response.ts +69 -0
  219. package/src/test/mock-speech-model-v2.ts +24 -0
  220. package/src/test/mock-speech-model-v3.ts +24 -0
  221. package/src/test/mock-tracer.ts +156 -0
  222. package/src/test/mock-transcription-model-v2.ts +24 -0
  223. package/src/test/mock-transcription-model-v3.ts +24 -0
  224. package/src/test/mock-values.ts +4 -0
  225. package/src/test/not-implemented.ts +3 -0
  226. package/src/text-stream/create-text-stream-response.test.ts +38 -0
  227. package/src/text-stream/create-text-stream-response.ts +18 -0
  228. package/src/text-stream/index.ts +2 -0
  229. package/src/text-stream/pipe-text-stream-to-response.test.ts +38 -0
  230. package/src/text-stream/pipe-text-stream-to-response.ts +26 -0
  231. package/src/transcribe/index.ts +2 -0
  232. package/src/transcribe/transcribe-result.ts +60 -0
  233. package/src/transcribe/transcribe.test.ts +313 -0
  234. package/src/transcribe/transcribe.ts +173 -0
  235. package/src/types/embedding-model-middleware.ts +3 -0
  236. package/src/types/embedding-model.ts +18 -0
  237. package/src/types/image-model-middleware.ts +3 -0
  238. package/src/types/image-model-response-metadata.ts +16 -0
  239. package/src/types/image-model.ts +19 -0
  240. package/src/types/index.ts +29 -0
  241. package/src/types/json-value.ts +15 -0
  242. package/src/types/language-model-middleware.ts +3 -0
  243. package/src/types/language-model-request-metadata.ts +6 -0
  244. package/src/types/language-model-response-metadata.ts +21 -0
  245. package/src/types/language-model.ts +104 -0
  246. package/src/types/provider-metadata.ts +16 -0
  247. package/src/types/provider.ts +55 -0
  248. package/src/types/reranking-model.ts +6 -0
  249. package/src/types/speech-model-response-metadata.ts +21 -0
  250. package/src/types/speech-model.ts +6 -0
  251. package/src/types/transcription-model-response-metadata.ts +16 -0
  252. package/src/types/transcription-model.ts +9 -0
  253. package/src/types/usage.ts +200 -0
  254. package/src/types/warning.ts +7 -0
  255. package/src/ui/__snapshots__/append-response-messages.test.ts.snap +416 -0
  256. package/src/ui/__snapshots__/convert-to-model-messages.test.ts.snap +419 -0
  257. package/src/ui/__snapshots__/process-chat-text-response.test.ts.snap +142 -0
  258. package/src/ui/call-completion-api.ts +157 -0
  259. package/src/ui/chat-transport.ts +83 -0
  260. package/src/ui/chat.test-d.ts +233 -0
  261. package/src/ui/chat.test.ts +2695 -0
  262. package/src/ui/chat.ts +716 -0
  263. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  264. package/src/ui/convert-to-model-messages.test.ts +2775 -0
  265. package/src/ui/convert-to-model-messages.ts +373 -0
  266. package/src/ui/default-chat-transport.ts +36 -0
  267. package/src/ui/direct-chat-transport.test.ts +446 -0
  268. package/src/ui/direct-chat-transport.ts +118 -0
  269. package/src/ui/http-chat-transport.test.ts +185 -0
  270. package/src/ui/http-chat-transport.ts +292 -0
  271. package/src/ui/index.ts +71 -0
  272. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  273. package/src/ui/last-assistant-message-is-complete-with-tool-calls.test.ts +371 -0
  274. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  275. package/src/ui/process-text-stream.test.ts +38 -0
  276. package/src/ui/process-text-stream.ts +16 -0
  277. package/src/ui/process-ui-message-stream.test.ts +8294 -0
  278. package/src/ui/process-ui-message-stream.ts +761 -0
  279. package/src/ui/text-stream-chat-transport.ts +23 -0
  280. package/src/ui/transform-text-to-ui-message-stream.test.ts +124 -0
  281. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  282. package/src/ui/ui-messages.test.ts +48 -0
  283. package/src/ui/ui-messages.ts +534 -0
  284. package/src/ui/use-completion.ts +84 -0
  285. package/src/ui/validate-ui-messages.test.ts +1428 -0
  286. package/src/ui/validate-ui-messages.ts +476 -0
  287. package/src/ui-message-stream/create-ui-message-stream-response.test.ts +266 -0
  288. package/src/ui-message-stream/create-ui-message-stream-response.ts +32 -0
  289. package/src/ui-message-stream/create-ui-message-stream.test.ts +639 -0
  290. package/src/ui-message-stream/create-ui-message-stream.ts +124 -0
  291. package/src/ui-message-stream/get-response-ui-message-id.test.ts +55 -0
  292. package/src/ui-message-stream/get-response-ui-message-id.ts +24 -0
  293. package/src/ui-message-stream/handle-ui-message-stream-finish.test.ts +429 -0
  294. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +135 -0
  295. package/src/ui-message-stream/index.ts +13 -0
  296. package/src/ui-message-stream/json-to-sse-transform-stream.ts +12 -0
  297. package/src/ui-message-stream/pipe-ui-message-stream-to-response.test.ts +90 -0
  298. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +40 -0
  299. package/src/ui-message-stream/read-ui-message-stream.test.ts +122 -0
  300. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  301. package/src/ui-message-stream/ui-message-chunks.test-d.ts +18 -0
  302. package/src/ui-message-stream/ui-message-chunks.ts +344 -0
  303. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  304. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  305. package/src/ui-message-stream/ui-message-stream-response-init.ts +5 -0
  306. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  307. package/src/util/as-array.ts +3 -0
  308. package/src/util/async-iterable-stream.test.ts +241 -0
  309. package/src/util/async-iterable-stream.ts +94 -0
  310. package/src/util/consume-stream.ts +29 -0
  311. package/src/util/cosine-similarity.test.ts +57 -0
  312. package/src/util/cosine-similarity.ts +47 -0
  313. package/src/util/create-resolvable-promise.ts +30 -0
  314. package/src/util/create-stitchable-stream.test.ts +239 -0
  315. package/src/util/create-stitchable-stream.ts +112 -0
  316. package/src/util/data-url.ts +17 -0
  317. package/src/util/deep-partial.ts +84 -0
  318. package/src/util/detect-media-type.test.ts +670 -0
  319. package/src/util/detect-media-type.ts +184 -0
  320. package/src/util/download/download-function.ts +45 -0
  321. package/src/util/download/download.test.ts +69 -0
  322. package/src/util/download/download.ts +46 -0
  323. package/src/util/error-handler.ts +1 -0
  324. package/src/util/fix-json.test.ts +279 -0
  325. package/src/util/fix-json.ts +401 -0
  326. package/src/util/get-potential-start-index.test.ts +34 -0
  327. package/src/util/get-potential-start-index.ts +30 -0
  328. package/src/util/index.ts +11 -0
  329. package/src/util/is-deep-equal-data.test.ts +119 -0
  330. package/src/util/is-deep-equal-data.ts +48 -0
  331. package/src/util/is-non-empty-object.ts +5 -0
  332. package/src/util/job.ts +1 -0
  333. package/src/util/log-v2-compatibility-warning.ts +21 -0
  334. package/src/util/merge-abort-signals.test.ts +155 -0
  335. package/src/util/merge-abort-signals.ts +43 -0
  336. package/src/util/merge-objects.test.ts +118 -0
  337. package/src/util/merge-objects.ts +79 -0
  338. package/src/util/now.ts +4 -0
  339. package/src/util/parse-partial-json.test.ts +80 -0
  340. package/src/util/parse-partial-json.ts +30 -0
  341. package/src/util/prepare-headers.test.ts +51 -0
  342. package/src/util/prepare-headers.ts +14 -0
  343. package/src/util/prepare-retries.test.ts +10 -0
  344. package/src/util/prepare-retries.ts +47 -0
  345. package/src/util/retry-error.ts +41 -0
  346. package/src/util/retry-with-exponential-backoff.test.ts +446 -0
  347. package/src/util/retry-with-exponential-backoff.ts +154 -0
  348. package/src/util/serial-job-executor.test.ts +162 -0
  349. package/src/util/serial-job-executor.ts +36 -0
  350. package/src/util/simulate-readable-stream.test.ts +98 -0
  351. package/src/util/simulate-readable-stream.ts +39 -0
  352. package/src/util/split-array.test.ts +60 -0
  353. package/src/util/split-array.ts +20 -0
  354. package/src/util/value-of.ts +65 -0
  355. package/src/util/write-to-server-response.test.ts +266 -0
  356. package/src/util/write-to-server-response.ts +49 -0
  357. package/src/version.ts +5 -0
@@ -153,7 +153,7 @@ var import_provider_utils2 = require("@ai-sdk/provider-utils");
153
153
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
154
154
 
155
155
  // src/version.ts
156
- var VERSION = true ? "6.0.33" : "0.0.0-test";
156
+ var VERSION = true ? "6.0.35" : "0.0.0-test";
157
157
 
158
158
  // src/util/download/download.ts
159
159
  var download = async ({ url }) => {
@@ -128,7 +128,7 @@ import {
128
128
  } from "@ai-sdk/provider-utils";
129
129
 
130
130
  // src/version.ts
131
- var VERSION = true ? "6.0.33" : "0.0.0-test";
131
+ var VERSION = true ? "6.0.35" : "0.0.0-test";
132
132
 
133
133
  // src/util/download/download.ts
134
134
  var download = async ({ url }) => {
@@ -153,7 +153,7 @@ const messages: ModelMessage[] = [
153
153
  {
154
154
  type: 'image',
155
155
  image:
156
- 'https://github.com/vercel/ai/blob/main/examples/ai-core/data/comic-cat.png?raw=true',
156
+ 'https://github.com/vercel/ai/blob/main/examples/ai-functions/data/comic-cat.png?raw=true',
157
157
  // Sets image detail configuration for image part:
158
158
  providerOptions: {
159
159
  openai: { imageDetail: 'low' },
@@ -268,7 +268,7 @@ const result = await generateText({
268
268
  {
269
269
  type: 'image',
270
270
  image:
271
- 'https://github.com/vercel/ai/blob/main/examples/ai-core/data/comic-cat.png?raw=true',
271
+ 'https://github.com/vercel/ai/blob/main/examples/ai-functions/data/comic-cat.png?raw=true',
272
272
  },
273
273
  ],
274
274
  },
@@ -22,7 +22,7 @@ The `tools` parameter of `generateText` and `streamText` is an object that has t
22
22
 
23
23
  ```ts highlight="6-17"
24
24
  import { z } from 'zod';
25
- import { generateText, tool, stopWhen } from 'ai';
25
+ import { generateText, tool, stepCountIs } from 'ai';
26
26
  __PROVIDER_IMPORT__;
27
27
 
28
28
  const result = await generateText({
@@ -217,7 +217,7 @@ import { generateText, Output } from 'ai';
217
217
  const { output } = await generateText({
218
218
  model: yourModel,
219
219
  output: Output.choice({
220
- options: ['sunny', 'rainy', 'snowy'],
220
+ options: ['sunny', 'rainy', 'snowy'] as const,
221
221
  }),
222
222
  prompt: 'Is the weather sunny, rainy, or snowy today?',
223
223
  });
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: AI_UIMessageStreamError
3
+ description: Learn how to fix AI_UIMessageStreamError
4
+ ---
5
+
6
+ # AI_UIMessageStreamError
7
+
8
+ This error occurs when a UI message stream contains invalid or out-of-sequence chunks.
9
+
10
+ Common causes:
11
+
12
+ - Receiving a `text-delta` chunk without a preceding `text-start` chunk
13
+ - Receiving a `text-end` chunk without a preceding `text-start` chunk
14
+ - Receiving a `reasoning-delta` chunk without a preceding `reasoning-start` chunk
15
+ - Receiving a `reasoning-end` chunk without a preceding `reasoning-start` chunk
16
+ - Receiving a `tool-input-delta` chunk without a preceding `tool-input-start` chunk
17
+ - Attempting to access a tool invocation that doesn't exist
18
+
19
+ This error often surfaces when an upstream request fails **before any tokens are streamed** and a custom transport tries to write an inline error message to the UI stream without the proper start chunk.
20
+
21
+ ## Properties
22
+
23
+ - `chunkType`: The type of chunk that caused the error (e.g., `text-delta`, `reasoning-end`, `tool-input-delta`)
24
+ - `chunkId`: The ID associated with the failing chunk (part ID or toolCallId)
25
+ - `message`: The error message with details about what went wrong
26
+
27
+ ## Checking for this Error
28
+
29
+ You can check if an error is an instance of `AI_UIMessageStreamError` using:
30
+
31
+ ```typescript
32
+ import { UIMessageStreamError } from 'ai';
33
+
34
+ if (UIMessageStreamError.isInstance(error)) {
35
+ console.log('Chunk type:', error.chunkType);
36
+ console.log('Chunk ID:', error.chunkId);
37
+ // Handle the error
38
+ }
39
+ ```
40
+
41
+ ## Common Solutions
42
+
43
+ 1. **Ensure proper chunk ordering**: Always send a `*-start` chunk before any `*-delta` or `*-end` chunks for the same ID:
44
+
45
+ ```typescript
46
+ // Correct order
47
+ writer.write({ type: 'text-start', id: 'my-text' });
48
+ writer.write({ type: 'text-delta', id: 'my-text', delta: 'Hello' });
49
+ writer.write({ type: 'text-end', id: 'my-text' });
50
+ ```
51
+
52
+ 2. **Verify IDs match**: Ensure the `id` used in `*-delta` and `*-end` chunks matches the `id` used in the corresponding `*-start` chunk.
53
+
54
+ 3. **Handle error paths correctly**: When writing error messages in custom transports, ensure you emit the full start/delta/end sequence:
55
+
56
+ ```typescript
57
+ // When handling errors in custom transports
58
+ writer.write({ type: 'text-start', id: errorId });
59
+ writer.write({
60
+ type: 'text-delta',
61
+ id: errorId,
62
+ delta: 'Request failed...',
63
+ });
64
+ writer.write({ type: 'text-end', id: errorId });
65
+ ```
66
+
67
+ 4. **Check stream producer logic**: Review your streaming implementation to ensure chunks are sent in the correct order, especially when dealing with concurrent operations or merged streams.
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "6.0.33",
3
+ "version": "6.0.35",
4
4
  "description": "AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
8
8
  "module": "./dist/index.mjs",
9
9
  "types": "./dist/index.d.ts",
10
+ "source": "./src/index.ts",
10
11
  "files": [
11
12
  "dist/**/*",
12
13
  "docs/**/*",
14
+ "src",
13
15
  "CHANGELOG.md",
14
16
  "internal.d.ts",
15
17
  "README.md",
@@ -40,9 +42,9 @@
40
42
  },
41
43
  "dependencies": {
42
44
  "@opentelemetry/api": "1.9.0",
43
- "@ai-sdk/gateway": "3.0.13",
44
- "@ai-sdk/provider": "3.0.2",
45
- "@ai-sdk/provider-utils": "4.0.5"
45
+ "@ai-sdk/gateway": "3.0.14",
46
+ "@ai-sdk/provider": "3.0.3",
47
+ "@ai-sdk/provider-utils": "4.0.6"
46
48
  },
47
49
  "devDependencies": {
48
50
  "@edge-runtime/vm": "^5.0.0",
@@ -0,0 +1,116 @@
1
+ import { ModelMessage } from '@ai-sdk/provider-utils';
2
+ import { GenerateTextResult } from '../generate-text/generate-text-result';
3
+ import { Output } from '../generate-text/output';
4
+ import { StreamTextTransform } from '../generate-text/stream-text';
5
+ import { StreamTextResult } from '../generate-text/stream-text-result';
6
+ import { ToolSet } from '../generate-text/tool-set';
7
+ import { TimeoutConfiguration } from '../prompt/call-settings';
8
+
9
+ /**
10
+ * Parameters for calling an agent.
11
+ */
12
+ export type AgentCallParameters<CALL_OPTIONS> = ([CALL_OPTIONS] extends [never]
13
+ ? { options?: never }
14
+ : { options: CALL_OPTIONS }) &
15
+ (
16
+ | {
17
+ /**
18
+ * A prompt. It can be either a text prompt or a list of messages.
19
+ *
20
+ * You can either use `prompt` or `messages` but not both.
21
+ */
22
+ prompt: string | Array<ModelMessage>;
23
+
24
+ /**
25
+ * A list of messages.
26
+ *
27
+ * You can either use `prompt` or `messages` but not both.
28
+ */
29
+ messages?: never;
30
+ }
31
+ | {
32
+ /**
33
+ * A list of messages.
34
+ *
35
+ * You can either use `prompt` or `messages` but not both.
36
+ */
37
+ messages: Array<ModelMessage>;
38
+
39
+ /**
40
+ * A prompt. It can be either a text prompt or a list of messages.
41
+ *
42
+ * You can either use `prompt` or `messages` but not both.
43
+ */
44
+ prompt?: never;
45
+ }
46
+ ) & {
47
+ /**
48
+ * Abort signal.
49
+ */
50
+ abortSignal?: AbortSignal;
51
+
52
+ /**
53
+ * Timeout in milliseconds. Can be specified as a number or as an object with `totalMs`.
54
+ */
55
+ timeout?: TimeoutConfiguration;
56
+ };
57
+
58
+ /**
59
+ * Parameters for streaming an output from an agent.
60
+ */
61
+ export type AgentStreamParameters<
62
+ CALL_OPTIONS,
63
+ TOOLS extends ToolSet,
64
+ > = AgentCallParameters<CALL_OPTIONS> & {
65
+ /**
66
+ * Optional stream transformations.
67
+ * They are applied in the order they are provided.
68
+ * The stream transformations must maintain the stream structure for streamText to work correctly.
69
+ */
70
+ experimental_transform?:
71
+ | StreamTextTransform<TOOLS>
72
+ | Array<StreamTextTransform<TOOLS>>;
73
+ };
74
+
75
+ /**
76
+ * An Agent receives a prompt (text or messages) and generates or streams an output
77
+ * that consists of steps, tool calls, data parts, etc.
78
+ *
79
+ * You can implement your own Agent by implementing the `Agent` interface,
80
+ * or use the `ToolLoopAgent` class.
81
+ */
82
+ export interface Agent<
83
+ CALL_OPTIONS = never,
84
+ TOOLS extends ToolSet = {},
85
+ OUTPUT extends Output = never,
86
+ > {
87
+ /**
88
+ * The specification version of the agent interface. This will enable
89
+ * us to evolve the agent interface and retain backwards compatibility.
90
+ */
91
+ readonly version: 'agent-v1';
92
+
93
+ /**
94
+ * The id of the agent.
95
+ */
96
+ readonly id: string | undefined;
97
+
98
+ /**
99
+ * The tools that the agent can use.
100
+ */
101
+ readonly tools: TOOLS;
102
+
103
+ /**
104
+ * Generates an output from the agent (non-streaming).
105
+ */
106
+ generate(
107
+ options: AgentCallParameters<CALL_OPTIONS>,
108
+ ): PromiseLike<GenerateTextResult<TOOLS, OUTPUT>>;
109
+
110
+ /**
111
+ * Streams an output from the agent (streaming).
112
+ */
113
+ stream(
114
+ options: AgentStreamParameters<CALL_OPTIONS, TOOLS>,
115
+ ): PromiseLike<StreamTextResult<TOOLS, OUTPUT>>;
116
+ }
@@ -0,0 +1,258 @@
1
+ import { LanguageModelV3CallOptions } from '@ai-sdk/provider';
2
+ import { tool } from '@ai-sdk/provider-utils';
3
+ import {
4
+ convertArrayToReadableStream,
5
+ convertReadableStreamToArray,
6
+ } from '@ai-sdk/provider-utils/test';
7
+ import { beforeEach, describe, expect, it } from 'vitest';
8
+ import { z } from 'zod/v4';
9
+ import { MockLanguageModelV3 } from '../test/mock-language-model-v3';
10
+ import { createAgentUIStreamResponse } from './create-agent-ui-stream-response';
11
+ import { ToolLoopAgent } from './tool-loop-agent';
12
+
13
+ describe('createAgentUIStreamResponse', () => {
14
+ describe('when using tools toModelOutput', () => {
15
+ let recordedInputs: LanguageModelV3CallOptions[];
16
+ let response: Response;
17
+ let decodedChunks: string[];
18
+
19
+ beforeEach(async () => {
20
+ recordedInputs = [];
21
+
22
+ const agent = new ToolLoopAgent({
23
+ model: new MockLanguageModelV3({
24
+ doStream: async input => {
25
+ recordedInputs.push(input);
26
+ return {
27
+ stream: convertArrayToReadableStream([
28
+ {
29
+ type: 'stream-start',
30
+ warnings: [],
31
+ },
32
+ {
33
+ type: 'response-metadata',
34
+ id: 'id-0',
35
+ modelId: 'mock-model-id',
36
+ timestamp: new Date(0),
37
+ },
38
+ { type: 'text-start', id: '1' },
39
+ { type: 'text-delta', id: '1', delta: 'Hello' },
40
+ { type: 'text-delta', id: '1', delta: ', ' },
41
+ { type: 'text-delta', id: '1', delta: `world!` },
42
+ { type: 'text-end', id: '1' },
43
+ {
44
+ type: 'finish',
45
+ finishReason: { unified: 'stop', raw: 'stop' },
46
+ usage: {
47
+ inputTokens: {
48
+ total: 10,
49
+ noCache: 10,
50
+ cacheRead: undefined,
51
+ cacheWrite: undefined,
52
+ },
53
+ outputTokens: {
54
+ total: 10,
55
+ text: 10,
56
+ reasoning: undefined,
57
+ },
58
+ },
59
+ providerMetadata: {
60
+ testProvider: { testKey: 'testValue' },
61
+ },
62
+ },
63
+ ]),
64
+ };
65
+ },
66
+ }),
67
+ tools: {
68
+ example: tool({
69
+ description: 'Example tool',
70
+ inputSchema: z.object({
71
+ input: z.string(),
72
+ }),
73
+ outputSchema: z.object({
74
+ value: z.string(),
75
+ }),
76
+ // important: tool has toModelOutput that needs to be called
77
+ toModelOutput: ({ output }) => ({
78
+ type: 'content',
79
+ value: [{ type: 'text', text: output.value }],
80
+ }),
81
+ }),
82
+ },
83
+ });
84
+
85
+ response = await createAgentUIStreamResponse({
86
+ agent,
87
+ uiMessages: [
88
+ {
89
+ role: 'user',
90
+ id: 'msg-1',
91
+ parts: [
92
+ {
93
+ type: 'text' as const,
94
+ text: 'Hello, world!',
95
+ },
96
+ ],
97
+ },
98
+ {
99
+ role: 'assistant',
100
+ id: 'msg-2',
101
+ parts: [
102
+ {
103
+ type: 'tool-example' as const,
104
+ toolCallId: 'call-1',
105
+ state: 'output-available',
106
+ input: {
107
+ input: 'Hello, world!',
108
+ },
109
+ output: {
110
+ value: 'Example tool: Hello, world!',
111
+ },
112
+ },
113
+ ],
114
+ },
115
+ ],
116
+ });
117
+
118
+ // consume the response
119
+ const decoder = new TextDecoder();
120
+ const encodedStream = response.body!;
121
+ const chunks = await convertReadableStreamToArray(encodedStream);
122
+ decodedChunks = chunks.map(chunk => decoder.decode(chunk));
123
+ });
124
+
125
+ it('should have a single call that contains the tool result as text', () => {
126
+ expect(recordedInputs).toMatchInlineSnapshot(`
127
+ [
128
+ {
129
+ "abortSignal": undefined,
130
+ "frequencyPenalty": undefined,
131
+ "headers": undefined,
132
+ "includeRawChunks": false,
133
+ "maxOutputTokens": undefined,
134
+ "presencePenalty": undefined,
135
+ "prompt": [
136
+ {
137
+ "content": [
138
+ {
139
+ "providerOptions": undefined,
140
+ "text": "Hello, world!",
141
+ "type": "text",
142
+ },
143
+ ],
144
+ "providerOptions": undefined,
145
+ "role": "user",
146
+ },
147
+ {
148
+ "content": [
149
+ {
150
+ "input": {
151
+ "input": "Hello, world!",
152
+ },
153
+ "providerExecuted": undefined,
154
+ "providerOptions": undefined,
155
+ "toolCallId": "call-1",
156
+ "toolName": "example",
157
+ "type": "tool-call",
158
+ },
159
+ ],
160
+ "providerOptions": undefined,
161
+ "role": "assistant",
162
+ },
163
+ {
164
+ "content": [
165
+ {
166
+ "output": {
167
+ "type": "content",
168
+ "value": [
169
+ {
170
+ "text": "Example tool: Hello, world!",
171
+ "type": "text",
172
+ },
173
+ ],
174
+ },
175
+ "providerOptions": undefined,
176
+ "toolCallId": "call-1",
177
+ "toolName": "example",
178
+ "type": "tool-result",
179
+ },
180
+ ],
181
+ "providerOptions": undefined,
182
+ "role": "tool",
183
+ },
184
+ ],
185
+ "providerOptions": undefined,
186
+ "responseFormat": undefined,
187
+ "seed": undefined,
188
+ "stopSequences": undefined,
189
+ "temperature": undefined,
190
+ "toolChoice": {
191
+ "type": "auto",
192
+ },
193
+ "tools": [
194
+ {
195
+ "description": "Example tool",
196
+ "inputSchema": {
197
+ "$schema": "http://json-schema.org/draft-07/schema#",
198
+ "additionalProperties": false,
199
+ "properties": {
200
+ "input": {
201
+ "type": "string",
202
+ },
203
+ },
204
+ "required": [
205
+ "input",
206
+ ],
207
+ "type": "object",
208
+ },
209
+ "name": "example",
210
+ "providerOptions": undefined,
211
+ "type": "function",
212
+ },
213
+ ],
214
+ "topK": undefined,
215
+ "topP": undefined,
216
+ },
217
+ ]
218
+ `);
219
+ });
220
+
221
+ it('should return the UI message stream response', () => {
222
+ expect(decodedChunks).toMatchInlineSnapshot(`
223
+ [
224
+ "data: {"type":"start"}
225
+
226
+ ",
227
+ "data: {"type":"start-step"}
228
+
229
+ ",
230
+ "data: {"type":"text-start","id":"1"}
231
+
232
+ ",
233
+ "data: {"type":"text-delta","id":"1","delta":"Hello"}
234
+
235
+ ",
236
+ "data: {"type":"text-delta","id":"1","delta":", "}
237
+
238
+ ",
239
+ "data: {"type":"text-delta","id":"1","delta":"world!"}
240
+
241
+ ",
242
+ "data: {"type":"text-end","id":"1"}
243
+
244
+ ",
245
+ "data: {"type":"finish-step"}
246
+
247
+ ",
248
+ "data: {"type":"finish","finishReason":"stop"}
249
+
250
+ ",
251
+ "data: [DONE]
252
+
253
+ ",
254
+ ]
255
+ `);
256
+ });
257
+ });
258
+ });
@@ -0,0 +1,50 @@
1
+ import { StreamTextTransform, UIMessageStreamOptions } from '../generate-text';
2
+ import { Output } from '../generate-text/output';
3
+ import { ToolSet } from '../generate-text/tool-set';
4
+ import { TimeoutConfiguration } from '../prompt/call-settings';
5
+ import { createUIMessageStreamResponse } from '../ui-message-stream';
6
+ import { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';
7
+ import { InferUITools, UIMessage } from '../ui/ui-messages';
8
+ import { Agent } from './agent';
9
+ import { createAgentUIStream } from './create-agent-ui-stream';
10
+
11
+ /**
12
+ * Runs the agent and returns a response object with a UI message stream.
13
+ *
14
+ * @param agent - The agent to run.
15
+ * @param uiMessages - The input UI messages.
16
+ *
17
+ * @returns The response object.
18
+ */
19
+ export async function createAgentUIStreamResponse<
20
+ CALL_OPTIONS = never,
21
+ TOOLS extends ToolSet = {},
22
+ OUTPUT extends Output = never,
23
+ MESSAGE_METADATA = unknown,
24
+ >({
25
+ headers,
26
+ status,
27
+ statusText,
28
+ consumeSseStream,
29
+ ...options
30
+ }: {
31
+ agent: Agent<CALL_OPTIONS, TOOLS, OUTPUT>;
32
+ uiMessages: unknown[];
33
+ abortSignal?: AbortSignal;
34
+ timeout?: TimeoutConfiguration;
35
+ options?: CALL_OPTIONS;
36
+ experimental_transform?:
37
+ | StreamTextTransform<TOOLS>
38
+ | Array<StreamTextTransform<TOOLS>>;
39
+ } & UIMessageStreamResponseInit &
40
+ UIMessageStreamOptions<
41
+ UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>
42
+ >): Promise<Response> {
43
+ return createUIMessageStreamResponse({
44
+ headers,
45
+ status,
46
+ statusText,
47
+ consumeSseStream,
48
+ stream: await createAgentUIStream(options),
49
+ });
50
+ }
@@ -0,0 +1,73 @@
1
+ import { StreamTextTransform, UIMessageStreamOptions } from '../generate-text';
2
+ import { Output } from '../generate-text/output';
3
+ import { ToolSet } from '../generate-text/tool-set';
4
+ import { TimeoutConfiguration } from '../prompt/call-settings';
5
+ import { InferUIMessageChunk } from '../ui-message-stream';
6
+ import { convertToModelMessages } from '../ui/convert-to-model-messages';
7
+ import { InferUITools, UIMessage } from '../ui/ui-messages';
8
+ import { validateUIMessages } from '../ui/validate-ui-messages';
9
+ import { AsyncIterableStream } from '../util/async-iterable-stream';
10
+ import { Agent } from './agent';
11
+
12
+ /**
13
+ * Runs the agent and stream the output as a UI message stream.
14
+ *
15
+ * @param agent - The agent to run.
16
+ * @param uiMessages - The input UI messages.
17
+ * @param abortSignal - The abort signal. Optional.
18
+ * @param timeout - Timeout in milliseconds. Optional.
19
+ * @param options - The options for the agent.
20
+ * @param experimental_transform - The stream transformations. Optional.
21
+ *
22
+ * @returns The UI message stream.
23
+ */
24
+ export async function createAgentUIStream<
25
+ CALL_OPTIONS = never,
26
+ TOOLS extends ToolSet = {},
27
+ OUTPUT extends Output = never,
28
+ MESSAGE_METADATA = unknown,
29
+ >({
30
+ agent,
31
+ uiMessages,
32
+ options,
33
+ abortSignal,
34
+ timeout,
35
+ experimental_transform,
36
+ ...uiMessageStreamOptions
37
+ }: {
38
+ agent: Agent<CALL_OPTIONS, TOOLS, OUTPUT>;
39
+ uiMessages: unknown[];
40
+ abortSignal?: AbortSignal;
41
+ timeout?: TimeoutConfiguration;
42
+ options?: CALL_OPTIONS;
43
+ experimental_transform?:
44
+ | StreamTextTransform<TOOLS>
45
+ | Array<StreamTextTransform<TOOLS>>;
46
+ } & UIMessageStreamOptions<
47
+ UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>
48
+ >): Promise<
49
+ AsyncIterableStream<
50
+ InferUIMessageChunk<UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>>
51
+ >
52
+ > {
53
+ const validatedMessages = await validateUIMessages<
54
+ UIMessage<MESSAGE_METADATA, never, InferUITools<TOOLS>>
55
+ >({
56
+ messages: uiMessages,
57
+ tools: agent.tools,
58
+ });
59
+
60
+ const modelMessages = await convertToModelMessages(validatedMessages, {
61
+ tools: agent.tools,
62
+ });
63
+
64
+ const result = await agent.stream({
65
+ prompt: modelMessages,
66
+ options: options as CALL_OPTIONS,
67
+ abortSignal,
68
+ timeout,
69
+ experimental_transform,
70
+ });
71
+
72
+ return result.toUIMessageStream(uiMessageStreamOptions);
73
+ }
@@ -0,0 +1,33 @@
1
+ export {
2
+ type Agent,
3
+ type AgentCallParameters,
4
+ type AgentStreamParameters,
5
+ } from './agent';
6
+ export { type ToolLoopAgentOnFinishCallback } from './tool-loop-agent-on-finish-callback';
7
+ export { type ToolLoopAgentOnStepFinishCallback } from './tool-loop-agent-on-step-finish-callback';
8
+ export {
9
+ type ToolLoopAgentSettings,
10
+
11
+ /**
12
+ * @deprecated Use `ToolLoopAgentSettings` instead.
13
+ */
14
+ type ToolLoopAgentSettings as Experimental_AgentSettings,
15
+ } from './tool-loop-agent-settings';
16
+ export {
17
+ ToolLoopAgent,
18
+
19
+ /**
20
+ * @deprecated Use `ToolLoopAgent` instead.
21
+ */
22
+ ToolLoopAgent as Experimental_Agent,
23
+ } from './tool-loop-agent';
24
+ export {
25
+ /**
26
+ * @deprecated Use `InferAgentUIMessage` instead.
27
+ */
28
+ type InferAgentUIMessage as Experimental_InferAgentUIMessage,
29
+ type InferAgentUIMessage,
30
+ } from './infer-agent-ui-message';
31
+ export { createAgentUIStreamResponse } from './create-agent-ui-stream-response';
32
+ export { createAgentUIStream } from './create-agent-ui-stream';
33
+ export { pipeAgentUIStreamToResponse } from './pipe-agent-ui-stream-to-response';