@fairyhunter13/ai-sdk 6.0.116-fork.1

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 (534) hide show
  1. package/CHANGELOG.md +7582 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +6751 -0
  4. package/dist/index.d.ts +6751 -0
  5. package/dist/index.js +14155 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14127 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +324 -0
  10. package/dist/internal/index.d.ts +324 -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 +158 -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 +1144 -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 +246 -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 +1118 -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 +535 -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 +309 -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 +244 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +109 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +484 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +294 -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 +168 -0
  313. package/src/generate-text/create-stream-text-part-transform.ts +229 -0
  314. package/src/generate-text/execute-tool-call.ts +190 -0
  315. package/src/generate-text/extract-reasoning-content.ts +17 -0
  316. package/src/generate-text/extract-text-content.ts +15 -0
  317. package/src/generate-text/generate-text-result.ts +168 -0
  318. package/src/generate-text/generate-text.ts +1411 -0
  319. package/src/generate-text/generated-file.ts +70 -0
  320. package/src/generate-text/index.ts +74 -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-text-result.ts +536 -0
  334. package/src/generate-text/stream-text.ts +2693 -0
  335. package/src/generate-text/to-response-messages.ts +178 -0
  336. package/src/generate-text/tool-approval-request-output.ts +21 -0
  337. package/src/generate-text/tool-call-repair-function.ts +27 -0
  338. package/src/generate-text/tool-call.ts +47 -0
  339. package/src/generate-text/tool-error.ts +34 -0
  340. package/src/generate-text/tool-output-denied.ts +21 -0
  341. package/src/generate-text/tool-output.ts +7 -0
  342. package/src/generate-text/tool-result.ts +36 -0
  343. package/src/generate-text/tool-set.ts +14 -0
  344. package/src/generate-video/generate-video-result.ts +36 -0
  345. package/src/generate-video/generate-video.ts +402 -0
  346. package/src/generate-video/index.ts +3 -0
  347. package/src/global.ts +36 -0
  348. package/src/index.ts +49 -0
  349. package/src/logger/index.ts +6 -0
  350. package/src/logger/log-warnings.ts +140 -0
  351. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  352. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  353. package/src/middleware/default-settings-middleware.ts +33 -0
  354. package/src/middleware/extract-json-middleware.ts +197 -0
  355. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  356. package/src/middleware/index.ts +10 -0
  357. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  358. package/src/middleware/wrap-embedding-model.ts +89 -0
  359. package/src/middleware/wrap-image-model.ts +92 -0
  360. package/src/middleware/wrap-language-model.ts +108 -0
  361. package/src/middleware/wrap-provider.ts +51 -0
  362. package/src/model/as-embedding-model-v3.ts +24 -0
  363. package/src/model/as-embedding-model-v4.ts +25 -0
  364. package/src/model/as-image-model-v3.ts +24 -0
  365. package/src/model/as-image-model-v4.ts +21 -0
  366. package/src/model/as-language-model-v3.ts +103 -0
  367. package/src/model/as-language-model-v4.ts +25 -0
  368. package/src/model/as-provider-v3.ts +36 -0
  369. package/src/model/as-provider-v4.ts +47 -0
  370. package/src/model/as-reranking-model-v4.ts +16 -0
  371. package/src/model/as-speech-model-v3.ts +24 -0
  372. package/src/model/as-speech-model-v4.ts +21 -0
  373. package/src/model/as-transcription-model-v3.ts +24 -0
  374. package/src/model/as-transcription-model-v4.ts +25 -0
  375. package/src/model/as-video-model-v4.ts +19 -0
  376. package/src/model/resolve-model.ts +172 -0
  377. package/src/prompt/call-settings.ts +177 -0
  378. package/src/prompt/content-part.ts +236 -0
  379. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  380. package/src/prompt/create-tool-model-output.ts +34 -0
  381. package/src/prompt/data-content.ts +134 -0
  382. package/src/prompt/index.ts +27 -0
  383. package/src/prompt/invalid-data-content-error.ts +29 -0
  384. package/src/prompt/invalid-message-role-error.ts +27 -0
  385. package/src/prompt/message-conversion-error.ts +28 -0
  386. package/src/prompt/message.ts +72 -0
  387. package/src/prompt/prepare-call-settings.ts +110 -0
  388. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  389. package/src/prompt/prompt.ts +43 -0
  390. package/src/prompt/split-data-url.ts +17 -0
  391. package/src/prompt/standardize-prompt.ts +99 -0
  392. package/src/prompt/wrap-gateway-error.ts +29 -0
  393. package/src/registry/custom-provider.ts +210 -0
  394. package/src/registry/index.ts +7 -0
  395. package/src/registry/no-such-provider-error.ts +41 -0
  396. package/src/registry/provider-registry.ts +331 -0
  397. package/src/rerank/index.ts +2 -0
  398. package/src/rerank/rerank-result.ts +70 -0
  399. package/src/rerank/rerank.ts +239 -0
  400. package/src/telemetry/assemble-operation-name.ts +21 -0
  401. package/src/telemetry/get-base-telemetry-attributes.ts +55 -0
  402. package/src/telemetry/get-global-telemetry-integration.ts +110 -0
  403. package/src/telemetry/get-tracer.ts +20 -0
  404. package/src/telemetry/index.ts +4 -0
  405. package/src/telemetry/noop-tracer.ts +69 -0
  406. package/src/telemetry/open-telemetry-integration.ts +537 -0
  407. package/src/telemetry/record-span.ts +75 -0
  408. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  409. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  410. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  411. package/src/telemetry/telemetry-integration.ts +100 -0
  412. package/src/telemetry/telemetry-settings.ts +55 -0
  413. package/src/test/mock-embedding-model-v2.ts +35 -0
  414. package/src/test/mock-embedding-model-v3.ts +48 -0
  415. package/src/test/mock-embedding-model-v4.ts +48 -0
  416. package/src/test/mock-image-model-v2.ts +28 -0
  417. package/src/test/mock-image-model-v3.ts +28 -0
  418. package/src/test/mock-image-model-v4.ts +28 -0
  419. package/src/test/mock-language-model-v2.ts +72 -0
  420. package/src/test/mock-language-model-v3.ts +77 -0
  421. package/src/test/mock-language-model-v4.ts +77 -0
  422. package/src/test/mock-provider-v2.ts +68 -0
  423. package/src/test/mock-provider-v3.ts +80 -0
  424. package/src/test/mock-provider-v4.ts +80 -0
  425. package/src/test/mock-reranking-model-v3.ts +25 -0
  426. package/src/test/mock-reranking-model-v4.ts +25 -0
  427. package/src/test/mock-server-response.ts +69 -0
  428. package/src/test/mock-speech-model-v2.ts +24 -0
  429. package/src/test/mock-speech-model-v3.ts +24 -0
  430. package/src/test/mock-speech-model-v4.ts +24 -0
  431. package/src/test/mock-tracer.ts +156 -0
  432. package/src/test/mock-transcription-model-v2.ts +24 -0
  433. package/src/test/mock-transcription-model-v3.ts +24 -0
  434. package/src/test/mock-transcription-model-v4.ts +24 -0
  435. package/src/test/mock-values.ts +4 -0
  436. package/src/test/mock-video-model-v3.ts +28 -0
  437. package/src/test/mock-video-model-v4.ts +28 -0
  438. package/src/test/not-implemented.ts +3 -0
  439. package/src/text-stream/create-text-stream-response.ts +30 -0
  440. package/src/text-stream/index.ts +2 -0
  441. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  442. package/src/transcribe/index.ts +2 -0
  443. package/src/transcribe/transcribe-result.ts +60 -0
  444. package/src/transcribe/transcribe.ts +187 -0
  445. package/src/types/embedding-model-middleware.ts +15 -0
  446. package/src/types/embedding-model.ts +20 -0
  447. package/src/types/image-model-middleware.ts +15 -0
  448. package/src/types/image-model-response-metadata.ts +16 -0
  449. package/src/types/image-model.ts +19 -0
  450. package/src/types/index.ts +29 -0
  451. package/src/types/json-value.ts +15 -0
  452. package/src/types/language-model-middleware.ts +15 -0
  453. package/src/types/language-model-request-metadata.ts +6 -0
  454. package/src/types/language-model-response-metadata.ts +21 -0
  455. package/src/types/language-model.ts +106 -0
  456. package/src/types/provider-metadata.ts +16 -0
  457. package/src/types/provider.ts +55 -0
  458. package/src/types/reranking-model.ts +6 -0
  459. package/src/types/speech-model-response-metadata.ts +21 -0
  460. package/src/types/speech-model.ts +10 -0
  461. package/src/types/transcription-model-response-metadata.ts +16 -0
  462. package/src/types/transcription-model.ts +14 -0
  463. package/src/types/usage.ts +200 -0
  464. package/src/types/video-model-response-metadata.ts +28 -0
  465. package/src/types/video-model.ts +15 -0
  466. package/src/types/warning.ts +7 -0
  467. package/src/ui/call-completion-api.ts +157 -0
  468. package/src/ui/chat-transport.ts +83 -0
  469. package/src/ui/chat.ts +786 -0
  470. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  471. package/src/ui/convert-to-model-messages.ts +403 -0
  472. package/src/ui/default-chat-transport.ts +36 -0
  473. package/src/ui/direct-chat-transport.ts +117 -0
  474. package/src/ui/http-chat-transport.ts +273 -0
  475. package/src/ui/index.ts +76 -0
  476. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  477. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  478. package/src/ui/process-text-stream.ts +16 -0
  479. package/src/ui/process-ui-message-stream.ts +858 -0
  480. package/src/ui/text-stream-chat-transport.ts +23 -0
  481. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  482. package/src/ui/ui-messages.ts +602 -0
  483. package/src/ui/use-completion.ts +84 -0
  484. package/src/ui/validate-ui-messages.ts +521 -0
  485. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  486. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  487. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  488. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  489. package/src/ui-message-stream/index.ts +14 -0
  490. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  491. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  492. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  493. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  494. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  495. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  496. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  497. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  498. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  499. package/src/util/as-array.ts +3 -0
  500. package/src/util/async-iterable-stream.ts +94 -0
  501. package/src/util/consume-stream.ts +31 -0
  502. package/src/util/cosine-similarity.ts +46 -0
  503. package/src/util/create-resolvable-promise.ts +30 -0
  504. package/src/util/create-stitchable-stream.ts +112 -0
  505. package/src/util/data-url.ts +17 -0
  506. package/src/util/deep-partial.ts +84 -0
  507. package/src/util/detect-media-type.ts +226 -0
  508. package/src/util/download/create-download.ts +13 -0
  509. package/src/util/download/download-function.ts +45 -0
  510. package/src/util/download/download.ts +74 -0
  511. package/src/util/error-handler.ts +1 -0
  512. package/src/util/fix-json.ts +401 -0
  513. package/src/util/get-potential-start-index.ts +39 -0
  514. package/src/util/index.ts +12 -0
  515. package/src/util/is-deep-equal-data.ts +48 -0
  516. package/src/util/is-non-empty-object.ts +5 -0
  517. package/src/util/job.ts +1 -0
  518. package/src/util/log-v2-compatibility-warning.ts +21 -0
  519. package/src/util/merge-abort-signals.ts +43 -0
  520. package/src/util/merge-objects.ts +79 -0
  521. package/src/util/notify.ts +22 -0
  522. package/src/util/now.ts +4 -0
  523. package/src/util/parse-partial-json.ts +30 -0
  524. package/src/util/prepare-headers.ts +14 -0
  525. package/src/util/prepare-retries.ts +47 -0
  526. package/src/util/retry-error.ts +41 -0
  527. package/src/util/retry-with-exponential-backoff.ts +154 -0
  528. package/src/util/serial-job-executor.ts +36 -0
  529. package/src/util/simulate-readable-stream.ts +39 -0
  530. package/src/util/split-array.ts +20 -0
  531. package/src/util/value-of.ts +65 -0
  532. package/src/util/write-to-server-response.ts +49 -0
  533. package/src/version.ts +5 -0
  534. package/test.d.ts +1 -0
