@fondation-io/ai 7.0.0-beta.45

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 (536) hide show
  1. package/CHANGELOG.md +7687 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +7056 -0
  4. package/dist/index.d.ts +7056 -0
  5. package/dist/index.js +14607 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14578 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +303 -0
  10. package/dist/internal/index.d.ts +303 -0
  11. package/dist/internal/index.js +1352 -0
  12. package/dist/internal/index.js.map +1 -0
  13. package/dist/internal/index.mjs +1336 -0
  14. package/dist/internal/index.mjs.map +1 -0
  15. package/dist/test/index.d.mts +265 -0
  16. package/dist/test/index.d.ts +265 -0
  17. package/dist/test/index.js +509 -0
  18. package/dist/test/index.js.map +1 -0
  19. package/dist/test/index.mjs +472 -0
  20. package/dist/test/index.mjs.map +1 -0
  21. package/docs/00-introduction/index.mdx +76 -0
  22. package/docs/02-foundations/01-overview.mdx +43 -0
  23. package/docs/02-foundations/02-providers-and-models.mdx +160 -0
  24. package/docs/02-foundations/03-prompts.mdx +616 -0
  25. package/docs/02-foundations/04-tools.mdx +251 -0
  26. package/docs/02-foundations/05-streaming.mdx +62 -0
  27. package/docs/02-foundations/06-provider-options.mdx +345 -0
  28. package/docs/02-foundations/index.mdx +49 -0
  29. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  30. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  31. package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
  32. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  33. package/docs/02-getting-started/04-svelte.mdx +627 -0
  34. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  35. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  36. package/docs/02-getting-started/07-expo.mdx +766 -0
  37. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  38. package/docs/02-getting-started/09-coding-agents.mdx +179 -0
  39. package/docs/02-getting-started/index.mdx +44 -0
  40. package/docs/03-agents/01-overview.mdx +96 -0
  41. package/docs/03-agents/02-building-agents.mdx +449 -0
  42. package/docs/03-agents/03-workflows.mdx +386 -0
  43. package/docs/03-agents/04-loop-control.mdx +394 -0
  44. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  45. package/docs/03-agents/06-memory.mdx +222 -0
  46. package/docs/03-agents/06-subagents.mdx +362 -0
  47. package/docs/03-agents/index.mdx +46 -0
  48. package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
  49. package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
  50. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
  51. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1148 -0
  52. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
  53. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
  54. package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
  55. package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
  56. package/docs/03-ai-sdk-core/30-embeddings.mdx +236 -0
  57. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  58. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  59. package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
  60. package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
  61. package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
  62. package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
  63. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  64. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  65. package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
  66. package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
  67. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  68. package/docs/03-ai-sdk-core/65-event-listeners.mdx +1303 -0
  69. package/docs/03-ai-sdk-core/index.mdx +99 -0
  70. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  71. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
  72. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +534 -0
  73. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  74. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  75. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  76. package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
  77. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  78. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  79. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  80. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  81. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  82. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  83. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
  84. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  85. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  86. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  87. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  88. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  89. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  90. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
  91. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  92. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
  93. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  94. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  95. package/docs/05-ai-sdk-rsc/index.mdx +63 -0
  96. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  97. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  98. package/docs/06-advanced/03-backpressure.mdx +173 -0
  99. package/docs/06-advanced/04-caching.mdx +169 -0
  100. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  101. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  102. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
  103. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  104. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  105. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  106. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  107. package/docs/06-advanced/index.mdx +11 -0
  108. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
  109. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
  110. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
  111. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
  112. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +323 -0
  113. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
  114. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
  115. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
  116. package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
  117. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
  118. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
  119. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
  120. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
  121. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
  122. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
  123. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
  124. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
  125. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  126. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  128. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
  129. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  130. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
  131. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
  132. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  133. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  134. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
  135. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
  136. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  137. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  138. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  139. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
  140. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  141. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  142. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  143. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  144. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  145. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  146. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  147. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  148. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  149. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
  150. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  151. package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
  152. package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
  153. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
  154. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
  155. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
  156. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
  157. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  158. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
  159. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
  160. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
  161. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  162. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  163. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  164. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  165. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  166. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  167. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  168. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  169. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
  170. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
  171. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  172. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  173. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  174. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  175. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  176. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  177. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
  178. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  207. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  208. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  209. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  210. package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
  211. package/docs/07-reference/index.mdx +28 -0
  212. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  213. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
  214. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  215. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  216. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  217. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  218. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  219. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  220. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  221. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  222. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  223. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  224. package/docs/08-migration-guides/index.mdx +22 -0
  225. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  226. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  227. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  228. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  229. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  230. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  231. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  232. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  233. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  234. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  235. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  236. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  237. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  238. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  239. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  240. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  241. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  242. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  243. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  244. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  245. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  246. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  247. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  248. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  249. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
  250. package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
  251. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  252. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  253. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  254. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  255. package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
  256. package/docs/09-troubleshooting/index.mdx +11 -0
  257. package/internal.d.ts +1 -0
  258. package/package.json +120 -0
  259. package/src/agent/agent.ts +156 -0
  260. package/src/agent/create-agent-ui-stream-response.ts +61 -0
  261. package/src/agent/create-agent-ui-stream.ts +84 -0
  262. package/src/agent/index.ts +37 -0
  263. package/src/agent/infer-agent-tools.ts +7 -0
  264. package/src/agent/infer-agent-ui-message.ts +11 -0
  265. package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
  266. package/src/agent/tool-loop-agent-settings.ts +252 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +181 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +428 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +266 -0
  273. package/src/embed/index.ts +5 -0
  274. package/src/error/index.ts +37 -0
  275. package/src/error/invalid-argument-error.ts +34 -0
  276. package/src/error/invalid-stream-part-error.ts +28 -0
  277. package/src/error/invalid-tool-approval-error.ts +26 -0
  278. package/src/error/invalid-tool-input-error.ts +33 -0
  279. package/src/error/missing-tool-result-error.ts +28 -0
  280. package/src/error/no-image-generated-error.ts +39 -0
  281. package/src/error/no-object-generated-error.ts +70 -0
  282. package/src/error/no-output-generated-error.ts +26 -0
  283. package/src/error/no-speech-generated-error.ts +28 -0
  284. package/src/error/no-such-tool-error.ts +35 -0
  285. package/src/error/no-transcript-generated-error.ts +30 -0
  286. package/src/error/no-video-generated-error.ts +57 -0
  287. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  288. package/src/error/tool-call-repair-error.ts +30 -0
  289. package/src/error/ui-message-stream-error.ts +48 -0
  290. package/src/error/unsupported-model-version-error.ts +23 -0
  291. package/src/error/verify-no-object-generated-error.ts +27 -0
  292. package/src/generate-image/generate-image-result.ts +42 -0
  293. package/src/generate-image/generate-image.ts +361 -0
  294. package/src/generate-image/index.ts +18 -0
  295. package/src/generate-object/generate-object-result.ts +67 -0
  296. package/src/generate-object/generate-object.ts +514 -0
  297. package/src/generate-object/index.ts +9 -0
  298. package/src/generate-object/inject-json-instruction.ts +30 -0
  299. package/src/generate-object/output-strategy.ts +415 -0
  300. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  301. package/src/generate-object/repair-text.ts +12 -0
  302. package/src/generate-object/stream-object-result.ts +120 -0
  303. package/src/generate-object/stream-object.ts +984 -0
  304. package/src/generate-object/validate-object-generation-input.ts +144 -0
  305. package/src/generate-speech/generate-speech-result.ts +30 -0
  306. package/src/generate-speech/generate-speech.ts +191 -0
  307. package/src/generate-speech/generated-audio-file.ts +65 -0
  308. package/src/generate-speech/index.ts +3 -0
  309. package/src/generate-text/collect-tool-approvals.ts +116 -0
  310. package/src/generate-text/content-part.ts +31 -0
  311. package/src/generate-text/core-events.ts +390 -0
  312. package/src/generate-text/create-execute-tools-transformation.ts +144 -0
  313. package/src/generate-text/execute-tool-call.ts +190 -0
  314. package/src/generate-text/extract-reasoning-content.ts +17 -0
  315. package/src/generate-text/extract-text-content.ts +15 -0
  316. package/src/generate-text/generate-text-result.ts +168 -0
  317. package/src/generate-text/generate-text.ts +1445 -0
  318. package/src/generate-text/generated-file.ts +70 -0
  319. package/src/generate-text/index.ts +78 -0
  320. package/src/generate-text/invoke-tool-callbacks-from-stream.ts +81 -0
  321. package/src/generate-text/is-approval-needed.ts +29 -0
  322. package/src/generate-text/output-utils.ts +23 -0
  323. package/src/generate-text/output.ts +590 -0
  324. package/src/generate-text/parse-tool-call.ts +188 -0
  325. package/src/generate-text/prepare-step.ts +103 -0
  326. package/src/generate-text/prune-messages.ts +167 -0
  327. package/src/generate-text/reasoning-output.ts +99 -0
  328. package/src/generate-text/reasoning.ts +10 -0
  329. package/src/generate-text/response-message.ts +10 -0
  330. package/src/generate-text/smooth-stream.ts +162 -0
  331. package/src/generate-text/step-result.ts +310 -0
  332. package/src/generate-text/stop-condition.ts +29 -0
  333. package/src/generate-text/stream-model-call.ts +418 -0
  334. package/src/generate-text/stream-text-result.ts +536 -0
  335. package/src/generate-text/stream-text.ts +2696 -0
  336. package/src/generate-text/to-response-messages.ts +195 -0
  337. package/src/generate-text/tool-approval-request-output.ts +21 -0
  338. package/src/generate-text/tool-call-repair-function.ts +27 -0
  339. package/src/generate-text/tool-call.ts +47 -0
  340. package/src/generate-text/tool-error.ts +34 -0
  341. package/src/generate-text/tool-output-denied.ts +21 -0
  342. package/src/generate-text/tool-output.ts +7 -0
  343. package/src/generate-text/tool-result.ts +36 -0
  344. package/src/generate-text/tool-set.ts +14 -0
  345. package/src/generate-video/generate-video-result.ts +36 -0
  346. package/src/generate-video/generate-video.ts +402 -0
  347. package/src/generate-video/index.ts +3 -0
  348. package/src/global.ts +36 -0
  349. package/src/index.ts +49 -0
  350. package/src/logger/index.ts +6 -0
  351. package/src/logger/log-warnings.ts +140 -0
  352. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  353. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  354. package/src/middleware/default-settings-middleware.ts +33 -0
  355. package/src/middleware/extract-json-middleware.ts +197 -0
  356. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  357. package/src/middleware/index.ts +10 -0
  358. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  359. package/src/middleware/wrap-embedding-model.ts +89 -0
  360. package/src/middleware/wrap-image-model.ts +92 -0
  361. package/src/middleware/wrap-language-model.ts +108 -0
  362. package/src/middleware/wrap-provider.ts +51 -0
  363. package/src/model/as-embedding-model-v3.ts +24 -0
  364. package/src/model/as-embedding-model-v4.ts +25 -0
  365. package/src/model/as-image-model-v3.ts +24 -0
  366. package/src/model/as-image-model-v4.ts +21 -0
  367. package/src/model/as-language-model-v3.ts +103 -0
  368. package/src/model/as-language-model-v4.ts +25 -0
  369. package/src/model/as-provider-v3.ts +36 -0
  370. package/src/model/as-provider-v4.ts +47 -0
  371. package/src/model/as-reranking-model-v4.ts +16 -0
  372. package/src/model/as-speech-model-v3.ts +24 -0
  373. package/src/model/as-speech-model-v4.ts +21 -0
  374. package/src/model/as-transcription-model-v3.ts +24 -0
  375. package/src/model/as-transcription-model-v4.ts +25 -0
  376. package/src/model/as-video-model-v4.ts +19 -0
  377. package/src/model/resolve-model.ts +172 -0
  378. package/src/prompt/call-settings.ts +169 -0
  379. package/src/prompt/content-part.ts +236 -0
  380. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  381. package/src/prompt/create-tool-model-output.ts +34 -0
  382. package/src/prompt/data-content.ts +134 -0
  383. package/src/prompt/index.ts +27 -0
  384. package/src/prompt/invalid-data-content-error.ts +29 -0
  385. package/src/prompt/invalid-message-role-error.ts +27 -0
  386. package/src/prompt/message-conversion-error.ts +28 -0
  387. package/src/prompt/message.ts +72 -0
  388. package/src/prompt/prepare-call-settings.ts +110 -0
  389. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  390. package/src/prompt/prompt.ts +43 -0
  391. package/src/prompt/split-data-url.ts +17 -0
  392. package/src/prompt/standardize-prompt.ts +99 -0
  393. package/src/prompt/wrap-gateway-error.ts +29 -0
  394. package/src/registry/custom-provider.ts +210 -0
  395. package/src/registry/index.ts +7 -0
  396. package/src/registry/no-such-provider-error.ts +41 -0
  397. package/src/registry/provider-registry.ts +331 -0
  398. package/src/rerank/index.ts +8 -0
  399. package/src/rerank/rerank-events.ts +189 -0
  400. package/src/rerank/rerank-result.ts +70 -0
  401. package/src/rerank/rerank.ts +348 -0
  402. package/src/telemetry/assemble-operation-name.ts +21 -0
  403. package/src/telemetry/get-base-telemetry-attributes.ts +45 -0
  404. package/src/telemetry/get-global-telemetry-integration.ts +126 -0
  405. package/src/telemetry/get-tracer.ts +20 -0
  406. package/src/telemetry/index.ts +4 -0
  407. package/src/telemetry/noop-tracer.ts +69 -0
  408. package/src/telemetry/open-telemetry-integration.ts +875 -0
  409. package/src/telemetry/record-span.ts +75 -0
  410. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  411. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  412. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  413. package/src/telemetry/telemetry-integration.ts +139 -0
  414. package/src/telemetry/telemetry-settings.ts +55 -0
  415. package/src/test/mock-embedding-model-v2.ts +35 -0
  416. package/src/test/mock-embedding-model-v3.ts +48 -0
  417. package/src/test/mock-embedding-model-v4.ts +48 -0
  418. package/src/test/mock-image-model-v2.ts +28 -0
  419. package/src/test/mock-image-model-v3.ts +28 -0
  420. package/src/test/mock-image-model-v4.ts +28 -0
  421. package/src/test/mock-language-model-v2.ts +72 -0
  422. package/src/test/mock-language-model-v3.ts +77 -0
  423. package/src/test/mock-language-model-v4.ts +77 -0
  424. package/src/test/mock-provider-v2.ts +68 -0
  425. package/src/test/mock-provider-v3.ts +80 -0
  426. package/src/test/mock-provider-v4.ts +80 -0
  427. package/src/test/mock-reranking-model-v3.ts +25 -0
  428. package/src/test/mock-reranking-model-v4.ts +25 -0
  429. package/src/test/mock-server-response.ts +69 -0
  430. package/src/test/mock-speech-model-v2.ts +24 -0
  431. package/src/test/mock-speech-model-v3.ts +24 -0
  432. package/src/test/mock-speech-model-v4.ts +24 -0
  433. package/src/test/mock-tracer.ts +156 -0
  434. package/src/test/mock-transcription-model-v2.ts +24 -0
  435. package/src/test/mock-transcription-model-v3.ts +24 -0
  436. package/src/test/mock-transcription-model-v4.ts +24 -0
  437. package/src/test/mock-values.ts +4 -0
  438. package/src/test/mock-video-model-v3.ts +28 -0
  439. package/src/test/mock-video-model-v4.ts +28 -0
  440. package/src/test/not-implemented.ts +3 -0
  441. package/src/text-stream/create-text-stream-response.ts +30 -0
  442. package/src/text-stream/index.ts +2 -0
  443. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  444. package/src/transcribe/index.ts +2 -0
  445. package/src/transcribe/transcribe-result.ts +60 -0
  446. package/src/transcribe/transcribe.ts +187 -0
  447. package/src/types/embedding-model-middleware.ts +15 -0
  448. package/src/types/embedding-model.ts +20 -0
  449. package/src/types/image-model-middleware.ts +15 -0
  450. package/src/types/image-model-response-metadata.ts +16 -0
  451. package/src/types/image-model.ts +19 -0
  452. package/src/types/index.ts +29 -0
  453. package/src/types/json-value.ts +15 -0
  454. package/src/types/language-model-middleware.ts +15 -0
  455. package/src/types/language-model-request-metadata.ts +6 -0
  456. package/src/types/language-model-response-metadata.ts +21 -0
  457. package/src/types/language-model.ts +106 -0
  458. package/src/types/provider-metadata.ts +16 -0
  459. package/src/types/provider.ts +55 -0
  460. package/src/types/reranking-model.ts +6 -0
  461. package/src/types/speech-model-response-metadata.ts +21 -0
  462. package/src/types/speech-model.ts +10 -0
  463. package/src/types/transcription-model-response-metadata.ts +16 -0
  464. package/src/types/transcription-model.ts +14 -0
  465. package/src/types/usage.ts +200 -0
  466. package/src/types/video-model-response-metadata.ts +28 -0
  467. package/src/types/video-model.ts +15 -0
  468. package/src/types/warning.ts +7 -0
  469. package/src/ui/call-completion-api.ts +157 -0
  470. package/src/ui/chat-transport.ts +83 -0
  471. package/src/ui/chat.ts +786 -0
  472. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  473. package/src/ui/convert-to-model-messages.ts +403 -0
  474. package/src/ui/default-chat-transport.ts +36 -0
  475. package/src/ui/direct-chat-transport.ts +117 -0
  476. package/src/ui/http-chat-transport.ts +273 -0
  477. package/src/ui/index.ts +76 -0
  478. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  479. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  480. package/src/ui/process-text-stream.ts +16 -0
  481. package/src/ui/process-ui-message-stream.ts +858 -0
  482. package/src/ui/text-stream-chat-transport.ts +23 -0
  483. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  484. package/src/ui/ui-messages.ts +602 -0
  485. package/src/ui/use-completion.ts +84 -0
  486. package/src/ui/validate-ui-messages.ts +521 -0
  487. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  488. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  489. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  490. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  491. package/src/ui-message-stream/index.ts +14 -0
  492. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  493. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  494. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  495. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  496. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  497. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  498. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  499. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  500. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  501. package/src/util/as-array.ts +3 -0
  502. package/src/util/async-iterable-stream.ts +94 -0
  503. package/src/util/consume-stream.ts +31 -0
  504. package/src/util/cosine-similarity.ts +46 -0
  505. package/src/util/create-resolvable-promise.ts +30 -0
  506. package/src/util/create-stitchable-stream.ts +112 -0
  507. package/src/util/data-url.ts +17 -0
  508. package/src/util/deep-partial.ts +84 -0
  509. package/src/util/detect-media-type.ts +226 -0
  510. package/src/util/download/create-download.ts +13 -0
  511. package/src/util/download/download-function.ts +45 -0
  512. package/src/util/download/download.ts +74 -0
  513. package/src/util/error-handler.ts +1 -0
  514. package/src/util/fix-json.ts +401 -0
  515. package/src/util/get-potential-start-index.ts +39 -0
  516. package/src/util/index.ts +12 -0
  517. package/src/util/is-deep-equal-data.ts +48 -0
  518. package/src/util/is-non-empty-object.ts +5 -0
  519. package/src/util/job.ts +1 -0
  520. package/src/util/log-v2-compatibility-warning.ts +21 -0
  521. package/src/util/merge-abort-signals.ts +43 -0
  522. package/src/util/merge-objects.ts +79 -0
  523. package/src/util/notify.ts +22 -0
  524. package/src/util/now.ts +4 -0
  525. package/src/util/parse-partial-json.ts +30 -0
  526. package/src/util/prepare-headers.ts +14 -0
  527. package/src/util/prepare-retries.ts +47 -0
  528. package/src/util/retry-error.ts +41 -0
  529. package/src/util/retry-with-exponential-backoff.ts +154 -0
  530. package/src/util/serial-job-executor.ts +36 -0
  531. package/src/util/simulate-readable-stream.ts +39 -0
  532. package/src/util/split-array.ts +20 -0
  533. package/src/util/value-of.ts +65 -0
  534. package/src/util/write-to-server-response.ts +49 -0
  535. package/src/version.ts +5 -0
  536. package/test.d.ts +1 -0
