@fondation-io/ai 7.0.0-beta.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/CHANGELOG.md +7687 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +7056 -0
  4. package/dist/index.d.ts +7056 -0
  5. package/dist/index.js +14607 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14578 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +303 -0
  10. package/dist/internal/index.d.ts +303 -0
  11. package/dist/internal/index.js +1352 -0
  12. package/dist/internal/index.js.map +1 -0
  13. package/dist/internal/index.mjs +1336 -0
  14. package/dist/internal/index.mjs.map +1 -0
  15. package/dist/test/index.d.mts +265 -0
  16. package/dist/test/index.d.ts +265 -0
  17. package/dist/test/index.js +509 -0
  18. package/dist/test/index.js.map +1 -0
  19. package/dist/test/index.mjs +472 -0
  20. package/dist/test/index.mjs.map +1 -0
  21. package/docs/00-introduction/index.mdx +76 -0
  22. package/docs/02-foundations/01-overview.mdx +43 -0
  23. package/docs/02-foundations/02-providers-and-models.mdx +160 -0
  24. package/docs/02-foundations/03-prompts.mdx +616 -0
  25. package/docs/02-foundations/04-tools.mdx +251 -0
  26. package/docs/02-foundations/05-streaming.mdx +62 -0
  27. package/docs/02-foundations/06-provider-options.mdx +345 -0
  28. package/docs/02-foundations/index.mdx +49 -0
  29. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  30. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  31. package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
  32. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  33. package/docs/02-getting-started/04-svelte.mdx +627 -0
  34. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  35. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  36. package/docs/02-getting-started/07-expo.mdx +766 -0
  37. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  38. package/docs/02-getting-started/09-coding-agents.mdx +179 -0
  39. package/docs/02-getting-started/index.mdx +44 -0
  40. package/docs/03-agents/01-overview.mdx +96 -0
  41. package/docs/03-agents/02-building-agents.mdx +449 -0
  42. package/docs/03-agents/03-workflows.mdx +386 -0
  43. package/docs/03-agents/04-loop-control.mdx +394 -0
  44. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  45. package/docs/03-agents/06-memory.mdx +222 -0
  46. package/docs/03-agents/06-subagents.mdx +362 -0
  47. package/docs/03-agents/index.mdx +46 -0
  48. package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
  49. package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
  50. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
  51. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1148 -0
  52. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
  53. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
  54. package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
  55. package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
  56. package/docs/03-ai-sdk-core/30-embeddings.mdx +236 -0
  57. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  58. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  59. package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
  60. package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
  61. package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
  62. package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
  63. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  64. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  65. package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
  66. package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
  67. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  68. package/docs/03-ai-sdk-core/65-event-listeners.mdx +1303 -0
  69. package/docs/03-ai-sdk-core/index.mdx +99 -0
  70. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  71. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
  72. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +534 -0
  73. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  74. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  75. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  76. package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
  77. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  78. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  79. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  80. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  81. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  82. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  83. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
  84. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  85. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  86. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  87. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  88. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  89. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  90. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
  91. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  92. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
  93. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  94. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  95. package/docs/05-ai-sdk-rsc/index.mdx +63 -0
  96. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  97. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  98. package/docs/06-advanced/03-backpressure.mdx +173 -0
  99. package/docs/06-advanced/04-caching.mdx +169 -0
  100. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  101. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  102. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
  103. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  104. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  105. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  106. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  107. package/docs/06-advanced/index.mdx +11 -0
  108. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
  109. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
  110. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
  111. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
  112. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +323 -0
  113. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
  114. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
  115. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
  116. package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
  117. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
  118. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
  119. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
  120. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
  121. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
  122. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
  123. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
  124. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
  125. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  126. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  128. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
  129. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  130. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
  131. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
  132. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  133. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  134. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
  135. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
  136. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  137. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  138. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  139. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
  140. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  141. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  142. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  143. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  144. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  145. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  146. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  147. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  148. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  149. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
  150. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  151. package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
  152. package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
  153. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
  154. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
  155. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
  156. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
  157. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  158. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
  159. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
  160. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
  161. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  162. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  163. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  164. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  165. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  166. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  167. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  168. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  169. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
  170. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
  171. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  172. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  173. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  174. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  175. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  176. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  177. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
  178. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  207. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  208. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  209. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  210. package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
  211. package/docs/07-reference/index.mdx +28 -0
  212. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  213. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
  214. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  215. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  216. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  217. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  218. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  219. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  220. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  221. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  222. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  223. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  224. package/docs/08-migration-guides/index.mdx +22 -0
  225. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  226. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  227. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  228. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  229. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  230. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  231. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  232. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  233. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  234. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  235. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  236. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  237. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  238. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  239. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  240. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  241. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  242. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  243. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  244. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  245. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  246. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  247. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  248. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  249. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
  250. package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
  251. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  252. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  253. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  254. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  255. package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
  256. package/docs/09-troubleshooting/index.mdx +11 -0
  257. package/internal.d.ts +1 -0
  258. package/package.json +120 -0
  259. package/src/agent/agent.ts +156 -0
  260. package/src/agent/create-agent-ui-stream-response.ts +61 -0
  261. package/src/agent/create-agent-ui-stream.ts +84 -0
  262. package/src/agent/index.ts +37 -0
  263. package/src/agent/infer-agent-tools.ts +7 -0
  264. package/src/agent/infer-agent-ui-message.ts +11 -0
  265. package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
  266. package/src/agent/tool-loop-agent-settings.ts +252 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +181 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +428 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +266 -0
  273. package/src/embed/index.ts +5 -0
  274. package/src/error/index.ts +37 -0
  275. package/src/error/invalid-argument-error.ts +34 -0
  276. package/src/error/invalid-stream-part-error.ts +28 -0
  277. package/src/error/invalid-tool-approval-error.ts +26 -0
  278. package/src/error/invalid-tool-input-error.ts +33 -0
  279. package/src/error/missing-tool-result-error.ts +28 -0
  280. package/src/error/no-image-generated-error.ts +39 -0
  281. package/src/error/no-object-generated-error.ts +70 -0
  282. package/src/error/no-output-generated-error.ts +26 -0
  283. package/src/error/no-speech-generated-error.ts +28 -0
  284. package/src/error/no-such-tool-error.ts +35 -0
  285. package/src/error/no-transcript-generated-error.ts +30 -0
  286. package/src/error/no-video-generated-error.ts +57 -0
  287. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  288. package/src/error/tool-call-repair-error.ts +30 -0
  289. package/src/error/ui-message-stream-error.ts +48 -0
  290. package/src/error/unsupported-model-version-error.ts +23 -0
  291. package/src/error/verify-no-object-generated-error.ts +27 -0
  292. package/src/generate-image/generate-image-result.ts +42 -0
  293. package/src/generate-image/generate-image.ts +361 -0
  294. package/src/generate-image/index.ts +18 -0
  295. package/src/generate-object/generate-object-result.ts +67 -0
  296. package/src/generate-object/generate-object.ts +514 -0
  297. package/src/generate-object/index.ts +9 -0
  298. package/src/generate-object/inject-json-instruction.ts +30 -0
  299. package/src/generate-object/output-strategy.ts +415 -0
  300. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  301. package/src/generate-object/repair-text.ts +12 -0
  302. package/src/generate-object/stream-object-result.ts +120 -0
  303. package/src/generate-object/stream-object.ts +984 -0
  304. package/src/generate-object/validate-object-generation-input.ts +144 -0
  305. package/src/generate-speech/generate-speech-result.ts +30 -0
  306. package/src/generate-speech/generate-speech.ts +191 -0
  307. package/src/generate-speech/generated-audio-file.ts +65 -0
  308. package/src/generate-speech/index.ts +3 -0
  309. package/src/generate-text/collect-tool-approvals.ts +116 -0
  310. package/src/generate-text/content-part.ts +31 -0
  311. package/src/generate-text/core-events.ts +390 -0
  312. package/src/generate-text/create-execute-tools-transformation.ts +144 -0
  313. package/src/generate-text/execute-tool-call.ts +190 -0
  314. package/src/generate-text/extract-reasoning-content.ts +17 -0
  315. package/src/generate-text/extract-text-content.ts +15 -0
  316. package/src/generate-text/generate-text-result.ts +168 -0
  317. package/src/generate-text/generate-text.ts +1445 -0
  318. package/src/generate-text/generated-file.ts +70 -0
  319. package/src/generate-text/index.ts +78 -0
  320. package/src/generate-text/invoke-tool-callbacks-from-stream.ts +81 -0
  321. package/src/generate-text/is-approval-needed.ts +29 -0
  322. package/src/generate-text/output-utils.ts +23 -0
  323. package/src/generate-text/output.ts +590 -0
  324. package/src/generate-text/parse-tool-call.ts +188 -0
  325. package/src/generate-text/prepare-step.ts +103 -0
  326. package/src/generate-text/prune-messages.ts +167 -0
  327. package/src/generate-text/reasoning-output.ts +99 -0
  328. package/src/generate-text/reasoning.ts +10 -0
  329. package/src/generate-text/response-message.ts +10 -0
  330. package/src/generate-text/smooth-stream.ts +162 -0
  331. package/src/generate-text/step-result.ts +310 -0
  332. package/src/generate-text/stop-condition.ts +29 -0
  333. package/src/generate-text/stream-model-call.ts +418 -0
  334. package/src/generate-text/stream-text-result.ts +536 -0
  335. package/src/generate-text/stream-text.ts +2696 -0
  336. package/src/generate-text/to-response-messages.ts +195 -0
  337. package/src/generate-text/tool-approval-request-output.ts +21 -0
  338. package/src/generate-text/tool-call-repair-function.ts +27 -0
  339. package/src/generate-text/tool-call.ts +47 -0
  340. package/src/generate-text/tool-error.ts +34 -0
  341. package/src/generate-text/tool-output-denied.ts +21 -0
  342. package/src/generate-text/tool-output.ts +7 -0
  343. package/src/generate-text/tool-result.ts +36 -0
  344. package/src/generate-text/tool-set.ts +14 -0
  345. package/src/generate-video/generate-video-result.ts +36 -0
  346. package/src/generate-video/generate-video.ts +402 -0
  347. package/src/generate-video/index.ts +3 -0
  348. package/src/global.ts +36 -0
  349. package/src/index.ts +49 -0
  350. package/src/logger/index.ts +6 -0
  351. package/src/logger/log-warnings.ts +140 -0
  352. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  353. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  354. package/src/middleware/default-settings-middleware.ts +33 -0
  355. package/src/middleware/extract-json-middleware.ts +197 -0
  356. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  357. package/src/middleware/index.ts +10 -0
  358. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  359. package/src/middleware/wrap-embedding-model.ts +89 -0
  360. package/src/middleware/wrap-image-model.ts +92 -0
  361. package/src/middleware/wrap-language-model.ts +108 -0
  362. package/src/middleware/wrap-provider.ts +51 -0
  363. package/src/model/as-embedding-model-v3.ts +24 -0
  364. package/src/model/as-embedding-model-v4.ts +25 -0
  365. package/src/model/as-image-model-v3.ts +24 -0
  366. package/src/model/as-image-model-v4.ts +21 -0
  367. package/src/model/as-language-model-v3.ts +103 -0
  368. package/src/model/as-language-model-v4.ts +25 -0
  369. package/src/model/as-provider-v3.ts +36 -0
  370. package/src/model/as-provider-v4.ts +47 -0
  371. package/src/model/as-reranking-model-v4.ts +16 -0
  372. package/src/model/as-speech-model-v3.ts +24 -0
  373. package/src/model/as-speech-model-v4.ts +21 -0
  374. package/src/model/as-transcription-model-v3.ts +24 -0
  375. package/src/model/as-transcription-model-v4.ts +25 -0
  376. package/src/model/as-video-model-v4.ts +19 -0
  377. package/src/model/resolve-model.ts +172 -0
  378. package/src/prompt/call-settings.ts +169 -0
  379. package/src/prompt/content-part.ts +236 -0
  380. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  381. package/src/prompt/create-tool-model-output.ts +34 -0
  382. package/src/prompt/data-content.ts +134 -0
  383. package/src/prompt/index.ts +27 -0
  384. package/src/prompt/invalid-data-content-error.ts +29 -0
  385. package/src/prompt/invalid-message-role-error.ts +27 -0
  386. package/src/prompt/message-conversion-error.ts +28 -0
  387. package/src/prompt/message.ts +72 -0
  388. package/src/prompt/prepare-call-settings.ts +110 -0
  389. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  390. package/src/prompt/prompt.ts +43 -0
  391. package/src/prompt/split-data-url.ts +17 -0
  392. package/src/prompt/standardize-prompt.ts +99 -0
  393. package/src/prompt/wrap-gateway-error.ts +29 -0
  394. package/src/registry/custom-provider.ts +210 -0
  395. package/src/registry/index.ts +7 -0
  396. package/src/registry/no-such-provider-error.ts +41 -0
  397. package/src/registry/provider-registry.ts +331 -0
  398. package/src/rerank/index.ts +8 -0
  399. package/src/rerank/rerank-events.ts +189 -0
  400. package/src/rerank/rerank-result.ts +70 -0
  401. package/src/rerank/rerank.ts +348 -0
  402. package/src/telemetry/assemble-operation-name.ts +21 -0
  403. package/src/telemetry/get-base-telemetry-attributes.ts +45 -0
  404. package/src/telemetry/get-global-telemetry-integration.ts +126 -0
  405. package/src/telemetry/get-tracer.ts +20 -0
  406. package/src/telemetry/index.ts +4 -0
  407. package/src/telemetry/noop-tracer.ts +69 -0
  408. package/src/telemetry/open-telemetry-integration.ts +875 -0
  409. package/src/telemetry/record-span.ts +75 -0
  410. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  411. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  412. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  413. package/src/telemetry/telemetry-integration.ts +139 -0
  414. package/src/telemetry/telemetry-settings.ts +55 -0
  415. package/src/test/mock-embedding-model-v2.ts +35 -0
  416. package/src/test/mock-embedding-model-v3.ts +48 -0
  417. package/src/test/mock-embedding-model-v4.ts +48 -0
  418. package/src/test/mock-image-model-v2.ts +28 -0
  419. package/src/test/mock-image-model-v3.ts +28 -0
  420. package/src/test/mock-image-model-v4.ts +28 -0
  421. package/src/test/mock-language-model-v2.ts +72 -0
  422. package/src/test/mock-language-model-v3.ts +77 -0
  423. package/src/test/mock-language-model-v4.ts +77 -0
  424. package/src/test/mock-provider-v2.ts +68 -0
  425. package/src/test/mock-provider-v3.ts +80 -0
  426. package/src/test/mock-provider-v4.ts +80 -0
  427. package/src/test/mock-reranking-model-v3.ts +25 -0
  428. package/src/test/mock-reranking-model-v4.ts +25 -0
  429. package/src/test/mock-server-response.ts +69 -0
  430. package/src/test/mock-speech-model-v2.ts +24 -0
  431. package/src/test/mock-speech-model-v3.ts +24 -0
  432. package/src/test/mock-speech-model-v4.ts +24 -0
  433. package/src/test/mock-tracer.ts +156 -0
  434. package/src/test/mock-transcription-model-v2.ts +24 -0
  435. package/src/test/mock-transcription-model-v3.ts +24 -0
  436. package/src/test/mock-transcription-model-v4.ts +24 -0
  437. package/src/test/mock-values.ts +4 -0
  438. package/src/test/mock-video-model-v3.ts +28 -0
  439. package/src/test/mock-video-model-v4.ts +28 -0
  440. package/src/test/not-implemented.ts +3 -0
  441. package/src/text-stream/create-text-stream-response.ts +30 -0
  442. package/src/text-stream/index.ts +2 -0
  443. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  444. package/src/transcribe/index.ts +2 -0
  445. package/src/transcribe/transcribe-result.ts +60 -0
  446. package/src/transcribe/transcribe.ts +187 -0
  447. package/src/types/embedding-model-middleware.ts +15 -0
  448. package/src/types/embedding-model.ts +20 -0
  449. package/src/types/image-model-middleware.ts +15 -0
  450. package/src/types/image-model-response-metadata.ts +16 -0
  451. package/src/types/image-model.ts +19 -0
  452. package/src/types/index.ts +29 -0
  453. package/src/types/json-value.ts +15 -0
  454. package/src/types/language-model-middleware.ts +15 -0
  455. package/src/types/language-model-request-metadata.ts +6 -0
  456. package/src/types/language-model-response-metadata.ts +21 -0
  457. package/src/types/language-model.ts +106 -0
  458. package/src/types/provider-metadata.ts +16 -0
  459. package/src/types/provider.ts +55 -0
  460. package/src/types/reranking-model.ts +6 -0
  461. package/src/types/speech-model-response-metadata.ts +21 -0
  462. package/src/types/speech-model.ts +10 -0
  463. package/src/types/transcription-model-response-metadata.ts +16 -0
  464. package/src/types/transcription-model.ts +14 -0
  465. package/src/types/usage.ts +200 -0
  466. package/src/types/video-model-response-metadata.ts +28 -0
  467. package/src/types/video-model.ts +15 -0
  468. package/src/types/warning.ts +7 -0
  469. package/src/ui/call-completion-api.ts +157 -0
  470. package/src/ui/chat-transport.ts +83 -0
  471. package/src/ui/chat.ts +786 -0
  472. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  473. package/src/ui/convert-to-model-messages.ts +403 -0
  474. package/src/ui/default-chat-transport.ts +36 -0
  475. package/src/ui/direct-chat-transport.ts +117 -0
  476. package/src/ui/http-chat-transport.ts +273 -0
  477. package/src/ui/index.ts +76 -0
  478. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  479. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  480. package/src/ui/process-text-stream.ts +16 -0
  481. package/src/ui/process-ui-message-stream.ts +858 -0
  482. package/src/ui/text-stream-chat-transport.ts +23 -0
  483. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  484. package/src/ui/ui-messages.ts +602 -0
  485. package/src/ui/use-completion.ts +84 -0
  486. package/src/ui/validate-ui-messages.ts +521 -0
  487. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  488. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  489. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  490. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  491. package/src/ui-message-stream/index.ts +14 -0
  492. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  493. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  494. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  495. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  496. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  497. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  498. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  499. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  500. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  501. package/src/util/as-array.ts +3 -0
  502. package/src/util/async-iterable-stream.ts +94 -0
  503. package/src/util/consume-stream.ts +31 -0
  504. package/src/util/cosine-similarity.ts +46 -0
  505. package/src/util/create-resolvable-promise.ts +30 -0
  506. package/src/util/create-stitchable-stream.ts +112 -0
  507. package/src/util/data-url.ts +17 -0
  508. package/src/util/deep-partial.ts +84 -0
  509. package/src/util/detect-media-type.ts +226 -0
  510. package/src/util/download/create-download.ts +13 -0
  511. package/src/util/download/download-function.ts +45 -0
  512. package/src/util/download/download.ts +74 -0
  513. package/src/util/error-handler.ts +1 -0
  514. package/src/util/fix-json.ts +401 -0
  515. package/src/util/get-potential-start-index.ts +39 -0
  516. package/src/util/index.ts +12 -0
  517. package/src/util/is-deep-equal-data.ts +48 -0
  518. package/src/util/is-non-empty-object.ts +5 -0
  519. package/src/util/job.ts +1 -0
  520. package/src/util/log-v2-compatibility-warning.ts +21 -0
  521. package/src/util/merge-abort-signals.ts +43 -0
  522. package/src/util/merge-objects.ts +79 -0
  523. package/src/util/notify.ts +22 -0
  524. package/src/util/now.ts +4 -0
  525. package/src/util/parse-partial-json.ts +30 -0
  526. package/src/util/prepare-headers.ts +14 -0
  527. package/src/util/prepare-retries.ts +47 -0
  528. package/src/util/retry-error.ts +41 -0
  529. package/src/util/retry-with-exponential-backoff.ts +154 -0
  530. package/src/util/serial-job-executor.ts +36 -0
  531. package/src/util/simulate-readable-stream.ts +39 -0
  532. package/src/util/split-array.ts +20 -0
  533. package/src/util/value-of.ts +65 -0
  534. package/src/util/write-to-server-response.ts +49 -0
  535. package/src/version.ts +5 -0
  536. package/test.d.ts +1 -0
