@fairyhunter13/ai-sdk 6.0.116-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/CHANGELOG.md +7582 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +6751 -0
  4. package/dist/index.d.ts +6751 -0
  5. package/dist/index.js +14155 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14127 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +324 -0
  10. package/dist/internal/index.d.ts +324 -0
  11. package/dist/internal/index.js +1352 -0
  12. package/dist/internal/index.js.map +1 -0
  13. package/dist/internal/index.mjs +1336 -0
  14. package/dist/internal/index.mjs.map +1 -0
  15. package/dist/test/index.d.mts +265 -0
  16. package/dist/test/index.d.ts +265 -0
  17. package/dist/test/index.js +509 -0
  18. package/dist/test/index.js.map +1 -0
  19. package/dist/test/index.mjs +472 -0
  20. package/dist/test/index.mjs.map +1 -0
  21. package/docs/00-introduction/index.mdx +76 -0
  22. package/docs/02-foundations/01-overview.mdx +43 -0
  23. package/docs/02-foundations/02-providers-and-models.mdx +158 -0
  24. package/docs/02-foundations/03-prompts.mdx +616 -0
  25. package/docs/02-foundations/04-tools.mdx +251 -0
  26. package/docs/02-foundations/05-streaming.mdx +62 -0
  27. package/docs/02-foundations/06-provider-options.mdx +345 -0
  28. package/docs/02-foundations/index.mdx +49 -0
  29. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  30. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  31. package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
  32. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  33. package/docs/02-getting-started/04-svelte.mdx +627 -0
  34. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  35. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  36. package/docs/02-getting-started/07-expo.mdx +766 -0
  37. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  38. package/docs/02-getting-started/09-coding-agents.mdx +179 -0
  39. package/docs/02-getting-started/index.mdx +44 -0
  40. package/docs/03-agents/01-overview.mdx +96 -0
  41. package/docs/03-agents/02-building-agents.mdx +449 -0
  42. package/docs/03-agents/03-workflows.mdx +386 -0
  43. package/docs/03-agents/04-loop-control.mdx +394 -0
  44. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  45. package/docs/03-agents/06-memory.mdx +222 -0
  46. package/docs/03-agents/06-subagents.mdx +362 -0
  47. package/docs/03-agents/index.mdx +46 -0
  48. package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
  49. package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
  50. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
  51. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1144 -0
  52. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
  53. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
  54. package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
  55. package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
  56. package/docs/03-ai-sdk-core/30-embeddings.mdx +246 -0
  57. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  58. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  59. package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
  60. package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
  61. package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
  62. package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
  63. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  64. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  65. package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
  66. package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
  67. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  68. package/docs/03-ai-sdk-core/65-event-listeners.mdx +1118 -0
  69. package/docs/03-ai-sdk-core/index.mdx +99 -0
  70. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  71. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
  72. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  73. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  74. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  75. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  76. package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
  77. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  78. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  79. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  80. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  81. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  82. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  83. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
  84. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  85. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  86. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  87. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  88. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  89. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  90. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
  91. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  92. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
  93. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  94. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  95. package/docs/05-ai-sdk-rsc/index.mdx +63 -0
  96. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  97. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  98. package/docs/06-advanced/03-backpressure.mdx +173 -0
  99. package/docs/06-advanced/04-caching.mdx +169 -0
  100. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  101. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  102. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
  103. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  104. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  105. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  106. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  107. package/docs/06-advanced/index.mdx +11 -0
  108. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
  109. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
  110. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
  111. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
  112. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  113. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
  114. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
  115. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
  116. package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
  117. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
  118. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
  119. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
  120. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
  121. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
  122. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
  123. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
  124. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
  125. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  126. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  128. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
  129. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  130. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
  131. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
  132. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  133. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  134. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
  135. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
  136. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  137. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  138. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  139. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
  140. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  141. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  142. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  143. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  144. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  145. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  146. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  147. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  148. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  149. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
  150. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  151. package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
  152. package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
  153. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
  154. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
  155. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
  156. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
  157. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  158. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
  159. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
  160. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
  161. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  162. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  163. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  164. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  165. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  166. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  167. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  168. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  169. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
  170. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
  171. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  172. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  173. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  174. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  175. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  176. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  177. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
  178. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  207. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  208. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  209. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  210. package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
  211. package/docs/07-reference/index.mdx +28 -0
  212. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  213. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
  214. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  215. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  216. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  217. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  218. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  219. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  220. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  221. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  222. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  223. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  224. package/docs/08-migration-guides/index.mdx +22 -0
  225. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  226. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  227. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  228. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  229. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  230. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  231. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  232. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  233. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  234. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  235. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  236. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  237. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  238. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  239. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  240. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  241. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  242. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  243. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  244. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  245. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  246. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  247. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  248. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  249. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
  250. package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
  251. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  252. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  253. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  254. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  255. package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
  256. package/docs/09-troubleshooting/index.mdx +11 -0
  257. package/internal.d.ts +1 -0
  258. package/package.json +120 -0
  259. package/src/agent/agent.ts +156 -0
  260. package/src/agent/create-agent-ui-stream-response.ts +61 -0
  261. package/src/agent/create-agent-ui-stream.ts +84 -0
  262. package/src/agent/index.ts +37 -0
  263. package/src/agent/infer-agent-tools.ts +7 -0
  264. package/src/agent/infer-agent-ui-message.ts +11 -0
  265. package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
  266. package/src/agent/tool-loop-agent-settings.ts +244 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +109 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +484 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +294 -0
  273. package/src/embed/index.ts +5 -0
  274. package/src/error/index.ts +37 -0
  275. package/src/error/invalid-argument-error.ts +34 -0
  276. package/src/error/invalid-stream-part-error.ts +28 -0
  277. package/src/error/invalid-tool-approval-error.ts +26 -0
  278. package/src/error/invalid-tool-input-error.ts +33 -0
  279. package/src/error/missing-tool-result-error.ts +28 -0
  280. package/src/error/no-image-generated-error.ts +39 -0
  281. package/src/error/no-object-generated-error.ts +70 -0
  282. package/src/error/no-output-generated-error.ts +26 -0
  283. package/src/error/no-speech-generated-error.ts +28 -0
  284. package/src/error/no-such-tool-error.ts +35 -0
  285. package/src/error/no-transcript-generated-error.ts +30 -0
  286. package/src/error/no-video-generated-error.ts +57 -0
  287. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  288. package/src/error/tool-call-repair-error.ts +30 -0
  289. package/src/error/ui-message-stream-error.ts +48 -0
  290. package/src/error/unsupported-model-version-error.ts +23 -0
  291. package/src/error/verify-no-object-generated-error.ts +27 -0
  292. package/src/generate-image/generate-image-result.ts +42 -0
  293. package/src/generate-image/generate-image.ts +361 -0
  294. package/src/generate-image/index.ts +18 -0
  295. package/src/generate-object/generate-object-result.ts +67 -0
  296. package/src/generate-object/generate-object.ts +514 -0
  297. package/src/generate-object/index.ts +9 -0
  298. package/src/generate-object/inject-json-instruction.ts +30 -0
  299. package/src/generate-object/output-strategy.ts +415 -0
  300. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  301. package/src/generate-object/repair-text.ts +12 -0
  302. package/src/generate-object/stream-object-result.ts +120 -0
  303. package/src/generate-object/stream-object.ts +984 -0
  304. package/src/generate-object/validate-object-generation-input.ts +144 -0
  305. package/src/generate-speech/generate-speech-result.ts +30 -0
  306. package/src/generate-speech/generate-speech.ts +191 -0
  307. package/src/generate-speech/generated-audio-file.ts +65 -0
  308. package/src/generate-speech/index.ts +3 -0
  309. package/src/generate-text/collect-tool-approvals.ts +116 -0
  310. package/src/generate-text/content-part.ts +31 -0
  311. package/src/generate-text/core-events.ts +390 -0
  312. package/src/generate-text/create-execute-tools-transformation.ts +168 -0
  313. package/src/generate-text/create-stream-text-part-transform.ts +229 -0
  314. package/src/generate-text/execute-tool-call.ts +190 -0
  315. package/src/generate-text/extract-reasoning-content.ts +17 -0
  316. package/src/generate-text/extract-text-content.ts +15 -0
  317. package/src/generate-text/generate-text-result.ts +168 -0
  318. package/src/generate-text/generate-text.ts +1411 -0
  319. package/src/generate-text/generated-file.ts +70 -0
  320. package/src/generate-text/index.ts +74 -0
  321. package/src/generate-text/is-approval-needed.ts +29 -0
  322. package/src/generate-text/output-utils.ts +23 -0
  323. package/src/generate-text/output.ts +590 -0
  324. package/src/generate-text/parse-tool-call.ts +188 -0
  325. package/src/generate-text/prepare-step.ts +103 -0
  326. package/src/generate-text/prune-messages.ts +167 -0
  327. package/src/generate-text/reasoning-output.ts +99 -0
  328. package/src/generate-text/reasoning.ts +10 -0
  329. package/src/generate-text/response-message.ts +10 -0
  330. package/src/generate-text/smooth-stream.ts +162 -0
  331. package/src/generate-text/step-result.ts +310 -0
  332. package/src/generate-text/stop-condition.ts +29 -0
  333. package/src/generate-text/stream-text-result.ts +536 -0
  334. package/src/generate-text/stream-text.ts +2693 -0
  335. package/src/generate-text/to-response-messages.ts +178 -0
  336. package/src/generate-text/tool-approval-request-output.ts +21 -0
  337. package/src/generate-text/tool-call-repair-function.ts +27 -0
  338. package/src/generate-text/tool-call.ts +47 -0
  339. package/src/generate-text/tool-error.ts +34 -0
  340. package/src/generate-text/tool-output-denied.ts +21 -0
  341. package/src/generate-text/tool-output.ts +7 -0
  342. package/src/generate-text/tool-result.ts +36 -0
  343. package/src/generate-text/tool-set.ts +14 -0
  344. package/src/generate-video/generate-video-result.ts +36 -0
  345. package/src/generate-video/generate-video.ts +402 -0
  346. package/src/generate-video/index.ts +3 -0
  347. package/src/global.ts +36 -0
  348. package/src/index.ts +49 -0
  349. package/src/logger/index.ts +6 -0
  350. package/src/logger/log-warnings.ts +140 -0
  351. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  352. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  353. package/src/middleware/default-settings-middleware.ts +33 -0
  354. package/src/middleware/extract-json-middleware.ts +197 -0
  355. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  356. package/src/middleware/index.ts +10 -0
  357. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  358. package/src/middleware/wrap-embedding-model.ts +89 -0
  359. package/src/middleware/wrap-image-model.ts +92 -0
  360. package/src/middleware/wrap-language-model.ts +108 -0
  361. package/src/middleware/wrap-provider.ts +51 -0
  362. package/src/model/as-embedding-model-v3.ts +24 -0
  363. package/src/model/as-embedding-model-v4.ts +25 -0
  364. package/src/model/as-image-model-v3.ts +24 -0
  365. package/src/model/as-image-model-v4.ts +21 -0
  366. package/src/model/as-language-model-v3.ts +103 -0
  367. package/src/model/as-language-model-v4.ts +25 -0
  368. package/src/model/as-provider-v3.ts +36 -0
  369. package/src/model/as-provider-v4.ts +47 -0
  370. package/src/model/as-reranking-model-v4.ts +16 -0
  371. package/src/model/as-speech-model-v3.ts +24 -0
  372. package/src/model/as-speech-model-v4.ts +21 -0
  373. package/src/model/as-transcription-model-v3.ts +24 -0
  374. package/src/model/as-transcription-model-v4.ts +25 -0
  375. package/src/model/as-video-model-v4.ts +19 -0
  376. package/src/model/resolve-model.ts +172 -0
  377. package/src/prompt/call-settings.ts +177 -0
  378. package/src/prompt/content-part.ts +236 -0
  379. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  380. package/src/prompt/create-tool-model-output.ts +34 -0
  381. package/src/prompt/data-content.ts +134 -0
  382. package/src/prompt/index.ts +27 -0
  383. package/src/prompt/invalid-data-content-error.ts +29 -0
  384. package/src/prompt/invalid-message-role-error.ts +27 -0
  385. package/src/prompt/message-conversion-error.ts +28 -0
  386. package/src/prompt/message.ts +72 -0
  387. package/src/prompt/prepare-call-settings.ts +110 -0
  388. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  389. package/src/prompt/prompt.ts +43 -0
  390. package/src/prompt/split-data-url.ts +17 -0
  391. package/src/prompt/standardize-prompt.ts +99 -0
  392. package/src/prompt/wrap-gateway-error.ts +29 -0
  393. package/src/registry/custom-provider.ts +210 -0
  394. package/src/registry/index.ts +7 -0
  395. package/src/registry/no-such-provider-error.ts +41 -0
  396. package/src/registry/provider-registry.ts +331 -0
  397. package/src/rerank/index.ts +2 -0
  398. package/src/rerank/rerank-result.ts +70 -0
  399. package/src/rerank/rerank.ts +239 -0
  400. package/src/telemetry/assemble-operation-name.ts +21 -0
  401. package/src/telemetry/get-base-telemetry-attributes.ts +55 -0
  402. package/src/telemetry/get-global-telemetry-integration.ts +110 -0
  403. package/src/telemetry/get-tracer.ts +20 -0
  404. package/src/telemetry/index.ts +4 -0
  405. package/src/telemetry/noop-tracer.ts +69 -0
  406. package/src/telemetry/open-telemetry-integration.ts +537 -0
  407. package/src/telemetry/record-span.ts +75 -0
  408. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  409. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  410. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  411. package/src/telemetry/telemetry-integration.ts +100 -0
  412. package/src/telemetry/telemetry-settings.ts +55 -0
  413. package/src/test/mock-embedding-model-v2.ts +35 -0
  414. package/src/test/mock-embedding-model-v3.ts +48 -0
  415. package/src/test/mock-embedding-model-v4.ts +48 -0
  416. package/src/test/mock-image-model-v2.ts +28 -0
  417. package/src/test/mock-image-model-v3.ts +28 -0
  418. package/src/test/mock-image-model-v4.ts +28 -0
  419. package/src/test/mock-language-model-v2.ts +72 -0
  420. package/src/test/mock-language-model-v3.ts +77 -0
  421. package/src/test/mock-language-model-v4.ts +77 -0
  422. package/src/test/mock-provider-v2.ts +68 -0
  423. package/src/test/mock-provider-v3.ts +80 -0
  424. package/src/test/mock-provider-v4.ts +80 -0
  425. package/src/test/mock-reranking-model-v3.ts +25 -0
  426. package/src/test/mock-reranking-model-v4.ts +25 -0
  427. package/src/test/mock-server-response.ts +69 -0
  428. package/src/test/mock-speech-model-v2.ts +24 -0
  429. package/src/test/mock-speech-model-v3.ts +24 -0
  430. package/src/test/mock-speech-model-v4.ts +24 -0
  431. package/src/test/mock-tracer.ts +156 -0
  432. package/src/test/mock-transcription-model-v2.ts +24 -0
  433. package/src/test/mock-transcription-model-v3.ts +24 -0
  434. package/src/test/mock-transcription-model-v4.ts +24 -0
  435. package/src/test/mock-values.ts +4 -0
  436. package/src/test/mock-video-model-v3.ts +28 -0
  437. package/src/test/mock-video-model-v4.ts +28 -0
  438. package/src/test/not-implemented.ts +3 -0
  439. package/src/text-stream/create-text-stream-response.ts +30 -0
  440. package/src/text-stream/index.ts +2 -0
  441. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  442. package/src/transcribe/index.ts +2 -0
  443. package/src/transcribe/transcribe-result.ts +60 -0
  444. package/src/transcribe/transcribe.ts +187 -0
  445. package/src/types/embedding-model-middleware.ts +15 -0
  446. package/src/types/embedding-model.ts +20 -0
  447. package/src/types/image-model-middleware.ts +15 -0
  448. package/src/types/image-model-response-metadata.ts +16 -0
  449. package/src/types/image-model.ts +19 -0
  450. package/src/types/index.ts +29 -0
  451. package/src/types/json-value.ts +15 -0
  452. package/src/types/language-model-middleware.ts +15 -0
  453. package/src/types/language-model-request-metadata.ts +6 -0
  454. package/src/types/language-model-response-metadata.ts +21 -0
  455. package/src/types/language-model.ts +106 -0
  456. package/src/types/provider-metadata.ts +16 -0
  457. package/src/types/provider.ts +55 -0
  458. package/src/types/reranking-model.ts +6 -0
  459. package/src/types/speech-model-response-metadata.ts +21 -0
  460. package/src/types/speech-model.ts +10 -0
  461. package/src/types/transcription-model-response-metadata.ts +16 -0
  462. package/src/types/transcription-model.ts +14 -0
  463. package/src/types/usage.ts +200 -0
  464. package/src/types/video-model-response-metadata.ts +28 -0
  465. package/src/types/video-model.ts +15 -0
  466. package/src/types/warning.ts +7 -0
  467. package/src/ui/call-completion-api.ts +157 -0
  468. package/src/ui/chat-transport.ts +83 -0
  469. package/src/ui/chat.ts +786 -0
  470. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  471. package/src/ui/convert-to-model-messages.ts +403 -0
  472. package/src/ui/default-chat-transport.ts +36 -0
  473. package/src/ui/direct-chat-transport.ts +117 -0
  474. package/src/ui/http-chat-transport.ts +273 -0
  475. package/src/ui/index.ts +76 -0
  476. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  477. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  478. package/src/ui/process-text-stream.ts +16 -0
  479. package/src/ui/process-ui-message-stream.ts +858 -0
  480. package/src/ui/text-stream-chat-transport.ts +23 -0
  481. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  482. package/src/ui/ui-messages.ts +602 -0
  483. package/src/ui/use-completion.ts +84 -0
  484. package/src/ui/validate-ui-messages.ts +521 -0
  485. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  486. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  487. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  488. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  489. package/src/ui-message-stream/index.ts +14 -0
  490. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  491. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  492. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  493. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  494. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  495. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  496. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  497. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  498. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  499. package/src/util/as-array.ts +3 -0
  500. package/src/util/async-iterable-stream.ts +94 -0
  501. package/src/util/consume-stream.ts +31 -0
  502. package/src/util/cosine-similarity.ts +46 -0
  503. package/src/util/create-resolvable-promise.ts +30 -0
  504. package/src/util/create-stitchable-stream.ts +112 -0
  505. package/src/util/data-url.ts +17 -0
  506. package/src/util/deep-partial.ts +84 -0
  507. package/src/util/detect-media-type.ts +226 -0
  508. package/src/util/download/create-download.ts +13 -0
  509. package/src/util/download/download-function.ts +45 -0
  510. package/src/util/download/download.ts +74 -0
  511. package/src/util/error-handler.ts +1 -0
  512. package/src/util/fix-json.ts +401 -0
  513. package/src/util/get-potential-start-index.ts +39 -0
  514. package/src/util/index.ts +12 -0
  515. package/src/util/is-deep-equal-data.ts +48 -0
  516. package/src/util/is-non-empty-object.ts +5 -0
  517. package/src/util/job.ts +1 -0
  518. package/src/util/log-v2-compatibility-warning.ts +21 -0
  519. package/src/util/merge-abort-signals.ts +43 -0
  520. package/src/util/merge-objects.ts +79 -0
  521. package/src/util/notify.ts +22 -0
  522. package/src/util/now.ts +4 -0
  523. package/src/util/parse-partial-json.ts +30 -0
  524. package/src/util/prepare-headers.ts +14 -0
  525. package/src/util/prepare-retries.ts +47 -0
  526. package/src/util/retry-error.ts +41 -0
  527. package/src/util/retry-with-exponential-backoff.ts +154 -0
  528. package/src/util/serial-job-executor.ts +36 -0
  529. package/src/util/simulate-readable-stream.ts +39 -0
  530. package/src/util/split-array.ts +20 -0
  531. package/src/util/value-of.ts +65 -0
  532. package/src/util/write-to-server-response.ts +49 -0
  533. package/src/version.ts +5 -0
  534. package/test.d.ts +1 -0
