ai 6.0.30 → 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 +13 -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 +7 -3
@@ -0,0 +1,96 @@
1
+ ---
2
+ title: Overview
3
+ description: Learn how to build agents with the AI SDK.
4
+ ---
5
+
6
+ # Agents
7
+
8
+ Agents are **large language models (LLMs)** that use **tools** in a **loop** to accomplish tasks.
9
+
10
+ These components work together:
11
+
12
+ - **LLMs** process input and decide the next action
13
+ - **Tools** extend capabilities beyond text generation (reading files, calling APIs, writing to databases)
14
+ - **Loop** orchestrates execution through:
15
+ - **Context management** - Maintaining conversation history and deciding what the model sees (input) at each step
16
+ - **Stopping conditions** - Determining when the loop (task) is complete
17
+
18
+ ## ToolLoopAgent Class
19
+
20
+ The ToolLoopAgent class handles these three components. Here's an agent that uses multiple tools in a loop to accomplish a task:
21
+
22
+ ```ts
23
+ import { ToolLoopAgent, stepCountIs, tool } from 'ai';
24
+ __PROVIDER_IMPORT__;
25
+ import { z } from 'zod';
26
+
27
+ const weatherAgent = new ToolLoopAgent({
28
+ model: __MODEL__,
29
+ tools: {
30
+ weather: tool({
31
+ description: 'Get the weather in a location (in Fahrenheit)',
32
+ inputSchema: z.object({
33
+ location: z.string().describe('The location to get the weather for'),
34
+ }),
35
+ execute: async ({ location }) => ({
36
+ location,
37
+ temperature: 72 + Math.floor(Math.random() * 21) - 10,
38
+ }),
39
+ }),
40
+ convertFahrenheitToCelsius: tool({
41
+ description: 'Convert temperature from Fahrenheit to Celsius',
42
+ inputSchema: z.object({
43
+ temperature: z.number().describe('Temperature in Fahrenheit'),
44
+ }),
45
+ execute: async ({ temperature }) => {
46
+ const celsius = Math.round((temperature - 32) * (5 / 9));
47
+ return { celsius };
48
+ },
49
+ }),
50
+ },
51
+ // Agent's default behavior is to stop after a maximum of 20 steps
52
+ // stopWhen: stepCountIs(20),
53
+ });
54
+
55
+ const result = await weatherAgent.generate({
56
+ prompt: 'What is the weather in San Francisco in celsius?',
57
+ });
58
+
59
+ console.log(result.text); // agent's final answer
60
+ console.log(result.steps); // steps taken by the agent
61
+ ```
62
+
63
+ The agent automatically:
64
+
65
+ 1. Calls the `weather` tool to get the temperature in Fahrenheit
66
+ 2. Calls `convertFahrenheitToCelsius` to convert it
67
+ 3. Generates a final text response with the result
68
+
69
+ The Agent class handles the loop, context management, and stopping conditions.
70
+
71
+ ## Why Use the Agent Class?
72
+
73
+ The Agent class is the recommended approach for building agents with the AI SDK because it:
74
+
75
+ - **Reduces boilerplate** - Manages loops and message arrays
76
+ - **Improves reusability** - Define once, use throughout your application
77
+ - **Simplifies maintenance** - Single place to update agent configuration
78
+
79
+ For most use cases, start with the Agent class. Use core functions (`generateText`, `streamText`) when you need explicit control over each step for complex structured workflows.
80
+
81
+ ## Structured Workflows
82
+
83
+ Agents are flexible and powerful, but non-deterministic. When you need reliable, repeatable outcomes with explicit control flow, use core functions with structured workflow patterns combining:
84
+
85
+ - Conditional statements for explicit branching
86
+ - Standard functions for reusable logic
87
+ - Error handling for robustness
88
+ - Explicit control flow for predictability
89
+
90
+ [Explore workflow patterns](/docs/agents/workflows) to learn more about building structured, reliable systems.
91
+
92
+ ## Next Steps
93
+
94
+ - **[Building Agents](/docs/agents/building-agents)** - Guide to creating agents with the Agent class
95
+ - **[Workflow Patterns](/docs/agents/workflows)** - Structured patterns using core functions for complex workflows
96
+ - **[Loop Control](/docs/agents/loop-control)** - Execution control with stopWhen and prepareStep
@@ -0,0 +1,367 @@
1
+ ---
2
+ title: Building Agents
3
+ description: Complete guide to creating agents with the Agent class.
4
+ ---
5
+
6
+ # Building Agents
7
+
8
+ The Agent class provides a structured way to encapsulate LLM configuration, tools, and behavior into reusable components. It handles the agent loop for you, allowing the LLM to call tools multiple times in sequence to accomplish complex tasks. Define agents once and use them across your application.
9
+
10
+ ## Why Use the ToolLoopAgent Class?
11
+
12
+ When building AI applications, you often need to:
13
+
14
+ - **Reuse configurations** - Same model settings, tools, and prompts across different parts of your application
15
+ - **Maintain consistency** - Ensure the same behavior and capabilities throughout your codebase
16
+ - **Simplify API routes** - Reduce boilerplate in your endpoints
17
+ - **Type safety** - Get full TypeScript support for your agent's tools and outputs
18
+
19
+ The ToolLoopAgent class provides a single place to define your agent's behavior.
20
+
21
+ ## Creating an Agent
22
+
23
+ Define an agent by instantiating the ToolLoopAgent class with your desired configuration:
24
+
25
+ ```ts
26
+ import { ToolLoopAgent } from 'ai';
27
+ __PROVIDER_IMPORT__;
28
+
29
+ const myAgent = new ToolLoopAgent({
30
+ model: __MODEL__,
31
+ instructions: 'You are a helpful assistant.',
32
+ tools: {
33
+ // Your tools here
34
+ },
35
+ });
36
+ ```
37
+
38
+ ## Configuration Options
39
+
40
+ The Agent class accepts all the same settings as `generateText` and `streamText`. Configure:
41
+
42
+ ### Model and System Instructions
43
+
44
+ ```ts
45
+ import { ToolLoopAgent } from 'ai';
46
+ __PROVIDER_IMPORT__;
47
+
48
+ const agent = new ToolLoopAgent({
49
+ model: __MODEL__,
50
+ instructions: 'You are an expert software engineer.',
51
+ });
52
+ ```
53
+
54
+ ### Tools
55
+
56
+ Provide tools that the agent can use to accomplish tasks:
57
+
58
+ ```ts
59
+ import { ToolLoopAgent, tool } from 'ai';
60
+ __PROVIDER_IMPORT__;
61
+ import { z } from 'zod';
62
+
63
+ const codeAgent = new ToolLoopAgent({
64
+ model: __MODEL__,
65
+ tools: {
66
+ runCode: tool({
67
+ description: 'Execute Python code',
68
+ inputSchema: z.object({
69
+ code: z.string(),
70
+ }),
71
+ execute: async ({ code }) => {
72
+ // Execute code and return result
73
+ return { output: 'Code executed successfully' };
74
+ },
75
+ }),
76
+ },
77
+ });
78
+ ```
79
+
80
+ ### Loop Control
81
+
82
+ By default, agents run for 20 steps (`stopWhen: stepCountIs(20)`). In each step, the model either generates text or calls a tool. If it generates text, the agent completes. If it calls a tool, the AI SDK executes that tool.
83
+
84
+ To let agents call multiple tools in sequence, configure `stopWhen` to allow more steps. After each tool execution, the agent triggers a new generation where the model can call another tool or generate text:
85
+
86
+ ```ts
87
+ import { ToolLoopAgent, stepCountIs } from 'ai';
88
+ __PROVIDER_IMPORT__;
89
+
90
+ const agent = new ToolLoopAgent({
91
+ model: __MODEL__,
92
+ stopWhen: stepCountIs(20), // Allow up to 20 steps
93
+ });
94
+ ```
95
+
96
+ Each step represents one generation (which results in either text or a tool call). The loop continues until:
97
+
98
+ - A finish reasoning other than tool-calls is returned, or
99
+ - A tool that is invoked does not have an execute function, or
100
+ - A tool call needs approval, or
101
+ - A stop condition is met
102
+
103
+ You can combine multiple conditions:
104
+
105
+ ```ts
106
+ import { ToolLoopAgent, stepCountIs } from 'ai';
107
+ __PROVIDER_IMPORT__;
108
+
109
+ const agent = new ToolLoopAgent({
110
+ model: __MODEL__,
111
+ stopWhen: [
112
+ stepCountIs(20), // Maximum 20 steps
113
+ yourCustomCondition(), // Custom logic for when to stop
114
+ ],
115
+ });
116
+ ```
117
+
118
+ Learn more about [loop control and stop conditions](/docs/agents/loop-control).
119
+
120
+ ### Tool Choice
121
+
122
+ Control how the agent uses tools:
123
+
124
+ ```ts
125
+ import { ToolLoopAgent } from 'ai';
126
+ __PROVIDER_IMPORT__;
127
+
128
+ const agent = new ToolLoopAgent({
129
+ model: __MODEL__,
130
+ tools: {
131
+ // your tools here
132
+ },
133
+ toolChoice: 'required', // Force tool use
134
+ // or toolChoice: 'none' to disable tools
135
+ // or toolChoice: 'auto' (default) to let the model decide
136
+ });
137
+ ```
138
+
139
+ You can also force the use of a specific tool:
140
+
141
+ ```ts
142
+ import { ToolLoopAgent } from 'ai';
143
+ __PROVIDER_IMPORT__;
144
+
145
+ const agent = new ToolLoopAgent({
146
+ model: __MODEL__,
147
+ tools: {
148
+ weather: weatherTool,
149
+ cityAttractions: attractionsTool,
150
+ },
151
+ toolChoice: {
152
+ type: 'tool',
153
+ toolName: 'weather', // Force the weather tool to be used
154
+ },
155
+ });
156
+ ```
157
+
158
+ ### Structured Output
159
+
160
+ Define structured output schemas:
161
+
162
+ ```ts
163
+ import { ToolLoopAgent, Output, stepCountIs } from 'ai';
164
+ __PROVIDER_IMPORT__;
165
+ import { z } from 'zod';
166
+
167
+ const analysisAgent = new ToolLoopAgent({
168
+ model: __MODEL__,
169
+ output: Output.object({
170
+ schema: z.object({
171
+ sentiment: z.enum(['positive', 'neutral', 'negative']),
172
+ summary: z.string(),
173
+ keyPoints: z.array(z.string()),
174
+ }),
175
+ }),
176
+ stopWhen: stepCountIs(10),
177
+ });
178
+
179
+ const { output } = await analysisAgent.generate({
180
+ prompt: 'Analyze customer feedback from the last quarter',
181
+ });
182
+ ```
183
+
184
+ ## Define Agent Behavior with System Instructions
185
+
186
+ System instructions define your agent's behavior, personality, and constraints. They set the context for all interactions and guide how the agent responds to user queries and uses tools.
187
+
188
+ ### Basic System Instructions
189
+
190
+ Set the agent's role and expertise:
191
+
192
+ ```ts
193
+ const agent = new ToolLoopAgent({
194
+ model: __MODEL__,
195
+ instructions:
196
+ 'You are an expert data analyst. You provide clear insights from complex data.',
197
+ });
198
+ ```
199
+
200
+ ### Detailed Behavioral Instructions
201
+
202
+ Provide specific guidelines for agent behavior:
203
+
204
+ ```ts
205
+ const codeReviewAgent = new ToolLoopAgent({
206
+ model: __MODEL__,
207
+ instructions: `You are a senior software engineer conducting code reviews.
208
+
209
+ Your approach:
210
+ - Focus on security vulnerabilities first
211
+ - Identify performance bottlenecks
212
+ - Suggest improvements for readability and maintainability
213
+ - Be constructive and educational in your feedback
214
+ - Always explain why something is an issue and how to fix it`,
215
+ });
216
+ ```
217
+
218
+ ### Constrain Agent Behavior
219
+
220
+ Set boundaries and ensure consistent behavior:
221
+
222
+ ```ts
223
+ const customerSupportAgent = new ToolLoopAgent({
224
+ model: __MODEL__,
225
+ instructions: `You are a customer support specialist for an e-commerce platform.
226
+
227
+ Rules:
228
+ - Never make promises about refunds without checking the policy
229
+ - Always be empathetic and professional
230
+ - If you don't know something, say so and offer to escalate
231
+ - Keep responses concise and actionable
232
+ - Never share internal company information`,
233
+ tools: {
234
+ checkOrderStatus,
235
+ lookupPolicy,
236
+ createTicket,
237
+ },
238
+ });
239
+ ```
240
+
241
+ ### Tool Usage Instructions
242
+
243
+ Guide how the agent should use available tools:
244
+
245
+ ```ts
246
+ const researchAgent = new ToolLoopAgent({
247
+ model: __MODEL__,
248
+ instructions: `You are a research assistant with access to search and document tools.
249
+
250
+ When researching:
251
+ 1. Always start with a broad search to understand the topic
252
+ 2. Use document analysis for detailed information
253
+ 3. Cross-reference multiple sources before drawing conclusions
254
+ 4. Cite your sources when presenting information
255
+ 5. If information conflicts, present both viewpoints`,
256
+ tools: {
257
+ webSearch,
258
+ analyzeDocument,
259
+ extractQuotes,
260
+ },
261
+ });
262
+ ```
263
+
264
+ ### Format and Style Instructions
265
+
266
+ Control the output format and communication style:
267
+
268
+ ```ts
269
+ const technicalWriterAgent = new ToolLoopAgent({
270
+ model: __MODEL__,
271
+ instructions: `You are a technical documentation writer.
272
+
273
+ Writing style:
274
+ - Use clear, simple language
275
+ - Avoid jargon unless necessary
276
+ - Structure information with headers and bullet points
277
+ - Include code examples where relevant
278
+ - Write in second person ("you" instead of "the user")
279
+
280
+ Always format responses in Markdown.`,
281
+ });
282
+ ```
283
+
284
+ ## Using an Agent
285
+
286
+ Once defined, you can use your agent in three ways:
287
+
288
+ ### Generate Text
289
+
290
+ Use `generate()` for one-time text generation:
291
+
292
+ ```ts
293
+ const result = await myAgent.generate({
294
+ prompt: 'What is the weather like?',
295
+ });
296
+
297
+ console.log(result.text);
298
+ ```
299
+
300
+ ### Stream Text
301
+
302
+ Use `stream()` for streaming responses:
303
+
304
+ ```ts
305
+ const stream = myAgent.stream({
306
+ prompt: 'Tell me a story',
307
+ });
308
+
309
+ for await (const chunk of stream.textStream) {
310
+ console.log(chunk);
311
+ }
312
+ ```
313
+
314
+ ### Respond to UI Messages
315
+
316
+ Use `createAgentUIStreamResponse()` to create API responses for client applications:
317
+
318
+ ```ts
319
+ // In your API route (e.g., app/api/chat/route.ts)
320
+ import { createAgentUIStreamResponse } from 'ai';
321
+
322
+ export async function POST(request: Request) {
323
+ const { messages } = await request.json();
324
+
325
+ return createAgentUIStreamResponse({
326
+ agent: myAgent,
327
+ messages,
328
+ });
329
+ }
330
+ ```
331
+
332
+ ## End-to-end Type Safety
333
+
334
+ You can infer types for your agent's `UIMessage`s:
335
+
336
+ ```ts
337
+ import { ToolLoopAgent, InferAgentUIMessage } from 'ai';
338
+
339
+ const myAgent = new ToolLoopAgent({
340
+ // ... configuration
341
+ });
342
+
343
+ // Infer the UIMessage type for UI components or persistence
344
+ export type MyAgentUIMessage = InferAgentUIMessage<typeof myAgent>;
345
+ ```
346
+
347
+ Use this type in your client components with `useChat`:
348
+
349
+ ```tsx filename="components/chat.tsx"
350
+ 'use client';
351
+
352
+ import { useChat } from '@ai-sdk/react';
353
+ import type { MyAgentUIMessage } from '@/agent/my-agent';
354
+
355
+ export function Chat() {
356
+ const { messages } = useChat<MyAgentUIMessage>();
357
+ // Full type safety for your messages and tools
358
+ }
359
+ ```
360
+
361
+ ## Next Steps
362
+
363
+ Now that you understand building agents, you can:
364
+
365
+ - Explore [workflow patterns](/docs/agents/workflows) for structured patterns using core functions
366
+ - Learn about [loop control](/docs/agents/loop-control) for advanced execution control
367
+ - See [manual loop examples](/cookbook/node/manual-agent-loop) for custom workflow implementations