ai 6.0.31 → 6.0.33

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 (252) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/index.js +12 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +12 -2
  5. package/dist/index.mjs.map +1 -1
  6. package/dist/internal/index.js +1 -1
  7. package/dist/internal/index.mjs +1 -1
  8. package/docs/00-introduction/index.mdx +76 -0
  9. package/docs/02-foundations/01-overview.mdx +43 -0
  10. package/docs/02-foundations/02-providers-and-models.mdx +163 -0
  11. package/docs/02-foundations/03-prompts.mdx +620 -0
  12. package/docs/02-foundations/04-tools.mdx +160 -0
  13. package/docs/02-foundations/05-streaming.mdx +62 -0
  14. package/docs/02-foundations/index.mdx +43 -0
  15. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  16. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  17. package/docs/02-getting-started/02-nextjs-app-router.mdx +556 -0
  18. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  19. package/docs/02-getting-started/04-svelte.mdx +627 -0
  20. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  21. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  22. package/docs/02-getting-started/07-expo.mdx +766 -0
  23. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  24. package/docs/02-getting-started/index.mdx +44 -0
  25. package/docs/03-agents/01-overview.mdx +96 -0
  26. package/docs/03-agents/02-building-agents.mdx +367 -0
  27. package/docs/03-agents/03-workflows.mdx +370 -0
  28. package/docs/03-agents/04-loop-control.mdx +350 -0
  29. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  30. package/docs/03-agents/index.mdx +40 -0
  31. package/docs/03-ai-sdk-core/01-overview.mdx +33 -0
  32. package/docs/03-ai-sdk-core/05-generating-text.mdx +600 -0
  33. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +662 -0
  34. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1102 -0
  35. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +375 -0
  36. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +144 -0
  37. package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
  38. package/docs/03-ai-sdk-core/30-embeddings.mdx +247 -0
  39. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  40. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  41. package/docs/03-ai-sdk-core/36-transcription.mdx +173 -0
  42. package/docs/03-ai-sdk-core/37-speech.mdx +167 -0
  43. package/docs/03-ai-sdk-core/40-middleware.mdx +480 -0
  44. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  45. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  46. package/docs/03-ai-sdk-core/55-testing.mdx +218 -0
  47. package/docs/03-ai-sdk-core/60-telemetry.mdx +313 -0
  48. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  49. package/docs/03-ai-sdk-core/index.mdx +88 -0
  50. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  51. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
  52. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  53. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  54. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  55. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  56. package/docs/04-ai-sdk-ui/05-completion.mdx +186 -0
  57. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  58. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  59. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  60. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  61. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  62. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  63. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +477 -0
  64. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  65. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  66. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  67. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  68. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  69. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  70. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +158 -0
  71. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  72. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +96 -0
  73. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  74. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  75. package/docs/05-ai-sdk-rsc/index.mdx +58 -0
  76. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  77. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  78. package/docs/06-advanced/03-backpressure.mdx +173 -0
  79. package/docs/06-advanced/04-caching.mdx +169 -0
  80. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  81. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  82. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +213 -0
  83. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  84. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  85. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  86. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  87. package/docs/06-advanced/index.mdx +11 -0
  88. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2142 -0
  89. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3215 -0
  90. package/docs/07-reference/01-ai-sdk-core/03-generate-object.mdx +780 -0
  91. package/docs/07-reference/01-ai-sdk-core/04-stream-object.mdx +1140 -0
  92. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +190 -0
  93. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +171 -0
  94. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  95. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +227 -0
  96. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +138 -0
  97. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +214 -0
  98. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +203 -0
  99. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +449 -0
  100. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +148 -0
  101. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +168 -0
  102. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +144 -0
  103. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +196 -0
  104. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +175 -0
  105. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +410 -0
  106. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  107. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  108. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  109. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +55 -0
  110. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  111. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +415 -0
  112. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -0
  113. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  114. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  115. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +182 -0
  116. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +121 -0
  117. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  118. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  119. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  120. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +46 -0
  121. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  122. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  123. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  124. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  125. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  126. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  127. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  128. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  129. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  130. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +43 -0
  131. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  132. package/docs/07-reference/01-ai-sdk-core/index.mdx +159 -0
  133. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +446 -0
  134. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +179 -0
  135. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +178 -0
  136. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +230 -0
  137. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  138. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +151 -0
  139. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +113 -0
  140. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +73 -0
  141. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  142. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  143. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  144. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  145. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  146. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  147. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  148. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  149. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +48 -0
  150. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +78 -0
  151. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  152. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  153. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  154. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  155. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  156. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  157. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +262 -0
  158. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  159. package/docs/07-reference/04-stream-helpers/01-ai-stream.mdx +89 -0
  160. package/docs/07-reference/04-stream-helpers/02-streaming-text-response.mdx +79 -0
  161. package/docs/07-reference/04-stream-helpers/05-stream-to-response.mdx +108 -0
  162. package/docs/07-reference/04-stream-helpers/07-openai-stream.mdx +77 -0
  163. package/docs/07-reference/04-stream-helpers/08-anthropic-stream.mdx +79 -0
  164. package/docs/07-reference/04-stream-helpers/09-aws-bedrock-stream.mdx +91 -0
  165. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-anthropic-stream.mdx +96 -0
  166. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-messages-stream.mdx +96 -0
  167. package/docs/07-reference/04-stream-helpers/11-aws-bedrock-cohere-stream.mdx +93 -0
  168. package/docs/07-reference/04-stream-helpers/12-aws-bedrock-llama-2-stream.mdx +93 -0
  169. package/docs/07-reference/04-stream-helpers/13-cohere-stream.mdx +78 -0
  170. package/docs/07-reference/04-stream-helpers/14-google-generative-ai-stream.mdx +85 -0
  171. package/docs/07-reference/04-stream-helpers/15-hugging-face-stream.mdx +84 -0
  172. package/docs/07-reference/04-stream-helpers/16-langchain-adapter.mdx +98 -0
  173. package/docs/07-reference/04-stream-helpers/16-llamaindex-adapter.mdx +70 -0
  174. package/docs/07-reference/04-stream-helpers/17-mistral-stream.mdx +81 -0
  175. package/docs/07-reference/04-stream-helpers/18-replicate-stream.mdx +83 -0
  176. package/docs/07-reference/04-stream-helpers/19-inkeep-stream.mdx +80 -0
  177. package/docs/07-reference/04-stream-helpers/index.mdx +103 -0
  178. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +30 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +27 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +25 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content.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 +25 -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-speech-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +25 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +26 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  207. package/docs/07-reference/05-ai-sdk-errors/index.mdx +38 -0
  208. package/docs/07-reference/index.mdx +34 -0
  209. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  210. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  211. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  212. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  213. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  214. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  215. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  216. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  217. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  218. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  219. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  220. package/docs/08-migration-guides/index.mdx +22 -0
  221. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  222. package/docs/09-troubleshooting/02-client-side-function-calls-not-invoked.mdx +22 -0
  223. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  224. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  225. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  226. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  227. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  228. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  229. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  230. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  231. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  232. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  233. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  234. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  235. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  236. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  237. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  238. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  239. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  240. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  241. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  242. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  243. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  244. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  245. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  246. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +72 -0
  247. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  248. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  249. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  250. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  251. package/docs/09-troubleshooting/index.mdx +11 -0
  252. package/package.json +8 -4