@@ -0,0 +1,707 @@
1
+ ---
2
+ title: Generating Text
3
+ description: Learn how to generate text with the AI SDK.
4
+ ---
5
+
6
+ # Generating and Streaming Text
7
+
8
+ Large language models (LLMs) can generate text in response to a prompt, which can contain instructions and information to process.
9
+ For example, you can ask a model to come up with a recipe, draft an email, or summarize a document.
10
+
11
+ The AI SDK Core provides two functions to generate text and stream it from LLMs:
12
+
13
+ - [`generateText`](#generatetext): Generates text for a given prompt and model.
14
+ - [`streamText`](#streamtext): Streams text from a given prompt and model.
15
+
16
+ Advanced LLM features such as [tool calling](./tools-and-tool-calling) and [structured data generation](./generating-structured-data) are built on top of text generation.
17
+
18
+ ## `generateText`
19
+
20
+ You can generate text using the [`generateText`](/docs/reference/ai-sdk-core/generate-text) function. This function is ideal for non-interactive use cases where you need to write text (e.g. drafting email or summarizing web pages) and for agents that use tools.
21
+
22
+ ```tsx
23
+ import { generateText } from 'ai';
24
+ __PROVIDER_IMPORT__;
25
+
26
+ const { text } = await generateText({
27
+ model: __MODEL__,
28
+ prompt: 'Write a vegetarian lasagna recipe for 4 people.',
29
+ });
30
+ ```
31
+
32
+ You can use more [advanced prompts](./prompts) to generate text with more complex instructions and content:
33
+
34
+ ```tsx
35
+ import { generateText } from 'ai';
36
+ __PROVIDER_IMPORT__;
37
+
38
+ const { text } = await generateText({
39
+ model: __MODEL__,
40
+ system:
41
+ 'You are a professional writer. ' +
42
+ 'You write simple, clear, and concise content.',
43
+ prompt: `Summarize the following article in 3-5 sentences: ${article}`,
44
+ });
45
+ ```
46
+
47
+ The result object of `generateText` contains several promises that resolve when all required data is available:
48
+
49
+ - `result.content`: The content that was generated in the last step.
50
+ - `result.text`: The generated text.
51
+ - `result.reasoning`: The full reasoning that the model has generated in the last step.
52
+ - `result.reasoningText`: The reasoning text of the model (only available for some models).
53
+ - `result.files`: The files that were generated in the last step.
54
+ - `result.sources`: Sources that have been used as references in the last step (only available for some models).
55
+ - `result.toolCalls`: The tool calls that were made in the last step.
56
+ - `result.toolResults`: The results of the tool calls from the last step.
57
+ - `result.finishReason`: The reason the model finished generating text.
58
+ - `result.rawFinishReason`: The raw reason why the generation finished (from the provider).
59
+ - `result.usage`: The usage of the model during the final step of text generation.
60
+ - `result.totalUsage`: The total usage across all steps (for multi-step generations).
61
+ - `result.warnings`: Warnings from the model provider (e.g. unsupported settings).
62
+ - `result.request`: Additional request information.
63
+ - `result.response`: Additional response information, including response messages and body.
64
+ - `result.providerMetadata`: Additional provider-specific metadata.
65
+ - `result.steps`: Details for all steps, useful for getting information about intermediate steps.
66
+ - `result.output`: The generated structured output using the `output` specification.
67
+
68
+ ### Accessing response headers & body
69
+
70
+ Sometimes you need access to the full response from the model provider,
71
+ e.g. to access some provider-specific headers or body content.
72
+
73
+ You can access the raw response headers and body using the `response` property:
74
+
75
+ ```ts
76
+ import { generateText } from 'ai';
77
+
78
+ const result = await generateText({
79
+ // ...
80
+ });
81
+
82
+ console.log(JSON.stringify(result.response.headers, null, 2));
83
+ console.log(JSON.stringify(result.response.body, null, 2));
84
+ ```
85
+
86
+ ### `onFinish` callback
87
+
88
+ When using `generateText`, you can provide an `onFinish` callback that is triggered after the last step is finished (
89
+ [API Reference](/docs/reference/ai-sdk-core/generate-text#on-finish)
90
+ ).
91
+ It contains the text, usage information, finish reason, messages, steps, total usage, and more:
92
+
93
+ ```tsx highlight="6-8"
94
+ import { generateText } from 'ai';
95
+ __PROVIDER_IMPORT__;
96
+
97
+ const result = await generateText({
98
+ model: __MODEL__,
99
+ prompt: 'Invent a new holiday and describe its traditions.',
100
+ onFinish({ text, finishReason, usage, response, steps, totalUsage }) {
101
+ // your own logic, e.g. for saving the chat history or recording usage
102
+
103
+ const messages = response.messages; // messages that were generated
104
+ },
105
+ });
106
+ ```
107
+
108
+ ### Lifecycle callbacks (experimental)
109
+
110
+ <Note type="warning">
111
+ Experimental callbacks are subject to breaking changes in incremental package
112
+ releases.
113
+ </Note>
114
+
115
+ `generateText` provides several experimental lifecycle callbacks that let you hook into different phases of the generation process.
116
+ These are useful for logging, observability, debugging, and custom telemetry.
117
+ Errors thrown inside these callbacks are silently caught and do not break the generation flow.
118
+
119
+ ```tsx
120
+ import { generateText } from 'ai';
121
+ __PROVIDER_IMPORT__;
122
+
123
+ const result = await generateText({
124
+ model: __MODEL__,
125
+ prompt: 'What is the weather in San Francisco?',
126
+ tools: {
127
+ // ... your tools
128
+ },
129
+
130
+ experimental_onStart({ model, settings, functionId }) {
131
+ console.log('Generation started', { model, functionId });
132
+ },
133
+
134
+ experimental_onStepStart({ stepNumber, model, promptMessages }) {
135
+ console.log(`Step ${stepNumber} starting`, { model: model.modelId });
136
+ },
137
+
138
+ experimental_onToolCallStart({ toolName, toolCallId, input }) {
139
+ console.log(`Tool call starting: ${toolName}`, { toolCallId });
140
+ },
141
+
142
+ experimental_onToolCallFinish({ toolName, durationMs, error }) {
143
+ console.log(`Tool call finished: ${toolName} (${durationMs}ms)`, {
144
+ success: !error,
145
+ });
146
+ },
147
+
148
+ onStepFinish({ stepNumber, finishReason, usage }) {
149
+ console.log(`Step ${stepNumber} finished`, { finishReason, usage });
150
+ },
151
+ });
152
+ ```
153
+
154
+ The available lifecycle callbacks are:
155
+
156
+ - **`experimental_onStart`**: Called once when the `generateText` operation begins, before any LLM calls. Receives model info, prompt, settings, and telemetry metadata.
157
+ - **`experimental_onStepStart`**: Called before each step (LLM call). Receives the step number, model, prompt messages being sent, tools, and prior steps.
158
+ - **`experimental_onToolCallStart`**: Called right before a tool's `execute` function runs. Receives the tool name, call ID, and input.
159
+ - **`experimental_onToolCallFinish`**: Called right after a tool's `execute` function completes or errors. Receives the tool name, call ID, input, output (or undefined on error), error (or undefined on success), and `durationMs`.
160
+ - **`onStepFinish`**: Called after each step finishes. Now also includes `stepNumber` (zero-based index of the completed step).
161
+
162
+ ## `streamText`
163
+
164
+ Depending on your model and prompt, it can take a large language model (LLM) up to a minute to finish generating its response. This delay can be unacceptable for interactive use cases such as chatbots or real-time applications, where users expect immediate responses.
165
+
166
+ AI SDK Core provides the [`streamText`](/docs/reference/ai-sdk-core/stream-text) function which simplifies streaming text from LLMs:
167
+
168
+ ```ts
169
+ import { streamText } from 'ai';
170
+ __PROVIDER_IMPORT__;
171
+
172
+ const result = streamText({
173
+ model: __MODEL__,
174
+ prompt: 'Invent a new holiday and describe its traditions.',
175
+ });
176
+
177
+ // example: use textStream as an async iterable
178
+ for await (const textPart of result.textStream) {
179
+ console.log(textPart);
180
+ }
181
+ ```
182
+
183
+ <Note>
184
+ `result.textStream` is both a `ReadableStream` and an `AsyncIterable`.
185
+ </Note>
186
+
187
+ <Note type="warning">
188
+ `streamText` immediately starts streaming and suppresses errors to prevent
189
+ server crashes. Use the `onError` callback to log errors.
190
+ </Note>
191
+
192
+ You can use `streamText` on its own or in combination with [AI SDK
193
+ UI](/examples/next-pages/basics/streaming-text-generation) and [AI SDK
194
+ RSC](/examples/next-app/basics/streaming-text-generation).
195
+ The result object contains several helper functions to make the integration into [AI SDK UI](/docs/ai-sdk-ui) easier:
196
+
197
+ - `result.toUIMessageStreamResponse()`: Creates a UI Message stream HTTP response (with tool calls etc.) that can be used in a Next.js App Router API route.
198
+ - `result.pipeUIMessageStreamToResponse()`: Writes UI Message stream delta output to a Node.js response-like object.
199
+ - `result.toTextStreamResponse()`: Creates a simple text stream HTTP response.
200
+ - `result.pipeTextStreamToResponse()`: Writes text delta output to a Node.js response-like object.
201
+
202
+ <Note>
203
+ `streamText` is using backpressure and only generates tokens as they are
204
+ requested. You need to consume the stream in order for it to finish.
205
+ </Note>
206
+
207
+ It also provides several promises that resolve when the stream is finished:
208
+
209
+ - `result.content`: The content that was generated in the last step.
210
+ - `result.text`: The generated text.
211
+ - `result.reasoning`: The full reasoning that the model has generated.
212
+ - `result.reasoningText`: The reasoning text of the model (only available for some models).
213
+ - `result.files`: Files that have been generated by the model in the last step.
214
+ - `result.sources`: Sources that have been used as references in the last step (only available for some models).
215
+ - `result.toolCalls`: The tool calls that have been executed in the last step.
216
+ - `result.toolResults`: The tool results that have been generated in the last step.
217
+ - `result.finishReason`: The reason the model finished generating text.
218
+ - `result.rawFinishReason`: The raw reason why the generation finished (from the provider).
219
+ - `result.usage`: The usage of the model during the final step of text generation.
220
+ - `result.totalUsage`: The total usage across all steps (for multi-step generations).
221
+ - `result.warnings`: Warnings from the model provider (e.g. unsupported settings).
222
+ - `result.steps`: Details for all steps, useful for getting information about intermediate steps.
223
+ - `result.request`: Additional request information from the last step.
224
+ - `result.response`: Additional response information from the last step.
225
+ - `result.providerMetadata`: Additional provider-specific metadata from the last step.
226
+
227
+ ### `onError` callback
228
+
229
+ `streamText` immediately starts streaming to enable sending data without waiting for the model.
230
+ Errors become part of the stream and are not thrown to prevent e.g. servers from crashing.
231
+
232
+ To log errors, you can provide an `onError` callback that is triggered when an error occurs.
233
+
234
+ ```tsx highlight="6-8"
235
+ import { streamText } from 'ai';
236
+ __PROVIDER_IMPORT__;
237
+
238
+ const result = streamText({
239
+ model: __MODEL__,
240
+ prompt: 'Invent a new holiday and describe its traditions.',
241
+ onError({ error }) {
242
+ console.error(error); // your error logging logic here
243
+ },
244
+ });
245
+ ```
246
+
247
+ ### `onChunk` callback
248
+
249
+ When using `streamText`, you can provide an `onChunk` callback that is triggered for each chunk of the stream.
250
+
251
+ It receives the following chunk types:
252
+
253
+ - `text`
254
+ - `reasoning`
255
+ - `source`
256
+ - `tool-call`
257
+ - `tool-input-start`
258
+ - `tool-input-delta`
259
+ - `tool-result`
260
+ - `raw`
261
+
262
+ ```tsx highlight="6-11"
263
+ import { streamText } from 'ai';
264
+ __PROVIDER_IMPORT__;
265
+
266
+ const result = streamText({
267
+ model: __MODEL__,
268
+ prompt: 'Invent a new holiday and describe its traditions.',
269
+ onChunk({ chunk }) {
270
+ // implement your own logic here, e.g.:
271
+ if (chunk.type === 'text') {
272
+ console.log(chunk.text);
273
+ }
274
+ },
275
+ });
276
+ ```
277
+
278
+ ### `onFinish` callback
279
+
280
+ When using `streamText`, you can provide an `onFinish` callback that is triggered when the stream is finished (
281
+ [API Reference](/docs/reference/ai-sdk-core/stream-text#on-finish)
282
+ ).
283
+ It contains the text, usage information, finish reason, messages, steps, total usage, and more:
284
+
285
+ ```tsx highlight="6-8"
286
+ import { streamText } from 'ai';
287
+ __PROVIDER_IMPORT__;
288
+
289
+ const result = streamText({
290
+ model: __MODEL__,
291
+ prompt: 'Invent a new holiday and describe its traditions.',
292
+ onFinish({ text, finishReason, usage, response, steps, totalUsage }) {
293
+ // your own logic, e.g. for saving the chat history or recording usage
294
+
295
+ const messages = response.messages; // messages that were generated
296
+ },
297
+ });
298
+ ```
299
+
300
+ ### Lifecycle callbacks (experimental)
301
+
302
+ <Note type="warning">
303
+ Experimental callbacks are subject to breaking changes in incremental package
304
+ releases.
305
+ </Note>
306
+
307
+ `streamText` provides several experimental lifecycle callbacks that let you hook into different phases of the streaming process.
308
+ These are useful for logging, observability, debugging, and custom telemetry.
309
+ Errors thrown inside these callbacks are silently caught and do not break the streaming flow.
310
+
311
+ ```tsx
312
+ import { streamText } from 'ai';
313
+ __PROVIDER_IMPORT__;
314
+
315
+ const result = streamText({
316
+ model: __MODEL__,
317
+ prompt: 'What is the weather in San Francisco?',
318
+ tools: {
319
+ // ... your tools
320
+ },
321
+
322
+ experimental_onStart({ model, system, prompt, messages }) {
323
+ console.log('Streaming started', { model, prompt });
324
+ },
325
+
326
+ experimental_onStepStart({ stepNumber, model, messages }) {
327
+ console.log(`Step ${stepNumber} starting`, { model: model.modelId });
328
+ },
329
+
330
+ experimental_onToolCallStart({ toolCall }) {
331
+ console.log(`Tool call starting: ${toolCall.toolName}`, {
332
+ toolCallId: toolCall.toolCallId,
333
+ });
334
+ },
335
+
336
+ experimental_onToolCallFinish({ toolCall, durationMs, success, error }) {
337
+ console.log(`Tool call finished: ${toolCall.toolName} (${durationMs}ms)`, {
338
+ success,
339
+ });
340
+ },
341
+
342
+ onStepFinish({ finishReason, usage }) {
343
+ console.log('Step finished', { finishReason, usage });
344
+ },
345
+ });
346
+ ```
347
+
348
+ The available lifecycle callbacks are:
349
+
350
+ - **`experimental_onStart`**: Called once when the `streamText` operation begins, before any LLM calls. Receives model info, prompt, settings, and telemetry metadata.
351
+ - **`experimental_onStepStart`**: Called before each step (LLM call). Receives the step number, model, messages being sent, tools, and prior steps.
352
+ - **`experimental_onToolCallStart`**: Called right before a tool's `execute` function runs. Receives the tool call object, messages, and context.
353
+ - **`experimental_onToolCallFinish`**: Called right after a tool's `execute` function completes or errors. Receives the tool call object, `durationMs`, and a discriminated union with `success`/`output` or `success`/`error`.
354
+ - **`onStepFinish`**: Called after each step finishes. Receives the finish reason, usage, and other step details.
355
+
356
+ ### `fullStream` property
357
+
358
+ You can read a stream with all events using the `fullStream` property.
359
+ This can be useful if you want to implement your own UI or handle the stream in a different way.
360
+ Here is an example of how to use the `fullStream` property:
361
+
362
+ ```tsx
363
+ import { streamText } from 'ai';
364
+ __PROVIDER_IMPORT__;
365
+ import { z } from 'zod';
366
+
367
+ const result = streamText({
368
+ model: __MODEL__,
369
+ tools: {
370
+ cityAttractions: {
371
+ inputSchema: z.object({ city: z.string() }),
372
+ execute: async ({ city }) => ({
373
+ attractions: ['attraction1', 'attraction2', 'attraction3'],
374
+ }),
375
+ },
376
+ },
377
+ prompt: 'What are some San Francisco tourist attractions?',
378
+ });
379
+
380
+ for await (const part of result.fullStream) {
381
+ switch (part.type) {
382
+ case 'start': {
383
+ // handle start of stream
384
+ break;
385
+ }
386
+ case 'start-step': {
387
+ // handle start of step
388
+ break;
389
+ }
390
+ case 'text-start': {
391
+ // handle text start
392
+ break;
393
+ }
394
+ case 'text-delta': {
395
+ // handle text delta here
396
+ break;
397
+ }
398
+ case 'text-end': {
399
+ // handle text end
400
+ break;
401
+ }
402
+ case 'reasoning-start': {
403
+ // handle reasoning start
404
+ break;
405
+ }
406
+ case 'reasoning-delta': {
407
+ // handle reasoning delta here
408
+ break;
409
+ }
410
+ case 'reasoning-end': {
411
+ // handle reasoning end
412
+ break;
413
+ }
414
+ case 'source': {
415
+ // handle source here
416
+ break;
417
+ }
418
+ case 'file': {
419
+ // handle file here
420
+ break;
421
+ }
422
+ case 'tool-call': {
423
+ switch (part.toolName) {
424
+ case 'cityAttractions': {
425
+ // handle tool call here
426
+ break;
427
+ }
428
+ }
429
+ break;
430
+ }
431
+ case 'tool-input-start': {
432
+ // handle tool input start
433
+ break;
434
+ }
435
+ case 'tool-input-delta': {
436
+ // handle tool input delta
437
+ break;
438
+ }
439
+ case 'tool-input-end': {
440
+ // handle tool input end
441
+ break;
442
+ }
443
+ case 'tool-result': {
444
+ switch (part.toolName) {
445
+ case 'cityAttractions': {
446
+ // handle tool result here
447
+ break;
448
+ }
449
+ }
450
+ break;
451
+ }
452
+ case 'tool-error': {
453
+ // handle tool error
454
+ break;
455
+ }
456
+ case 'finish-step': {
457
+ // handle finish step
458
+ break;
459
+ }
460
+ case 'finish': {
461
+ // handle finish here
462
+ break;
463
+ }
464
+ case 'error': {
465
+ // handle error here
466
+ break;
467
+ }
468
+ case 'raw': {
469
+ // handle raw value
470
+ break;
471
+ }
472
+ }
473
+ }
474
+ ```
475
+
476
+ ### Stream transformation
477
+
478
+ You can use the `experimental_transform` option to transform the stream.
479
+ This is useful for e.g. filtering, changing, or smoothing the text stream.
480
+
481
+ The transformations are applied before the callbacks are invoked and the promises are resolved.
482
+ If you e.g. have a transformation that changes all text to uppercase, the `onFinish` callback will receive the transformed text.
483
+
484
+ #### Smoothing streams
485
+
486
+ The AI SDK Core provides a [`smoothStream` function](/docs/reference/ai-sdk-core/smooth-stream) that
487
+ can be used to smooth out text and reasoning streaming.
488
+
489
+ ```tsx highlight="6"
490
+ import { smoothStream, streamText } from 'ai';
491
+
492
+ const result = streamText({
493
+ model,
494
+ prompt,
495
+ experimental_transform: smoothStream(),
496
+ });
497
+ ```
498
+
499
+ #### Custom transformations
500
+
501
+ You can also implement your own custom transformations.
502
+ The transformation function receives the tools that are available to the model,
503
+ and returns a function that is used to transform the stream.
504
+ Tools can either be generic or limited to the tools that you are using.
505
+
506
+ Here is an example of how to implement a custom transformation that converts
507
+ all text to uppercase:
508
+
509
+ ```ts
510
+ import { streamText, type TextStreamPart, type ToolSet } from 'ai';
511
+
512
+ const upperCaseTransform =
513
+ <TOOLS extends ToolSet>() =>
514
+ (options: { tools: TOOLS; stopStream: () => void }) =>
515
+ new TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>({
516
+ transform(chunk, controller) {
517
+ controller.enqueue(
518
+ // for text-delta chunks, convert the text to uppercase:
519
+ chunk.type === 'text-delta'
520
+ ? { ...chunk, text: chunk.text.toUpperCase() }
521
+ : chunk,
522
+ );
523
+ },
524
+ });
525
+ ```
526
+
527
+ You can also stop the stream using the `stopStream` function.
528
+ This is e.g. useful if you want to stop the stream when model guardrails are violated, e.g. by generating inappropriate content.
529
+
530
+ When you invoke `stopStream`, it is important to simulate the `finish-step` and `finish` events to guarantee that a well-formed stream is returned
531
+ and all callbacks are invoked.
532
+
533
+ ```ts
534
+ import { streamText, type TextStreamPart, type ToolSet } from 'ai';
535
+
536
+ const stopWordTransform =
537
+ <TOOLS extends ToolSet>() =>
538
+ ({ stopStream }: { stopStream: () => void }) =>
539
+ new TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>({
540
+ // note: this is a simplified transformation for testing;
541
+ // in a real-world version more there would need to be
542
+ // stream buffering and scanning to correctly emit prior text
543
+ // and to detect all STOP occurrences.
544
+ transform(chunk, controller) {
545
+ if (chunk.type !== 'text-delta') {
546
+ controller.enqueue(chunk);
547
+ return;
548
+ }
549
+
550
+ if (chunk.text.includes('STOP')) {
551
+ // stop the stream
552
+ stopStream();
553
+
554
+ // simulate the finish-step event
555
+ controller.enqueue({
556
+ type: 'finish-step',
557
+ finishReason: 'stop',
558
+ rawFinishReason: 'stop',
559
+ usage: {
560
+ completionTokens: NaN,
561
+ promptTokens: NaN,
562
+ totalTokens: NaN,
563
+ },
564
+ response: {
565
+ id: 'response-id',
566
+ modelId: 'mock-model-id',
567
+ timestamp: new Date(0),
568
+ },
569
+ providerMetadata: undefined,
570
+ });
571
+
572
+ // simulate the finish event
573
+ controller.enqueue({
574
+ type: 'finish',
575
+ finishReason: 'stop',
576
+ rawFinishReason: 'stop',
577
+ totalUsage: {
578
+ completionTokens: NaN,
579
+ promptTokens: NaN,
580
+ totalTokens: NaN,
581
+ },
582
+ });
583
+
584
+ return;
585
+ }
586
+
587
+ controller.enqueue(chunk);
588
+ },
589
+ });
590
+ ```
591
+
592
+ #### Multiple transformations
593
+
594
+ You can also provide multiple transformations. They are applied in the order they are provided.
595
+
596
+ ```tsx highlight="4"
597
+ const result = streamText({
598
+ model,
599
+ prompt,
600
+ experimental_transform: [firstTransform, secondTransform],
601
+ });
602
+ ```
603
+
604
+ ## Sources
605
+
606
+ Some providers such as [Perplexity](/providers/ai-sdk-providers/perplexity#sources) and
607
+ [Google Generative AI](/providers/ai-sdk-providers/google-generative-ai#sources) include sources in the response.
608
+
609
+ Currently sources are limited to web pages that ground the response.
610
+ You can access them using the `sources` property of the result.
611
+
612
+ Each `url` source contains the following properties:
613
+
614
+ - `id`: The ID of the source.
615
+ - `url`: The URL of the source.
616
+ - `title`: The optional title of the source.
617
+ - `providerMetadata`: Provider metadata for the source.
618
+
619
+ When you use `generateText`, you can access the sources using the `sources` property:
620
+
621
+ ```ts
622
+ const result = await generateText({
623
+ model: 'google/gemini-2.5-flash',
624
+ tools: {
625
+ google_search: google.tools.googleSearch({}),
626
+ },
627
+ prompt: 'List the top 5 San Francisco news from the past week.',
628
+ });
629
+
630
+ for (const source of result.sources) {
631
+ if (source.sourceType === 'url') {
632
+ console.log('ID:', source.id);
633
+ console.log('Title:', source.title);
634
+ console.log('URL:', source.url);
635
+ console.log('Provider metadata:', source.providerMetadata);
636
+ console.log();
637
+ }
638
+ }
639
+ ```
640
+
641
+ When you use `streamText`, you can access the sources using the `fullStream` property:
642
+
643
+ ```tsx
644
+ const result = streamText({
645
+ model: 'google/gemini-2.5-flash',
646
+ tools: {
647
+ google_search: google.tools.googleSearch({}),
648
+ },
649
+ prompt: 'List the top 5 San Francisco news from the past week.',
650
+ });
651
+
652
+ for await (const part of result.fullStream) {
653
+ if (part.type === 'source' && part.sourceType === 'url') {
654
+ console.log('ID:', part.id);
655
+ console.log('Title:', part.title);
656
+ console.log('URL:', part.url);
657
+ console.log('Provider metadata:', part.providerMetadata);
658
+ console.log();
659
+ }
660
+ }
661
+ ```
662
+
663
+ The sources are also available in the `result.sources` promise.
664
+
665
+ ## Examples
666
+
667
+ You can see `generateText` and `streamText` in action using various frameworks in the following examples:
668
+
669
+ ### `generateText`
670
+
671
+ <ExampleLinks
672
+ examples={[
673
+ {
674
+ title: 'Learn to generate text in Node.js',
675
+ link: '/examples/node/generating-text/generate-text',
676
+ },
677
+ {
678
+ title:
679
+ 'Learn to generate text in Next.js with Route Handlers (AI SDK UI)',
680
+ link: '/examples/next-pages/basics/generating-text',
681
+ },
682
+ {
683
+ title:
684
+ 'Learn to generate text in Next.js with Server Actions (AI SDK RSC)',
685
+ link: '/examples/next-app/basics/generating-text',
686
+ },
687
+ ]}
688
+ />
689
+
690
+ ### `streamText`
691
+
692
+ <ExampleLinks
693
+ examples={[
694
+ {
695
+ title: 'Learn to stream text in Node.js',
696
+ link: '/examples/node/generating-text/stream-text',
697
+ },
698
+ {
699
+ title: 'Learn to stream text in Next.js with Route Handlers (AI SDK UI)',
700
+ link: '/examples/next-pages/basics/streaming-text-generation',
701
+ },
702
+ {
703
+ title: 'Learn to stream text in Next.js with Server Actions (AI SDK RSC)',
704
+ link: '/examples/next-app/basics/streaming-text-generation',
705
+ },
706
+ ]}
707
+ />