ai 6.0.31 → 6.0.32

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 (250) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/dist/internal/index.mjs +1 -1
  6. package/docs/00-introduction/index.mdx +76 -0
  7. package/docs/02-foundations/01-overview.mdx +43 -0
  8. package/docs/02-foundations/02-providers-and-models.mdx +163 -0
  9. package/docs/02-foundations/03-prompts.mdx +620 -0
  10. package/docs/02-foundations/04-tools.mdx +160 -0
  11. package/docs/02-foundations/05-streaming.mdx +62 -0
  12. package/docs/02-foundations/index.mdx +43 -0
  13. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  14. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  15. package/docs/02-getting-started/02-nextjs-app-router.mdx +556 -0
  16. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  17. package/docs/02-getting-started/04-svelte.mdx +627 -0
  18. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  19. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  20. package/docs/02-getting-started/07-expo.mdx +766 -0
  21. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  22. package/docs/02-getting-started/index.mdx +44 -0
  23. package/docs/03-agents/01-overview.mdx +96 -0
  24. package/docs/03-agents/02-building-agents.mdx +367 -0
  25. package/docs/03-agents/03-workflows.mdx +370 -0
  26. package/docs/03-agents/04-loop-control.mdx +350 -0
  27. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  28. package/docs/03-agents/index.mdx +40 -0
  29. package/docs/03-ai-sdk-core/01-overview.mdx +33 -0
  30. package/docs/03-ai-sdk-core/05-generating-text.mdx +600 -0
  31. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +662 -0
  32. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1102 -0
  33. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +375 -0
  34. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +144 -0
  35. package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
  36. package/docs/03-ai-sdk-core/30-embeddings.mdx +247 -0
  37. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  38. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  39. package/docs/03-ai-sdk-core/36-transcription.mdx +173 -0
  40. package/docs/03-ai-sdk-core/37-speech.mdx +167 -0
  41. package/docs/03-ai-sdk-core/40-middleware.mdx +480 -0
  42. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  43. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  44. package/docs/03-ai-sdk-core/55-testing.mdx +218 -0
  45. package/docs/03-ai-sdk-core/60-telemetry.mdx +313 -0
  46. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  47. package/docs/03-ai-sdk-core/index.mdx +88 -0
  48. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  49. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
  50. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  51. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  52. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  53. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  54. package/docs/04-ai-sdk-ui/05-completion.mdx +186 -0
  55. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  56. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  57. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  58. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  59. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  60. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  61. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +477 -0
  62. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  63. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  64. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  65. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  66. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  67. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  68. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +158 -0
  69. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  70. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +96 -0
  71. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  72. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  73. package/docs/05-ai-sdk-rsc/index.mdx +58 -0
  74. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  75. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  76. package/docs/06-advanced/03-backpressure.mdx +173 -0
  77. package/docs/06-advanced/04-caching.mdx +169 -0
  78. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  79. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  80. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +213 -0
  81. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  82. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  83. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  84. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  85. package/docs/06-advanced/index.mdx +11 -0
  86. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2142 -0
  87. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3215 -0
  88. package/docs/07-reference/01-ai-sdk-core/03-generate-object.mdx +780 -0
  89. package/docs/07-reference/01-ai-sdk-core/04-stream-object.mdx +1140 -0
  90. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +190 -0
  91. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +171 -0
  92. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  93. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +227 -0
  94. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +138 -0
  95. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +214 -0
  96. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +203 -0
  97. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +449 -0
  98. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +148 -0
  99. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +168 -0
  100. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +144 -0
  101. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +196 -0
  102. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +175 -0
  103. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +410 -0
  104. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  105. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  106. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  107. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +55 -0
  108. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  109. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +415 -0
  110. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -0
  111. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  112. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  113. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +182 -0
  114. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +121 -0
  115. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  116. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  117. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  118. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +46 -0
  119. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  120. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  121. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  122. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  123. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  124. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  125. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  126. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  128. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +43 -0
  129. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  130. package/docs/07-reference/01-ai-sdk-core/index.mdx +159 -0
  131. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +446 -0
  132. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +179 -0
  133. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +178 -0
  134. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +230 -0
  135. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  136. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +151 -0
  137. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +113 -0
  138. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +73 -0
  139. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  140. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  141. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  142. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  143. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  144. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  145. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  146. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  147. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +48 -0
  148. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +78 -0
  149. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  150. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  151. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  152. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  153. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  154. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  155. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +262 -0
  156. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  157. package/docs/07-reference/04-stream-helpers/01-ai-stream.mdx +89 -0
  158. package/docs/07-reference/04-stream-helpers/02-streaming-text-response.mdx +79 -0
  159. package/docs/07-reference/04-stream-helpers/05-stream-to-response.mdx +108 -0
  160. package/docs/07-reference/04-stream-helpers/07-openai-stream.mdx +77 -0
  161. package/docs/07-reference/04-stream-helpers/08-anthropic-stream.mdx +79 -0
  162. package/docs/07-reference/04-stream-helpers/09-aws-bedrock-stream.mdx +91 -0
  163. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-anthropic-stream.mdx +96 -0
  164. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-messages-stream.mdx +96 -0
  165. package/docs/07-reference/04-stream-helpers/11-aws-bedrock-cohere-stream.mdx +93 -0
  166. package/docs/07-reference/04-stream-helpers/12-aws-bedrock-llama-2-stream.mdx +93 -0
  167. package/docs/07-reference/04-stream-helpers/13-cohere-stream.mdx +78 -0
  168. package/docs/07-reference/04-stream-helpers/14-google-generative-ai-stream.mdx +85 -0
  169. package/docs/07-reference/04-stream-helpers/15-hugging-face-stream.mdx +84 -0
  170. package/docs/07-reference/04-stream-helpers/16-langchain-adapter.mdx +98 -0
  171. package/docs/07-reference/04-stream-helpers/16-llamaindex-adapter.mdx +70 -0
  172. package/docs/07-reference/04-stream-helpers/17-mistral-stream.mdx +81 -0
  173. package/docs/07-reference/04-stream-helpers/18-replicate-stream.mdx +83 -0
  174. package/docs/07-reference/04-stream-helpers/19-inkeep-stream.mdx +80 -0
  175. package/docs/07-reference/04-stream-helpers/index.mdx +103 -0
  176. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +30 -0
  177. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +27 -0
  178. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +25 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content.mdx +26 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +25 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +25 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +25 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +26 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  205. package/docs/07-reference/05-ai-sdk-errors/index.mdx +38 -0
  206. package/docs/07-reference/index.mdx +34 -0
  207. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  208. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  209. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  210. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  211. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  212. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  213. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  214. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  215. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  216. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  217. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  218. package/docs/08-migration-guides/index.mdx +22 -0
  219. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  220. package/docs/09-troubleshooting/02-client-side-function-calls-not-invoked.mdx +22 -0
  221. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  222. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  223. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  224. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  225. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  226. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  227. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  228. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  229. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  230. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  231. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  232. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  233. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  234. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  235. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  236. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  237. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  238. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  239. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  240. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  241. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  242. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  243. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  244. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +72 -0
  245. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  246. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  247. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  248. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  249. package/docs/09-troubleshooting/index.mdx +11 -0
  250. package/package.json +8 -4