@@ -0,0 +1,178 @@
1
+ ---
2
+ title: useObject
3
+ description: API reference for the useObject hook.
4
+ ---
5
+
6
+ # `experimental_useObject()`
7
+
8
+ <Note>
9
+ `useObject` is an experimental feature and only available in React, Svelte,
10
+ and Vue.
11
+ </Note>
12
+
13
+ Allows you to consume text streams that represent a JSON object and parse them into a complete object based on a schema.
14
+ You can use it together with [`streamText`](/docs/reference/ai-sdk-core/stream-text) and [`Output.object()`](/docs/reference/ai-sdk-core/output#output-object) in the backend.
15
+
16
+ ```tsx
17
+ 'use client';
18
+
19
+ import { experimental_useObject as useObject } from '@ai-sdk/react';
20
+
21
+ export default function Page() {
22
+ const { object, submit } = useObject({
23
+ api: '/api/use-object',
24
+ schema: z.object({ content: z.string() }),
25
+ });
26
+
27
+ return (
28
+ <div>
29
+ <button onClick={() => submit('example input')}>Generate</button>
30
+ {object?.content && <p>{object.content}</p>}
31
+ </div>
32
+ );
33
+ }
34
+ ```
35
+
36
+ ## Import
37
+
38
+ <Snippet
39
+ text="import { experimental_useObject as useObject } from '@ai-sdk/react'"
40
+ dark
41
+ prompt={false}
42
+ />
43
+
44
+ ## API Signature
45
+
46
+ ### Parameters
47
+
48
+ <PropertiesTable
49
+ content={[
50
+ {
51
+ name: 'api',
52
+ type: 'string',
53
+ description:
54
+ 'The API endpoint that is called to generate objects. It should stream JSON that matches the schema as chunked text. It can be a relative path (starting with `/`) or an absolute URL.',
55
+ },
56
+ {
57
+ name: 'schema',
58
+ type: 'Zod Schema | JSON Schema',
59
+ description:
60
+ 'A schema that defines the shape of the complete object. You can either pass in a Zod schema or a JSON schema (using the `jsonSchema` function).',
61
+ },
62
+ {
63
+ name: 'id?',
64
+ type: 'string',
65
+ description:
66
+ 'A unique identifier. If not provided, a random one will be generated. When provided, the `useObject` hook with the same `id` will have shared states across components.',
67
+ },
68
+ {
69
+ name: 'initialValue',
70
+ type: 'DeepPartial<RESULT> | undefined',
71
+ isOptional: true,
72
+ description: 'An value for the initial object. Optional.',
73
+ },
74
+ {
75
+ name: 'fetch',
76
+ type: 'FetchFunction',
77
+ isOptional: true,
78
+ description:
79
+ 'A custom fetch function to be used for the API call. Defaults to the global fetch function. Optional.',
80
+ },
81
+ {
82
+ name: 'headers',
83
+ type: 'Record<string, string> | Headers',
84
+ isOptional: true,
85
+ description:
86
+ 'A headers object to be passed to the API endpoint. Optional.',
87
+ },
88
+ {
89
+ name: 'credentials',
90
+ type: 'RequestCredentials',
91
+ isOptional: true,
92
+ description:
93
+ 'The credentials mode to be used for the fetch request. Possible values are: "omit", "same-origin", "include". Optional.',
94
+ },
95
+ {
96
+ name: 'onError',
97
+ type: '(error: Error) => void',
98
+ isOptional: true,
99
+ description:
100
+ 'Callback function to be called when an error is encountered. Optional.',
101
+ },
102
+ {
103
+ name: 'onFinish',
104
+ type: '(result: OnFinishResult) => void',
105
+ isOptional: true,
106
+ description: 'Called when the streaming response has finished.',
107
+ properties: [
108
+ {
109
+ type: 'OnFinishResult',
110
+ parameters: [
111
+ {
112
+ name: 'object',
113
+ type: 'T | undefined',
114
+ description:
115
+ 'The generated object (typed according to the schema). Can be undefined if the final object does not match the schema.',
116
+ },
117
+ {
118
+ name: 'error',
119
+ type: 'unknown | undefined',
120
+ description:
121
+ 'Optional error object. This is e.g. a TypeValidationError when the final object does not match the schema.',
122
+ },
123
+ ],
124
+ },
125
+ ],
126
+ },
127
+ ]}
128
+ />
129
+
130
+ ### Returns
131
+
132
+ <PropertiesTable
133
+ content={[
134
+ {
135
+ name: 'submit',
136
+ type: '(input: INPUT) => void',
137
+ description: 'Calls the API with the provided input as JSON body.',
138
+ },
139
+ {
140
+ name: 'object',
141
+ type: 'DeepPartial<RESULT> | undefined',
142
+ description:
143
+ 'The current value for the generated object. Updated as the API streams JSON chunks.',
144
+ },
145
+ {
146
+ name: 'error',
147
+ type: 'Error | unknown',
148
+ description: 'The error object if the API call fails.',
149
+ },
150
+ {
151
+ name: 'isLoading',
152
+ type: 'boolean',
153
+ description:
154
+ 'Boolean flag indicating whether a request is currently in progress.',
155
+ },
156
+ {
157
+ name: 'stop',
158
+ type: '() => void',
159
+ description: 'Function to abort the current API request.',
160
+ },
161
+ {
162
+ name: 'clear',
163
+ type: '() => void',
164
+ description: 'Function to clear the object state.',
165
+ },
166
+ ]}
167
+ />
168
+
169
+ ## Examples
170
+
171
+ <ExampleLinks
172
+ examples={[
173
+ {
174
+ title: 'Streaming Object Generation with useObject',
175
+ link: '/examples/next-pages/basics/streaming-object-generation',
176
+ },
177
+ ]}
178
+ />
@@ -0,0 +1,230 @@
1
+ ---
2
+ title: convertToModelMessages
3
+ description: Convert useChat messages to ModelMessages for AI functions (API Reference)
4
+ ---
5
+
6
+ # `convertToModelMessages()`
7
+
8
+ The `convertToModelMessages` function is used to transform an array of UI messages from the `useChat` hook into an array of `ModelMessage` objects. These `ModelMessage` objects are compatible with AI core functions like `streamText`.
9
+
10
+ ```ts filename="app/api/chat/route.ts"
11
+ import { convertToModelMessages, streamText } from 'ai';
12
+ __PROVIDER_IMPORT__;
13
+
14
+ export async function POST(req: Request) {
15
+ const { messages } = await req.json();
16
+
17
+ const result = streamText({
18
+ model: __MODEL__,
19
+ messages: await convertToModelMessages(messages),
20
+ });
21
+
22
+ return result.toUIMessageStreamResponse();
23
+ }
24
+ ```
25
+
26
+ ## Import
27
+
28
+ <Snippet text={`import { convertToModelMessages } from "ai"`} prompt={false} />
29
+
30
+ ## API Signature
31
+
32
+ ### Parameters
33
+
34
+ <PropertiesTable
35
+ content={[
36
+ {
37
+ name: 'messages',
38
+ type: 'Message[]',
39
+ description:
40
+ 'An array of UI messages from the useChat hook to be converted',
41
+ },
42
+ {
43
+ name: 'options',
44
+ type: '{ tools?: ToolSet, convertDataPart?: (part: DataUIPart) => TextPart | FilePart | null }',
45
+ description:
46
+ 'Optional configuration object. Provide tools to enable multi-modal tool responses, and convertDataPart to transform custom data parts into model-compatible content.',
47
+ },
48
+ ]}
49
+ />
50
+
51
+ ### Returns
52
+
53
+ An array of [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) objects.
54
+
55
+ <PropertiesTable
56
+ content={[
57
+ {
58
+ name: 'ModelMessage[]',
59
+ type: 'Array',
60
+ description: 'An array of ModelMessage objects',
61
+ },
62
+ ]}
63
+ />
64
+
65
+ ## Multi-modal Tool Responses
66
+
67
+ The `convertToModelMessages` function supports tools that can return multi-modal content. This is useful when tools need to return non-text content like images.
68
+
69
+ ```ts
70
+ import { tool } from 'ai';
71
+ __PROVIDER_IMPORT__;
72
+ import { z } from 'zod';
73
+
74
+ const screenshotTool = tool({
75
+ inputSchema: z.object({}),
76
+ execute: async () => 'imgbase64',
77
+ toModelOutput: ({ output }) => [{ type: 'image', data: output }],
78
+ });
79
+
80
+ const result = streamText({
81
+ model: __MODEL__,
82
+ messages: convertToModelMessages(messages, {
83
+ tools: {
84
+ screenshot: screenshotTool,
85
+ },
86
+ }),
87
+ });
88
+ ```
89
+
90
+ Tools can implement the optional `toModelOutput` method to transform their results into multi-modal content. The content is an array of content parts, where each part has a `type` (e.g., 'text', 'image') and corresponding data.
91
+
92
+ ## Custom Data Part Conversion
93
+
94
+ The `convertToModelMessages` function supports converting custom data parts attached to user messages. This is useful when users need to include additional context (URLs, code files, JSON configs) with their messages.
95
+
96
+ ### Basic Usage
97
+
98
+ By default, data parts in user messages are filtered out during conversion. To include them, provide a `convertDataPart` callback that transforms data parts into text or file parts that the model can understand:
99
+
100
+ ```ts filename="app/api/chat/route.ts"
101
+ import { convertToModelMessages, streamText } from 'ai';
102
+
103
+ type CustomUIMessage = UIMessage<
104
+ never,
105
+ {
106
+ url: { url: string; title: string; content: string };
107
+ 'code-file': { filename: string; code: string; language: string };
108
+ }
109
+ >;
110
+
111
+ export async function POST(req: Request) {
112
+ const { messages } = await req.json();
113
+
114
+ const result = streamText({
115
+ model: __MODEL__,
116
+ messages: convertToModelMessages<CustomUIMessage>(messages, {
117
+ convertDataPart: part => {
118
+ // Convert URL attachments to text
119
+ if (part.type === 'data-url') {
120
+ return {
121
+ type: 'text',
122
+ text: `[Reference: ${part.data.title}](${part.data.url})\n\n${part.data.content}`,
123
+ };
124
+ }
125
+
126
+ // Convert code file attachments
127
+ if (part.type === 'data-code-file') {
128
+ return {
129
+ type: 'text',
130
+ text: `\`\`\`${part.data.language}\n// ${part.data.filename}\n${part.data.code}\n\`\`\``,
131
+ };
132
+ }
133
+
134
+ // Other data parts are ignored
135
+ },
136
+ }),
137
+ });
138
+
139
+ return result.toUIMessageStreamResponse();
140
+ }
141
+ ```
142
+
143
+ ### Use Cases
144
+
145
+ **Attaching URL Content**
146
+ Allow users to attach URLs to their messages, with the content fetched and formatted for the model:
147
+
148
+ ```ts
149
+ // Client side
150
+ sendMessage({
151
+ parts: [
152
+ { type: 'text', text: 'Analyze this article' },
153
+ {
154
+ type: 'data-url',
155
+ data: {
156
+ url: 'https://example.com/article',
157
+ title: 'Important Article',
158
+ content: '...',
159
+ },
160
+ },
161
+ ],
162
+ });
163
+ ```
164
+
165
+ **Including Code Files as Context**
166
+ Let users reference code files in their conversations:
167
+
168
+ ```ts
169
+ convertDataPart: part => {
170
+ if (part.type === 'data-code-file') {
171
+ return {
172
+ type: 'text',
173
+ text: `\`\`\`${part.data.language}\n${part.data.code}\n\`\`\``,
174
+ };
175
+ }
176
+ };
177
+ ```
178
+
179
+ **Selective Inclusion**
180
+ Only data parts for which you return a text or file model message part are included,
181
+ all other data parts are ignored.
182
+
183
+ ```ts
184
+ const result = convertToModelMessages<
185
+ UIMessage<
186
+ unknown,
187
+ {
188
+ url: { url: string; title: string };
189
+ code: { code: string; language: string };
190
+ note: { text: string };
191
+ }
192
+ >
193
+ >(messages, {
194
+ convertDataPart: part => {
195
+ if (part.type === 'data-url') {
196
+ return {
197
+ type: 'text',
198
+ text: `[${part.data.title}](${part.data.url})`,
199
+ };
200
+ }
201
+
202
+ // data-code and data-node are ignored
203
+ },
204
+ });
205
+ ```
206
+
207
+ ### Type Safety
208
+
209
+ The generic parameter ensures full type safety for your custom data parts:
210
+
211
+ ```ts
212
+ type MyUIMessage = UIMessage<
213
+ unknown,
214
+ {
215
+ url: { url: string; content: string };
216
+ config: { key: string; value: string };
217
+ }
218
+ >;
219
+
220
+ // TypeScript knows the exact shape of part.data
221
+ convertToModelMessages<MyUIMessage>(messages, {
222
+ convertDataPart: part => {
223
+ if (part.type === 'data-url') {
224
+ // part.data is typed as { url: string; content: string }
225
+ return { type: 'text', text: part.data.url };
226
+ }
227
+ return null;
228
+ },
229
+ });
230
+ ```
@@ -0,0 +1,108 @@
1
+ ---
2
+ title: pruneMessages
3
+ description: API Reference for pruneMessages.
4
+ ---
5
+
6
+ # `pruneMessages()`
7
+
8
+ The `pruneMessages` function is used to prune or filter an array of `ModelMessage` objects. This is useful for reducing message context (to save tokens), removing intermediate reasoning, or trimming tool calls and empty messages before sending to an LLM.
9
+
10
+ ```ts filename="app/api/chat/route.ts"
11
+ import { pruneMessages, streamText } from 'ai';
12
+ __PROVIDER_IMPORT__;
13
+
14
+ export async function POST(req: Request) {
15
+ const { messages } = await req.json();
16
+
17
+ const prunedMessages = pruneMessages({
18
+ messages,
19
+ reasoning: 'before-last-message',
20
+ toolCalls: 'before-last-2-messages',
21
+ emptyMessages: 'remove',
22
+ });
23
+
24
+ const result = streamText({
25
+ model: __MODEL__,
26
+ messages: prunedMessages,
27
+ });
28
+
29
+ return result.toUIMessageStreamResponse();
30
+ }
31
+ ```
32
+
33
+ ## Import
34
+
35
+ <Snippet text={`import { pruneMessages } from "ai"`} prompt={false} />
36
+
37
+ ## API Signature
38
+
39
+ ### Parameters
40
+
41
+ <PropertiesTable
42
+ content={[
43
+ {
44
+ name: 'messages',
45
+ type: 'ModelMessage[]',
46
+ description: 'An array of ModelMessage objects to prune.',
47
+ },
48
+ {
49
+ name: 'reasoning',
50
+ type: `'all' | 'before-last-message' | 'none'`,
51
+ description:
52
+ 'How to remove reasoning content from assistant messages. Default: "none".',
53
+ },
54
+ {
55
+ name: 'toolCalls',
56
+ type: `'all' | 'before-last-message' | 'before-last-\${number}-messages\' | 'none' | PruneToolCallsOption[]`,
57
+ description:
58
+ 'How to prune tool call/results/approval content. Can specify strategy or a list with tools.',
59
+ },
60
+ {
61
+ name: 'emptyMessages',
62
+ type: `'keep' | 'remove'`,
63
+ description:
64
+ 'Whether to keep or remove messages whose content is empty after pruning. Default: "remove".',
65
+ },
66
+ ]}
67
+ />
68
+
69
+ ### Returns
70
+
71
+ An array of [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) objects, pruned according to the provided options.
72
+
73
+ <PropertiesTable
74
+ content={[
75
+ {
76
+ name: 'ModelMessage[]',
77
+ type: 'Array',
78
+ description: 'The pruned list of ModelMessage objects',
79
+ },
80
+ ]}
81
+ />
82
+
83
+ ## Example Usage
84
+
85
+ ```ts
86
+ import { pruneMessages } from 'ai';
87
+
88
+ const pruned = pruneMessages({
89
+ messages,
90
+ reasoning: 'all', // Remove all reasoning parts
91
+ toolCalls: 'before-last-message', // Remove tool calls except those in the last message
92
+ });
93
+ ```
94
+
95
+ ## Pruning Options
96
+
97
+ - **reasoning:** Removes reasoning parts from assistant messages. Use `'all'` to remove all, `'before-last-message'` to keep reasoning in the last message, or `'none'` to retain all reasoning.
98
+ - **toolCalls:** Prune tool-call, tool-result, and tool-approval chunks from assistant/tool messages. Options include:
99
+ - `'all'`: Prune all such content.
100
+ - `'before-last-message'`: Prune except in the last message.
101
+ - `before-last-N-messages`: Prune except in the last N messages.
102
+ - `'none'`: Do not prune.
103
+ - Or provide an array for per-tool fine control.
104
+ - **emptyMessages:** Set to `'remove'` (default) to exclude messages that have no content after pruning.
105
+
106
+ > **Tip**: `pruneMessages` is typically used prior to sending a context window to an LLM to reduce message/token count, especially after a series of tool-calls and approvals.
107
+
108
+ For advanced usage and the full list of possible message parts, see [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) and [`pruneMessages` implementation](https://github.com/vercel/ai/blob/main/packages/ai/src/generate-text/prune-messages.ts).
@@ -0,0 +1,151 @@
1
+ ---
2
+ title: createUIMessageStream
3
+ description: API Reference for createUIMessageStream.
4
+ ---
5
+
6
+ # `createUIMessageStream`
7
+
8
+ The `createUIMessageStream` function allows you to create a readable stream for UI messages with advanced features like message merging, error handling, and finish callbacks.
9
+
10
+ ## Import
11
+
12
+ <Snippet text={`import { createUIMessageStream } from "ai"`} prompt={false} />
13
+
14
+ ## Example
15
+
16
+ ```tsx
17
+ const existingMessages: UIMessage[] = [
18
+ /* ... */
19
+ ];
20
+
21
+ const stream = createUIMessageStream({
22
+ async execute({ writer }) {
23
+ // Start a text message
24
+ // Note: The id must be consistent across text-start, text-delta, and text-end steps
25
+ // This allows the system to correctly identify they belong to the same text block
26
+ writer.write({
27
+ type: 'text-start',
28
+ id: 'example-text',
29
+ });
30
+
31
+ // Write a message chunk
32
+ writer.write({
33
+ type: 'text-delta',
34
+ id: 'example-text',
35
+ delta: 'Hello',
36
+ });
37
+
38
+ // End the text message
39
+ writer.write({
40
+ type: 'text-end',
41
+ id: 'example-text',
42
+ });
43
+
44
+ // Merge another stream from streamText
45
+ const result = streamText({
46
+ model: __MODEL__,
47
+ prompt: 'Write a haiku about AI',
48
+ });
49
+
50
+ writer.merge(result.toUIMessageStream());
51
+ },
52
+ onError: error => `Custom error: ${error.message}`,
53
+ originalMessages: existingMessages,
54
+ onFinish: ({ messages, isContinuation, responseMessage }) => {
55
+ console.log('Stream finished with messages:', messages);
56
+ },
57
+ });
58
+ ```
59
+
60
+ ## API Signature
61
+
62
+ ### Parameters
63
+
64
+ <PropertiesTable
65
+ content={[
66
+ {
67
+ name: 'execute',
68
+ type: '(options: { writer: UIMessageStreamWriter }) => Promise<void> | void',
69
+ description:
70
+ 'A function that receives a writer instance and can use it to write UI message chunks to the stream.',
71
+ properties: [
72
+ {
73
+ type: 'UIMessageStreamWriter',
74
+ parameters: [
75
+ {
76
+ name: 'write',
77
+ type: '(part: UIMessageChunk) => void',
78
+ description: 'Writes a UI message chunk to the stream.',
79
+ },
80
+ {
81
+ name: 'merge',
82
+ type: '(stream: ReadableStream<UIMessageChunk>) => void',
83
+ description:
84
+ 'Merges the contents of another UI message stream into this stream.',
85
+ },
86
+ {
87
+ name: 'onError',
88
+ type: '(error: unknown) => string',
89
+ description:
90
+ 'Error handler that is used by the stream writer for handling errors in merged streams.',
91
+ },
92
+ ],
93
+ },
94
+ ],
95
+ },
96
+ {
97
+ name: 'onError',
98
+ type: '(error: unknown) => string',
99
+ description:
100
+ 'A function that handles errors and returns an error message string. By default, it returns the error message.',
101
+ },
102
+ {
103
+ name: 'originalMessages',
104
+ type: 'UIMessage[] | undefined',
105
+ description:
106
+ 'The original messages. If provided, persistence mode is assumed and a message ID is provided for the response message.',
107
+ },
108
+ {
109
+ name: 'onFinish',
110
+ type: '(options: { messages: UIMessage[]; isContinuation: boolean; responseMessage: UIMessage }) => void | undefined',
111
+ description:
112
+ 'A callback function that is called when the stream finishes.',
113
+ properties: [
114
+ {
115
+ type: 'FinishOptions',
116
+ parameters: [
117
+ {
118
+ name: 'messages',
119
+ type: 'UIMessage[]',
120
+ description: 'The updated list of UI messages.',
121
+ },
122
+ {
123
+ name: 'isContinuation',
124
+ type: 'boolean',
125
+ description:
126
+ 'Indicates whether the response message is a continuation of the last original message, or if a new message was created.',
127
+ },
128
+ {
129
+ name: 'responseMessage',
130
+ type: 'UIMessage',
131
+ description:
132
+ 'The message that was sent to the client as a response (including the original message if it was extended).',
133
+ },
134
+ ],
135
+ },
136
+ ],
137
+ },
138
+ {
139
+ name: 'generateId',
140
+ type: 'IdGenerator | undefined',
141
+ description:
142
+ 'A function to generate unique IDs for messages. Uses the default ID generator if not provided.',
143
+ },
144
+ ]}
145
+ />
146
+
147
+ ### Returns
148
+
149
+ `ReadableStream<UIMessageChunk>`
150
+
151
+ A readable stream that emits UI message chunks. The stream automatically handles error propagation, merging of multiple streams, and proper cleanup when all operations are complete.