@@ -0,0 +1,223 @@
1
+ ---
2
+ title: dynamicTool
3
+ description: Helper function for creating dynamic tools with unknown types
4
+ ---
5
+
6
+ # `dynamicTool()`
7
+
8
+ The `dynamicTool` function creates tools where the input and output types are not known at compile time. This is useful for scenarios such as:
9
+
10
+ - MCP (Model Context Protocol) tools without schemas
11
+ - User-defined functions loaded at runtime
12
+ - Tools loaded from external sources or databases
13
+ - Dynamic tool generation based on user input
14
+
15
+ Unlike the regular `tool` function, `dynamicTool` accepts and returns `unknown` types, allowing you to work with tools that have runtime-determined schemas.
16
+
17
+ ```ts highlight={"1,4,9,10,11"}
18
+ import { dynamicTool } from 'ai';
19
+ import { z } from 'zod';
20
+
21
+ export const customTool = dynamicTool({
22
+ description: 'Execute a custom user-defined function',
23
+ inputSchema: z.object({}),
24
+ // input is typed as 'unknown'
25
+ execute: async input => {
26
+ const { action, parameters } = input as any;
27
+
28
+ // Execute your dynamic logic
29
+ return {
30
+ result: `Executed ${action} with ${JSON.stringify(parameters)}`,
31
+ };
32
+ },
33
+ });
34
+ ```
35
+
36
+ ## Import
37
+
38
+ <Snippet text={`import { dynamicTool } from "ai"`} prompt={false} />
39
+
40
+ ## API Signature
41
+
42
+ ### Parameters
43
+
44
+ <PropertiesTable
45
+ content={[
46
+ {
47
+ name: 'tool',
48
+ type: 'Object',
49
+ description: 'The dynamic tool definition.',
50
+ properties: [
51
+ {
52
+ type: 'Object',
53
+ parameters: [
54
+ {
55
+ name: 'description',
56
+ isOptional: true,
57
+ type: 'string',
58
+ description:
59
+ 'Information about the purpose of the tool including details on how and when it can be used by the model.'
60
+ },
61
+ {
62
+ name: 'title',
63
+ isOptional: true,
64
+ type: 'string',
65
+ description:
66
+ 'A human-readable title for the tool.'
67
+ },
68
+ {
69
+ name: 'needsApproval',
70
+ isOptional: true,
71
+ type: 'boolean | ((options: { args: unknown }) => boolean | Promise<boolean>)',
72
+ description:
73
+ 'Whether the tool needs user approval before execution. Can be a boolean or a function that receives the tool arguments and returns a boolean.'
74
+ },
75
+ {
76
+ name: 'inputSchema',
77
+ type: 'FlexibleSchema<unknown>',
78
+ description:
79
+ 'The schema of the input that the tool expects. While the type is unknown, a schema is still required for validation. You can use Zod schemas with z.unknown() or z.any() for fully dynamic inputs.'
80
+ },
81
+ {
82
+ name: 'execute',
83
+ type: 'ToolExecuteFunction<unknown, unknown>',
84
+ description:
85
+ 'An async function that is called with the arguments from the tool call. The input is typed as unknown and must be validated/cast at runtime.',
86
+ properties: [
87
+ {
88
+ type: "ToolExecutionOptions",
89
+ parameters: [
90
+ {
91
+ name: 'toolCallId',
92
+ type: 'string',
93
+ description: 'The ID of the tool call.',
94
+ },
95
+ {
96
+ name: "messages",
97
+ type: "ModelMessage[]",
98
+ description: "Messages that were sent to the language model."
99
+ },
100
+ {
101
+ name: "abortSignal",
102
+ type: "AbortSignal",
103
+ isOptional: true,
104
+ description: "An optional abort signal."
105
+ },
106
+ {
107
+ name: "experimental_context",
108
+ type: "unknown",
109
+ isOptional: true,
110
+ description: "Context that is passed into tool execution. Experimental (can break in patch releases)."
111
+ }
112
+ ]
113
+ }
114
+ ]
115
+ },
116
+ {
117
+ name: 'outputSchema',
118
+ isOptional: true,
119
+ type: 'Zod Schema | JSON Schema',
120
+ description:
121
+ 'The schema of the output that the tool produces. Used for validation and type inference.'
122
+ },
123
+ {
124
+ name: 'toModelOutput',
125
+ isOptional: true,
126
+ type: '({toolCallId: string; input: unknown; output: unknown}) => ToolResultOutput | PromiseLike<ToolResultOutput>',
127
+ description: 'Optional conversion function that maps the tool result to an output that can be used by the language model.'
128
+ },
129
+ {
130
+ name: 'onInputStart',
131
+ isOptional: true,
132
+ type: '(options: ToolExecutionOptions) => void | PromiseLike<void>',
133
+ description:
134
+ 'Optional function that is called when the argument streaming starts. Only called when the tool is used in a streaming context.'
135
+ },
136
+ {
137
+ name: 'onInputDelta',
138
+ isOptional: true,
139
+ type: '(options: { inputTextDelta: string } & ToolExecutionOptions) => void | PromiseLike<void>',
140
+ description:
141
+ 'Optional function that is called when an argument streaming delta is available. Only called when the tool is used in a streaming context.'
142
+ },
143
+ {
144
+ name: 'onInputAvailable',
145
+ isOptional: true,
146
+ type: '(options: { input: unknown } & ToolExecutionOptions) => void | PromiseLike<void>',
147
+ description:
148
+ 'Optional function that is called when a tool call can be started, even if the execute function is not provided.'
149
+ },
150
+ {
151
+ name: 'providerOptions',
152
+ isOptional: true,
153
+ type: 'ProviderOptions',
154
+ description: 'Additional provider-specific metadata.'
155
+ }
156
+ ]
157
+ }
158
+ ]
159
+ }
160
+
161
+ ]}
162
+ />
163
+
164
+ ### Returns
165
+
166
+ A `Tool<unknown, unknown>` with `type: 'dynamic'` that can be used with `generateText`, `streamText`, and other AI SDK functions.
167
+
168
+ ## Type-Safe Usage
169
+
170
+ When using dynamic tools alongside static tools, you need to check the `dynamic` flag for proper type narrowing:
171
+
172
+ ```ts
173
+ const result = await generateText({
174
+ model: __MODEL__,
175
+ tools: {
176
+ // Static tool with known types
177
+ weather: weatherTool,
178
+ // Dynamic tool with unknown types
179
+ custom: dynamicTool({
180
+ /* ... */
181
+ }),
182
+ },
183
+ onStepFinish: ({ toolCalls, toolResults }) => {
184
+ for (const toolCall of toolCalls) {
185
+ if (toolCall.dynamic) {
186
+ // Dynamic tool: input/output are 'unknown'
187
+ console.log('Dynamic tool:', toolCall.toolName);
188
+ console.log('Input:', toolCall.input);
189
+ continue;
190
+ }
191
+
192
+ // Static tools have full type inference
193
+ switch (toolCall.toolName) {
194
+ case 'weather':
195
+ // TypeScript knows the exact types
196
+ console.log(toolCall.input.location); // string
197
+ break;
198
+ }
199
+ }
200
+ },
201
+ });
202
+ ```
203
+
204
+ ## Usage with `useChat`
205
+
206
+ When used with useChat (`UIMessage` format), dynamic tools appear as `dynamic-tool` parts:
207
+
208
+ ```tsx
209
+ {
210
+ message.parts.map(part => {
211
+ switch (part.type) {
212
+ case 'dynamic-tool':
213
+ return (
214
+ <div>
215
+ <h4>Tool: {part.toolName}</h4>
216
+ <pre>{JSON.stringify(part.input, null, 2)}</pre>
217
+ </div>
218
+ );
219
+ // ... handle other part types
220
+ }
221
+ });
222
+ }
223
+ ```
@@ -0,0 +1,423 @@
1
+ ---
2
+ title: createMCPClient
3
+ description: Create a client for connecting to MCP servers
4
+ ---
5
+
6
+ # `createMCPClient()`
7
+
8
+ Creates a lightweight Model Context Protocol (MCP) client that connects to an MCP server. The client provides:
9
+
10
+ - **Tools**: Automatic conversion between MCP tools and AI SDK tools
11
+ - **Resources**: Methods to list, read, and discover resource templates from MCP servers
12
+ - **Prompts**: Methods to list available prompts and retrieve prompt messages
13
+ - **Elicitation**: Support for handling server requests for additional input during tool execution
14
+
15
+ It currently does not support accepting notifications from an MCP server, and custom configuration of the client.
16
+
17
+ ## Import
18
+
19
+ <Snippet
20
+ text={`import { createMCPClient } from "@ai-sdk/mcp"`}
21
+ prompt={false}
22
+ />
23
+
24
+ ## API Signature
25
+
26
+ ### Parameters
27
+
28
+ <PropertiesTable
29
+ content={[
30
+ {
31
+ name: 'config',
32
+ type: 'MCPClientConfig',
33
+ description: 'Configuration for the MCP client.',
34
+ properties: [
35
+ {
36
+ type: 'MCPClientConfig',
37
+ parameters: [
38
+ {
39
+ name: 'transport',
40
+ type: 'MCPTransportConfig | MCPTransport',
41
+ description: 'Configuration for the message transport layer.',
42
+ properties: [
43
+ {
44
+ type: 'MCPTransport',
45
+ description:
46
+ 'A client transport instance, used explicitly for stdio or custom transports',
47
+ parameters: [
48
+ {
49
+ name: 'start',
50
+ type: '() => Promise<void>',
51
+ description: 'A method that starts the transport',
52
+ },
53
+ {
54
+ name: 'send',
55
+ type: '(message: JSONRPCMessage) => Promise<void>',
56
+ description:
57
+ 'A method that sends a message through the transport',
58
+ },
59
+ {
60
+ name: 'close',
61
+ type: '() => Promise<void>',
62
+ description: 'A method that closes the transport',
63
+ },
64
+ {
65
+ name: 'onclose',
66
+ type: '() => void',
67
+ description:
68
+ 'A method that is called when the transport is closed',
69
+ },
70
+ {
71
+ name: 'onerror',
72
+ type: '(error: Error) => void',
73
+ description:
74
+ 'A method that is called when the transport encounters an error',
75
+ },
76
+ {
77
+ name: 'onmessage',
78
+ type: '(message: JSONRPCMessage) => void',
79
+ description:
80
+ 'A method that is called when the transport receives a message',
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ type: 'MCPTransportConfig',
86
+ parameters: [
87
+ {
88
+ name: 'type',
89
+ type: "'sse' | 'http",
90
+ description: 'Use Server-Sent Events for communication',
91
+ },
92
+ {
93
+ name: 'url',
94
+ type: 'string',
95
+ description: 'URL of the MCP server',
96
+ },
97
+ {
98
+ name: 'headers',
99
+ type: 'Record<string, string>',
100
+ isOptional: true,
101
+ description:
102
+ 'Additional HTTP headers to be sent with requests.',
103
+ },
104
+ {
105
+ name: 'authProvider',
106
+ type: 'OAuthClientProvider',
107
+ isOptional: true,
108
+ description:
109
+ 'Optional OAuth provider for authorization to access protected remote MCP servers.',
110
+ },
111
+ {
112
+ name: 'redirect',
113
+ type: "'follow' | 'error'",
114
+ isOptional: true,
115
+ description:
116
+ "Controls how HTTP redirects are handled for transport requests. Set to 'follow' to allow redirect responses. Defaults to 'error' to reject any redirect response, preventing servers from redirecting requests to unintended hosts.",
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ name: 'name',
124
+ type: 'string',
125
+ isOptional: true,
126
+ description: 'Client name. Defaults to "ai-sdk-mcp-client"',
127
+ },
128
+ {
129
+ name: 'version',
130
+ type: 'string',
131
+ isOptional: true,
132
+ description: 'Client version. Defaults to "1.0.0"',
133
+ },
134
+ {
135
+ name: 'onUncaughtError',
136
+ type: '(error: unknown) => void',
137
+ isOptional: true,
138
+ description: 'Handler for uncaught errors',
139
+ },
140
+ {
141
+ name: 'capabilities',
142
+ type: 'ClientCapabilities',
143
+ isOptional: true,
144
+ description:
145
+ 'Optional client capabilities to advertise during initialization. For example, set { elicitation: {} } to enable handling elicitation requests from the server.',
146
+ },
147
+ ],
148
+ },
149
+ ],
150
+ },
151
+ ]}
152
+ />
153
+
154
+ ### Returns
155
+
156
+ Returns a Promise that resolves to an `MCPClient` with the following methods:
157
+
158
+ <PropertiesTable
159
+ content={[
160
+ {
161
+ name: 'tools',
162
+ type: `async (options?: {
163
+ schemas?: TOOL_SCHEMAS
164
+ }) => Promise<McpToolSet<TOOL_SCHEMAS>>`,
165
+ description: 'Gets the tools available from the MCP server.',
166
+ properties: [
167
+ {
168
+ type: 'options',
169
+ parameters: [
170
+ {
171
+ name: 'schemas',
172
+ type: 'TOOL_SCHEMAS',
173
+ isOptional: true,
174
+ description:
175
+ 'Schema definitions for compile-time type checking. When not provided, schemas are inferred from the server. Each tool schema can include inputSchema for typed inputs, and optionally outputSchema for typed outputs when the server returns structuredContent.',
176
+ },
177
+ ],
178
+ },
179
+ {
180
+ type: 'TOOL_SCHEMAS',
181
+ parameters: [
182
+ {
183
+ name: 'inputSchema',
184
+ type: 'FlexibleSchema',
185
+ description:
186
+ 'Zod schema or JSON schema defining the expected input parameters for the tool.',
187
+ },
188
+ {
189
+ name: 'outputSchema',
190
+ type: 'FlexibleSchema',
191
+ isOptional: true,
192
+ description:
193
+ 'Zod schema or JSON schema defining the expected output structure. When provided, the client extracts and validates structuredContent from tool results, giving you typed outputs.',
194
+ },
195
+ ],
196
+ },
197
+ ],
198
+ },
199
+ {
200
+ name: 'listResources',
201
+ type: `async (options?: {
202
+ params?: PaginatedRequest['params'];
203
+ options?: RequestOptions;
204
+ }) => Promise<ListResourcesResult>`,
205
+ description: 'Lists all available resources from the MCP server.',
206
+ properties: [
207
+ {
208
+ type: 'options',
209
+ parameters: [
210
+ {
211
+ name: 'params',
212
+ type: "PaginatedRequest['params']",
213
+ isOptional: true,
214
+ description: 'Optional pagination parameters including cursor.',
215
+ },
216
+ {
217
+ name: 'options',
218
+ type: 'RequestOptions',
219
+ isOptional: true,
220
+ description:
221
+ 'Optional request options including signal and timeout.',
222
+ },
223
+ ],
224
+ },
225
+ ],
226
+ },
227
+ {
228
+ name: 'readResource',
229
+ type: `async (args: {
230
+ uri: string;
231
+ options?: RequestOptions;
232
+ }) => Promise<ReadResourceResult>`,
233
+ description: 'Reads the contents of a specific resource by URI.',
234
+ properties: [
235
+ {
236
+ type: 'args',
237
+ parameters: [
238
+ {
239
+ name: 'uri',
240
+ type: 'string',
241
+ description: 'The URI of the resource to read.',
242
+ },
243
+ {
244
+ name: 'options',
245
+ type: 'RequestOptions',
246
+ isOptional: true,
247
+ description:
248
+ 'Optional request options including signal and timeout.',
249
+ },
250
+ ],
251
+ },
252
+ ],
253
+ },
254
+ {
255
+ name: 'listResourceTemplates',
256
+ type: `async (options?: {
257
+ options?: RequestOptions;
258
+ }) => Promise<ListResourceTemplatesResult>`,
259
+ description:
260
+ 'Lists all available resource templates from the MCP server.',
261
+ properties: [
262
+ {
263
+ type: 'options',
264
+ parameters: [
265
+ {
266
+ name: 'options',
267
+ type: 'RequestOptions',
268
+ isOptional: true,
269
+ description:
270
+ 'Optional request options including signal and timeout.',
271
+ },
272
+ ],
273
+ },
274
+ ],
275
+ },
276
+ {
277
+ name: 'experimental_listPrompts',
278
+ type: `async (options?: {
279
+ params?: PaginatedRequest['params'];
280
+ options?: RequestOptions;
281
+ }) => Promise<ListPromptsResult>`,
282
+ description:
283
+ 'Lists available prompts from the MCP server. This method is experimental and may change in the future.',
284
+ properties: [
285
+ {
286
+ type: 'options',
287
+ parameters: [
288
+ {
289
+ name: 'params',
290
+ type: "PaginatedRequest['params']",
291
+ isOptional: true,
292
+ description: 'Optional pagination parameters including cursor.',
293
+ },
294
+ {
295
+ name: 'options',
296
+ type: 'RequestOptions',
297
+ isOptional: true,
298
+ description:
299
+ 'Optional request options including signal and timeout.',
300
+ },
301
+ ],
302
+ },
303
+ ],
304
+ },
305
+ {
306
+ name: 'experimental_getPrompt',
307
+ type: `async (args: {
308
+ name: string;
309
+ arguments?: Record<string, unknown>;
310
+ options?: RequestOptions;
311
+ }) => Promise<GetPromptResult>`,
312
+ description:
313
+ 'Retrieves a prompt by name, optionally passing arguments. This method is experimental and may change in the future.',
314
+ properties: [
315
+ {
316
+ type: 'args',
317
+ parameters: [
318
+ {
319
+ name: 'name',
320
+ type: 'string',
321
+ description: 'Prompt name to retrieve.',
322
+ },
323
+ {
324
+ name: 'arguments',
325
+ type: 'Record<string, unknown>',
326
+ isOptional: true,
327
+ description: 'Optional arguments to fill into the prompt.',
328
+ },
329
+ {
330
+ name: 'options',
331
+ type: 'RequestOptions',
332
+ isOptional: true,
333
+ description:
334
+ 'Optional request options including signal and timeout.',
335
+ },
336
+ ],
337
+ },
338
+ ],
339
+ },
340
+ {
341
+ name: 'onElicitationRequest',
342
+ type: `(
343
+ schema: typeof ElicitationRequestSchema,
344
+ handler: (request: ElicitationRequest) => Promise<ElicitResult> | ElicitResult
345
+ ) => void`,
346
+ description:
347
+ 'Registers a handler for elicitation requests from the MCP server. The handler receives requests when the server needs additional input during tool execution.',
348
+ properties: [
349
+ {
350
+ type: 'parameters',
351
+ parameters: [
352
+ {
353
+ name: 'schema',
354
+ type: 'typeof ElicitationRequestSchema',
355
+ description:
356
+ 'The schema to validate requests against. Must be ElicitationRequestSchema.',
357
+ },
358
+ {
359
+ name: 'handler',
360
+ type: '(request: ElicitationRequest) => Promise<ElicitResult> | ElicitResult',
361
+ description:
362
+ 'A function that handles the elicitation request. The request contains a message and requestedSchema. The handler must return an object with an action ("accept", "decline", or "cancel") and optionally content when accepting.',
363
+ },
364
+ ],
365
+ },
366
+ ],
367
+ },
368
+ {
369
+ name: 'close',
370
+ type: '() => Promise<void>',
371
+ description:
372
+ 'Closes the connection to the MCP server and cleans up resources.',
373
+ },
374
+ ]}
375
+ />
376
+
377
+ ## Example
378
+
379
+ ```typescript
380
+ import { createMCPClient } from '@ai-sdk/mcp';
381
+ import { generateText } from 'ai';
382
+ import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
383
+
384
+ let client;
385
+
386
+ try {
387
+ client = await createMCPClient({
388
+ transport: new Experimental_StdioMCPTransport({
389
+ command: 'node server.js',
390
+ }),
391
+ });
392
+
393
+ const tools = await client.tools();
394
+
395
+ const response = await generateText({
396
+ model: __MODEL__,
397
+ tools,
398
+ messages: [{ role: 'user', content: 'Query the data' }],
399
+ });
400
+
401
+ console.log(response);
402
+ } catch (error) {
403
+ console.error('Error:', error);
404
+ } finally {
405
+ // ensure the client is closed even if an error occurs
406
+ if (client) {
407
+ await client.close();
408
+ }
409
+ }
410
+ ```
411
+
412
+ ## Error Handling
413
+
414
+ The client throws `MCPClientError` for:
415
+
416
+ - Client initialization failures
417
+ - Protocol version mismatches
418
+ - Missing server capabilities
419
+ - Connection failures
420
+
421
+ For tool execution, errors are propagated as `CallToolError` errors.
422
+
423
+ For unknown errors, the client exposes an `onUncaughtError` callback that can be used to manually log or handle errors that are not covered by known error types.