@@ -0,0 +1,203 @@
1
+ ---
2
+ title: Agent (Interface)
3
+ description: API Reference for the Agent interface.
4
+ ---
5
+
6
+ # `Agent` (interface)
7
+
8
+ The `Agent` interface defines a contract for agents that can generate or stream AI-generated responses in response to prompts. Agents may encapsulate advanced logic such as tool usage, multi-step workflows, or prompt handling, enabling both simple and autonomous AI agents.
9
+
10
+ Implementations of the `Agent` interface—such as `ToolLoopAgent`—fulfill the same contract and integrate seamlessly with all SDK APIs and utilities that expect an agent. This design allows users to supply custom agent classes or wrappers for third-party chains, while maximizing compatibility with AI SDK features.
11
+
12
+ ## Interface Definition
13
+
14
+ ```ts
15
+ import { ModelMessage } from '@ai-sdk/provider-utils';
16
+ import { ToolSet } from '../generate-text/tool-set';
17
+ import { Output } from '../generate-text/output';
18
+ import { GenerateTextResult } from '../generate-text/generate-text-result';
19
+ import { StreamTextResult } from '../generate-text/stream-text-result';
20
+
21
+ export type AgentCallParameters<CALL_OPTIONS> = ([CALL_OPTIONS] extends [never]
22
+ ? { options?: never }
23
+ : { options: CALL_OPTIONS }) &
24
+ (
25
+ | {
26
+ /**
27
+ * A prompt. It can be either a text prompt or a list of messages.
28
+ *
29
+ * You can either use `prompt` or `messages` but not both.
30
+ */
31
+ prompt: string | Array<ModelMessage>;
32
+
33
+ /**
34
+ * A list of messages.
35
+ *
36
+ * You can either use `prompt` or `messages` but not both.
37
+ */
38
+ messages?: never;
39
+ }
40
+ | {
41
+ /**
42
+ * A list of messages.
43
+ *
44
+ * You can either use `prompt` or `messages` but not both.
45
+ */
46
+ messages: Array<ModelMessage>;
47
+
48
+ /**
49
+ * A prompt. It can be either a text prompt or a list of messages.
50
+ *
51
+ * You can either use `prompt` or `messages` but not both.
52
+ */
53
+ prompt?: never;
54
+ }
55
+ ) & {
56
+ /**
57
+ * Abort signal.
58
+ */
59
+ abortSignal?: AbortSignal;
60
+ /**
61
+ * Timeout in milliseconds. Can be specified as a number or as an object with a totalMs property.
62
+ * The call will be aborted if it takes longer than the specified timeout.
63
+ * Can be used alongside abortSignal.
64
+ */
65
+ timeout?: number | { totalMs?: number };
66
+ };
67
+
68
+ /**
69
+ * An Agent receives a prompt (text or messages) and generates or streams an output
70
+ * that consists of steps, tool calls, data parts, etc.
71
+ *
72
+ * You can implement your own Agent by implementing the `Agent` interface,
73
+ * or use the `ToolLoopAgent` class.
74
+ */
75
+ export interface Agent<
76
+ CALL_OPTIONS = never,
77
+ TOOLS extends ToolSet = {},
78
+ OUTPUT extends Output = never,
79
+ > {
80
+ /**
81
+ * The specification version of the agent interface. This will enable
82
+ * us to evolve the agent interface and retain backwards compatibility.
83
+ */
84
+ readonly version: 'agent-v1';
85
+
86
+ /**
87
+ * The id of the agent.
88
+ */
89
+ readonly id: string | undefined;
90
+
91
+ /**
92
+ * The tools that the agent can use.
93
+ */
94
+ readonly tools: TOOLS;
95
+
96
+ /**
97
+ * Generates an output from the agent (non-streaming).
98
+ */
99
+ generate(
100
+ options: AgentCallParameters<CALL_OPTIONS>,
101
+ ): PromiseLike<GenerateTextResult<TOOLS, OUTPUT>>;
102
+
103
+ /**
104
+ * Streams an output from the agent (streaming).
105
+ */
106
+ stream(
107
+ options: AgentCallParameters<CALL_OPTIONS>,
108
+ ): PromiseLike<StreamTextResult<TOOLS, OUTPUT>>;
109
+ }
110
+ ```
111
+
112
+ ## Core Properties & Methods
113
+
114
+ | Name | Type | Description |
115
+ | ------------ | ------------------------------------------------ | ------------------------------------------------------------------- |
116
+ | `version` | `'agent-v1'` | Interface version for compatibility. |
117
+ | `id` | `string \| undefined` | Optional agent identifier. |
118
+ | `tools` | `ToolSet` | The set of tools available to this agent. |
119
+ | `generate()` | `PromiseLike<GenerateTextResult<TOOLS, OUTPUT>>` | Generates full, non-streaming output for a text prompt or messages. |
120
+ | `stream()` | `PromiseLike<StreamTextResult<TOOLS, OUTPUT>>` | Streams output (chunks or steps) for a text prompt or messages. |
121
+
122
+ ## Generic Parameters
123
+
124
+ | Parameter | Default | Description |
125
+ | -------------- | ------- | -------------------------------------------------------------------------- |
126
+ | `CALL_OPTIONS` | `never` | Optional type for additional call options that can be passed to the agent. |
127
+ | `TOOLS` | `{}` | The type of the tool set available to this agent. |
128
+ | `OUTPUT` | `never` | The type of additional output data that the agent can produce. |
129
+
130
+ ## Method Parameters
131
+
132
+ Both `generate()` and `stream()` accept an `AgentCallParameters<CALL_OPTIONS>` object with:
133
+
134
+ - `prompt` (optional): A string prompt or array of `ModelMessage` objects
135
+ - `messages` (optional): An array of `ModelMessage` objects (mutually exclusive with `prompt`)
136
+ - `options` (optional): Additional call options when `CALL_OPTIONS` is not `never`
137
+ - `abortSignal` (optional): An `AbortSignal` to cancel the operation
138
+ - `timeout` (optional): A timeout in milliseconds. Can be specified as a number or as an object with a `totalMs` property. The call will be aborted if it takes longer than the specified timeout. Can be used alongside `abortSignal`.
139
+
140
+ ## Example: Custom Agent Implementation
141
+
142
+ Here's how you might implement your own Agent:
143
+
144
+ ```ts
145
+ import { Agent, GenerateTextResult, StreamTextResult } from 'ai';
146
+ import type { ModelMessage } from '@ai-sdk/provider-utils';
147
+
148
+ class MyEchoAgent implements Agent {
149
+ version = 'agent-v1' as const;
150
+ id = 'echo';
151
+ tools = {};
152
+
153
+ async generate({ prompt, messages, abortSignal }) {
154
+ const text = prompt ?? JSON.stringify(messages);
155
+ return { text, steps: [] };
156
+ }
157
+
158
+ async stream({ prompt, messages, abortSignal }) {
159
+ const text = prompt ?? JSON.stringify(messages);
160
+ return {
161
+ textStream: (async function* () {
162
+ yield text;
163
+ })(),
164
+ };
165
+ }
166
+ }
167
+ ```
168
+
169
+ ## Usage: Interacting with Agents
170
+
171
+ All SDK utilities that accept an agent—including [`createAgentUIStream`](/docs/reference/ai-sdk-core/create-agent-ui-stream), [`createAgentUIStreamResponse`](/docs/reference/ai-sdk-core/create-agent-ui-stream-response), and [`pipeAgentUIStreamToResponse`](/docs/reference/ai-sdk-core/pipe-agent-ui-stream-to-response)—expect an object adhering to the `Agent` interface.
172
+
173
+ You can use the official [`ToolLoopAgent`](/docs/reference/ai-sdk-core/tool-loop-agent) (recommended for multi-step AI workflows with tool use), or supply your own implementation:
174
+
175
+ ```ts
176
+ import { ToolLoopAgent, createAgentUIStream } from "ai";
177
+
178
+ const agent = new ToolLoopAgent({ ... });
179
+
180
+ const stream = await createAgentUIStream({
181
+ agent,
182
+ messages: [{ role: "user", content: "What is the weather in NYC?" }]
183
+ });
184
+
185
+ for await (const chunk of stream) {
186
+ console.log(chunk);
187
+ }
188
+ ```
189
+
190
+ ## See Also
191
+
192
+ - [`ToolLoopAgent`](/docs/reference/ai-sdk-core/tool-loop-agent) &mdash; Official multi-step agent implementation
193
+ - [`createAgentUIStream`](/docs/reference/ai-sdk-core/create-agent-ui-stream)
194
+ - [`GenerateTextResult`](/docs/reference/ai-sdk-core/generate-text)
195
+ - [`StreamTextResult`](/docs/reference/ai-sdk-core/stream-text)
196
+
197
+ ## Notes
198
+
199
+ - Agents should define their `tools` property, even if empty (`{}`), for compatibility with SDK utilities.
200
+ - The interface accepts both plain prompts and message arrays as input, but only one at a time.
201
+ - The `CALL_OPTIONS` generic parameter allows agents to accept additional call-specific options when needed.
202
+ - The `abortSignal` parameter enables cancellation of agent operations.
203
+ - This design is extensible for both complex autonomous agents and simple LLM wrappers.
@@ -0,0 +1,449 @@
1
+ ---
2
+ title: ToolLoopAgent
3
+ description: API Reference for the ToolLoopAgent class.
4
+ ---
5
+
6
+ # `ToolLoopAgent`
7
+
8
+ Creates a reusable AI agent capable of generating text, streaming responses, and using tools over multiple steps (a reasoning-and-acting loop). `ToolLoopAgent` is ideal for building autonomous, multi-step agents that can take actions, call tools, and reason over the results until a stop condition is reached.
9
+
10
+ Unlike single-step calls like `generateText()`, an agent can iteratively invoke tools, collect tool results, and decide next actions until completion or user approval is required.
11
+
12
+ ```ts
13
+ import { ToolLoopAgent } from 'ai';
14
+ __PROVIDER_IMPORT__;
15
+
16
+ const agent = new ToolLoopAgent({
17
+ model: __MODEL__,
18
+ instructions: 'You are a helpful assistant.',
19
+ tools: {
20
+ weather: weatherTool,
21
+ calculator: calculatorTool,
22
+ },
23
+ });
24
+
25
+ const result = await agent.generate({
26
+ prompt: 'What is the weather in NYC?',
27
+ });
28
+
29
+ console.log(result.text);
30
+ ```
31
+
32
+ To see `ToolLoopAgent` in action, check out [these examples](#examples).
33
+
34
+ ## Import
35
+
36
+ <Snippet text={`import { ToolLoopAgent } from "ai"`} prompt={false} />
37
+
38
+ ## Constructor
39
+
40
+ ### Parameters
41
+
42
+ <PropertiesTable
43
+ content={[
44
+ {
45
+ name: 'model',
46
+ type: 'LanguageModel',
47
+ isRequired: true,
48
+ description:
49
+ 'The language model instance to use (e.g., from a provider).',
50
+ },
51
+ {
52
+ name: 'instructions',
53
+ type: 'string | SystemModelMessage | SystemModelMessage[]',
54
+ isOptional: true,
55
+ description:
56
+ 'Instructions for the agent, usually used for system prompt/context.',
57
+ },
58
+ {
59
+ name: 'tools',
60
+ type: 'Record<string, Tool>',
61
+ isOptional: true,
62
+ description:
63
+ 'A set of tools the agent can call. Keys are tool names. Tools require the underlying model to support tool calling.',
64
+ },
65
+ {
66
+ name: 'toolChoice',
67
+ type: 'ToolChoice',
68
+ isOptional: true,
69
+ description:
70
+ "Tool call selection strategy. Options: 'auto' | 'none' | 'required' | { type: 'tool', toolName: string }. Default: 'auto'.",
71
+ },
72
+ {
73
+ name: 'stopWhen',
74
+ type: 'StopCondition | StopCondition[]',
75
+ isOptional: true,
76
+ description:
77
+ 'Condition(s) for ending the agent loop. Default: stepCountIs(20).',
78
+ },
79
+ {
80
+ name: 'activeTools',
81
+ type: 'Array<string>',
82
+ isOptional: true,
83
+ description:
84
+ 'Limits the subset of tools that are available in a specific call.',
85
+ },
86
+ {
87
+ name: 'output',
88
+ type: 'Output',
89
+ isOptional: true,
90
+ description:
91
+ 'Optional structured output specification, for parsing responses into typesafe data.',
92
+ },
93
+ {
94
+ name: 'prepareStep',
95
+ type: 'PrepareStepFunction',
96
+ isOptional: true,
97
+ description:
98
+ 'Optional function to mutate step settings or inject state for each agent step.',
99
+ },
100
+ {
101
+ name: 'experimental_repairToolCall',
102
+ type: 'ToolCallRepairFunction',
103
+ isOptional: true,
104
+ description:
105
+ 'Optional callback to attempt automatic recovery when a tool call cannot be parsed.',
106
+ },
107
+ {
108
+ name: 'onStepFinish',
109
+ type: 'GenerateTextOnStepFinishCallback',
110
+ isOptional: true,
111
+ description:
112
+ 'Callback invoked after each agent step (LLM/tool call) completes.',
113
+ },
114
+ {
115
+ name: 'onFinish',
116
+ type: 'ToolLoopAgentOnFinishCallback',
117
+ isOptional: true,
118
+ description:
119
+ 'Callback that is called when all agent steps are finished and the response is complete. Receives { steps, result, experimental_context }.',
120
+ },
121
+ {
122
+ name: 'experimental_context',
123
+ type: 'unknown',
124
+ isOptional: true,
125
+ description:
126
+ 'Experimental: Custom context object passed to each tool call.',
127
+ },
128
+ {
129
+ name: 'experimental_telemetry',
130
+ type: 'TelemetrySettings',
131
+ isOptional: true,
132
+ description: 'Experimental: Optional telemetry configuration.',
133
+ },
134
+ {
135
+ name: 'experimental_download',
136
+ type: 'DownloadFunction | undefined',
137
+ isOptional: true,
138
+ description:
139
+ 'Experimental: Custom download function for fetching files/URLs for tool or model use. By default, files are downloaded if the model does not support the URL for a given media type.',
140
+ },
141
+ {
142
+ name: 'maxOutputTokens',
143
+ type: 'number',
144
+ isOptional: true,
145
+ description: 'Maximum number of tokens the model is allowed to generate.',
146
+ },
147
+ {
148
+ name: 'temperature',
149
+ type: 'number',
150
+ isOptional: true,
151
+ description:
152
+ 'Sampling temperature, controls randomness. Passed through to the model.',
153
+ },
154
+ {
155
+ name: 'topP',
156
+ type: 'number',
157
+ isOptional: true,
158
+ description:
159
+ 'Top-p (nucleus) sampling parameter. Passed through to the model.',
160
+ },
161
+ {
162
+ name: 'topK',
163
+ type: 'number',
164
+ isOptional: true,
165
+ description: 'Top-k sampling parameter. Passed through to the model.',
166
+ },
167
+ {
168
+ name: 'presencePenalty',
169
+ type: 'number',
170
+ isOptional: true,
171
+ description: 'Presence penalty parameter. Passed through to the model.',
172
+ },
173
+ {
174
+ name: 'frequencyPenalty',
175
+ type: 'number',
176
+ isOptional: true,
177
+ description: 'Frequency penalty parameter. Passed through to the model.',
178
+ },
179
+ {
180
+ name: 'stopSequences',
181
+ type: 'string[]',
182
+ isOptional: true,
183
+ description:
184
+ 'Custom token sequences which stop the model output. Passed through to the model.',
185
+ },
186
+ {
187
+ name: 'seed',
188
+ type: 'number',
189
+ isOptional: true,
190
+ description: 'Seed for deterministic generation (if supported).',
191
+ },
192
+ {
193
+ name: 'maxRetries',
194
+ type: 'number',
195
+ isOptional: true,
196
+ description: 'How many times to retry on failure. Default: 2.',
197
+ },
198
+ {
199
+ name: 'providerOptions',
200
+ type: 'ProviderOptions',
201
+ isOptional: true,
202
+ description: 'Additional provider-specific configuration.',
203
+ },
204
+ {
205
+ name: 'id',
206
+ type: 'string',
207
+ isOptional: true,
208
+ description: 'Custom agent identifier.',
209
+ },
210
+ ]}
211
+ />
212
+
213
+ ## Methods
214
+
215
+ ### `generate()`
216
+
217
+ Generates a response and triggers tool calls as needed, running the agent loop and returning the final result. Returns a promise resolving to a `GenerateTextResult`.
218
+
219
+ ```ts
220
+ const result = await agent.generate({
221
+ prompt: 'What is the weather like?',
222
+ });
223
+ ```
224
+
225
+ <PropertiesTable
226
+ content={[
227
+ {
228
+ name: 'prompt',
229
+ type: 'string | Array<ModelMessage>',
230
+ description: 'A text prompt or message array.',
231
+ },
232
+ {
233
+ name: 'messages',
234
+ type: 'Array<ModelMessage>',
235
+ description: 'A full conversation history as a list of model messages.',
236
+ },
237
+ {
238
+ name: 'abortSignal',
239
+ type: 'AbortSignal',
240
+ isOptional: true,
241
+ description:
242
+ 'An optional abort signal that can be used to cancel the call.',
243
+ },
244
+ {
245
+ name: 'timeout',
246
+ type: 'number | { totalMs?: number }',
247
+ isOptional: true,
248
+ description:
249
+ 'Timeout in milliseconds. Can be specified as a number or as an object with a totalMs property. The call will be aborted if it takes longer than the specified timeout. Can be used alongside abortSignal.',
250
+ },
251
+ ]}
252
+ />
253
+
254
+ #### Returns
255
+
256
+ The `generate()` method returns a `GenerateTextResult` object (see [`generateText`](/docs/reference/ai-sdk-core/generate-text#returns) for details).
257
+
258
+ ### `stream()`
259
+
260
+ Streams a response from the agent, including agent reasoning and tool calls, as they occur. Returns a `StreamTextResult`.
261
+
262
+ ```ts
263
+ const stream = agent.stream({
264
+ prompt: 'Tell me a story about a robot.',
265
+ });
266
+
267
+ for await (const chunk of stream.textStream) {
268
+ console.log(chunk);
269
+ }
270
+ ```
271
+
272
+ <PropertiesTable
273
+ content={[
274
+ {
275
+ name: 'prompt',
276
+ type: 'string | Array<ModelMessage>',
277
+ description: 'A text prompt or message array.',
278
+ },
279
+ {
280
+ name: 'messages',
281
+ type: 'Array<ModelMessage>',
282
+ description: 'A full conversation history as a list of model messages.',
283
+ },
284
+ {
285
+ name: 'abortSignal',
286
+ type: 'AbortSignal',
287
+ isOptional: true,
288
+ description:
289
+ 'An optional abort signal that can be used to cancel the call.',
290
+ },
291
+ {
292
+ name: 'timeout',
293
+ type: 'number | { totalMs?: number }',
294
+ isOptional: true,
295
+ description:
296
+ 'Timeout in milliseconds. Can be specified as a number or as an object with a totalMs property. The call will be aborted if it takes longer than the specified timeout. Can be used alongside abortSignal.',
297
+ },
298
+ {
299
+ name: 'experimental_transform',
300
+ type: 'StreamTextTransform | Array<StreamTextTransform>',
301
+ isOptional: true,
302
+ description:
303
+ 'Optional stream transformation(s). They are applied in the order provided and must maintain the stream structure. See `streamText` docs for details.',
304
+ },
305
+ ]}
306
+ />
307
+
308
+ #### Returns
309
+
310
+ The `stream()` method returns a `StreamTextResult` object (see [`streamText`](/docs/reference/ai-sdk-core/stream-text#returns) for details).
311
+
312
+ ## Types
313
+
314
+ ### `InferAgentUIMessage`
315
+
316
+ Infers the UI message type for the given agent instance. Useful for type-safe UI and message exchanges.
317
+
318
+ #### Basic Example
319
+
320
+ ```ts
321
+ import { ToolLoopAgent, InferAgentUIMessage } from 'ai';
322
+
323
+ const weatherAgent = new ToolLoopAgent({
324
+ model: __MODEL__,
325
+ tools: { weather: weatherTool },
326
+ });
327
+
328
+ type WeatherAgentUIMessage = InferAgentUIMessage<typeof weatherAgent>;
329
+ ```
330
+
331
+ #### Example with Message Metadata
332
+
333
+ You can provide a second type argument to customize the metadata for each message. This is useful for tracking rich metadata returned by the agent (such as createdAt, tokens, finish reason, etc.).
334
+
335
+ ```ts
336
+ import { ToolLoopAgent, InferAgentUIMessage } from 'ai';
337
+ import { z } from 'zod';
338
+
339
+ // Example schema for message metadata
340
+ const exampleMetadataSchema = z.object({
341
+ createdAt: z.number().optional(),
342
+ model: z.string().optional(),
343
+ totalTokens: z.number().optional(),
344
+ finishReason: z.string().optional(),
345
+ });
346
+ type ExampleMetadata = z.infer<typeof exampleMetadataSchema>;
347
+
348
+ // Define agent as usual
349
+ const metadataAgent = new ToolLoopAgent({
350
+ model: __MODEL__,
351
+ // ...other options
352
+ });
353
+
354
+ // Type-safe UI message type with custom metadata
355
+ type MetadataAgentUIMessage = InferAgentUIMessage<
356
+ typeof metadataAgent,
357
+ ExampleMetadata
358
+ >;
359
+ ```
360
+
361
+ ## Examples
362
+
363
+ ### Basic Agent with Tools
364
+
365
+ ```ts
366
+ import { ToolLoopAgent, stepCountIs } from 'ai';
367
+ import { weatherTool, calculatorTool } from './tools';
368
+
369
+ const assistant = new ToolLoopAgent({
370
+ model: __MODEL__,
371
+ instructions: 'You are a helpful assistant.',
372
+ tools: {
373
+ weather: weatherTool,
374
+ calculator: calculatorTool,
375
+ },
376
+ stopWhen: stepCountIs(3),
377
+ });
378
+
379
+ const result = await assistant.generate({
380
+ prompt: 'What is the weather in NYC and what is 100 * 25?',
381
+ });
382
+
383
+ console.log(result.text);
384
+ console.log(result.steps); // Array of all steps taken by the agent
385
+ ```
386
+
387
+ ### Streaming Agent Response
388
+
389
+ ```ts
390
+ const agent = new ToolLoopAgent({
391
+ model: __MODEL__,
392
+ instructions: 'You are a creative storyteller.',
393
+ });
394
+
395
+ const stream = agent.stream({
396
+ prompt: 'Tell me a short story about a time traveler.',
397
+ });
398
+
399
+ for await (const chunk of stream.textStream) {
400
+ process.stdout.write(chunk);
401
+ }
402
+ ```
403
+
404
+ ### Agent with Output Parsing
405
+
406
+ ```ts
407
+ import { z } from 'zod';
408
+
409
+ const analysisAgent = new ToolLoopAgent({
410
+ model: __MODEL__,
411
+ output: {
412
+ schema: z.object({
413
+ sentiment: z.enum(['positive', 'negative', 'neutral']),
414
+ score: z.number(),
415
+ summary: z.string(),
416
+ }),
417
+ },
418
+ });
419
+
420
+ const result = await analysisAgent.generate({
421
+ prompt: 'Analyze this review: "The product exceeded my expectations!"',
422
+ });
423
+
424
+ console.log(result.output);
425
+ // Typed as { sentiment: 'positive' | 'negative' | 'neutral', score: number, summary: string }
426
+ ```
427
+
428
+ ### Example: Approved Tool Execution
429
+
430
+ ```ts
431
+ import { openai } from '@ai-sdk/openai';
432
+ import { ToolLoopAgent } from 'ai';
433
+
434
+ const agent = new ToolLoopAgent({
435
+ model: __MODEL__,
436
+ instructions: 'You are an agent with access to a weather API.',
437
+ tools: {
438
+ weather: openai.tools.weather({
439
+ /* ... */
440
+ }),
441
+ },
442
+ // Optionally require approval, etc.
443
+ });
444
+
445
+ const result = await agent.generate({
446
+ prompt: 'Is it raining in Paris today?',
447
+ });
448
+ console.log(result.text);
449
+ ```