ai 6.0.33 → 6.0.34

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 (351) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/dist/internal/index.mjs +1 -1
  6. package/docs/02-foundations/03-prompts.mdx +2 -2
  7. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1 -1
  8. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +1 -1
  9. package/package.json +6 -4
  10. package/src/agent/agent.ts +116 -0
  11. package/src/agent/create-agent-ui-stream-response.test.ts +258 -0
  12. package/src/agent/create-agent-ui-stream-response.ts +50 -0
  13. package/src/agent/create-agent-ui-stream.ts +73 -0
  14. package/src/agent/index.ts +33 -0
  15. package/src/agent/infer-agent-tools.ts +7 -0
  16. package/src/agent/infer-agent-ui-message.test-d.ts +54 -0
  17. package/src/agent/infer-agent-ui-message.ts +11 -0
  18. package/src/agent/pipe-agent-ui-stream-to-response.ts +52 -0
  19. package/src/agent/tool-loop-agent-on-finish-callback.ts +31 -0
  20. package/src/agent/tool-loop-agent-on-step-finish-callback.ts +11 -0
  21. package/src/agent/tool-loop-agent-settings.ts +182 -0
  22. package/src/agent/tool-loop-agent.test-d.ts +114 -0
  23. package/src/agent/tool-loop-agent.test.ts +442 -0
  24. package/src/agent/tool-loop-agent.ts +114 -0
  25. package/src/embed/__snapshots__/embed-many.test.ts.snap +191 -0
  26. package/src/embed/__snapshots__/embed.test.ts.snap +81 -0
  27. package/src/embed/embed-many-result.ts +53 -0
  28. package/src/embed/embed-many.test.ts +653 -0
  29. package/src/embed/embed-many.ts +378 -0
  30. package/src/embed/embed-result.ts +50 -0
  31. package/src/embed/embed.test.ts +298 -0
  32. package/src/embed/embed.ts +211 -0
  33. package/src/embed/index.ts +4 -0
  34. package/src/error/index.ts +34 -0
  35. package/src/error/invalid-argument-error.ts +34 -0
  36. package/src/error/invalid-stream-part-error.ts +28 -0
  37. package/src/error/invalid-tool-approval-error.ts +26 -0
  38. package/src/error/invalid-tool-input-error.ts +33 -0
  39. package/src/error/no-image-generated-error.ts +39 -0
  40. package/src/error/no-object-generated-error.ts +70 -0
  41. package/src/error/no-output-generated-error.ts +26 -0
  42. package/src/error/no-speech-generated-error.ts +18 -0
  43. package/src/error/no-such-tool-error.ts +35 -0
  44. package/src/error/no-transcript-generated-error.ts +20 -0
  45. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  46. package/src/error/tool-call-repair-error.ts +30 -0
  47. package/src/error/unsupported-model-version-error.ts +23 -0
  48. package/src/error/verify-no-object-generated-error.ts +27 -0
  49. package/src/generate-image/generate-image-result.ts +42 -0
  50. package/src/generate-image/generate-image.test.ts +1420 -0
  51. package/src/generate-image/generate-image.ts +360 -0
  52. package/src/generate-image/index.ts +18 -0
  53. package/src/generate-object/__snapshots__/generate-object.test.ts.snap +133 -0
  54. package/src/generate-object/__snapshots__/stream-object.test.ts.snap +297 -0
  55. package/src/generate-object/generate-object-result.ts +67 -0
  56. package/src/generate-object/generate-object.test-d.ts +49 -0
  57. package/src/generate-object/generate-object.test.ts +1191 -0
  58. package/src/generate-object/generate-object.ts +518 -0
  59. package/src/generate-object/index.ts +9 -0
  60. package/src/generate-object/inject-json-instruction.test.ts +181 -0
  61. package/src/generate-object/inject-json-instruction.ts +30 -0
  62. package/src/generate-object/output-strategy.ts +415 -0
  63. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  64. package/src/generate-object/repair-text.ts +12 -0
  65. package/src/generate-object/stream-object-result.ts +120 -0
  66. package/src/generate-object/stream-object.test-d.ts +74 -0
  67. package/src/generate-object/stream-object.test.ts +1950 -0
  68. package/src/generate-object/stream-object.ts +986 -0
  69. package/src/generate-object/validate-object-generation-input.ts +144 -0
  70. package/src/generate-speech/generate-speech-result.ts +30 -0
  71. package/src/generate-speech/generate-speech.test.ts +300 -0
  72. package/src/generate-speech/generate-speech.ts +190 -0
  73. package/src/generate-speech/generated-audio-file.ts +65 -0
  74. package/src/generate-speech/index.ts +3 -0
  75. package/src/generate-text/__snapshots__/generate-text.test.ts.snap +1872 -0
  76. package/src/generate-text/__snapshots__/stream-text.test.ts.snap +1255 -0
  77. package/src/generate-text/collect-tool-approvals.test.ts +553 -0
  78. package/src/generate-text/collect-tool-approvals.ts +116 -0
  79. package/src/generate-text/content-part.ts +25 -0
  80. package/src/generate-text/execute-tool-call.ts +129 -0
  81. package/src/generate-text/extract-reasoning-content.ts +17 -0
  82. package/src/generate-text/extract-text-content.ts +15 -0
  83. package/src/generate-text/generate-text-result.ts +168 -0
  84. package/src/generate-text/generate-text.test-d.ts +68 -0
  85. package/src/generate-text/generate-text.test.ts +7011 -0
  86. package/src/generate-text/generate-text.ts +1223 -0
  87. package/src/generate-text/generated-file.ts +70 -0
  88. package/src/generate-text/index.ts +57 -0
  89. package/src/generate-text/is-approval-needed.ts +29 -0
  90. package/src/generate-text/output-utils.ts +23 -0
  91. package/src/generate-text/output.test.ts +698 -0
  92. package/src/generate-text/output.ts +590 -0
  93. package/src/generate-text/parse-tool-call.test.ts +570 -0
  94. package/src/generate-text/parse-tool-call.ts +188 -0
  95. package/src/generate-text/prepare-step.ts +103 -0
  96. package/src/generate-text/prune-messages.test.ts +720 -0
  97. package/src/generate-text/prune-messages.ts +167 -0
  98. package/src/generate-text/reasoning-output.ts +20 -0
  99. package/src/generate-text/reasoning.ts +8 -0
  100. package/src/generate-text/response-message.ts +10 -0
  101. package/src/generate-text/run-tools-transformation.test.ts +1143 -0
  102. package/src/generate-text/run-tools-transformation.ts +420 -0
  103. package/src/generate-text/smooth-stream.test.ts +2101 -0
  104. package/src/generate-text/smooth-stream.ts +162 -0
  105. package/src/generate-text/step-result.ts +238 -0
  106. package/src/generate-text/stop-condition.ts +29 -0
  107. package/src/generate-text/stream-text-result.ts +463 -0
  108. package/src/generate-text/stream-text.test-d.ts +200 -0
  109. package/src/generate-text/stream-text.test.ts +19979 -0
  110. package/src/generate-text/stream-text.ts +2505 -0
  111. package/src/generate-text/to-response-messages.test.ts +922 -0
  112. package/src/generate-text/to-response-messages.ts +163 -0
  113. package/src/generate-text/tool-approval-request-output.ts +21 -0
  114. package/src/generate-text/tool-call-repair-function.ts +27 -0
  115. package/src/generate-text/tool-call.ts +47 -0
  116. package/src/generate-text/tool-error.ts +34 -0
  117. package/src/generate-text/tool-output-denied.ts +21 -0
  118. package/src/generate-text/tool-output.ts +7 -0
  119. package/src/generate-text/tool-result.ts +36 -0
  120. package/src/generate-text/tool-set.ts +14 -0
  121. package/src/global.ts +24 -0
  122. package/src/index.ts +50 -0
  123. package/src/logger/index.ts +6 -0
  124. package/src/logger/log-warnings.test.ts +351 -0
  125. package/src/logger/log-warnings.ts +119 -0
  126. package/src/middleware/__snapshots__/simulate-streaming-middleware.test.ts.snap +64 -0
  127. package/src/middleware/add-tool-input-examples-middleware.test.ts +476 -0
  128. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  129. package/src/middleware/default-embedding-settings-middleware.test.ts +126 -0
  130. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  131. package/src/middleware/default-settings-middleware.test.ts +388 -0
  132. package/src/middleware/default-settings-middleware.ts +33 -0
  133. package/src/middleware/extract-json-middleware.test.ts +827 -0
  134. package/src/middleware/extract-json-middleware.ts +197 -0
  135. package/src/middleware/extract-reasoning-middleware.test.ts +1028 -0
  136. package/src/middleware/extract-reasoning-middleware.ts +238 -0
  137. package/src/middleware/index.ts +10 -0
  138. package/src/middleware/simulate-streaming-middleware.test.ts +911 -0
  139. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  140. package/src/middleware/wrap-embedding-model.test.ts +358 -0
  141. package/src/middleware/wrap-embedding-model.ts +86 -0
  142. package/src/middleware/wrap-image-model.test.ts +423 -0
  143. package/src/middleware/wrap-image-model.ts +85 -0
  144. package/src/middleware/wrap-language-model.test.ts +518 -0
  145. package/src/middleware/wrap-language-model.ts +104 -0
  146. package/src/middleware/wrap-provider.test.ts +120 -0
  147. package/src/middleware/wrap-provider.ts +51 -0
  148. package/src/model/as-embedding-model-v3.test.ts +319 -0
  149. package/src/model/as-embedding-model-v3.ts +24 -0
  150. package/src/model/as-image-model-v3.test.ts +409 -0
  151. package/src/model/as-image-model-v3.ts +24 -0
  152. package/src/model/as-language-model-v3.test.ts +508 -0
  153. package/src/model/as-language-model-v3.ts +103 -0
  154. package/src/model/as-provider-v3.ts +36 -0
  155. package/src/model/as-speech-model-v3.test.ts +356 -0
  156. package/src/model/as-speech-model-v3.ts +24 -0
  157. package/src/model/as-transcription-model-v3.test.ts +529 -0
  158. package/src/model/as-transcription-model-v3.ts +24 -0
  159. package/src/model/resolve-model.test.ts +244 -0
  160. package/src/model/resolve-model.ts +126 -0
  161. package/src/prompt/call-settings.ts +148 -0
  162. package/src/prompt/content-part.ts +209 -0
  163. package/src/prompt/convert-to-language-model-prompt.test.ts +2018 -0
  164. package/src/prompt/convert-to-language-model-prompt.ts +442 -0
  165. package/src/prompt/create-tool-model-output.test.ts +508 -0
  166. package/src/prompt/create-tool-model-output.ts +34 -0
  167. package/src/prompt/data-content.test.ts +15 -0
  168. package/src/prompt/data-content.ts +134 -0
  169. package/src/prompt/index.ts +27 -0
  170. package/src/prompt/invalid-data-content-error.ts +29 -0
  171. package/src/prompt/invalid-message-role-error.ts +27 -0
  172. package/src/prompt/message-conversion-error.ts +28 -0
  173. package/src/prompt/message.ts +68 -0
  174. package/src/prompt/prepare-call-settings.test.ts +159 -0
  175. package/src/prompt/prepare-call-settings.ts +108 -0
  176. package/src/prompt/prepare-tools-and-tool-choice.test.ts +461 -0
  177. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  178. package/src/prompt/prompt.ts +43 -0
  179. package/src/prompt/split-data-url.ts +17 -0
  180. package/src/prompt/standardize-prompt.test.ts +82 -0
  181. package/src/prompt/standardize-prompt.ts +99 -0
  182. package/src/prompt/wrap-gateway-error.ts +29 -0
  183. package/src/registry/custom-provider.test.ts +211 -0
  184. package/src/registry/custom-provider.ts +155 -0
  185. package/src/registry/index.ts +7 -0
  186. package/src/registry/no-such-provider-error.ts +41 -0
  187. package/src/registry/provider-registry.test.ts +691 -0
  188. package/src/registry/provider-registry.ts +328 -0
  189. package/src/rerank/index.ts +2 -0
  190. package/src/rerank/rerank-result.ts +70 -0
  191. package/src/rerank/rerank.test.ts +516 -0
  192. package/src/rerank/rerank.ts +237 -0
  193. package/src/telemetry/assemble-operation-name.ts +21 -0
  194. package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
  195. package/src/telemetry/get-tracer.ts +20 -0
  196. package/src/telemetry/noop-tracer.ts +69 -0
  197. package/src/telemetry/record-span.ts +63 -0
  198. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  199. package/src/telemetry/select-temetry-attributes.test.ts +114 -0
  200. package/src/telemetry/stringify-for-telemetry.test.ts +114 -0
  201. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  202. package/src/telemetry/telemetry-settings.ts +44 -0
  203. package/src/test/mock-embedding-model-v2.ts +35 -0
  204. package/src/test/mock-embedding-model-v3.ts +48 -0
  205. package/src/test/mock-image-model-v2.ts +28 -0
  206. package/src/test/mock-image-model-v3.ts +28 -0
  207. package/src/test/mock-language-model-v2.ts +72 -0
  208. package/src/test/mock-language-model-v3.ts +77 -0
  209. package/src/test/mock-provider-v2.ts +68 -0
  210. package/src/test/mock-provider-v3.ts +80 -0
  211. package/src/test/mock-reranking-model-v3.ts +25 -0
  212. package/src/test/mock-server-response.ts +69 -0
  213. package/src/test/mock-speech-model-v2.ts +24 -0
  214. package/src/test/mock-speech-model-v3.ts +24 -0
  215. package/src/test/mock-tracer.ts +156 -0
  216. package/src/test/mock-transcription-model-v2.ts +24 -0
  217. package/src/test/mock-transcription-model-v3.ts +24 -0
  218. package/src/test/mock-values.ts +4 -0
  219. package/src/test/not-implemented.ts +3 -0
  220. package/src/text-stream/create-text-stream-response.test.ts +38 -0
  221. package/src/text-stream/create-text-stream-response.ts +18 -0
  222. package/src/text-stream/index.ts +2 -0
  223. package/src/text-stream/pipe-text-stream-to-response.test.ts +38 -0
  224. package/src/text-stream/pipe-text-stream-to-response.ts +26 -0
  225. package/src/transcribe/index.ts +2 -0
  226. package/src/transcribe/transcribe-result.ts +60 -0
  227. package/src/transcribe/transcribe.test.ts +313 -0
  228. package/src/transcribe/transcribe.ts +173 -0
  229. package/src/types/embedding-model-middleware.ts +3 -0
  230. package/src/types/embedding-model.ts +18 -0
  231. package/src/types/image-model-middleware.ts +3 -0
  232. package/src/types/image-model-response-metadata.ts +16 -0
  233. package/src/types/image-model.ts +19 -0
  234. package/src/types/index.ts +29 -0
  235. package/src/types/json-value.ts +15 -0
  236. package/src/types/language-model-middleware.ts +3 -0
  237. package/src/types/language-model-request-metadata.ts +6 -0
  238. package/src/types/language-model-response-metadata.ts +21 -0
  239. package/src/types/language-model.ts +104 -0
  240. package/src/types/provider-metadata.ts +16 -0
  241. package/src/types/provider.ts +55 -0
  242. package/src/types/reranking-model.ts +6 -0
  243. package/src/types/speech-model-response-metadata.ts +21 -0
  244. package/src/types/speech-model.ts +6 -0
  245. package/src/types/transcription-model-response-metadata.ts +16 -0
  246. package/src/types/transcription-model.ts +9 -0
  247. package/src/types/usage.ts +200 -0
  248. package/src/types/warning.ts +7 -0
  249. package/src/ui/__snapshots__/append-response-messages.test.ts.snap +416 -0
  250. package/src/ui/__snapshots__/convert-to-model-messages.test.ts.snap +419 -0
  251. package/src/ui/__snapshots__/process-chat-text-response.test.ts.snap +142 -0
  252. package/src/ui/call-completion-api.ts +157 -0
  253. package/src/ui/chat-transport.ts +83 -0
  254. package/src/ui/chat.test-d.ts +233 -0
  255. package/src/ui/chat.test.ts +2695 -0
  256. package/src/ui/chat.ts +716 -0
  257. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  258. package/src/ui/convert-to-model-messages.test.ts +2775 -0
  259. package/src/ui/convert-to-model-messages.ts +373 -0
  260. package/src/ui/default-chat-transport.ts +36 -0
  261. package/src/ui/direct-chat-transport.test.ts +446 -0
  262. package/src/ui/direct-chat-transport.ts +118 -0
  263. package/src/ui/http-chat-transport.test.ts +185 -0
  264. package/src/ui/http-chat-transport.ts +292 -0
  265. package/src/ui/index.ts +71 -0
  266. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  267. package/src/ui/last-assistant-message-is-complete-with-tool-calls.test.ts +371 -0
  268. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  269. package/src/ui/process-text-stream.test.ts +38 -0
  270. package/src/ui/process-text-stream.ts +16 -0
  271. package/src/ui/process-ui-message-stream.test.ts +8052 -0
  272. package/src/ui/process-ui-message-stream.ts +713 -0
  273. package/src/ui/text-stream-chat-transport.ts +23 -0
  274. package/src/ui/transform-text-to-ui-message-stream.test.ts +124 -0
  275. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  276. package/src/ui/ui-messages.test.ts +48 -0
  277. package/src/ui/ui-messages.ts +534 -0
  278. package/src/ui/use-completion.ts +84 -0
  279. package/src/ui/validate-ui-messages.test.ts +1428 -0
  280. package/src/ui/validate-ui-messages.ts +476 -0
  281. package/src/ui-message-stream/create-ui-message-stream-response.test.ts +266 -0
  282. package/src/ui-message-stream/create-ui-message-stream-response.ts +32 -0
  283. package/src/ui-message-stream/create-ui-message-stream.test.ts +639 -0
  284. package/src/ui-message-stream/create-ui-message-stream.ts +124 -0
  285. package/src/ui-message-stream/get-response-ui-message-id.test.ts +55 -0
  286. package/src/ui-message-stream/get-response-ui-message-id.ts +24 -0
  287. package/src/ui-message-stream/handle-ui-message-stream-finish.test.ts +429 -0
  288. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +135 -0
  289. package/src/ui-message-stream/index.ts +13 -0
  290. package/src/ui-message-stream/json-to-sse-transform-stream.ts +12 -0
  291. package/src/ui-message-stream/pipe-ui-message-stream-to-response.test.ts +90 -0
  292. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +40 -0
  293. package/src/ui-message-stream/read-ui-message-stream.test.ts +122 -0
  294. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  295. package/src/ui-message-stream/ui-message-chunks.test-d.ts +18 -0
  296. package/src/ui-message-stream/ui-message-chunks.ts +344 -0
  297. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  298. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  299. package/src/ui-message-stream/ui-message-stream-response-init.ts +5 -0
  300. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  301. package/src/util/as-array.ts +3 -0
  302. package/src/util/async-iterable-stream.test.ts +241 -0
  303. package/src/util/async-iterable-stream.ts +94 -0
  304. package/src/util/consume-stream.ts +29 -0
  305. package/src/util/cosine-similarity.test.ts +57 -0
  306. package/src/util/cosine-similarity.ts +47 -0
  307. package/src/util/create-resolvable-promise.ts +30 -0
  308. package/src/util/create-stitchable-stream.test.ts +239 -0
  309. package/src/util/create-stitchable-stream.ts +112 -0
  310. package/src/util/data-url.ts +17 -0
  311. package/src/util/deep-partial.ts +84 -0
  312. package/src/util/detect-media-type.test.ts +670 -0
  313. package/src/util/detect-media-type.ts +184 -0
  314. package/src/util/download/download-function.ts +45 -0
  315. package/src/util/download/download.test.ts +69 -0
  316. package/src/util/download/download.ts +46 -0
  317. package/src/util/error-handler.ts +1 -0
  318. package/src/util/fix-json.test.ts +279 -0
  319. package/src/util/fix-json.ts +401 -0
  320. package/src/util/get-potential-start-index.test.ts +34 -0
  321. package/src/util/get-potential-start-index.ts +30 -0
  322. package/src/util/index.ts +11 -0
  323. package/src/util/is-deep-equal-data.test.ts +119 -0
  324. package/src/util/is-deep-equal-data.ts +48 -0
  325. package/src/util/is-non-empty-object.ts +5 -0
  326. package/src/util/job.ts +1 -0
  327. package/src/util/log-v2-compatibility-warning.ts +21 -0
  328. package/src/util/merge-abort-signals.test.ts +155 -0
  329. package/src/util/merge-abort-signals.ts +43 -0
  330. package/src/util/merge-objects.test.ts +118 -0
  331. package/src/util/merge-objects.ts +79 -0
  332. package/src/util/now.ts +4 -0
  333. package/src/util/parse-partial-json.test.ts +80 -0
  334. package/src/util/parse-partial-json.ts +30 -0
  335. package/src/util/prepare-headers.test.ts +51 -0
  336. package/src/util/prepare-headers.ts +14 -0
  337. package/src/util/prepare-retries.test.ts +10 -0
  338. package/src/util/prepare-retries.ts +47 -0
  339. package/src/util/retry-error.ts +41 -0
  340. package/src/util/retry-with-exponential-backoff.test.ts +446 -0
  341. package/src/util/retry-with-exponential-backoff.ts +154 -0
  342. package/src/util/serial-job-executor.test.ts +162 -0
  343. package/src/util/serial-job-executor.ts +36 -0
  344. package/src/util/simulate-readable-stream.test.ts +98 -0
  345. package/src/util/simulate-readable-stream.ts +39 -0
  346. package/src/util/split-array.test.ts +60 -0
  347. package/src/util/split-array.ts +20 -0
  348. package/src/util/value-of.ts +65 -0
  349. package/src/util/write-to-server-response.test.ts +266 -0
  350. package/src/util/write-to-server-response.ts +49 -0
  351. package/src/version.ts +5 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # ai