@@ -0,0 +1,244 @@
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 } 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<TOOLS>, 'abortSignal'> & {
61
+ /**
62
+ * The id of the agent.
63
+ */
64
+ id?: string;
65
+
66
+ /**
67
+ * The instructions for the agent.
68
+ *
69
+ * It can be a string, or, if you need to pass additional provider options (e.g. for caching), a `SystemModelMessage`.
70
+ */
71
+ instructions?: string | SystemModelMessage | Array<SystemModelMessage>;
72
+
73
+ /**
74
+ * The language model to use.
75
+ */
76
+ model: LanguageModel;
77
+
78
+ /**
79
+ * The tools that the model can call. The model needs to support calling tools.
80
+ */
81
+ tools?: TOOLS;
82
+
83
+ /**
84
+ * The tool choice strategy. Default: 'auto'.
85
+ */
86
+ toolChoice?: ToolChoice<NoInfer<TOOLS>>;
87
+
88
+ /**
89
+ * Condition for stopping the generation when there are tool results in the last step.
90
+ * When the condition is an array, any of the conditions can be met to stop the generation.
91
+ *
92
+ * @default stepCountIs(20)
93
+ */
94
+ stopWhen?:
95
+ | StopCondition<NoInfer<TOOLS>>
96
+ | Array<StopCondition<NoInfer<TOOLS>>>;
97
+
98
+ /**
99
+ * Optional telemetry configuration (experimental).
100
+ */
101
+ experimental_telemetry?: TelemetrySettings;
102
+
103
+ /**
104
+ * Limits the tools that are available for the model to call without
105
+ * changing the tool call and result types in the result.
106
+ */
107
+ activeTools?: Array<keyof NoInfer<TOOLS>>;
108
+
109
+ /**
110
+ * Optional specification for generating structured outputs.
111
+ */
112
+ output?: OUTPUT;
113
+
114
+ /**
115
+ * Optional function that you can use to provide different settings for a step.
116
+ */
117
+ prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;
118
+
119
+ /**
120
+ * A function that attempts to repair a tool call that failed to parse.
121
+ */
122
+ experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;
123
+
124
+ /**
125
+ * Callback that is called when the agent operation begins, before any LLM calls.
126
+ */
127
+ experimental_onStart?: ToolLoopAgentOnStartCallback<NoInfer<TOOLS>, OUTPUT>;
128
+
129
+ /**
130
+ * Callback that is called when a step (LLM call) begins, before the provider is called.
131
+ */
132
+ experimental_onStepStart?: ToolLoopAgentOnStepStartCallback<
133
+ NoInfer<TOOLS>,
134
+ OUTPUT
135
+ >;
136
+
137
+ /**
138
+ * Callback that is called before each tool execution begins.
139
+ */
140
+ experimental_onToolCallStart?: ToolLoopAgentOnToolCallStartCallback<
141
+ NoInfer<TOOLS>
142
+ >;
143
+
144
+ /**
145
+ * Callback that is called after each tool execution completes.
146
+ */
147
+ experimental_onToolCallFinish?: ToolLoopAgentOnToolCallFinishCallback<
148
+ NoInfer<TOOLS>
149
+ >;
150
+
151
+ /**
152
+ * Callback that is called when each step (LLM call) is finished, including intermediate steps.
153
+ */
154
+ onStepFinish?: ToolLoopAgentOnStepFinishCallback<NoInfer<TOOLS>>;
155
+
156
+ /**
157
+ * Callback that is called when all steps are finished and the response is complete.
158
+ */
159
+ onFinish?: ToolLoopAgentOnFinishCallback<NoInfer<TOOLS>>;
160
+
161
+ /**
162
+ * Additional provider-specific options. They are passed through
163
+ * to the provider from the AI SDK and enable provider-specific
164
+ * functionality that can be fully encapsulated in the provider.
165
+ */
166
+ providerOptions?: ProviderOptions;
167
+
168
+ /**
169
+ * Context that is passed into tool calls.
170
+ *
171
+ * Experimental (can break in patch releases).
172
+ *
173
+ * @default undefined
174
+ */
175
+ experimental_context?: unknown;
176
+
177
+ /**
178
+ * Custom download function to use for URLs.
179
+ *
180
+ * By default, files are downloaded if the model does not support the URL for the given media type.
181
+ */
182
+ experimental_download?: DownloadFunction | undefined;
183
+
184
+ /**
185
+ * The schema for the call options.
186
+ */
187
+ callOptionsSchema?: FlexibleSchema<CALL_OPTIONS>;
188
+
189
+ /**
190
+ * Prepare the parameters for the generateText or streamText call.
191
+ *
192
+ * You can use this to have templates based on call options.
193
+ */
194
+ prepareCall?: (
195
+ options: Omit<
196
+ AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>>,
197
+ 'onStepFinish'
198
+ > &
199
+ Pick<
200
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
201
+ | 'model'
202
+ | 'tools'
203
+ | 'maxOutputTokens'
204
+ | 'temperature'
205
+ | 'topP'
206
+ | 'topK'
207
+ | 'presencePenalty'
208
+ | 'frequencyPenalty'
209
+ | 'stopSequences'
210
+ | 'seed'
211
+ | 'headers'
212
+ | 'instructions'
213
+ | 'stopWhen'
214
+ | 'experimental_telemetry'
215
+ | 'activeTools'
216
+ | 'providerOptions'
217
+ | 'experimental_context'
218
+ | 'experimental_download'
219
+ >,
220
+ ) => MaybePromiseLike<
221
+ Pick<
222
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
223
+ | 'model'
224
+ | 'tools'
225
+ | 'maxOutputTokens'
226
+ | 'temperature'
227
+ | 'topP'
228
+ | 'topK'
229
+ | 'presencePenalty'
230
+ | 'frequencyPenalty'
231
+ | 'stopSequences'
232
+ | 'seed'
233
+ | 'headers'
234
+ | 'instructions'
235
+ | 'stopWhen'
236
+ | 'experimental_telemetry'
237
+ | 'activeTools'
238
+ | 'providerOptions'
239
+ | 'experimental_context'
240
+ | 'experimental_download'
241
+ > &
242
+ Omit<Prompt, 'system'>
243
+ >;
244
+ };
@@ -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,109 @@
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
+ }
@@ -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
+ }