@@ -0,0 +1,188 @@
1
+ import { LanguageModelV4ToolCall } from '@ai-sdk/provider';
2
+ import {
3
+ asSchema,
4
+ ModelMessage,
5
+ safeParseJSON,
6
+ safeValidateTypes,
7
+ SystemModelMessage,
8
+ } from '@ai-sdk/provider-utils';
9
+ import { InvalidToolInputError } from '../error/invalid-tool-input-error';
10
+ import { NoSuchToolError } from '../error/no-such-tool-error';
11
+ import { ToolCallRepairError } from '../error/tool-call-repair-error';
12
+ import { DynamicToolCall, TypedToolCall } from './tool-call';
13
+ import { ToolCallRepairFunction } from './tool-call-repair-function';
14
+ import { ToolSet } from './tool-set';
15
+
16
+ export async function parseToolCall<TOOLS extends ToolSet>({
17
+ toolCall,
18
+ tools,
19
+ repairToolCall,
20
+ system,
21
+ messages,
22
+ }: {
23
+ toolCall: LanguageModelV4ToolCall;
24
+ tools: TOOLS | undefined;
25
+ repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;
26
+ system: string | SystemModelMessage | Array<SystemModelMessage> | undefined;
27
+ messages: ModelMessage[];
28
+ }): Promise<TypedToolCall<TOOLS>> {
29
+ try {
30
+ if (tools == null) {
31
+ // provider-executed dynamic tools are not part of our list of tools:
32
+ if (toolCall.providerExecuted && toolCall.dynamic) {
33
+ return await parseProviderExecutedDynamicToolCall(toolCall);
34
+ }
35
+
36
+ throw new NoSuchToolError({ toolName: toolCall.toolName });
37
+ }
38
+
39
+ try {
40
+ return await doParseToolCall({ toolCall, tools });
41
+ } catch (error) {
42
+ if (
43
+ repairToolCall == null ||
44
+ !(
45
+ NoSuchToolError.isInstance(error) ||
46
+ InvalidToolInputError.isInstance(error)
47
+ )
48
+ ) {
49
+ throw error;
50
+ }
51
+
52
+ let repairedToolCall: LanguageModelV4ToolCall | null = null;
53
+
54
+ try {
55
+ repairedToolCall = await repairToolCall({
56
+ toolCall,
57
+ tools,
58
+ inputSchema: async ({ toolName }) => {
59
+ const { inputSchema } = tools[toolName];
60
+ return await asSchema(inputSchema).jsonSchema;
61
+ },
62
+ system,
63
+ messages,
64
+ error,
65
+ });
66
+ } catch (repairError) {
67
+ throw new ToolCallRepairError({
68
+ cause: repairError,
69
+ originalError: error,
70
+ });
71
+ }
72
+
73
+ // no repaired tool call returned
74
+ if (repairedToolCall == null) {
75
+ throw error;
76
+ }
77
+
78
+ return await doParseToolCall({ toolCall: repairedToolCall, tools });
79
+ }
80
+ } catch (error) {
81
+ // use parsed input when possible
82
+ const parsedInput = await safeParseJSON({ text: toolCall.input });
83
+ const input = parsedInput.success ? parsedInput.value : toolCall.input;
84
+
85
+ // TODO AI SDK 6: special invalid tool call parts
86
+ return {
87
+ type: 'tool-call',
88
+ toolCallId: toolCall.toolCallId,
89
+ toolName: toolCall.toolName,
90
+ input,
91
+ dynamic: true,
92
+ invalid: true,
93
+ error,
94
+ title: tools?.[toolCall.toolName]?.title,
95
+ providerExecuted: toolCall.providerExecuted,
96
+ providerMetadata: toolCall.providerMetadata,
97
+ };
98
+ }
99
+ }
100
+
101
+ async function parseProviderExecutedDynamicToolCall(
102
+ toolCall: LanguageModelV4ToolCall,
103
+ ): Promise<DynamicToolCall> {
104
+ const parseResult =
105
+ toolCall.input.trim() === ''
106
+ ? { success: true as const, value: {} }
107
+ : await safeParseJSON({ text: toolCall.input });
108
+
109
+ if (parseResult.success === false) {
110
+ throw new InvalidToolInputError({
111
+ toolName: toolCall.toolName,
112
+ toolInput: toolCall.input,
113
+ cause: parseResult.error,
114
+ });
115
+ }
116
+
117
+ return {
118
+ type: 'tool-call',
119
+ toolCallId: toolCall.toolCallId,
120
+ toolName: toolCall.toolName,
121
+ input: parseResult.value,
122
+ providerExecuted: true,
123
+ dynamic: true,
124
+ providerMetadata: toolCall.providerMetadata,
125
+ };
126
+ }
127
+
128
+ async function doParseToolCall<TOOLS extends ToolSet>({
129
+ toolCall,
130
+ tools,
131
+ }: {
132
+ toolCall: LanguageModelV4ToolCall;
133
+ tools: TOOLS;
134
+ }): Promise<TypedToolCall<TOOLS>> {
135
+ const toolName = toolCall.toolName as keyof TOOLS & string;
136
+
137
+ const tool = tools[toolName];
138
+
139
+ if (tool == null) {
140
+ // provider-executed dynamic tools are not part of our list of tools:
141
+ if (toolCall.providerExecuted && toolCall.dynamic) {
142
+ return await parseProviderExecutedDynamicToolCall(toolCall);
143
+ }
144
+
145
+ throw new NoSuchToolError({
146
+ toolName: toolCall.toolName,
147
+ availableTools: Object.keys(tools),
148
+ });
149
+ }
150
+
151
+ const schema = asSchema(tool.inputSchema);
152
+
153
+ // when the tool call has no arguments, we try passing an empty object to the schema
154
+ // (many LLMs generate empty strings for tool calls with no arguments)
155
+ const parseResult =
156
+ toolCall.input.trim() === ''
157
+ ? await safeValidateTypes({ value: {}, schema })
158
+ : await safeParseJSON({ text: toolCall.input, schema });
159
+
160
+ if (parseResult.success === false) {
161
+ throw new InvalidToolInputError({
162
+ toolName,
163
+ toolInput: toolCall.input,
164
+ cause: parseResult.error,
165
+ });
166
+ }
167
+
168
+ return tool.type === 'dynamic'
169
+ ? {
170
+ type: 'tool-call',
171
+ toolCallId: toolCall.toolCallId,
172
+ toolName: toolCall.toolName,
173
+ input: parseResult.value,
174
+ providerExecuted: toolCall.providerExecuted,
175
+ providerMetadata: toolCall.providerMetadata,
176
+ dynamic: true,
177
+ title: tool.title,
178
+ }
179
+ : {
180
+ type: 'tool-call',
181
+ toolCallId: toolCall.toolCallId,
182
+ toolName,
183
+ input: parseResult.value,
184
+ providerExecuted: toolCall.providerExecuted,
185
+ providerMetadata: toolCall.providerMetadata,
186
+ title: tool.title,
187
+ };
188
+ }
@@ -0,0 +1,103 @@
1
+ import {
2
+ ModelMessage,
3
+ ProviderOptions,
4
+ SystemModelMessage,
5
+ Tool,
6
+ } from '@ai-sdk/provider-utils';
7
+ import { LanguageModel, ToolChoice } from '../types/language-model';
8
+ import { StepResult } from './step-result';
9
+
10
+ /**
11
+ * Function that you can use to provide different settings for a step.
12
+ *
13
+ * @param options - The options for the step.
14
+ * @param options.steps - The steps that have been executed so far.
15
+ * @param options.stepNumber - The number of the step that is being executed.
16
+ * @param options.model - The model that is being used.
17
+ * @param options.messages - The messages that will be sent to the model for the current step.
18
+ * @param options.experimental_context - The context passed via the experimental_context setting (experimental).
19
+ *
20
+ * @returns An object that contains the settings for the step.
21
+ * If you return undefined (or for undefined settings), the settings from the outer level will be used.
22
+ */
23
+ export type PrepareStepFunction<
24
+ TOOLS extends Record<string, Tool> = Record<string, Tool>,
25
+ > = (options: {
26
+ /**
27
+ * The steps that have been executed so far.
28
+ */
29
+ steps: Array<StepResult<NoInfer<TOOLS>>>;
30
+
31
+ /**
32
+ * The number of the step that is being executed.
33
+ */
34
+ stepNumber: number;
35
+
36
+ /**
37
+ * The model instance that is being used for this step.
38
+ */
39
+ model: LanguageModel;
40
+
41
+ /**
42
+ * The messages that will be sent to the model for the current step.
43
+ */
44
+ messages: Array<ModelMessage>;
45
+
46
+ /**
47
+ * The context passed via the experimental_context setting (experimental).
48
+ */
49
+ experimental_context: unknown;
50
+ }) => PromiseLike<PrepareStepResult<TOOLS>> | PrepareStepResult<TOOLS>;
51
+
52
+ /**
53
+ * The result type returned by a {@link PrepareStepFunction},
54
+ * allowing per-step overrides of model, tools, or messages.
55
+ */
56
+ export type PrepareStepResult<
57
+ TOOLS extends Record<string, Tool> = Record<string, Tool>,
58
+ > =
59
+ | {
60
+ /**
61
+ * Optionally override which LanguageModel instance is used for this step.
62
+ */
63
+ model?: LanguageModel;
64
+
65
+ /**
66
+ * Optionally set which tool the model must call, or provide tool call configuration
67
+ * for this step.
68
+ */
69
+ toolChoice?: ToolChoice<NoInfer<TOOLS>>;
70
+
71
+ /**
72
+ * If provided, only these tools are enabled/available for this step.
73
+ */
74
+ activeTools?: Array<keyof NoInfer<TOOLS>>;
75
+
76
+ /**
77
+ * Optionally override the system message(s) sent to the model for this step.
78
+ */
79
+ system?: string | SystemModelMessage | Array<SystemModelMessage>;
80
+
81
+ /**
82
+ * Optionally override the full set of messages sent to the model
83
+ * for this step.
84
+ */
85
+ messages?: Array<ModelMessage>;
86
+
87
+ /**
88
+ * Context that is passed into tool execution. Experimental.
89
+ *
90
+ * Changing the context will affect the context in this step
91
+ * and all subsequent steps.
92
+ */
93
+ experimental_context?: unknown;
94
+
95
+ /**
96
+ * Additional provider-specific options for this step.
97
+ *
98
+ * Can be used to pass provider-specific configuration such as
99
+ * container IDs for Anthropic's code execution.
100
+ */
101
+ providerOptions?: ProviderOptions;
102
+ }
103
+ | undefined;
@@ -0,0 +1,167 @@
1
+ import {
2
+ AssistantModelMessage,
3
+ ModelMessage,
4
+ ToolModelMessage,
5
+ } from '@ai-sdk/provider-utils';
6
+
7
+ /**
8
+ * Prunes model messages from a list of model messages.
9
+ *
10
+ * @param messages - The list of model messages to prune.
11
+ * @param reasoning - How to remove reasoning content from assistant messages. Default is `'none'`.
12
+ * @param toolCalls - How to prune tool call/results/approval content. Default is `[]`.
13
+ * @param emptyMessages - Whether to keep or remove messages whose content is empty after pruning. Default is `'remove'`.
14
+ *
15
+ * @returns The pruned list of model messages.
16
+ */
17
+ export function pruneMessages({
18
+ messages,
19
+ reasoning = 'none',
20
+ toolCalls = [],
21
+ emptyMessages = 'remove',
22
+ }: {
23
+ messages: ModelMessage[];
24
+ reasoning?: 'all' | 'before-last-message' | 'none';
25
+ toolCalls?:
26
+ | 'all'
27
+ | 'before-last-message'
28
+ | `before-last-${number}-messages`
29
+ | 'none'
30
+ | Array<{
31
+ type: 'all' | 'before-last-message' | `before-last-${number}-messages`;
32
+ tools?: string[];
33
+ }>;
34
+ emptyMessages?: 'keep' | 'remove';
35
+ }): ModelMessage[] {
36
+ // filter reasoning parts:
37
+ if (reasoning === 'all' || reasoning === 'before-last-message') {
38
+ messages = messages.map((message, messageIndex) => {
39
+ if (
40
+ message.role !== 'assistant' ||
41
+ typeof message.content === 'string' ||
42
+ (reasoning === 'before-last-message' &&
43
+ messageIndex === messages.length - 1)
44
+ ) {
45
+ return message;
46
+ }
47
+
48
+ return {
49
+ ...message,
50
+ content: message.content.filter(part => part.type !== 'reasoning'),
51
+ };
52
+ });
53
+ }
54
+
55
+ // filter tool calls, results, errors, and approvals:
56
+ if (toolCalls === 'none') {
57
+ toolCalls = [];
58
+ } else if (toolCalls === 'all') {
59
+ toolCalls = [{ type: 'all' }];
60
+ } else if (toolCalls === 'before-last-message') {
61
+ toolCalls = [{ type: 'before-last-message' }];
62
+ } else if (typeof toolCalls === 'string') {
63
+ toolCalls = [{ type: toolCalls }];
64
+ }
65
+
66
+ for (const toolCall of toolCalls) {
67
+ // determine how many trailing messages to keep:
68
+ const keepLastMessagesCount =
69
+ toolCall.type === 'all'
70
+ ? undefined
71
+ : toolCall.type === 'before-last-message'
72
+ ? 1
73
+ : Number(
74
+ toolCall.type
75
+ .slice('before-last-'.length)
76
+ .slice(0, -'-messages'.length),
77
+ );
78
+
79
+ // scan kept messages to identify tool calls and approvals that need to be kept:
80
+ const keptToolCallIds: Set<string> = new Set();
81
+ const keptApprovalIds: Set<string> = new Set();
82
+
83
+ if (keepLastMessagesCount != null) {
84
+ for (const message of messages.slice(-keepLastMessagesCount)) {
85
+ if (
86
+ (message.role === 'assistant' || message.role === 'tool') &&
87
+ typeof message.content !== 'string'
88
+ ) {
89
+ for (const part of message.content) {
90
+ if (part.type === 'tool-call' || part.type === 'tool-result') {
91
+ keptToolCallIds.add(part.toolCallId);
92
+ } else if (
93
+ part.type === 'tool-approval-request' ||
94
+ part.type === 'tool-approval-response'
95
+ ) {
96
+ keptApprovalIds.add(part.approvalId);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+
103
+ messages = messages.map((message, messageIndex) => {
104
+ if (
105
+ (message.role !== 'assistant' && message.role !== 'tool') ||
106
+ typeof message.content === 'string' ||
107
+ (keepLastMessagesCount &&
108
+ messageIndex >= messages.length - keepLastMessagesCount)
109
+ ) {
110
+ return message;
111
+ }
112
+
113
+ const toolCallIdToToolName: Record<string, string> = {};
114
+ const approvalIdToToolName: Record<string, string> = {};
115
+
116
+ return {
117
+ ...message,
118
+ content: message.content.filter(part => {
119
+ // keep non-tool parts:
120
+ if (
121
+ part.type !== 'tool-call' &&
122
+ part.type !== 'tool-result' &&
123
+ part.type !== 'tool-approval-request' &&
124
+ part.type !== 'tool-approval-response'
125
+ ) {
126
+ return true;
127
+ }
128
+
129
+ // track tool calls and approvals:
130
+ if (part.type === 'tool-call') {
131
+ toolCallIdToToolName[part.toolCallId] = part.toolName;
132
+ } else if (part.type === 'tool-approval-request') {
133
+ approvalIdToToolName[part.approvalId] =
134
+ toolCallIdToToolName[part.toolCallId];
135
+ }
136
+
137
+ // keep parts that are associated with a tool call or approval that needs to be kept:
138
+ if (
139
+ ((part.type === 'tool-call' || part.type === 'tool-result') &&
140
+ keptToolCallIds.has(part.toolCallId)) ||
141
+ ((part.type === 'tool-approval-request' ||
142
+ part.type === 'tool-approval-response') &&
143
+ keptApprovalIds.has(part.approvalId))
144
+ ) {
145
+ return true;
146
+ }
147
+
148
+ // keep parts that are not associated with a tool that should be removed:
149
+ return (
150
+ toolCall.tools != null &&
151
+ !toolCall.tools.includes(
152
+ part.type === 'tool-call' || part.type === 'tool-result'
153
+ ? part.toolName
154
+ : approvalIdToToolName[part.approvalId],
155
+ )
156
+ );
157
+ }),
158
+ } as AssistantModelMessage | ToolModelMessage;
159
+ });
160
+ }
161
+
162
+ if (emptyMessages === 'remove') {
163
+ messages = messages.filter(message => message.content.length > 0);
164
+ }
165
+
166
+ return messages;
167
+ }
@@ -0,0 +1,99 @@
1
+ import { ReasoningFilePart, ReasoningPart } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types/provider-metadata';
3
+ import { DefaultGeneratedFile, GeneratedFile } from './generated-file';
4
+
5
+ /**
6
+ * Reasoning output of a text generation. It contains a reasoning.
7
+ */
8
+ export interface ReasoningOutput {
9
+ type: 'reasoning';
10
+
11
+ /**
12
+ * The reasoning text.
13
+ */
14
+ text: string;
15
+
16
+ /**
17
+ * Additional provider-specific metadata. They are passed through
18
+ * to the provider from the AI SDK and enable provider-specific
19
+ * functionality that can be fully encapsulated in the provider.
20
+ */
21
+ providerMetadata?: ProviderMetadata;
22
+ }
23
+
24
+ /**
25
+ * Reasoning file output of a text generation.
26
+ * It contains a file generated as part of reasoning.
27
+ */
28
+ export interface ReasoningFileOutput {
29
+ type: 'reasoning-file';
30
+
31
+ /**
32
+ * The generated file.
33
+ */
34
+ file: GeneratedFile;
35
+
36
+ /**
37
+ * Additional provider-specific metadata. They are passed through
38
+ * to the provider from the AI SDK and enable provider-specific
39
+ * functionality that can be fully encapsulated in the provider.
40
+ */
41
+ providerMetadata?: ProviderMetadata;
42
+ }
43
+
44
+ export function convertFromReasoningOutputs(
45
+ parts: Array<ReasoningOutput | ReasoningFileOutput>,
46
+ ): Array<ReasoningPart | ReasoningFilePart> {
47
+ return parts.map(part => {
48
+ if (part.type === 'reasoning') {
49
+ return {
50
+ type: 'reasoning' as const,
51
+ text: part.text,
52
+ ...(part.providerMetadata != null
53
+ ? { providerOptions: part.providerMetadata }
54
+ : {}),
55
+ };
56
+ }
57
+
58
+ return {
59
+ type: 'reasoning-file' as const,
60
+ data: part.file.base64,
61
+ mediaType: part.file.mediaType,
62
+ ...(part.providerMetadata != null
63
+ ? { providerOptions: part.providerMetadata }
64
+ : {}),
65
+ };
66
+ });
67
+ }
68
+
69
+ export function convertToReasoningOutputs(
70
+ parts: Array<ReasoningPart | ReasoningFilePart>,
71
+ ): Array<ReasoningOutput | ReasoningFileOutput> {
72
+ return parts.map(part => {
73
+ if (part.type === 'reasoning') {
74
+ return {
75
+ type: 'reasoning' as const,
76
+ text: part.text,
77
+ ...(part.providerOptions != null
78
+ ? { providerMetadata: part.providerOptions as ProviderMetadata }
79
+ : {}),
80
+ };
81
+ }
82
+
83
+ return {
84
+ type: 'reasoning-file' as const,
85
+ file: new DefaultGeneratedFile({
86
+ data:
87
+ part.data instanceof ArrayBuffer
88
+ ? new Uint8Array(part.data)
89
+ : part.data instanceof URL
90
+ ? part.data.toString()
91
+ : part.data,
92
+ mediaType: part.mediaType,
93
+ }),
94
+ ...(part.providerOptions != null
95
+ ? { providerMetadata: part.providerOptions as ProviderMetadata }
96
+ : {}),
97
+ };
98
+ });
99
+ }
@@ -0,0 +1,10 @@
1
+ import { ReasoningPart, ReasoningFilePart } from '@ai-sdk/provider-utils';
2
+
3
+ export function asReasoningText(
4
+ reasoningParts: Array<ReasoningPart | ReasoningFilePart>,
5
+ ): string | undefined {
6
+ const reasoningText = reasoningParts
7
+ .map(part => ('text' in part ? part.text : ''))
8
+ .join('');
9
+ return reasoningText.length > 0 ? reasoningText : undefined;
10
+ }
@@ -0,0 +1,10 @@
1
+ import {
2
+ AssistantModelMessage,
3
+ ToolModelMessage,
4
+ } from '@ai-sdk/provider-utils';
5
+
6
+ /**
7
+ * A message that was generated during the generation process.
8
+ * It can be either an assistant message or a tool message.
9
+ */
10
+ export type ResponseMessage = AssistantModelMessage | ToolModelMessage;