2
2
 
3
+ ## 6.0.34
4
+
5
+ ### Patch Changes
6
+
7
+ - 1b11dcb: chore(ai): include sources in npm package
8
+ - Updated dependencies [1b11dcb]
9
+ - @ai-sdk/provider-utils@4.0.6
10
+ - @ai-sdk/provider@3.0.3
11
+ - @ai-sdk/gateway@3.0.14
12
+
3
13
  ## 6.0.33
4
14
 
5
15
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1025,7 +1025,7 @@ var import_provider_utils3 = require("@ai-sdk/provider-utils");
1025
1025
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
1026
1026
 
1027
1027
  // src/version.ts
1028
- var VERSION = true ? "6.0.33" : "0.0.0-test";
1028
+ var VERSION = true ? "6.0.34" : "0.0.0-test";
1029
1029
 
1030
1030
  // src/util/download/download.ts
1031
1031
  var download = async ({ url }) => {
package/dist/index.mjs CHANGED
@@ -921,7 +921,7 @@ import {
921
921
  } from "@ai-sdk/provider-utils";
922
922
 
923
923
  // src/version.ts
924
- var VERSION = true ? "6.0.33" : "0.0.0-test";
924
+ var VERSION = true ? "6.0.34" : "0.0.0-test";
925
925
 
926
926
  // src/util/download/download.ts
927
927
  var download = async ({ url }) => {
@@ -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.34" : "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.34" : "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
  });
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "6.0.33",
3
+ "version": "6.0.34",
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';
@@ -0,0 +1,7 @@
1
+ import { Agent } from './agent';
2
+
3
+ /**
4
+ * Infer the type of the tools of an agent.
5
+ */
6
+ export type InferAgentTools<AGENT> =
7
+ AGENT extends Agent<any, infer TOOLS, any> ? TOOLS : never;