@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,252 @@
1
+ import {
2
+ FlexibleSchema,
3
+ MaybePromiseLike,
4
+ ProviderOptions,
5
+ SystemModelMessage,
6
+ } from '@ai-sdk/provider-utils';
7
+ import type {
8
+ OnFinishEvent,
9
+ OnStartEvent,
10
+ OnStepFinishEvent,
11
+ OnStepStartEvent,
12
+ OnToolCallFinishEvent,
13
+ OnToolCallStartEvent,
14
+ } from '../generate-text/core-events';
15
+ import { Output } from '../generate-text/output';
16
+ import { PrepareStepFunction } from '../generate-text/prepare-step';
17
+ import { StopCondition } from '../generate-text/stop-condition';
18
+ import { ToolCallRepairFunction } from '../generate-text/tool-call-repair-function';
19
+ import { ToolSet } from '../generate-text/tool-set';
20
+ import { CallSettings, TimeoutConfiguration } from '../prompt/call-settings';
21
+ import { Prompt } from '../prompt/prompt';
22
+ import { TelemetrySettings } from '../telemetry/telemetry-settings';
23
+ import { LanguageModel, ToolChoice } from '../types/language-model';
24
+ import { DownloadFunction } from '../util/download/download-function';
25
+ import { AgentCallParameters } from './agent';
26
+
27
+ export type ToolLoopAgentOnStartCallback<
28
+ TOOLS extends ToolSet = ToolSet,
29
+ OUTPUT extends Output = Output,
30
+ > = (event: OnStartEvent<TOOLS, OUTPUT>) => PromiseLike<void> | void;
31
+
32
+ export type ToolLoopAgentOnStepStartCallback<
33
+ TOOLS extends ToolSet = ToolSet,
34
+ OUTPUT extends Output = Output,
35
+ > = (event: OnStepStartEvent<TOOLS, OUTPUT>) => PromiseLike<void> | void;
36
+
37
+ export type ToolLoopAgentOnToolCallStartCallback<
38
+ TOOLS extends ToolSet = ToolSet,
39
+ > = (event: OnToolCallStartEvent<TOOLS>) => PromiseLike<void> | void;
40
+
41
+ export type ToolLoopAgentOnToolCallFinishCallback<
42
+ TOOLS extends ToolSet = ToolSet,
43
+ > = (event: OnToolCallFinishEvent<TOOLS>) => PromiseLike<void> | void;
44
+
45
+ export type ToolLoopAgentOnStepFinishCallback<TOOLS extends ToolSet = {}> = (
46
+ stepResult: OnStepFinishEvent<TOOLS>,
47
+ ) => Promise<void> | void;
48
+
49
+ export type ToolLoopAgentOnFinishCallback<TOOLS extends ToolSet = {}> = (
50
+ event: OnFinishEvent<TOOLS>,
51
+ ) => PromiseLike<void> | void;
52
+
53
+ /**
54
+ * Configuration options for an agent.
55
+ */
56
+ export type ToolLoopAgentSettings<
57
+ CALL_OPTIONS = never,
58
+ TOOLS extends ToolSet = {},
59
+ OUTPUT extends Output = never,
60
+ > = Omit<CallSettings, 'abortSignal'> & {
61
+ /**
62
+ * Timeout in milliseconds. The call will be aborted if it takes longer
63
+ * than the specified timeout. Can be used alongside abortSignal.
64
+ *
65
+ * Can be specified as a number (milliseconds) or as an object with `totalMs`.
66
+ */
67
+ timeout?: TimeoutConfiguration<TOOLS>;
68
+
69
+ /**
70
+ * The id of the agent.
71
+ */
72
+ id?: string;
73
+
74
+ /**
75
+ * The instructions for the agent.
76
+ *
77
+ * It can be a string, or, if you need to pass additional provider options (e.g. for caching), a `SystemModelMessage`.
78
+ */
79
+ instructions?: string | SystemModelMessage | Array<SystemModelMessage>;
80
+
81
+ /**
82
+ * The language model to use.
83
+ */
84
+ model: LanguageModel;
85
+
86
+ /**
87
+ * The tools that the model can call. The model needs to support calling tools.
88
+ */
89
+ tools?: TOOLS;
90
+
91
+ /**
92
+ * The tool choice strategy. Default: 'auto'.
93
+ */
94
+ toolChoice?: ToolChoice<NoInfer<TOOLS>>;
95
+
96
+ /**
97
+ * Condition for stopping the generation when there are tool results in the last step.
98
+ * When the condition is an array, any of the conditions can be met to stop the generation.
99
+ *
100
+ * @default stepCountIs(20)
101
+ */
102
+ stopWhen?:
103
+ | StopCondition<NoInfer<TOOLS>>
104
+ | Array<StopCondition<NoInfer<TOOLS>>>;
105
+
106
+ /**
107
+ * Optional telemetry configuration (experimental).
108
+ */
109
+ experimental_telemetry?: TelemetrySettings;
110
+
111
+ /**
112
+ * Limits the tools that are available for the model to call without
113
+ * changing the tool call and result types in the result.
114
+ */
115
+ activeTools?: Array<keyof NoInfer<TOOLS>>;
116
+
117
+ /**
118
+ * Optional specification for generating structured outputs.
119
+ */
120
+ output?: OUTPUT;
121
+
122
+ /**
123
+ * Optional function that you can use to provide different settings for a step.
124
+ */
125
+ prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;
126
+
127
+ /**
128
+ * A function that attempts to repair a tool call that failed to parse.
129
+ */
130
+ experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;
131
+
132
+ /**
133
+ * Callback that is called when the agent operation begins, before any LLM calls.
134
+ */
135
+ experimental_onStart?: ToolLoopAgentOnStartCallback<NoInfer<TOOLS>, OUTPUT>;
136
+
137
+ /**
138
+ * Callback that is called when a step (LLM call) begins, before the provider is called.
139
+ */
140
+ experimental_onStepStart?: ToolLoopAgentOnStepStartCallback<
141
+ NoInfer<TOOLS>,
142
+ OUTPUT
143
+ >;
144
+
145
+ /**
146
+ * Callback that is called before each tool execution begins.
147
+ */
148
+ experimental_onToolCallStart?: ToolLoopAgentOnToolCallStartCallback<
149
+ NoInfer<TOOLS>
150
+ >;
151
+
152
+ /**
153
+ * Callback that is called after each tool execution completes.
154
+ */
155
+ experimental_onToolCallFinish?: ToolLoopAgentOnToolCallFinishCallback<
156
+ NoInfer<TOOLS>
157
+ >;
158
+
159
+ /**
160
+ * Callback that is called when each step (LLM call) is finished, including intermediate steps.
161
+ */
162
+ onStepFinish?: ToolLoopAgentOnStepFinishCallback<NoInfer<TOOLS>>;
163
+
164
+ /**
165
+ * Callback that is called when all steps are finished and the response is complete.
166
+ */
167
+ onFinish?: ToolLoopAgentOnFinishCallback<NoInfer<TOOLS>>;
168
+
169
+ /**
170
+ * Additional provider-specific options. They are passed through
171
+ * to the provider from the AI SDK and enable provider-specific
172
+ * functionality that can be fully encapsulated in the provider.
173
+ */
174
+ providerOptions?: ProviderOptions;
175
+
176
+ /**
177
+ * Context that is passed into tool calls.
178
+ *
179
+ * Experimental (can break in patch releases).
180
+ *
181
+ * @default undefined
182
+ */
183
+ experimental_context?: unknown;
184
+
185
+ /**
186
+ * Custom download function to use for URLs.
187
+ *
188
+ * By default, files are downloaded if the model does not support the URL for the given media type.
189
+ */
190
+ experimental_download?: DownloadFunction | undefined;
191
+
192
+ /**
193
+ * The schema for the call options.
194
+ */
195
+ callOptionsSchema?: FlexibleSchema<CALL_OPTIONS>;
196
+
197
+ /**
198
+ * Prepare the parameters for the generateText or streamText call.
199
+ *
200
+ * You can use this to have templates based on call options.
201
+ */
202
+ prepareCall?: (
203
+ options: Omit<
204
+ AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>>,
205
+ 'onStepFinish'
206
+ > &
207
+ Pick<
208
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
209
+ | 'model'
210
+ | 'tools'
211
+ | 'maxOutputTokens'
212
+ | 'temperature'
213
+ | 'topP'
214
+ | 'topK'
215
+ | 'presencePenalty'
216
+ | 'frequencyPenalty'
217
+ | 'stopSequences'
218
+ | 'seed'
219
+ | 'headers'
220
+ | 'instructions'
221
+ | 'stopWhen'
222
+ | 'experimental_telemetry'
223
+ | 'activeTools'
224
+ | 'providerOptions'
225
+ | 'experimental_context'
226
+ | 'experimental_download'
227
+ >,
228
+ ) => MaybePromiseLike<
229
+ Pick<
230
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
231
+ | 'model'
232
+ | 'tools'
233
+ | 'maxOutputTokens'
234
+ | 'temperature'
235
+ | 'topP'
236
+ | 'topK'
237
+ | 'presencePenalty'
238
+ | 'frequencyPenalty'
239
+ | 'stopSequences'
240
+ | 'seed'
241
+ | 'headers'
242
+ | 'instructions'
243
+ | 'stopWhen'
244
+ | 'experimental_telemetry'
245
+ | 'activeTools'
246
+ | 'providerOptions'
247
+ | 'experimental_context'
248
+ | 'experimental_download'
249
+ > &
250
+ Omit<Prompt, 'system'>
251
+ >;
252
+ };
@@ -0,0 +1,205 @@
1
+ import { generateText } from '../generate-text/generate-text';
2
+ import { GenerateTextResult } from '../generate-text/generate-text-result';
3
+ import { Output } from '../generate-text/output';
4
+ import { stepCountIs } from '../generate-text/stop-condition';
5
+ import { streamText } from '../generate-text/stream-text';
6
+ import { StreamTextResult } from '../generate-text/stream-text-result';
7
+ import { ToolSet } from '../generate-text/tool-set';
8
+ import { Prompt } from '../prompt';
9
+ import { Agent, AgentCallParameters, AgentStreamParameters } from './agent';
10
+ import { ToolLoopAgentSettings } from './tool-loop-agent-settings';
11
+
12
+ /**
13
+ * A tool loop agent is an agent that runs tools in a loop. In each step,
14
+ * it calls the LLM, and if there are tool calls, it executes the tools
15
+ * and calls the LLM again in a new step with the tool results.
16
+ *
17
+ * The loop continues until:
18
+ * - A finish reasoning other than tool-calls is returned, or
19
+ * - A tool that is invoked does not have an execute function, or
20
+ * - A tool call needs approval, or
21
+ * - A stop condition is met (default stop condition is stepCountIs(20))
22
+ */
23
+ export class ToolLoopAgent<
24
+ CALL_OPTIONS = never,
25
+ TOOLS extends ToolSet = {},
26
+ OUTPUT extends Output = never,
27
+ > implements Agent<CALL_OPTIONS, TOOLS, OUTPUT> {
28
+ readonly version = 'agent-v1';
29
+
30
+ private readonly settings: ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>;
31
+
32
+ constructor(settings: ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>) {
33
+ this.settings = settings;
34
+ }
35
+
36
+ /**
37
+ * The id of the agent.
38
+ */
39
+ get id(): string | undefined {
40
+ return this.settings.id;
41
+ }
42
+
43
+ /**
44
+ * The tools that the agent can use.
45
+ */
46
+ get tools(): TOOLS {
47
+ return this.settings.tools as TOOLS;
48
+ }
49
+
50
+ private async prepareCall(options: {
51
+ prompt?: string | Array<import('@ai-sdk/provider-utils').ModelMessage>;
52
+ messages?: Array<import('@ai-sdk/provider-utils').ModelMessage>;
53
+ options?: CALL_OPTIONS;
54
+ }): Promise<
55
+ Omit<
56
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
57
+ | 'prepareCall'
58
+ | 'instructions'
59
+ | 'experimental_onStart'
60
+ | 'experimental_onStepStart'
61
+ | 'experimental_onToolCallStart'
62
+ | 'experimental_onToolCallFinish'
63
+ | 'onStepFinish'
64
+ | 'onFinish'
65
+ > &
66
+ Prompt
67
+ > {
68
+ const {
69
+ experimental_onStart: _settingsOnStart,
70
+ experimental_onStepStart: _settingsOnStepStart,
71
+ experimental_onToolCallStart: _settingsOnToolCallStart,
72
+ experimental_onToolCallFinish: _settingsOnToolCallFinish,
73
+ onStepFinish: _settingsOnStepFinish,
74
+ onFinish: _settingsOnFinish,
75
+ ...settingsWithoutCallbacks
76
+ } = this.settings;
77
+
78
+ const baseCallArgs = {
79
+ ...settingsWithoutCallbacks,
80
+ stopWhen: this.settings.stopWhen ?? stepCountIs(20),
81
+ ...options,
82
+ };
83
+
84
+ const preparedCallArgs =
85
+ (await this.settings.prepareCall?.(
86
+ baseCallArgs as Parameters<
87
+ NonNullable<
88
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>['prepareCall']
89
+ >
90
+ >[0],
91
+ )) ?? baseCallArgs;
92
+
93
+ const { instructions, messages, prompt, ...callArgs } = preparedCallArgs;
94
+
95
+ return {
96
+ ...callArgs,
97
+
98
+ // restore prompt types
99
+ ...({ system: instructions, messages, prompt } as Prompt),
100
+ };
101
+ }
102
+
103
+ private mergeCallbacks<T extends (event: any) => PromiseLike<void> | void>(
104
+ settingsCallback: T | undefined,
105
+ methodCallback: T | undefined,
106
+ ): T | undefined {
107
+ if (methodCallback && settingsCallback) {
108
+ return (async (event: Parameters<T>[0]) => {
109
+ await settingsCallback(event);
110
+ await methodCallback(event);
111
+ }) as unknown as T;
112
+ }
113
+ return methodCallback ?? settingsCallback;
114
+ }
115
+
116
+ /**
117
+ * Generates an output from the agent (non-streaming).
118
+ */
119
+ async generate({
120
+ abortSignal,
121
+ timeout,
122
+ experimental_onStart,
123
+ experimental_onStepStart,
124
+ experimental_onToolCallStart,
125
+ experimental_onToolCallFinish,
126
+ onStepFinish,
127
+ onFinish,
128
+ ...options
129
+ }: AgentCallParameters<CALL_OPTIONS, TOOLS>): Promise<
130
+ GenerateTextResult<TOOLS, OUTPUT>
131
+ > {
132
+ return generateText({
133
+ ...(await this.prepareCall(options)),
134
+ abortSignal,
135
+ timeout,
136
+ experimental_onStart: this.mergeCallbacks(
137
+ this.settings.experimental_onStart,
138
+ experimental_onStart,
139
+ ),
140
+ experimental_onStepStart: this.mergeCallbacks(
141
+ this.settings.experimental_onStepStart,
142
+ experimental_onStepStart,
143
+ ),
144
+ experimental_onToolCallStart: this.mergeCallbacks(
145
+ this.settings.experimental_onToolCallStart,
146
+ experimental_onToolCallStart,
147
+ ),
148
+ experimental_onToolCallFinish: this.mergeCallbacks(
149
+ this.settings.experimental_onToolCallFinish,
150
+ experimental_onToolCallFinish,
151
+ ),
152
+ onStepFinish: this.mergeCallbacks(
153
+ this.settings.onStepFinish,
154
+ onStepFinish,
155
+ ),
156
+ onFinish: this.mergeCallbacks(this.settings.onFinish, onFinish),
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Streams an output from the agent (streaming).
162
+ */
163
+ async stream({
164
+ abortSignal,
165
+ timeout,
166
+ experimental_transform,
167
+ experimental_onStart,
168
+ experimental_onStepStart,
169
+ experimental_onToolCallStart,
170
+ experimental_onToolCallFinish,
171
+ onStepFinish,
172
+ onFinish,
173
+ ...options
174
+ }: AgentStreamParameters<CALL_OPTIONS, TOOLS>): Promise<
175
+ StreamTextResult<TOOLS, OUTPUT>
176
+ > {
177
+ return streamText({
178
+ ...(await this.prepareCall(options)),
179
+ abortSignal,
180
+ timeout,
181
+ experimental_transform,
182
+ experimental_onStart: this.mergeCallbacks(
183
+ this.settings.experimental_onStart,
184
+ experimental_onStart,
185
+ ),
186
+ experimental_onStepStart: this.mergeCallbacks(
187
+ this.settings.experimental_onStepStart,
188
+ experimental_onStepStart,
189
+ ),
190
+ experimental_onToolCallStart: this.mergeCallbacks(
191
+ this.settings.experimental_onToolCallStart,
192
+ experimental_onToolCallStart,
193
+ ),
194
+ experimental_onToolCallFinish: this.mergeCallbacks(
195
+ this.settings.experimental_onToolCallFinish,
196
+ experimental_onToolCallFinish,
197
+ ),
198
+ onStepFinish: this.mergeCallbacks(
199
+ this.settings.onStepFinish,
200
+ onStepFinish,
201
+ ),
202
+ onFinish: this.mergeCallbacks(this.settings.onFinish, onFinish),
203
+ });
204
+ }
205
+ }
@@ -0,0 +1,181 @@
1
+ import type { JSONValue } from '@ai-sdk/provider';
2
+ import type { ProviderOptions } from '@ai-sdk/provider-utils';
3
+ import type { Embedding, ProviderMetadata } from '../types';
4
+ import type { EmbeddingModelUsage } from '../types/usage';
5
+ import type { Warning } from '../types/warning';
6
+
7
+ /**
8
+ * Event passed to the `onStart` callback for embed and embedMany operations.
9
+ *
10
+ * Called when the operation begins, before the embedding model is called.
11
+ */
12
+ export interface EmbedOnStartEvent {
13
+ /** Unique identifier for this embed call, used to correlate events. */
14
+ readonly callId: string;
15
+
16
+ /** Identifies the operation type (e.g. 'ai.embed' or 'ai.embedMany'). */
17
+ readonly operationId: string;
18
+
19
+ /** The provider identifier (e.g., 'openai', 'anthropic'). */
20
+ readonly provider: string;
21
+
22
+ /** The specific model identifier (e.g., 'text-embedding-3-small'). */
23
+ readonly modelId: string;
24
+
25
+ /** The value(s) being embedded. A string for embed, an array for embedMany. */
26
+ readonly value: string | Array<string>;
27
+
28
+ /** Maximum number of retries for failed requests. */
29
+ readonly maxRetries: number;
30
+
31
+ /** Abort signal for cancelling the operation. */
32
+ readonly abortSignal: AbortSignal | undefined;
33
+
34
+ /** Additional HTTP headers sent with the request. */
35
+ readonly headers: Record<string, string | undefined> | undefined;
36
+
37
+ /** Additional provider-specific options. */
38
+ readonly providerOptions: ProviderOptions | undefined;
39
+
40
+ /** Whether telemetry is enabled. */
41
+ readonly isEnabled: boolean | undefined;
42
+
43
+ /** Whether to record inputs in telemetry. Enabled by default. */
44
+ readonly recordInputs: boolean | undefined;
45
+
46
+ /** Whether to record outputs in telemetry. Enabled by default. */
47
+ readonly recordOutputs: boolean | undefined;
48
+
49
+ /** Identifier from telemetry settings for grouping related operations. */
50
+ readonly functionId: string | undefined;
51
+
52
+ /** Additional metadata from telemetry settings. */
53
+ readonly metadata: Record<string, JSONValue> | undefined;
54
+ }
55
+
56
+ /**
57
+ * Event passed to the `onFinish` callback for embed and embedMany operations.
58
+ *
59
+ * Called when the operation completes, after the embedding model returns.
60
+ */
61
+ export interface EmbedOnFinishEvent {
62
+ /** Unique identifier for this embed call, used to correlate events. */
63
+ readonly callId: string;
64
+
65
+ /** Identifies the operation type (e.g. 'ai.embed' or 'ai.embedMany'). */
66
+ readonly operationId: string;
67
+
68
+ /** The provider identifier (e.g., 'openai', 'anthropic'). */
69
+ readonly provider: string;
70
+
71
+ /** The specific model identifier (e.g., 'text-embedding-3-small'). */
72
+ readonly modelId: string;
73
+
74
+ /** The value(s) that were embedded. A string for embed, an array for embedMany. */
75
+ readonly value: string | Array<string>;
76
+
77
+ /** The resulting embedding(s). A single vector for embed, an array for embedMany. */
78
+ readonly embedding: Embedding | Array<Embedding>;
79
+
80
+ /** Token usage for the embedding operation. */
81
+ readonly usage: EmbeddingModelUsage;
82
+
83
+ /** Warnings from the embedding model, e.g. unsupported settings. */
84
+ readonly warnings: Array<Warning>;
85
+
86
+ /** Optional provider-specific metadata. */
87
+ readonly providerMetadata: ProviderMetadata | undefined;
88
+
89
+ /** Response data including headers and body. A single response for embed, an array for embedMany. */
90
+ readonly response:
91
+ | { headers?: Record<string, string>; body?: unknown }
92
+ | Array<{ headers?: Record<string, string>; body?: unknown } | undefined>
93
+ | undefined;
94
+
95
+ /** Whether telemetry is enabled. */
96
+ readonly isEnabled: boolean | undefined;
97
+
98
+ /** Whether to record inputs in telemetry. Enabled by default. */
99
+ readonly recordInputs: boolean | undefined;
100
+
101
+ /** Whether to record outputs in telemetry. Enabled by default. */
102
+ readonly recordOutputs: boolean | undefined;
103
+
104
+ /** Identifier from telemetry settings for grouping related operations. */
105
+ readonly functionId: string | undefined;
106
+
107
+ /** Additional metadata from telemetry settings. */
108
+ readonly metadata: Record<string, JSONValue> | undefined;
109
+ }
110
+
111
+ /**
112
+ * Event fired when an individual embedding model call (inner operation doEmbed) begins.
113
+ *
114
+ * For `embed`, there is one call. For `embedMany`, there may be multiple
115
+ * calls when values are chunked.
116
+ */
117
+ export interface EmbedStartEvent {
118
+ /** Unique identifier for this embed call, used to correlate events. */
119
+ readonly callId: string;
120
+
121
+ /** Unique identifier for this individual doEmbed invocation, used to correlate start/finish within parallel chunks. */
122
+ readonly embedCallId: string;
123
+
124
+ /** Identifies the inner operation (e.g. 'ai.embed.doEmbed' or 'ai.embedMany.doEmbed'). */
125
+ readonly operationId: string;
126
+
127
+ /** The provider identifier. */
128
+ readonly provider: string;
129
+
130
+ /** The specific model identifier. */
131
+ readonly modelId: string;
132
+
133
+ /** The values being embedded in this particular model call. */
134
+ readonly values: Array<string>;
135
+
136
+ /** Whether telemetry is enabled. */
137
+ readonly isEnabled: boolean | undefined;
138
+
139
+ /** Whether to record inputs in telemetry. Enabled by default. */
140
+ readonly recordInputs: boolean | undefined;
141
+
142
+ /** Whether to record outputs in telemetry. Enabled by default. */
143
+ readonly recordOutputs: boolean | undefined;
144
+
145
+ /** Identifier from telemetry settings for grouping related operations. */
146
+ readonly functionId: string | undefined;
147
+
148
+ /** Additional metadata from telemetry settings. */
149
+ readonly metadata: Record<string, JSONValue> | undefined;
150
+ }
151
+
152
+ /**
153
+ * Event fired when an individual embedding model call (doEmbed) completes.
154
+ *
155
+ * Contains the embeddings, usage, and any warnings from the model response.
156
+ */
157
+ export interface EmbedFinishEvent {
158
+ /** Unique identifier for this embed call, used to correlate events. */
159
+ readonly callId: string;
160
+
161
+ /** Unique identifier for this individual doEmbed invocation, used to correlate start/finish within parallel chunks. */
162
+ readonly embedCallId: string;
163
+
164
+ /** Identifies the inner operation (e.g. 'ai.embed.doEmbed' or 'ai.embedMany.doEmbed'). */
165
+ readonly operationId: string;
166
+
167
+ /** The provider identifier. */
168
+ readonly provider: string;
169
+
170
+ /** The specific model identifier. */
171
+ readonly modelId: string;
172
+
173
+ /** The values that were embedded in this particular model call. */
174
+ readonly values: Array<string>;
175
+
176
+ /** The resulting embeddings from the model call. */
177
+ readonly embeddings: Array<Embedding>;
178
+
179
+ /** Token usage for this model call. */
180
+ readonly usage: EmbeddingModelUsage;
181
+ }
@@ -0,0 +1,53 @@
1
+ import { Embedding } from '../types';
2
+ import { EmbeddingModelUsage } from '../types/usage';
3
+ import { ProviderMetadata } from '../types';
4
+ import { Warning } from '../types/warning';
5
+
6
+ /**
7
+ * The result of an `embedMany` call.
8
+ * It contains the embeddings, the values, and additional information.
9
+ */
10
+ export interface EmbedManyResult {
11
+ /**
12
+ * The values that were embedded.
13
+ */
14
+ readonly values: Array<string>;
15
+
16
+ /**
17
+ * The embeddings. They are in the same order as the values.
18
+ */
19
+ readonly embeddings: Array<Embedding>;
20
+
21
+ /**
22
+ * The embedding token usage.
23
+ */
24
+ readonly usage: EmbeddingModelUsage;
25
+
26
+ /**
27
+ * Warnings for the call, e.g. unsupported settings.
28
+ */
29
+ readonly warnings: Array<Warning>;
30
+
31
+ /**
32
+ * Optional provider-specific metadata.
33
+ */
34
+ readonly providerMetadata?: ProviderMetadata;
35
+
36
+ /**
37
+ * Optional raw response data.
38
+ */
39
+ readonly responses?: Array<
40
+ | {
41
+ /**
42
+ * Response headers.
43
+ */
44
+ headers?: Record<string, string>;
45
+
46
+ /**
47
+ * The response body.
48
+ */
49
+ body?: unknown;
50
+ }
51
+ | undefined
52
+ >;
53
+ }