@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,391 @@
1
+ ---
2
+ title: Telemetry
3
+ description: Using OpenTelemetry with AI SDK Core
4
+ ---
5
+
6
+ # Telemetry
7
+
8
+ <Note type="warning">
9
+ AI SDK Telemetry is experimental and may change in the future.
10
+ </Note>
11
+
12
+ The AI SDK uses [OpenTelemetry](https://opentelemetry.io/) to collect telemetry data.
13
+ OpenTelemetry is an open-source observability framework designed to provide
14
+ standardized instrumentation for collecting telemetry data.
15
+
16
+ Check out the [AI SDK Observability Integrations](/providers/observability)
17
+ to see providers that offer monitoring and tracing for AI SDK applications.
18
+
19
+ ## Enabling telemetry
20
+
21
+ For Next.js applications, please follow the [Next.js OpenTelemetry guide](https://nextjs.org/docs/app/building-your-application/optimizing/open-telemetry) to enable telemetry first.
22
+
23
+ You can then use the `experimental_telemetry` option to enable telemetry on specific function calls while the feature is experimental:
24
+
25
+ ```ts highlight="4"
26
+ const result = await generateText({
27
+ model: __MODEL__,
28
+ prompt: 'Write a short story about a cat.',
29
+ experimental_telemetry: { isEnabled: true },
30
+ });
31
+ ```
32
+
33
+ When telemetry is enabled, you can also control if you want to record the input values and the output values for the function.
34
+ By default, both are enabled. You can disable them by setting the `recordInputs` and `recordOutputs` options to `false`.
35
+
36
+ Disabling the recording of inputs and outputs can be useful for privacy, data transfer, and performance reasons.
37
+ You might for example want to disable recording inputs if they contain sensitive information.
38
+
39
+ ## Telemetry Metadata
40
+
41
+ You can provide a `functionId` to identify the function that the telemetry data is for,
42
+ and `metadata` to include additional information in the telemetry data.
43
+
44
+ ```ts highlight="6-10"
45
+ const result = await generateText({
46
+ model: __MODEL__,
47
+ prompt: 'Write a short story about a cat.',
48
+ experimental_telemetry: {
49
+ isEnabled: true,
50
+ functionId: 'my-awesome-function',
51
+ metadata: {
52
+ something: 'custom',
53
+ someOtherThing: 'other-value',
54
+ },
55
+ },
56
+ });
57
+ ```
58
+
59
+ ## Custom Tracer
60
+
61
+ You may provide a `tracer` which must return an OpenTelemetry `Tracer`. This is useful in situations where
62
+ you want your traces to use a `TracerProvider` other than the one provided by the `@opentelemetry/api` singleton.
63
+
64
+ ```ts highlight="7"
65
+ const tracerProvider = new NodeTracerProvider();
66
+ const result = await generateText({
67
+ model: __MODEL__,
68
+ prompt: 'Write a short story about a cat.',
69
+ experimental_telemetry: {
70
+ isEnabled: true,
71
+ tracer: tracerProvider.getTracer('ai'),
72
+ },
73
+ });
74
+ ```
75
+
76
+ ## Telemetry Integrations
77
+
78
+ Telemetry integrations let you hook into the generation lifecycle to build custom observability — logging, analytics, DevTools, or any other monitoring system. Instead of wiring up individual callbacks on every call, you implement a `TelemetryIntegration` once and pass it via `experimental_telemetry.integrations`.
79
+
80
+ ### Using an integration
81
+
82
+ Pass one or more integrations to any `generateText` or `streamText` call:
83
+
84
+ ```ts highlight="6-8"
85
+ import { streamText } from 'ai';
86
+ import { devToolsIntegration } from '@ai-sdk/devtools';
87
+
88
+ const result = streamText({
89
+ model: openai('gpt-4o'),
90
+ prompt: 'Hello!',
91
+ experimental_telemetry: {
92
+ isEnabled: true,
93
+ integrations: [devToolsIntegration()],
94
+ },
95
+ });
96
+ ```
97
+
98
+ You can combine multiple integrations — they all receive the same lifecycle events:
99
+
100
+ ```ts
101
+ experimental_telemetry: {
102
+ isEnabled: true,
103
+ integrations: [devToolsIntegration(), otelIntegration(), customLogger()],
104
+ },
105
+ ```
106
+
107
+ Errors inside integrations are caught and do not break the generation flow.
108
+
109
+ ### Building a custom integration
110
+
111
+ Implement the `TelemetryIntegration` interface from the `ai` package. All methods are optional — implement only the lifecycle events you care about:
112
+
113
+ ```ts
114
+ import type { TelemetryIntegration } from 'ai';
115
+ import { bindTelemetryIntegration } from 'ai';
116
+
117
+ class MyIntegration implements TelemetryIntegration {
118
+ async onStart(event) {
119
+ console.log('Generation started:', event.model.modelId);
120
+ }
121
+
122
+ async onStepFinish(event) {
123
+ console.log(
124
+ `Step ${event.stepNumber} done:`,
125
+ event.usage.totalTokens,
126
+ 'tokens',
127
+ );
128
+ }
129
+
130
+ async onToolCallFinish(event) {
131
+ if (event.success) {
132
+ console.log(
133
+ `Tool "${event.toolCall.toolName}" took ${event.durationMs}ms`,
134
+ );
135
+ } else {
136
+ console.error(`Tool "${event.toolCall.toolName}" failed:`, event.error);
137
+ }
138
+ }
139
+
140
+ async onFinish(event) {
141
+ console.log('Done. Total tokens:', event.totalUsage.totalTokens);
142
+ }
143
+ }
144
+
145
+ export function myIntegration(): TelemetryIntegration {
146
+ return bindTelemetryIntegration(new MyIntegration());
147
+ }
148
+ ```
149
+
150
+ Use `bindTelemetryIntegration` for class-based integrations to ensure `this` is correctly bound when methods are extracted and called as callbacks.
151
+
152
+ ### Available lifecycle methods
153
+
154
+ <PropertiesTable
155
+ content={[
156
+ {
157
+ name: 'onStart',
158
+ type: '(event: OnStartEvent) => void | PromiseLike<void>',
159
+ description:
160
+ 'Called when the generation operation begins, before any LLM calls.',
161
+ },
162
+ {
163
+ name: 'onStepStart',
164
+ type: '(event: OnStepStartEvent) => void | PromiseLike<void>',
165
+ description:
166
+ 'Called when a step (LLM call) begins, before the provider is called.',
167
+ },
168
+ {
169
+ name: 'onToolCallStart',
170
+ type: '(event: OnToolCallStartEvent) => void | PromiseLike<void>',
171
+ description: "Called when a tool's execute function is about to run.",
172
+ },
173
+ {
174
+ name: 'onToolCallFinish',
175
+ type: '(event: OnToolCallFinishEvent) => void | PromiseLike<void>',
176
+ description: "Called when a tool's execute function completes or errors.",
177
+ },
178
+ {
179
+ name: 'onStepFinish',
180
+ type: '(event: OnStepFinishEvent) => void | PromiseLike<void>',
181
+ description: 'Called when a step (LLM call) completes.',
182
+ },
183
+ {
184
+ name: 'onFinish',
185
+ type: '(event: OnFinishEvent) => void | PromiseLike<void>',
186
+ description:
187
+ 'Called when the entire generation completes (all steps finished).',
188
+ },
189
+ ]}
190
+ />
191
+
192
+ The event types for each method are the same as the corresponding [event callbacks](/docs/ai-sdk-core/event-listeners). See the event callbacks documentation for the full property reference of each event.
193
+
194
+ ## Collected Data
195
+
196
+ ### generateText function
197
+
198
+ `generateText` records 3 types of spans:
199
+
200
+ - `ai.generateText` (span): the full length of the generateText call. It contains 1 or more `ai.generateText.doGenerate` spans.
201
+ It contains the [basic LLM span information](#basic-llm-span-information) and the following attributes:
202
+
203
+ - `operation.name`: `ai.generateText` and the functionId that was set through `telemetry.functionId`
204
+ - `ai.operationId`: `"ai.generateText"`
205
+ - `ai.prompt`: the prompt that was used when calling `generateText`
206
+ - `ai.response.text`: the text that was generated
207
+ - `ai.response.toolCalls`: the tool calls that were made as part of the generation (stringified JSON)
208
+ - `ai.response.finishReason`: the reason why the generation finished
209
+ - `ai.settings.maxOutputTokens`: the maximum number of output tokens that were set
210
+
211
+ - `ai.generateText.doGenerate` (span): a provider doGenerate call. It can contain `ai.toolCall` spans.
212
+ It contains the [call LLM span information](#call-llm-span-information) and the following attributes:
213
+
214
+ - `operation.name`: `ai.generateText.doGenerate` and the functionId that was set through `telemetry.functionId`
215
+ - `ai.operationId`: `"ai.generateText.doGenerate"`
216
+ - `ai.prompt.messages`: the messages that were passed into the provider
217
+ - `ai.prompt.tools`: array of stringified tool definitions. The tools can be of type `function` or `provider-defined-client`.
218
+ Function tools have a `name`, `description` (optional), and `inputSchema` (JSON schema).
219
+ Provider-defined-client tools have a `name`, `id`, and `input` (Record).
220
+ - `ai.prompt.toolChoice`: the stringified tool choice setting (JSON). It has a `type` property
221
+ (`auto`, `none`, `required`, `tool`), and if the type is `tool`, a `toolName` property with the specific tool.
222
+ - `ai.response.text`: the text that was generated
223
+ - `ai.response.toolCalls`: the tool calls that were made as part of the generation (stringified JSON)
224
+ - `ai.response.finishReason`: the reason why the generation finished
225
+
226
+ - `ai.toolCall` (span): a tool call that is made as part of the generateText call. See [Tool call spans](#tool-call-spans) for more details.
227
+
228
+ ### streamText function
229
+
230
+ `streamText` records 3 types of spans and 2 types of events:
231
+
232
+ - `ai.streamText` (span): the full length of the streamText call. It contains a `ai.streamText.doStream` span.
233
+ It contains the [basic LLM span information](#basic-llm-span-information) and the following attributes:
234
+
235
+ - `operation.name`: `ai.streamText` and the functionId that was set through `telemetry.functionId`
236
+ - `ai.operationId`: `"ai.streamText"`
237
+ - `ai.prompt`: the prompt that was used when calling `streamText`
238
+ - `ai.response.text`: the text that was generated
239
+ - `ai.response.toolCalls`: the tool calls that were made as part of the generation (stringified JSON)
240
+ - `ai.response.finishReason`: the reason why the generation finished
241
+ - `ai.settings.maxOutputTokens`: the maximum number of output tokens that were set
242
+
243
+ - `ai.streamText.doStream` (span): a provider doStream call.
244
+ This span contains an `ai.stream.firstChunk` event and `ai.toolCall` spans.
245
+ It contains the [call LLM span information](#call-llm-span-information) and the following attributes:
246
+
247
+ - `operation.name`: `ai.streamText.doStream` and the functionId that was set through `telemetry.functionId`
248
+ - `ai.operationId`: `"ai.streamText.doStream"`
249
+ - `ai.prompt.messages`: the messages that were passed into the provider
250
+ - `ai.prompt.tools`: array of stringified tool definitions. The tools can be of type `function` or `provider-defined-client`.
251
+ Function tools have a `name`, `description` (optional), and `inputSchema` (JSON schema).
252
+ Provider-defined-client tools have a `name`, `id`, and `input` (Record).
253
+ - `ai.prompt.toolChoice`: the stringified tool choice setting (JSON). It has a `type` property
254
+ (`auto`, `none`, `required`, `tool`), and if the type is `tool`, a `toolName` property with the specific tool.
255
+ - `ai.response.text`: the text that was generated
256
+ - `ai.response.toolCalls`: the tool calls that were made as part of the generation (stringified JSON)
257
+ - `ai.response.msToFirstChunk`: the time it took to receive the first chunk in milliseconds
258
+ - `ai.response.msToFinish`: the time it took to receive the finish part of the LLM stream in milliseconds
259
+ - `ai.response.avgCompletionTokensPerSecond`: the average number of completion tokens per second
260
+ - `ai.response.finishReason`: the reason why the generation finished
261
+
262
+ - `ai.toolCall` (span): a tool call that is made as part of the generateText call. See [Tool call spans](#tool-call-spans) for more details.
263
+
264
+ - `ai.stream.firstChunk` (event): an event that is emitted when the first chunk of the stream is received.
265
+
266
+ - `ai.response.msToFirstChunk`: the time it took to receive the first chunk
267
+
268
+ - `ai.stream.finish` (event): an event that is emitted when the finish part of the LLM stream is received.
269
+
270
+ It also records a `ai.stream.firstChunk` event when the first chunk of the stream is received.
271
+
272
+ ### Deprecated object APIs
273
+
274
+ <Note type="warning">
275
+ `generateObject` and `streamObject` are deprecated. Use `generateText` and
276
+ `streamText` with the `output` property instead.
277
+ </Note>
278
+
279
+ If you still run deprecated object APIs, you will see legacy span names:
280
+
281
+ - `generateObject`: `ai.generateObject`, `ai.generateObject.doGenerate`
282
+ - `streamObject`: `ai.streamObject`, `ai.streamObject.doStream`, `ai.stream.firstChunk`
283
+
284
+ Legacy object spans include the same core metadata as other LLM spans, plus
285
+ object-specific attributes such as `ai.schema.*`, `ai.response.object`, and
286
+ `ai.settings.output`.
287
+
288
+ ### embed function
289
+
290
+ `embed` records 2 types of spans:
291
+
292
+ - `ai.embed` (span): the full length of the embed call. It contains 1 `ai.embed.doEmbed` spans.
293
+ It contains the [basic embedding span information](#basic-embedding-span-information) and the following attributes:
294
+
295
+ - `operation.name`: `ai.embed` and the functionId that was set through `telemetry.functionId`
296
+ - `ai.operationId`: `"ai.embed"`
297
+ - `ai.value`: the value that was passed into the `embed` function
298
+ - `ai.embedding`: a JSON-stringified embedding
299
+
300
+ - `ai.embed.doEmbed` (span): a provider doEmbed call.
301
+ It contains the [basic embedding span information](#basic-embedding-span-information) and the following attributes:
302
+
303
+ - `operation.name`: `ai.embed.doEmbed` and the functionId that was set through `telemetry.functionId`
304
+ - `ai.operationId`: `"ai.embed.doEmbed"`
305
+ - `ai.values`: the values that were passed into the provider (array)
306
+ - `ai.embeddings`: an array of JSON-stringified embeddings
307
+
308
+ ### embedMany function
309
+
310
+ `embedMany` records 2 types of spans:
311
+
312
+ - `ai.embedMany` (span): the full length of the embedMany call. It contains 1 or more `ai.embedMany.doEmbed` spans.
313
+ It contains the [basic embedding span information](#basic-embedding-span-information) and the following attributes:
314
+
315
+ - `operation.name`: `ai.embedMany` and the functionId that was set through `telemetry.functionId`
316
+ - `ai.operationId`: `"ai.embedMany"`
317
+ - `ai.values`: the values that were passed into the `embedMany` function
318
+ - `ai.embeddings`: an array of JSON-stringified embedding
319
+
320
+ - `ai.embedMany.doEmbed` (span): a provider doEmbed call.
321
+ It contains the [basic embedding span information](#basic-embedding-span-information) and the following attributes:
322
+
323
+ - `operation.name`: `ai.embedMany.doEmbed` and the functionId that was set through `telemetry.functionId`
324
+ - `ai.operationId`: `"ai.embedMany.doEmbed"`
325
+ - `ai.values`: the values that were sent to the provider
326
+ - `ai.embeddings`: an array of JSON-stringified embeddings for each value
327
+
328
+ ## Span Details
329
+
330
+ ### Basic LLM span information
331
+
332
+ Many spans that use LLMs (`ai.generateText`, `ai.generateText.doGenerate`, `ai.streamText`, `ai.streamText.doStream`) contain the following attributes:
333
+
334
+ - `resource.name`: the functionId that was set through `telemetry.functionId`
335
+ - `ai.model.id`: the id of the model
336
+ - `ai.model.provider`: the provider of the model
337
+ - `ai.request.headers.*`: the request headers that were passed in through `headers`
338
+ - `ai.response.providerMetadata`: provider specific metadata returned with the generation response
339
+ - `ai.settings.maxRetries`: the maximum number of retries that were set
340
+ - `ai.telemetry.functionId`: the functionId that was set through `telemetry.functionId`
341
+ - `ai.telemetry.metadata.*`: the metadata that was passed in through `telemetry.metadata`
342
+ - `ai.usage.completionTokens`: the number of completion tokens that were used
343
+ - `ai.usage.promptTokens`: the number of prompt tokens that were used
344
+
345
+ ### Call LLM span information
346
+
347
+ Spans that correspond to individual LLM calls (`ai.generateText.doGenerate`, `ai.streamText.doStream`) contain
348
+ [basic LLM span information](#basic-llm-span-information) and the following attributes:
349
+
350
+ - `ai.response.model`: the model that was used to generate the response. This can be different from the model that was requested if the provider supports aliases.
351
+ - `ai.response.id`: the id of the response. Uses the ID from the provider when available.
352
+ - `ai.response.timestamp`: the timestamp of the response. Uses the timestamp from the provider when available.
353
+ - [Semantic Conventions for GenAI operations](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/)
354
+ - `gen_ai.system`: the provider that was used
355
+ - `gen_ai.request.model`: the model that was requested
356
+ - `gen_ai.request.temperature`: the temperature that was set
357
+ - `gen_ai.request.max_tokens`: the maximum number of tokens that were set
358
+ - `gen_ai.request.frequency_penalty`: the frequency penalty that was set
359
+ - `gen_ai.request.presence_penalty`: the presence penalty that was set
360
+ - `gen_ai.request.top_k`: the topK parameter value that was set
361
+ - `gen_ai.request.top_p`: the topP parameter value that was set
362
+ - `gen_ai.request.stop_sequences`: the stop sequences
363
+ - `gen_ai.response.finish_reasons`: the finish reasons that were returned by the provider
364
+ - `gen_ai.response.model`: the model that was used to generate the response. This can be different from the model that was requested if the provider supports aliases.
365
+ - `gen_ai.response.id`: the id of the response. Uses the ID from the provider when available.
366
+ - `gen_ai.usage.input_tokens`: the number of prompt tokens that were used
367
+ - `gen_ai.usage.output_tokens`: the number of completion tokens that were used
368
+
369
+ ### Basic embedding span information
370
+
371
+ Many spans that use embedding models (`ai.embed`, `ai.embed.doEmbed`, `ai.embedMany`, `ai.embedMany.doEmbed`) contain the following attributes:
372
+
373
+ - `ai.model.id`: the id of the model
374
+ - `ai.model.provider`: the provider of the model
375
+ - `ai.request.headers.*`: the request headers that were passed in through `headers`
376
+ - `ai.settings.maxRetries`: the maximum number of retries that were set
377
+ - `ai.telemetry.functionId`: the functionId that was set through `telemetry.functionId`
378
+ - `ai.telemetry.metadata.*`: the metadata that was passed in through `telemetry.metadata`
379
+ - `ai.usage.tokens`: the number of tokens that were used
380
+ - `resource.name`: the functionId that was set through `telemetry.functionId`
381
+
382
+ ### Tool call spans
383
+
384
+ Tool call spans (`ai.toolCall`) contain the following attributes:
385
+
386
+ - `operation.name`: `"ai.toolCall"`
387
+ - `ai.operationId`: `"ai.toolCall"`
388
+ - `ai.toolCall.name`: the name of the tool
389
+ - `ai.toolCall.id`: the id of the tool call
390
+ - `ai.toolCall.args`: the input parameters of the tool call
391
+ - `ai.toolCall.result`: the output result of the tool call. Only available if the tool call is successful and the result is serializable.
@@ -0,0 +1,107 @@
1
+ ---
2
+ title: DevTools
3
+ description: Debug and inspect AI SDK applications with DevTools
4
+ ---
5
+
6
+ # DevTools
7
+
8
+ <Note type="warning">
9
+ AI SDK DevTools is experimental and intended for local development only. Do
10
+ not use in production environments.
11
+ </Note>
12
+
13
+ AI SDK DevTools gives you full visibility over your AI SDK calls with [`generateText`](/docs/reference/ai-sdk-core/generate-text), [`streamText`](/docs/reference/ai-sdk-core/stream-text), and [`ToolLoopAgent`](/docs/reference/ai-sdk-core/tool-loop-agent). It helps you debug and inspect LLM requests, responses, tool calls, and multi-step interactions through a web-based UI.
14
+
15
+ DevTools is composed of two parts:
16
+
17
+ 1. **Middleware**: Captures runs and steps from your AI SDK calls
18
+ 2. **Viewer**: A web UI to inspect the captured data
19
+
20
+ ## Installation
21
+
22
+ Install the DevTools package:
23
+
24
+ ```bash
25
+ pnpm add @ai-sdk/devtools
26
+ ```
27
+
28
+ ## Requirements
29
+
30
+ - AI SDK v6 beta (`ai@^6.0.0-beta.0`)
31
+ - Node.js compatible runtime
32
+
33
+ ## Using DevTools
34
+
35
+ ### Add the middleware
36
+
37
+ Wrap your language model with the DevTools middleware using [`wrapLanguageModel`](/docs/ai-sdk-core/middleware):
38
+
39
+ ```ts
40
+ import { wrapLanguageModel, gateway } from 'ai';
41
+ import { devToolsMiddleware } from '@ai-sdk/devtools';
42
+
43
+ const model = wrapLanguageModel({
44
+ model: gateway('anthropic/claude-sonnet-4.5'),
45
+ middleware: devToolsMiddleware(),
46
+ });
47
+ ```
48
+
49
+ The wrapped model can be used with any AI SDK Core function:
50
+
51
+ ```ts highlight="4"
52
+ import { generateText } from 'ai';
53
+
54
+ const result = await generateText({
55
+ model, // wrapped model with DevTools
56
+ prompt: 'What cities are in the United States?',
57
+ });
58
+ ```
59
+
60
+ ### Launch the viewer
61
+
62
+ Start the DevTools viewer:
63
+
64
+ ```bash
65
+ npx @ai-sdk/devtools
66
+ ```
67
+
68
+ Open [http://localhost:4983](http://localhost:4983) to view your AI SDK interactions.
69
+
70
+ ## Captured data
71
+
72
+ The DevTools middleware captures the following information from your AI SDK calls:
73
+
74
+ - **Input parameters and prompts**: View the complete input sent to your LLM
75
+ - **Output content and tool calls**: Inspect generated text and tool invocations
76
+ - **Token usage and timing**: Monitor resource consumption and performance
77
+ - **Raw provider data**: Access complete request and response payloads
78
+
79
+ ### Runs and steps
80
+
81
+ DevTools organizes captured data into runs and steps:
82
+
83
+ - **Run**: A complete multi-step AI interaction, grouped by the initial prompt
84
+ - **Step**: A single LLM call within a run (e.g., one `generateText` or `streamText` call)
85
+
86
+ Multi-step interactions, such as those created by tool calling or agent loops, are grouped together as a single run with multiple steps.
87
+
88
+ ## How it works
89
+
90
+ The DevTools middleware intercepts all `generateText` and `streamText` calls through the [language model middleware](/docs/ai-sdk-core/middleware) system. Captured data is stored locally in a JSON file (`.devtools/generations.json`) and served through a web UI built with Hono and React.
91
+
92
+ <Note type="warning">
93
+ The middleware automatically adds `.devtools` to your `.gitignore` file.
94
+ Verify that `.devtools` is in your `.gitignore` to ensure you don't commit
95
+ sensitive AI interaction data to your repository.
96
+ </Note>
97
+
98
+ ## Security considerations
99
+
100
+ DevTools stores all AI interactions locally in plain text files, including:
101
+
102
+ - User prompts and messages
103
+ - LLM responses
104
+ - Tool call arguments and results
105
+ - API request and response data
106
+
107
+ **Only use DevTools in local development environments.** Do not enable DevTools in production or when handling sensitive data.