ai 6.0.31 → 6.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/dist/internal/index.mjs +1 -1
  6. package/docs/00-introduction/index.mdx +76 -0
  7. package/docs/02-foundations/01-overview.mdx +43 -0
  8. package/docs/02-foundations/02-providers-and-models.mdx +163 -0
  9. package/docs/02-foundations/03-prompts.mdx +620 -0
  10. package/docs/02-foundations/04-tools.mdx +160 -0
  11. package/docs/02-foundations/05-streaming.mdx +62 -0
  12. package/docs/02-foundations/index.mdx +43 -0
  13. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  14. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  15. package/docs/02-getting-started/02-nextjs-app-router.mdx +556 -0
  16. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  17. package/docs/02-getting-started/04-svelte.mdx +627 -0
  18. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  19. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  20. package/docs/02-getting-started/07-expo.mdx +766 -0
  21. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  22. package/docs/02-getting-started/index.mdx +44 -0
  23. package/docs/03-agents/01-overview.mdx +96 -0
  24. package/docs/03-agents/02-building-agents.mdx +367 -0
  25. package/docs/03-agents/03-workflows.mdx +370 -0
  26. package/docs/03-agents/04-loop-control.mdx +350 -0
  27. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  28. package/docs/03-agents/index.mdx +40 -0
  29. package/docs/03-ai-sdk-core/01-overview.mdx +33 -0
  30. package/docs/03-ai-sdk-core/05-generating-text.mdx +600 -0
  31. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +662 -0
  32. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1102 -0
  33. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +375 -0
  34. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +144 -0
  35. package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
  36. package/docs/03-ai-sdk-core/30-embeddings.mdx +247 -0
  37. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  38. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  39. package/docs/03-ai-sdk-core/36-transcription.mdx +173 -0
  40. package/docs/03-ai-sdk-core/37-speech.mdx +167 -0
  41. package/docs/03-ai-sdk-core/40-middleware.mdx +480 -0
  42. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  43. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  44. package/docs/03-ai-sdk-core/55-testing.mdx +218 -0
  45. package/docs/03-ai-sdk-core/60-telemetry.mdx +313 -0
  46. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  47. package/docs/03-ai-sdk-core/index.mdx +88 -0
  48. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  49. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
  50. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  51. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  52. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  53. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  54. package/docs/04-ai-sdk-ui/05-completion.mdx +186 -0
  55. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  56. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  57. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  58. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  59. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  60. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  61. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +477 -0
  62. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  63. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  64. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  65. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  66. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  67. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  68. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +158 -0
  69. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  70. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +96 -0
  71. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  72. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  73. package/docs/05-ai-sdk-rsc/index.mdx +58 -0
  74. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  75. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  76. package/docs/06-advanced/03-backpressure.mdx +173 -0
  77. package/docs/06-advanced/04-caching.mdx +169 -0
  78. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  79. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  80. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +213 -0
  81. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  82. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  83. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  84. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  85. package/docs/06-advanced/index.mdx +11 -0
  86. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2142 -0
  87. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3215 -0
  88. package/docs/07-reference/01-ai-sdk-core/03-generate-object.mdx +780 -0
  89. package/docs/07-reference/01-ai-sdk-core/04-stream-object.mdx +1140 -0
  90. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +190 -0
  91. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +171 -0
  92. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  93. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +227 -0
  94. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +138 -0
  95. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +214 -0
  96. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +203 -0
  97. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +449 -0
  98. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +148 -0
  99. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +168 -0
  100. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +144 -0
  101. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +196 -0
  102. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +175 -0
  103. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +410 -0
  104. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  105. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  106. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  107. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +55 -0
  108. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  109. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +415 -0
  110. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -0
  111. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  112. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  113. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +182 -0
  114. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +121 -0
  115. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  116. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  117. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  118. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +46 -0
  119. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  120. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  121. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  122. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  123. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  124. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  125. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  126. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  128. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +43 -0
  129. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  130. package/docs/07-reference/01-ai-sdk-core/index.mdx +159 -0
  131. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +446 -0
  132. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +179 -0
  133. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +178 -0
  134. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +230 -0
  135. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  136. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +151 -0
  137. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +113 -0
  138. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +73 -0
  139. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  140. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  141. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  142. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  143. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  144. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  145. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  146. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  147. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +48 -0
  148. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +78 -0
  149. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  150. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  151. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  152. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  153. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  154. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  155. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +262 -0
  156. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  157. package/docs/07-reference/04-stream-helpers/01-ai-stream.mdx +89 -0
  158. package/docs/07-reference/04-stream-helpers/02-streaming-text-response.mdx +79 -0
  159. package/docs/07-reference/04-stream-helpers/05-stream-to-response.mdx +108 -0
  160. package/docs/07-reference/04-stream-helpers/07-openai-stream.mdx +77 -0
  161. package/docs/07-reference/04-stream-helpers/08-anthropic-stream.mdx +79 -0
  162. package/docs/07-reference/04-stream-helpers/09-aws-bedrock-stream.mdx +91 -0
  163. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-anthropic-stream.mdx +96 -0
  164. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-messages-stream.mdx +96 -0
  165. package/docs/07-reference/04-stream-helpers/11-aws-bedrock-cohere-stream.mdx +93 -0
  166. package/docs/07-reference/04-stream-helpers/12-aws-bedrock-llama-2-stream.mdx +93 -0
  167. package/docs/07-reference/04-stream-helpers/13-cohere-stream.mdx +78 -0
  168. package/docs/07-reference/04-stream-helpers/14-google-generative-ai-stream.mdx +85 -0
  169. package/docs/07-reference/04-stream-helpers/15-hugging-face-stream.mdx +84 -0
  170. package/docs/07-reference/04-stream-helpers/16-langchain-adapter.mdx +98 -0
  171. package/docs/07-reference/04-stream-helpers/16-llamaindex-adapter.mdx +70 -0
  172. package/docs/07-reference/04-stream-helpers/17-mistral-stream.mdx +81 -0
  173. package/docs/07-reference/04-stream-helpers/18-replicate-stream.mdx +83 -0
  174. package/docs/07-reference/04-stream-helpers/19-inkeep-stream.mdx +80 -0
  175. package/docs/07-reference/04-stream-helpers/index.mdx +103 -0
  176. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +30 -0
  177. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +27 -0
  178. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +25 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content.mdx +26 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +25 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +25 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +25 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +26 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  205. package/docs/07-reference/05-ai-sdk-errors/index.mdx +38 -0
  206. package/docs/07-reference/index.mdx +34 -0
  207. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  208. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  209. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  210. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  211. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  212. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  213. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  214. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  215. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  216. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  217. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  218. package/docs/08-migration-guides/index.mdx +22 -0
  219. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  220. package/docs/09-troubleshooting/02-client-side-function-calls-not-invoked.mdx +22 -0
  221. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  222. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  223. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  224. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  225. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  226. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  227. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  228. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  229. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  230. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  231. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  232. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  233. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  234. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  235. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  236. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  237. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  238. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  239. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  240. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  241. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  242. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  243. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  244. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +72 -0
  245. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  246. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  247. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  248. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  249. package/docs/09-troubleshooting/index.mdx +11 -0
  250. package/package.json +8 -4
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: validateUIMessages
3
+ description: API Reference for validateUIMessages
4
+ ---
5
+
6
+ # `validateUIMessages`
7
+
8
+ `validateUIMessages` is an async function that validates UI messages against schemas for metadata, data parts, and tools. It ensures type safety and data integrity for your message arrays before processing or rendering.
9
+
10
+ ## Basic Usage
11
+
12
+ Simple validation without custom schemas:
13
+
14
+ ```typescript
15
+ import { validateUIMessages } from 'ai';
16
+
17
+ const messages = [
18
+ {
19
+ id: '1',
20
+ role: 'user',
21
+ parts: [{ type: 'text', text: 'Hello!' }],
22
+ },
23
+ ];
24
+
25
+ const validatedMessages = await validateUIMessages({
26
+ messages,
27
+ });
28
+ ```
29
+
30
+ ## Advanced Usage
31
+
32
+ Comprehensive validation with custom metadata, data parts, and tools:
33
+
34
+ ```typescript
35
+ import { validateUIMessages, tool } from 'ai';
36
+ import { z } from 'zod';
37
+
38
+ // Define schemas
39
+ const metadataSchema = z.object({
40
+ timestamp: z.string().datetime(),
41
+ userId: z.string(),
42
+ });
43
+
44
+ const dataSchemas = {
45
+ chart: z.object({
46
+ data: z.array(z.number()),
47
+ labels: z.array(z.string()),
48
+ }),
49
+ image: z.object({
50
+ url: z.string().url(),
51
+ caption: z.string(),
52
+ }),
53
+ };
54
+
55
+ const tools = {
56
+ weather: tool({
57
+ description: 'Get weather info',
58
+ parameters: z.object({
59
+ location: z.string(),
60
+ }),
61
+ execute: async ({ location }) => `Weather in ${location}: sunny`,
62
+ }),
63
+ };
64
+
65
+ // Messages with custom parts
66
+ const messages = [
67
+ {
68
+ id: '1',
69
+ role: 'user',
70
+ metadata: { timestamp: '2024-01-01T00:00:00Z', userId: 'user123' },
71
+ parts: [
72
+ { type: 'text', text: 'Show me a chart' },
73
+ {
74
+ type: 'data-chart',
75
+ data: { data: [1, 2, 3], labels: ['A', 'B', 'C'] },
76
+ },
77
+ ],
78
+ },
79
+ {
80
+ id: '2',
81
+ role: 'assistant',
82
+ parts: [
83
+ {
84
+ type: 'tool-weather',
85
+ toolCallId: 'call_123',
86
+ state: 'output-available',
87
+ input: { location: 'San Francisco' },
88
+ output: 'Weather in San Francisco: sunny',
89
+ },
90
+ ],
91
+ },
92
+ ];
93
+
94
+ // Validate with all schemas
95
+ const validatedMessages = await validateUIMessages({
96
+ messages,
97
+ metadataSchema,
98
+ dataSchemas,
99
+ tools,
100
+ });
101
+ ```
@@ -0,0 +1,113 @@
1
+ ---
2
+ title: safeValidateUIMessages
3
+ description: API Reference for safeValidateUIMessages
4
+ ---
5
+
6
+ # `safeValidateUIMessages`
7
+
8
+ `safeValidateUIMessages` is an async function that validates UI messages like [`validateUIMessages`](https://ai-sdk.dev/docs/reference/ai-sdk-core/validate-ui-messages), but instead of throwing it returns an object with a `success` key and either `data` or `error`.
9
+
10
+ ## Basic Usage
11
+
12
+ Simple validation without custom schemas:
13
+
14
+ ```typescript
15
+ import { safeValidateUIMessages } from 'ai';
16
+
17
+ const messages = [
18
+ {
19
+ id: '1',
20
+ role: 'user',
21
+ parts: [{ type: 'text', text: 'Hello!' }],
22
+ },
23
+ ];
24
+
25
+ const result = await safeValidateUIMessages({
26
+ messages,
27
+ });
28
+
29
+ if (!result.success) {
30
+ console.error(result.error.message);
31
+ } else {
32
+ const validatedMessages = result.data;
33
+ }
34
+ ```
35
+
36
+ ## Advanced Usage
37
+
38
+ Comprehensive validation with custom metadata, data parts, and tools:
39
+
40
+ ```typescript
41
+ import { safeValidateUIMessages, tool } from 'ai';
42
+ import { z } from 'zod';
43
+
44
+ // Define schemas
45
+ const metadataSchema = z.object({
46
+ timestamp: z.string().datetime(),
47
+ userId: z.string(),
48
+ });
49
+
50
+ const dataSchemas = {
51
+ chart: z.object({
52
+ data: z.array(z.number()),
53
+ labels: z.array(z.string()),
54
+ }),
55
+ image: z.object({
56
+ url: z.string().url(),
57
+ caption: z.string(),
58
+ }),
59
+ };
60
+
61
+ const tools = {
62
+ weather: tool({
63
+ description: 'Get weather info',
64
+ parameters: z.object({
65
+ location: z.string(),
66
+ }),
67
+ execute: async ({ location }) => `Weather in ${location}: sunny`,
68
+ }),
69
+ };
70
+
71
+ // Messages with custom parts
72
+ const messages = [
73
+ {
74
+ id: '1',
75
+ role: 'user',
76
+ metadata: { timestamp: '2024-01-01T00:00:00Z', userId: 'user123' },
77
+ parts: [
78
+ { type: 'text', text: 'Show me a chart' },
79
+ {
80
+ type: 'data-chart',
81
+ data: { data: [1, 2, 3], labels: ['A', 'B', 'C'] },
82
+ },
83
+ ],
84
+ },
85
+ {
86
+ id: '2',
87
+ role: 'assistant',
88
+ parts: [
89
+ {
90
+ type: 'tool-weather',
91
+ toolCallId: 'call_123',
92
+ state: 'output-available',
93
+ input: { location: 'San Francisco' },
94
+ output: 'Weather in San Francisco: sunny',
95
+ },
96
+ ],
97
+ },
98
+ ];
99
+
100
+ // Validate with all schemas
101
+ const result = await safeValidateUIMessages({
102
+ messages,
103
+ metadataSchema,
104
+ dataSchemas,
105
+ tools,
106
+ });
107
+
108
+ if (!result.success) {
109
+ console.error(result.error.message);
110
+ } else {
111
+ const validatedMessages = result.data;
112
+ }
113
+ ```
@@ -0,0 +1,182 @@
1
+ ---
2
+ title: createProviderRegistry
3
+ description: Registry for managing multiple providers and models (API Reference)
4
+ ---
5
+
6
+ # `createProviderRegistry()`
7
+
8
+ When you work with multiple providers and models, it is often desirable to manage them
9
+ in a central place and access the models through simple string ids.
10
+
11
+ `createProviderRegistry` lets you create a registry with multiple providers that you
12
+ can access by their ids in the format `providerId:modelId`.
13
+
14
+ ### Setup
15
+
16
+ You can create a registry with multiple providers and models using `createProviderRegistry`.
17
+
18
+ ```ts
19
+ import { anthropic } from '@ai-sdk/anthropic';
20
+ import { createOpenAI } from '@ai-sdk/openai';
21
+ import { createProviderRegistry } from 'ai';
22
+
23
+ export const registry = createProviderRegistry({
24
+ // register provider with prefix and default setup:
25
+ anthropic,
26
+
27
+ // register provider with prefix and custom setup:
28
+ openai: createOpenAI({
29
+ apiKey: process.env.OPENAI_API_KEY,
30
+ }),
31
+ });
32
+ ```
33
+
34
+ ### Custom Separator
35
+
36
+ By default, the registry uses `:` as the separator between provider and model IDs. You can customize this separator by passing a `separator` option:
37
+
38
+ ```ts
39
+ const registry = createProviderRegistry(
40
+ {
41
+ anthropic,
42
+ openai,
43
+ },
44
+ { separator: ' > ' },
45
+ );
46
+
47
+ // Now you can use the custom separator
48
+ const model = registry.languageModel('anthropic > claude-3-opus-20240229');
49
+ ```
50
+
51
+ ### Language models
52
+
53
+ You can access language models by using the `languageModel` method on the registry.
54
+ The provider id will become the prefix of the model id: `providerId:modelId`.
55
+
56
+ ```ts highlight={"5"}
57
+ import { generateText } from 'ai';
58
+ import { registry } from './registry';
59
+
60
+ const { text } = await generateText({
61
+ model: registry.languageModel('openai:gpt-4.1'),
62
+ prompt: 'Invent a new holiday and describe its traditions.',
63
+ });
64
+ ```
65
+
66
+ ### Text embedding models
67
+
68
+ You can access text embedding models by using the `.embeddingModel` method on the registry.
69
+ The provider id will become the prefix of the model id: `providerId:modelId`.
70
+
71
+ ```ts highlight={"5"}
72
+ import { embed } from 'ai';
73
+ import { registry } from './registry';
74
+
75
+ const { embedding } = await embed({
76
+ model: registry.embeddingModel('openai:text-embedding-3-small'),
77
+ value: 'sunny day at the beach',
78
+ });
79
+ ```
80
+
81
+ ### Image models
82
+
83
+ You can access image models by using the `imageModel` method on the registry.
84
+ The provider id will become the prefix of the model id: `providerId:modelId`.
85
+
86
+ ```ts highlight={"5"}
87
+ import { generateImage } from 'ai';
88
+ import { registry } from './registry';
89
+
90
+ const { image } = await generateImage({
91
+ model: registry.imageModel('openai:dall-e-3'),
92
+ prompt: 'A beautiful sunset over a calm ocean',
93
+ });
94
+ ```
95
+
96
+ ## Import
97
+
98
+ <Snippet text={`import { createProviderRegistry } from "ai"`} prompt={false} />
99
+
100
+ ## API Signature
101
+
102
+ ### Parameters
103
+
104
+ <PropertiesTable
105
+ content={[
106
+ {
107
+ name: 'providers',
108
+ type: 'Record<string, Provider>',
109
+ description:
110
+ 'The unique identifier for the provider. It should be unique within the registry.',
111
+ properties: [
112
+ {
113
+ type: 'Provider',
114
+ parameters: [
115
+ {
116
+ name: 'languageModel',
117
+ type: '(id: string) => LanguageModel',
118
+ description:
119
+ 'A function that returns a language model by its id.',
120
+ },
121
+ {
122
+ name: 'embeddingModel',
123
+ type: '(id: string) => EmbeddingModel<string>',
124
+ description:
125
+ 'A function that returns a text embedding model by its id.',
126
+ },
127
+ {
128
+ name: 'imageModel',
129
+ type: '(id: string) => ImageModel',
130
+ description: 'A function that returns an image model by its id.',
131
+ },
132
+ ],
133
+ },
134
+ ],
135
+ },
136
+ {
137
+ name: 'options',
138
+ type: 'object',
139
+ description: 'Optional configuration for the registry.',
140
+ properties: [
141
+ {
142
+ type: 'Options',
143
+ parameters: [
144
+ {
145
+ name: 'separator',
146
+ type: 'string',
147
+ description:
148
+ 'Custom separator between provider and model IDs. Defaults to ":".',
149
+ },
150
+ ],
151
+ },
152
+ ],
153
+ },
154
+ ]}
155
+ />
156
+
157
+ ### Returns
158
+
159
+ The `createProviderRegistry` function returns a `Provider` instance. It has the following methods:
160
+
161
+ <PropertiesTable
162
+ content={[
163
+ {
164
+ name: 'languageModel',
165
+ type: '(id: string) => LanguageModel',
166
+ description:
167
+ 'A function that returns a language model by its id (format: providerId:modelId)',
168
+ },
169
+ {
170
+ name: 'embeddingModel',
171
+ type: '(id: string) => EmbeddingModel<string>',
172
+ description:
173
+ 'A function that returns a text embedding model by its id (format: providerId:modelId)',
174
+ },
175
+ {
176
+ name: 'imageModel',
177
+ type: '(id: string) => ImageModel',
178
+ description:
179
+ 'A function that returns an image model by its id (format: providerId:modelId)',
180
+ },
181
+ ]}
182
+ />
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: customProvider
3
+ description: Custom provider that uses models from a different provider (API Reference)
4
+ ---
5
+
6
+ # `customProvider()`
7
+
8
+ With a custom provider, you can map ids to any model.
9
+ This allows you to set up custom model configurations, alias names, and more.
10
+ The custom provider also supports a fallback provider, which is useful for
11
+ wrapping existing providers and adding additional functionality.
12
+
13
+ ### Example: custom model settings
14
+
15
+ You can create a custom provider using `customProvider`.
16
+
17
+ ```ts
18
+ import { openai } from '@ai-sdk/openai';
19
+ import { customProvider } from 'ai';
20
+
21
+ // custom provider with different model settings:
22
+ export const myOpenAI = customProvider({
23
+ languageModels: {
24
+ // replacement model with custom settings:
25
+ 'gpt-4': wrapLanguageModel({
26
+ model: openai('gpt-4'),
27
+ middleware: defaultSettingsMiddleware({
28
+ settings: {
29
+ providerOptions: {
30
+ openai: {
31
+ reasoningEffort: 'high',
32
+ },
33
+ },
34
+ },
35
+ }),
36
+ }),
37
+ // alias model with custom settings:
38
+ 'gpt-4o-reasoning-high': wrapLanguageModel({
39
+ model: openai('gpt-4o'),
40
+ middleware: defaultSettingsMiddleware({
41
+ settings: {
42
+ providerOptions: {
43
+ openai: {
44
+ reasoningEffort: 'high',
45
+ },
46
+ },
47
+ },
48
+ }),
49
+ }),
50
+ },
51
+ fallbackProvider: openai,
52
+ });
53
+ ```
54
+
55
+ ## Import
56
+
57
+ <Snippet text={`import { customProvider } from "ai"`} prompt={false} />
58
+
59
+ ## API Signature
60
+
61
+ ### Parameters
62
+
63
+ <PropertiesTable
64
+ content={[
65
+ {
66
+ name: 'languageModels',
67
+ type: 'Record<string, LanguageModel>',
68
+ isOptional: true,
69
+ description:
70
+ 'A record of language models, where keys are model IDs and values are LanguageModel instances.',
71
+ },
72
+ {
73
+ name: '.embeddingModels',
74
+ type: 'Record<string, EmbeddingModel<string>>',
75
+ isOptional: true,
76
+ description:
77
+ 'A record of text embedding models, where keys are model IDs and values are EmbeddingModel<string> instances.',
78
+ },
79
+ {
80
+ name: 'imageModels',
81
+ type: 'Record<string, ImageModel>',
82
+ isOptional: true,
83
+ description:
84
+ 'A record of image models, where keys are model IDs and values are image model instances.',
85
+ },
86
+ {
87
+ name: 'fallbackProvider',
88
+ type: 'Provider',
89
+ isOptional: true,
90
+ description:
91
+ 'An optional fallback provider to use when a requested model is not found in the custom provider.',
92
+ },
93
+ ]}
94
+ />
95
+
96
+ ### Returns
97
+
98
+ The `customProvider` function returns a `Provider` instance. It has the following methods:
99
+
100
+ <PropertiesTable
101
+ content={[
102
+ {
103
+ name: 'languageModel',
104
+ type: '(id: string) => LanguageModel',
105
+ description:
106
+ 'A function that returns a language model by its id (format: providerId:modelId)',
107
+ },
108
+ {
109
+ name: 'embeddingModel',
110
+ type: '(id: string) => EmbeddingModel<string>',
111
+ description:
112
+ 'A function that returns a text embedding model by its id (format: providerId:modelId)',
113
+ },
114
+ {
115
+ name: 'imageModel',
116
+ type: '(id: string) => ImageModel',
117
+ description:
118
+ 'A function that returns an image model by its id (format: providerId:modelId)',
119
+ },
120
+ ]}
121
+ />
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: cosineSimilarity
3
+ description: Calculate the cosine similarity between two vectors (API Reference)
4
+ ---
5
+
6
+ # `cosineSimilarity()`
7
+
8
+ When you want to compare the similarity of embeddings, standard vector similarity metrics
9
+ like cosine similarity are often used.
10
+
11
+ `cosineSimilarity` calculates the cosine similarity between two vectors.
12
+ A high value (close to 1) indicates that the vectors are very similar, while a low value (close to -1) indicates that they are different.
13
+
14
+ ```ts
15
+ import { cosineSimilarity, embedMany } from 'ai';
16
+
17
+ const { embeddings } = await embedMany({
18
+ model: 'openai/text-embedding-3-small',
19
+ values: ['sunny day at the beach', 'rainy afternoon in the city'],
20
+ });
21
+
22
+ console.log(
23
+ `cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`,
24
+ );
25
+ ```
26
+
27
+ ## Import
28
+
29
+ <Snippet text={`import { cosineSimilarity } from "ai"`} prompt={false} />
30
+
31
+ ## API Signature
32
+
33
+ ### Parameters
34
+
35
+ <PropertiesTable
36
+ content={[
37
+ {
38
+ name: 'vector1',
39
+ type: 'number[]',
40
+ description: 'The first vector to compare',
41
+ },
42
+ {
43
+ name: 'vector2',
44
+ type: 'number[]',
45
+ description: 'The second vector to compare',
46
+ },
47
+ ]}
48
+ />
49
+
50
+ ### Returns
51
+
52
+ A number between -1 and 1 representing the cosine similarity between the two vectors.
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: wrapLanguageModel
3
+ description: Function for wrapping a language model with middleware (API Reference)
4
+ ---
5
+
6
+ # `wrapLanguageModel()`
7
+
8
+ The `wrapLanguageModel` function provides a way to enhance the behavior of language models
9
+ by wrapping them with middleware.
10
+ See [Language Model Middleware](/docs/ai-sdk-core/middleware) for more information on middleware.
11
+
12
+ ```ts
13
+ import { wrapLanguageModel, gateway } from 'ai';
14
+
15
+ const wrappedLanguageModel = wrapLanguageModel({
16
+ model: gateway('openai/gpt-4.1'),
17
+ middleware: yourLanguageModelMiddleware,
18
+ });
19
+ ```
20
+
21
+ ## Import
22
+
23
+ <Snippet text={`import { wrapLanguageModel } from "ai"`} prompt={false} />
24
+
25
+ ## API Signature
26
+
27
+ ### Parameters
28
+
29
+ <PropertiesTable
30
+ content={[
31
+ {
32
+ name: 'model',
33
+ type: 'LanguageModelV3',
34
+ description: 'The original LanguageModelV3 instance to be wrapped.',
35
+ },
36
+ {
37
+ name: 'middleware',
38
+ type: 'LanguageModelV3Middleware | LanguageModelV3Middleware[]',
39
+ description:
40
+ 'The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.',
41
+ },
42
+ {
43
+ name: 'modelId',
44
+ type: 'string',
45
+ description:
46
+ "Optional custom model ID to override the original model's ID.",
47
+ },
48
+ {
49
+ name: 'providerId',
50
+ type: 'string',
51
+ description:
52
+ "Optional custom provider ID to override the original model's provider.",
53
+ },
54
+ ]}
55
+ />
56
+
57
+ ### Returns
58
+
59
+ A new `LanguageModelV3` instance with middleware applied.
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: wrapImageModel
3
+ description: Function for wrapping an image model with middleware (API Reference)
4
+ ---
5
+
6
+ # `wrapImageModel()`
7
+
8
+ The `wrapImageModel` function provides a way to enhance the behavior of image models
9
+ by wrapping them with middleware.
10
+
11
+ ```ts
12
+ import { generateImage, wrapImageModel } from 'ai';
13
+ import { openai } from '@ai-sdk/openai';
14
+
15
+ const model = wrapImageModel({
16
+ model: openai.image('gpt-image-1'),
17
+ middleware: yourImageModelMiddleware,
18
+ });
19
+
20
+ const { image } = await generateImage({
21
+ model,
22
+ prompt: 'Santa Claus driving a Cadillac',
23
+ });
24
+ ```
25
+
26
+ ## Import
27
+
28
+ <Snippet text={`import { wrapImageModel } from "ai"`} prompt={false} />
29
+
30
+ ## API Signature
31
+
32
+ ### Parameters
33
+
34
+ <PropertiesTable
35
+ content={[
36
+ {
37
+ name: 'model',
38
+ type: 'ImageModelV3',
39
+ description: 'The original ImageModelV3 instance to be wrapped.',
40
+ },
41
+ {
42
+ name: 'middleware',
43
+ type: 'ImageModelV3Middleware | ImageModelV3Middleware[]',
44
+ description:
45
+ 'The middleware to be applied to the image model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.',
46
+ },
47
+ {
48
+ name: 'modelId',
49
+ type: 'string',
50
+ description:
51
+ "Optional custom model ID to override the original model's ID.",
52
+ },
53
+ {
54
+ name: 'providerId',
55
+ type: 'string',
56
+ description:
57
+ "Optional custom provider ID to override the original model's provider.",
58
+ },
59
+ ]}
60
+ />
61
+
62
+ ### Returns
63
+
64
+ A new `ImageModelV3` instance with middleware applied.