@fondation-io/ai 7.0.0-beta.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/CHANGELOG.md +7687 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +7056 -0
  4. package/dist/index.d.ts +7056 -0
  5. package/dist/index.js +14607 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14578 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +303 -0
  10. package/dist/internal/index.d.ts +303 -0
  11. package/dist/internal/index.js +1352 -0
  12. package/dist/internal/index.js.map +1 -0
  13. package/dist/internal/index.mjs +1336 -0
  14. package/dist/internal/index.mjs.map +1 -0
  15. package/dist/test/index.d.mts +265 -0
  16. package/dist/test/index.d.ts +265 -0
  17. package/dist/test/index.js +509 -0
  18. package/dist/test/index.js.map +1 -0
  19. package/dist/test/index.mjs +472 -0
  20. package/dist/test/index.mjs.map +1 -0
  21. package/docs/00-introduction/index.mdx +76 -0
  22. package/docs/02-foundations/01-overview.mdx +43 -0
  23. package/docs/02-foundations/02-providers-and-models.mdx +160 -0
  24. package/docs/02-foundations/03-prompts.mdx +616 -0
  25. package/docs/02-foundations/04-tools.mdx +251 -0
  26. package/docs/02-foundations/05-streaming.mdx +62 -0
  27. package/docs/02-foundations/06-provider-options.mdx +345 -0
  28. package/docs/02-foundations/index.mdx +49 -0
  29. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  30. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  31. package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
  32. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  33. package/docs/02-getting-started/04-svelte.mdx +627 -0
  34. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  35. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  36. package/docs/02-getting-started/07-expo.mdx +766 -0
  37. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  38. package/docs/02-getting-started/09-coding-agents.mdx +179 -0
  39. package/docs/02-getting-started/index.mdx +44 -0
  40. package/docs/03-agents/01-overview.mdx +96 -0
  41. package/docs/03-agents/02-building-agents.mdx +449 -0
  42. package/docs/03-agents/03-workflows.mdx +386 -0
  43. package/docs/03-agents/04-loop-control.mdx +394 -0
  44. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  45. package/docs/03-agents/06-memory.mdx +222 -0
  46. package/docs/03-agents/06-subagents.mdx +362 -0
  47. package/docs/03-agents/index.mdx +46 -0
  48. package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
  49. package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
  50. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
  51. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1148 -0
  52. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
  53. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
  54. package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
  55. package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
  56. package/docs/03-ai-sdk-core/30-embeddings.mdx +236 -0
  57. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  58. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  59. package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
  60. package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
  61. package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
  62. package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
  63. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  64. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  65. package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
  66. package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
  67. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  68. package/docs/03-ai-sdk-core/65-event-listeners.mdx +1303 -0
  69. package/docs/03-ai-sdk-core/index.mdx +99 -0
  70. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  71. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
  72. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +534 -0
  73. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  74. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  75. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  76. package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
  77. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  78. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  79. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  80. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  81. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  82. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  83. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
  84. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  85. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  86. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  87. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  88. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  89. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  90. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
  91. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  92. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
  93. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  94. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  95. package/docs/05-ai-sdk-rsc/index.mdx +63 -0
  96. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  97. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  98. package/docs/06-advanced/03-backpressure.mdx +173 -0
  99. package/docs/06-advanced/04-caching.mdx +169 -0
  100. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  101. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  102. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
  103. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  104. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  105. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  106. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  107. package/docs/06-advanced/index.mdx +11 -0
  108. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
  109. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
  110. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
  111. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
  112. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +323 -0
  113. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
  114. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
  115. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
  116. package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
  117. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
  118. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
  119. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
  120. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
  121. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
  122. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
  123. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
  124. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
  125. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  126. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  128. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
  129. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  130. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
  131. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
  132. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  133. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  134. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
  135. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
  136. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  137. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  138. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  139. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
  140. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  141. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  142. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  143. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  144. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  145. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  146. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  147. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  148. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  149. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
  150. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  151. package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
  152. package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
  153. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
  154. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
  155. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
  156. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
  157. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  158. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
  159. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
  160. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
  161. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  162. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  163. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  164. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  165. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  166. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  167. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  168. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  169. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
  170. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
  171. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  172. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  173. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  174. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  175. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  176. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  177. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
  178. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  207. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  208. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  209. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  210. package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
  211. package/docs/07-reference/index.mdx +28 -0
  212. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  213. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
  214. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  215. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  216. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  217. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  218. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  219. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  220. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  221. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  222. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  223. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  224. package/docs/08-migration-guides/index.mdx +22 -0
  225. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  226. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  227. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  228. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  229. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  230. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  231. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  232. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  233. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  234. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  235. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  236. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  237. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  238. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  239. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  240. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  241. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  242. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  243. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  244. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  245. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  246. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  247. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  248. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  249. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
  250. package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
  251. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  252. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  253. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  254. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  255. package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
  256. package/docs/09-troubleshooting/index.mdx +11 -0
  257. package/internal.d.ts +1 -0
  258. package/package.json +120 -0
  259. package/src/agent/agent.ts +156 -0
  260. package/src/agent/create-agent-ui-stream-response.ts +61 -0
  261. package/src/agent/create-agent-ui-stream.ts +84 -0
  262. package/src/agent/index.ts +37 -0
  263. package/src/agent/infer-agent-tools.ts +7 -0
  264. package/src/agent/infer-agent-ui-message.ts +11 -0
  265. package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
  266. package/src/agent/tool-loop-agent-settings.ts +252 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +181 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +428 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +266 -0
  273. package/src/embed/index.ts +5 -0
  274. package/src/error/index.ts +37 -0
  275. package/src/error/invalid-argument-error.ts +34 -0
  276. package/src/error/invalid-stream-part-error.ts +28 -0
  277. package/src/error/invalid-tool-approval-error.ts +26 -0
  278. package/src/error/invalid-tool-input-error.ts +33 -0
  279. package/src/error/missing-tool-result-error.ts +28 -0
  280. package/src/error/no-image-generated-error.ts +39 -0
  281. package/src/error/no-object-generated-error.ts +70 -0
  282. package/src/error/no-output-generated-error.ts +26 -0
  283. package/src/error/no-speech-generated-error.ts +28 -0
  284. package/src/error/no-such-tool-error.ts +35 -0
  285. package/src/error/no-transcript-generated-error.ts +30 -0
  286. package/src/error/no-video-generated-error.ts +57 -0
  287. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  288. package/src/error/tool-call-repair-error.ts +30 -0
  289. package/src/error/ui-message-stream-error.ts +48 -0
  290. package/src/error/unsupported-model-version-error.ts +23 -0
  291. package/src/error/verify-no-object-generated-error.ts +27 -0
  292. package/src/generate-image/generate-image-result.ts +42 -0
  293. package/src/generate-image/generate-image.ts +361 -0
  294. package/src/generate-image/index.ts +18 -0
  295. package/src/generate-object/generate-object-result.ts +67 -0
  296. package/src/generate-object/generate-object.ts +514 -0
  297. package/src/generate-object/index.ts +9 -0
  298. package/src/generate-object/inject-json-instruction.ts +30 -0
  299. package/src/generate-object/output-strategy.ts +415 -0
  300. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  301. package/src/generate-object/repair-text.ts +12 -0
  302. package/src/generate-object/stream-object-result.ts +120 -0
  303. package/src/generate-object/stream-object.ts +984 -0
  304. package/src/generate-object/validate-object-generation-input.ts +144 -0
  305. package/src/generate-speech/generate-speech-result.ts +30 -0
  306. package/src/generate-speech/generate-speech.ts +191 -0
  307. package/src/generate-speech/generated-audio-file.ts +65 -0
  308. package/src/generate-speech/index.ts +3 -0
  309. package/src/generate-text/collect-tool-approvals.ts +116 -0
  310. package/src/generate-text/content-part.ts +31 -0
  311. package/src/generate-text/core-events.ts +390 -0
  312. package/src/generate-text/create-execute-tools-transformation.ts +144 -0
  313. package/src/generate-text/execute-tool-call.ts +190 -0
  314. package/src/generate-text/extract-reasoning-content.ts +17 -0
  315. package/src/generate-text/extract-text-content.ts +15 -0
  316. package/src/generate-text/generate-text-result.ts +168 -0
  317. package/src/generate-text/generate-text.ts +1445 -0
  318. package/src/generate-text/generated-file.ts +70 -0
  319. package/src/generate-text/index.ts +78 -0
  320. package/src/generate-text/invoke-tool-callbacks-from-stream.ts +81 -0
  321. package/src/generate-text/is-approval-needed.ts +29 -0
  322. package/src/generate-text/output-utils.ts +23 -0
  323. package/src/generate-text/output.ts +590 -0
  324. package/src/generate-text/parse-tool-call.ts +188 -0
  325. package/src/generate-text/prepare-step.ts +103 -0
  326. package/src/generate-text/prune-messages.ts +167 -0
  327. package/src/generate-text/reasoning-output.ts +99 -0
  328. package/src/generate-text/reasoning.ts +10 -0
  329. package/src/generate-text/response-message.ts +10 -0
  330. package/src/generate-text/smooth-stream.ts +162 -0
  331. package/src/generate-text/step-result.ts +310 -0
  332. package/src/generate-text/stop-condition.ts +29 -0
  333. package/src/generate-text/stream-model-call.ts +418 -0
  334. package/src/generate-text/stream-text-result.ts +536 -0
  335. package/src/generate-text/stream-text.ts +2696 -0
  336. package/src/generate-text/to-response-messages.ts +195 -0
  337. package/src/generate-text/tool-approval-request-output.ts +21 -0
  338. package/src/generate-text/tool-call-repair-function.ts +27 -0
  339. package/src/generate-text/tool-call.ts +47 -0
  340. package/src/generate-text/tool-error.ts +34 -0
  341. package/src/generate-text/tool-output-denied.ts +21 -0
  342. package/src/generate-text/tool-output.ts +7 -0
  343. package/src/generate-text/tool-result.ts +36 -0
  344. package/src/generate-text/tool-set.ts +14 -0
  345. package/src/generate-video/generate-video-result.ts +36 -0
  346. package/src/generate-video/generate-video.ts +402 -0
  347. package/src/generate-video/index.ts +3 -0
  348. package/src/global.ts +36 -0
  349. package/src/index.ts +49 -0
  350. package/src/logger/index.ts +6 -0
  351. package/src/logger/log-warnings.ts +140 -0
  352. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  353. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  354. package/src/middleware/default-settings-middleware.ts +33 -0
  355. package/src/middleware/extract-json-middleware.ts +197 -0
  356. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  357. package/src/middleware/index.ts +10 -0
  358. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  359. package/src/middleware/wrap-embedding-model.ts +89 -0
  360. package/src/middleware/wrap-image-model.ts +92 -0
  361. package/src/middleware/wrap-language-model.ts +108 -0
  362. package/src/middleware/wrap-provider.ts +51 -0
  363. package/src/model/as-embedding-model-v3.ts +24 -0
  364. package/src/model/as-embedding-model-v4.ts +25 -0
  365. package/src/model/as-image-model-v3.ts +24 -0
  366. package/src/model/as-image-model-v4.ts +21 -0
  367. package/src/model/as-language-model-v3.ts +103 -0
  368. package/src/model/as-language-model-v4.ts +25 -0
  369. package/src/model/as-provider-v3.ts +36 -0
  370. package/src/model/as-provider-v4.ts +47 -0
  371. package/src/model/as-reranking-model-v4.ts +16 -0
  372. package/src/model/as-speech-model-v3.ts +24 -0
  373. package/src/model/as-speech-model-v4.ts +21 -0
  374. package/src/model/as-transcription-model-v3.ts +24 -0
  375. package/src/model/as-transcription-model-v4.ts +25 -0
  376. package/src/model/as-video-model-v4.ts +19 -0
  377. package/src/model/resolve-model.ts +172 -0
  378. package/src/prompt/call-settings.ts +169 -0
  379. package/src/prompt/content-part.ts +236 -0
  380. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  381. package/src/prompt/create-tool-model-output.ts +34 -0
  382. package/src/prompt/data-content.ts +134 -0
  383. package/src/prompt/index.ts +27 -0
  384. package/src/prompt/invalid-data-content-error.ts +29 -0
  385. package/src/prompt/invalid-message-role-error.ts +27 -0
  386. package/src/prompt/message-conversion-error.ts +28 -0
  387. package/src/prompt/message.ts +72 -0
  388. package/src/prompt/prepare-call-settings.ts +110 -0
  389. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  390. package/src/prompt/prompt.ts +43 -0
  391. package/src/prompt/split-data-url.ts +17 -0
  392. package/src/prompt/standardize-prompt.ts +99 -0
  393. package/src/prompt/wrap-gateway-error.ts +29 -0
  394. package/src/registry/custom-provider.ts +210 -0
  395. package/src/registry/index.ts +7 -0
  396. package/src/registry/no-such-provider-error.ts +41 -0
  397. package/src/registry/provider-registry.ts +331 -0
  398. package/src/rerank/index.ts +8 -0
  399. package/src/rerank/rerank-events.ts +189 -0
  400. package/src/rerank/rerank-result.ts +70 -0
  401. package/src/rerank/rerank.ts +348 -0
  402. package/src/telemetry/assemble-operation-name.ts +21 -0
  403. package/src/telemetry/get-base-telemetry-attributes.ts +45 -0
  404. package/src/telemetry/get-global-telemetry-integration.ts +126 -0
  405. package/src/telemetry/get-tracer.ts +20 -0
  406. package/src/telemetry/index.ts +4 -0
  407. package/src/telemetry/noop-tracer.ts +69 -0
  408. package/src/telemetry/open-telemetry-integration.ts +875 -0
  409. package/src/telemetry/record-span.ts +75 -0
  410. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  411. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  412. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  413. package/src/telemetry/telemetry-integration.ts +139 -0
  414. package/src/telemetry/telemetry-settings.ts +55 -0
  415. package/src/test/mock-embedding-model-v2.ts +35 -0
  416. package/src/test/mock-embedding-model-v3.ts +48 -0
  417. package/src/test/mock-embedding-model-v4.ts +48 -0
  418. package/src/test/mock-image-model-v2.ts +28 -0
  419. package/src/test/mock-image-model-v3.ts +28 -0
  420. package/src/test/mock-image-model-v4.ts +28 -0
  421. package/src/test/mock-language-model-v2.ts +72 -0
  422. package/src/test/mock-language-model-v3.ts +77 -0
  423. package/src/test/mock-language-model-v4.ts +77 -0
  424. package/src/test/mock-provider-v2.ts +68 -0
  425. package/src/test/mock-provider-v3.ts +80 -0
  426. package/src/test/mock-provider-v4.ts +80 -0
  427. package/src/test/mock-reranking-model-v3.ts +25 -0
  428. package/src/test/mock-reranking-model-v4.ts +25 -0
  429. package/src/test/mock-server-response.ts +69 -0
  430. package/src/test/mock-speech-model-v2.ts +24 -0
  431. package/src/test/mock-speech-model-v3.ts +24 -0
  432. package/src/test/mock-speech-model-v4.ts +24 -0
  433. package/src/test/mock-tracer.ts +156 -0
  434. package/src/test/mock-transcription-model-v2.ts +24 -0
  435. package/src/test/mock-transcription-model-v3.ts +24 -0
  436. package/src/test/mock-transcription-model-v4.ts +24 -0
  437. package/src/test/mock-values.ts +4 -0
  438. package/src/test/mock-video-model-v3.ts +28 -0
  439. package/src/test/mock-video-model-v4.ts +28 -0
  440. package/src/test/not-implemented.ts +3 -0
  441. package/src/text-stream/create-text-stream-response.ts +30 -0
  442. package/src/text-stream/index.ts +2 -0
  443. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  444. package/src/transcribe/index.ts +2 -0
  445. package/src/transcribe/transcribe-result.ts +60 -0
  446. package/src/transcribe/transcribe.ts +187 -0
  447. package/src/types/embedding-model-middleware.ts +15 -0
  448. package/src/types/embedding-model.ts +20 -0
  449. package/src/types/image-model-middleware.ts +15 -0
  450. package/src/types/image-model-response-metadata.ts +16 -0
  451. package/src/types/image-model.ts +19 -0
  452. package/src/types/index.ts +29 -0
  453. package/src/types/json-value.ts +15 -0
  454. package/src/types/language-model-middleware.ts +15 -0
  455. package/src/types/language-model-request-metadata.ts +6 -0
  456. package/src/types/language-model-response-metadata.ts +21 -0
  457. package/src/types/language-model.ts +106 -0
  458. package/src/types/provider-metadata.ts +16 -0
  459. package/src/types/provider.ts +55 -0
  460. package/src/types/reranking-model.ts +6 -0
  461. package/src/types/speech-model-response-metadata.ts +21 -0
  462. package/src/types/speech-model.ts +10 -0
  463. package/src/types/transcription-model-response-metadata.ts +16 -0
  464. package/src/types/transcription-model.ts +14 -0
  465. package/src/types/usage.ts +200 -0
  466. package/src/types/video-model-response-metadata.ts +28 -0
  467. package/src/types/video-model.ts +15 -0
  468. package/src/types/warning.ts +7 -0
  469. package/src/ui/call-completion-api.ts +157 -0
  470. package/src/ui/chat-transport.ts +83 -0
  471. package/src/ui/chat.ts +786 -0
  472. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  473. package/src/ui/convert-to-model-messages.ts +403 -0
  474. package/src/ui/default-chat-transport.ts +36 -0
  475. package/src/ui/direct-chat-transport.ts +117 -0
  476. package/src/ui/http-chat-transport.ts +273 -0
  477. package/src/ui/index.ts +76 -0
  478. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  479. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  480. package/src/ui/process-text-stream.ts +16 -0
  481. package/src/ui/process-ui-message-stream.ts +858 -0
  482. package/src/ui/text-stream-chat-transport.ts +23 -0
  483. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  484. package/src/ui/ui-messages.ts +602 -0
  485. package/src/ui/use-completion.ts +84 -0
  486. package/src/ui/validate-ui-messages.ts +521 -0
  487. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  488. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  489. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  490. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  491. package/src/ui-message-stream/index.ts +14 -0
  492. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  493. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  494. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  495. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  496. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  497. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  498. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  499. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  500. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  501. package/src/util/as-array.ts +3 -0
  502. package/src/util/async-iterable-stream.ts +94 -0
  503. package/src/util/consume-stream.ts +31 -0
  504. package/src/util/cosine-similarity.ts +46 -0
  505. package/src/util/create-resolvable-promise.ts +30 -0
  506. package/src/util/create-stitchable-stream.ts +112 -0
  507. package/src/util/data-url.ts +17 -0
  508. package/src/util/deep-partial.ts +84 -0
  509. package/src/util/detect-media-type.ts +226 -0
  510. package/src/util/download/create-download.ts +13 -0
  511. package/src/util/download/download-function.ts +45 -0
  512. package/src/util/download/download.ts +74 -0
  513. package/src/util/error-handler.ts +1 -0
  514. package/src/util/fix-json.ts +401 -0
  515. package/src/util/get-potential-start-index.ts +39 -0
  516. package/src/util/index.ts +12 -0
  517. package/src/util/is-deep-equal-data.ts +48 -0
  518. package/src/util/is-non-empty-object.ts +5 -0
  519. package/src/util/job.ts +1 -0
  520. package/src/util/log-v2-compatibility-warning.ts +21 -0
  521. package/src/util/merge-abort-signals.ts +43 -0
  522. package/src/util/merge-objects.ts +79 -0
  523. package/src/util/notify.ts +22 -0
  524. package/src/util/now.ts +4 -0
  525. package/src/util/parse-partial-json.ts +30 -0
  526. package/src/util/prepare-headers.ts +14 -0
  527. package/src/util/prepare-retries.ts +47 -0
  528. package/src/util/retry-error.ts +41 -0
  529. package/src/util/retry-with-exponential-backoff.ts +154 -0
  530. package/src/util/serial-job-executor.ts +36 -0
  531. package/src/util/simulate-readable-stream.ts +39 -0
  532. package/src/util/split-array.ts +20 -0
  533. package/src/util/value-of.ts +65 -0
  534. package/src/util/write-to-server-response.ts +49 -0
  535. package/src/version.ts +5 -0
  536. package/test.d.ts +1 -0
@@ -0,0 +1,402 @@
1
+ import type {
2
+ Experimental_VideoModelV4,
3
+ Experimental_VideoModelV4CallOptions,
4
+ Experimental_VideoModelV4File,
5
+ SharedV4ProviderMetadata,
6
+ } from '@ai-sdk/provider';
7
+ import {
8
+ convertBase64ToUint8Array,
9
+ type DataContent,
10
+ type ProviderOptions,
11
+ withUserAgentSuffix,
12
+ } from '@ai-sdk/provider-utils';
13
+ import { NoVideoGeneratedError } from '../error/no-video-generated-error';
14
+ import {
15
+ DefaultGeneratedFile,
16
+ type GeneratedFile,
17
+ } from '../generate-text/generated-file';
18
+ import { logWarnings } from '../logger/log-warnings';
19
+ import { resolveVideoModel } from '../model/resolve-model';
20
+ import type { VideoModel } from '../types/video-model';
21
+ import type { VideoModelResponseMetadata } from '../types/video-model-response-metadata';
22
+ import type { Warning } from '../types/warning';
23
+ import {
24
+ detectMediaType,
25
+ imageMediaTypeSignatures,
26
+ videoMediaTypeSignatures,
27
+ } from '../util/detect-media-type';
28
+ import { createDownload } from '../util/download/create-download';
29
+ import { prepareRetries } from '../util/prepare-retries';
30
+ import { VERSION } from '../version';
31
+ import type { GenerateVideoResult } from './generate-video-result';
32
+ import { splitDataUrl } from '../prompt/split-data-url';
33
+
34
+ export type GenerateVideoPrompt =
35
+ | string
36
+ | {
37
+ image: DataContent;
38
+ text?: string;
39
+ };
40
+
41
+ /**
42
+ * Generates videos using a video model.
43
+ *
44
+ * @param model - The video model to use.
45
+ * @param prompt - The prompt that should be used to generate the video.
46
+ * @param n - Number of videos to generate. Default: 1.
47
+ * @param aspectRatio - Aspect ratio of the videos to generate. Must have the format `{width}:{height}`.
48
+ * @param resolution - Resolution of the videos to generate. Must have the format `{width}x{height}`.
49
+ * @param duration - Duration of the video in seconds.
50
+ * @param fps - Frames per second for the video.
51
+ * @param seed - Seed for the video generation.
52
+ * @param providerOptions - Additional provider-specific options that are passed through to the provider
53
+ * as body parameters.
54
+ * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
55
+ * @param abortSignal - An optional abort signal that can be used to cancel the call.
56
+ * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
57
+ *
58
+ * @returns A result object that contains the generated videos.
59
+ */
60
+ const defaultDownload = createDownload();
61
+
62
+ export async function experimental_generateVideo({
63
+ model: modelArg,
64
+ prompt: promptArg,
65
+ n = 1,
66
+ maxVideosPerCall,
67
+ aspectRatio,
68
+ resolution,
69
+ duration,
70
+ fps,
71
+ seed,
72
+ providerOptions,
73
+ maxRetries: maxRetriesArg,
74
+ abortSignal,
75
+ headers,
76
+ download: downloadFn = defaultDownload,
77
+ }: {
78
+ /**
79
+ * The video model to use.
80
+ */
81
+ model: VideoModel;
82
+
83
+ /**
84
+ * The prompt that should be used to generate the video.
85
+ */
86
+ prompt: GenerateVideoPrompt;
87
+
88
+ /**
89
+ * Number of videos to generate.
90
+ */
91
+ n?: number;
92
+
93
+ /**
94
+ * Maximum number of videos per API call. If not provided, the model's default will be used.
95
+ */
96
+ maxVideosPerCall?: number;
97
+
98
+ /**
99
+ * Aspect ratio of the videos to generate. Must have the format `{width}:{height}`.
100
+ */
101
+ aspectRatio?: `${number}:${number}`;
102
+
103
+ /**
104
+ * Resolution of the videos to generate. Must have the format `{width}x{height}`.
105
+ */
106
+ resolution?: `${number}x${number}`;
107
+
108
+ /**
109
+ * Duration of the video in seconds.
110
+ */
111
+ duration?: number;
112
+
113
+ /**
114
+ * Frames per second for the video.
115
+ */
116
+ fps?: number;
117
+
118
+ /**
119
+ * Seed for the video generation.
120
+ */
121
+ seed?: number;
122
+
123
+ /**
124
+ * Additional provider-specific options that are passed through to the provider
125
+ * as body parameters.
126
+ */
127
+ providerOptions?: ProviderOptions;
128
+
129
+ /**
130
+ * Maximum number of retries per video model call. Set to 0 to disable retries.
131
+ *
132
+ * @default 2
133
+ */
134
+ maxRetries?: number;
135
+
136
+ /**
137
+ * Abort signal.
138
+ */
139
+ abortSignal?: AbortSignal;
140
+
141
+ /**
142
+ * Additional headers to include in the request.
143
+ * Only applicable for HTTP-based providers.
144
+ */
145
+ headers?: Record<string, string>;
146
+
147
+ /**
148
+ * Custom download function for fetching videos from URLs.
149
+ * Use `createDownload()` from `ai` to create a download function with custom size limits.
150
+ *
151
+ * @default createDownload() (2 GiB limit)
152
+ */
153
+ download?: (options: {
154
+ url: URL;
155
+ abortSignal?: AbortSignal;
156
+ }) => Promise<{ data: Uint8Array; mediaType: string | undefined }>;
157
+ }): Promise<GenerateVideoResult> {
158
+ const model = resolveVideoModel(modelArg);
159
+
160
+ const headersWithUserAgent = withUserAgentSuffix(
161
+ headers ?? {},
162
+ `ai/${VERSION}`,
163
+ );
164
+
165
+ const { retry } = prepareRetries({
166
+ maxRetries: maxRetriesArg,
167
+ abortSignal,
168
+ });
169
+
170
+ const { prompt, image } = normalizePrompt(promptArg);
171
+
172
+ const maxVideosPerCallWithDefault =
173
+ maxVideosPerCall ?? (await invokeModelMaxVideosPerCall(model)) ?? 1;
174
+
175
+ // parallelize calls to the model:
176
+ const callCount = Math.ceil(n / maxVideosPerCallWithDefault);
177
+ const callVideoCounts = Array.from({ length: callCount }, (_, index) => {
178
+ const remaining = n - index * maxVideosPerCallWithDefault;
179
+ return Math.min(remaining, maxVideosPerCallWithDefault);
180
+ });
181
+
182
+ const results = await Promise.all(
183
+ callVideoCounts.map(async callVideoCount =>
184
+ retry(() =>
185
+ model.doGenerate({
186
+ prompt,
187
+ n: callVideoCount,
188
+ aspectRatio,
189
+ resolution,
190
+ duration,
191
+ fps,
192
+ seed,
193
+ image,
194
+ providerOptions: providerOptions ?? {},
195
+ headers: headersWithUserAgent,
196
+ abortSignal,
197
+ } satisfies Experimental_VideoModelV4CallOptions),
198
+ ),
199
+ ),
200
+ );
201
+
202
+ // collect result videos, warnings, and response metadata
203
+ const videos: Array<GeneratedFile> = [];
204
+ const warnings: Array<Warning> = [];
205
+ const responses: Array<VideoModelResponseMetadata> = [];
206
+ const providerMetadata: SharedV4ProviderMetadata = {};
207
+
208
+ for (const result of results) {
209
+ for (const videoData of result.videos) {
210
+ switch (videoData.type) {
211
+ case 'url': {
212
+ const { data, mediaType: downloadedMediaType } = await downloadFn({
213
+ url: new URL(videoData.url),
214
+ abortSignal,
215
+ });
216
+
217
+ // Filter out generic/unknown media types that should fall through to detection
218
+ const isUsableMediaType = (type: string | undefined): boolean =>
219
+ !!type && type !== 'application/octet-stream';
220
+
221
+ const mediaType =
222
+ (isUsableMediaType(videoData.mediaType) && videoData.mediaType) ||
223
+ (isUsableMediaType(downloadedMediaType) && downloadedMediaType) ||
224
+ detectMediaType({
225
+ data,
226
+ signatures: videoMediaTypeSignatures,
227
+ }) ||
228
+ 'video/mp4';
229
+
230
+ videos.push(
231
+ new DefaultGeneratedFile({
232
+ data,
233
+ mediaType,
234
+ }),
235
+ );
236
+ break;
237
+ }
238
+
239
+ case 'base64': {
240
+ videos.push(
241
+ new DefaultGeneratedFile({
242
+ data: videoData.data,
243
+ mediaType: videoData.mediaType || 'video/mp4',
244
+ }),
245
+ );
246
+ break;
247
+ }
248
+
249
+ case 'binary': {
250
+ const mediaType =
251
+ videoData.mediaType ||
252
+ detectMediaType({
253
+ data: videoData.data,
254
+ signatures: videoMediaTypeSignatures,
255
+ }) ||
256
+ 'video/mp4';
257
+
258
+ videos.push(
259
+ new DefaultGeneratedFile({
260
+ data: videoData.data,
261
+ mediaType,
262
+ }),
263
+ );
264
+ break;
265
+ }
266
+ }
267
+ }
268
+
269
+ warnings.push(...result.warnings);
270
+
271
+ responses.push({
272
+ timestamp: result.response.timestamp,
273
+ modelId: result.response.modelId,
274
+ headers: result.response.headers,
275
+ providerMetadata: result.providerMetadata,
276
+ });
277
+
278
+ if (result.providerMetadata != null) {
279
+ for (const [providerName, metadata] of Object.entries(
280
+ result.providerMetadata,
281
+ )) {
282
+ const existingMetadata = providerMetadata[providerName];
283
+ if (existingMetadata != null && typeof existingMetadata === 'object') {
284
+ providerMetadata[providerName] = {
285
+ ...existingMetadata,
286
+ ...metadata,
287
+ };
288
+
289
+ // Merge videos arrays if both exist
290
+ if (
291
+ 'videos' in existingMetadata &&
292
+ Array.isArray(existingMetadata.videos) &&
293
+ 'videos' in metadata &&
294
+ Array.isArray(metadata.videos)
295
+ ) {
296
+ (providerMetadata[providerName] as { videos: unknown[] }).videos = [
297
+ ...existingMetadata.videos,
298
+ ...metadata.videos,
299
+ ];
300
+ }
301
+ } else {
302
+ providerMetadata[providerName] = metadata;
303
+ }
304
+ }
305
+ }
306
+ }
307
+
308
+ if (videos.length === 0) {
309
+ throw new NoVideoGeneratedError({ responses });
310
+ }
311
+
312
+ if (warnings.length > 0) {
313
+ logWarnings({
314
+ warnings,
315
+ provider: model.provider,
316
+ model: model.modelId,
317
+ });
318
+ }
319
+
320
+ return {
321
+ video: videos[0],
322
+ videos,
323
+ warnings,
324
+ responses,
325
+ providerMetadata,
326
+ };
327
+ }
328
+
329
+ function normalizePrompt(promptArg: GenerateVideoPrompt): {
330
+ prompt: string | undefined;
331
+ image: Experimental_VideoModelV4File | undefined;
332
+ } {
333
+ if (typeof promptArg === 'string') {
334
+ return {
335
+ prompt: promptArg,
336
+ image: undefined,
337
+ };
338
+ }
339
+
340
+ let image: Experimental_VideoModelV4File | undefined;
341
+
342
+ if (promptArg.image != null) {
343
+ const dataContent = promptArg.image;
344
+
345
+ if (typeof dataContent === 'string') {
346
+ if (
347
+ dataContent.startsWith('http://') ||
348
+ dataContent.startsWith('https://')
349
+ ) {
350
+ image = {
351
+ type: 'url',
352
+ url: dataContent,
353
+ };
354
+ } else if (dataContent.startsWith('data:')) {
355
+ const { mediaType, base64Content } = splitDataUrl(dataContent);
356
+ image = {
357
+ type: 'file',
358
+ mediaType: mediaType ?? 'image/png',
359
+ data: convertBase64ToUint8Array(base64Content ?? ''),
360
+ };
361
+ } else {
362
+ const bytes = convertBase64ToUint8Array(dataContent);
363
+ const mediaType =
364
+ detectMediaType({
365
+ data: bytes,
366
+ signatures: imageMediaTypeSignatures,
367
+ }) ?? 'image/png';
368
+
369
+ image = {
370
+ type: 'file',
371
+ mediaType,
372
+ data: bytes,
373
+ };
374
+ }
375
+ } else if (dataContent instanceof Uint8Array) {
376
+ const mediaType =
377
+ detectMediaType({
378
+ data: dataContent,
379
+ signatures: imageMediaTypeSignatures,
380
+ }) ?? 'image/png';
381
+
382
+ image = {
383
+ type: 'file',
384
+ mediaType,
385
+ data: dataContent,
386
+ };
387
+ }
388
+ }
389
+
390
+ return {
391
+ prompt: promptArg.text,
392
+ image,
393
+ };
394
+ }
395
+
396
+ async function invokeModelMaxVideosPerCall(model: Experimental_VideoModelV4) {
397
+ if (typeof model.maxVideosPerCall === 'function') {
398
+ return await model.maxVideosPerCall({ modelId: model.modelId });
399
+ }
400
+
401
+ return model.maxVideosPerCall;
402
+ }
@@ -0,0 +1,3 @@
1
+ export type { GenerateVideoPrompt } from './generate-video';
2
+ export { experimental_generateVideo } from './generate-video';
3
+ export type { GenerateVideoResult } from './generate-video-result';
package/src/global.ts ADDED
@@ -0,0 +1,36 @@
1
+ import { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';
2
+ import { LogWarningsFunction } from './logger/log-warnings';
3
+ import type { TelemetryIntegration } from './telemetry/telemetry-integration';
4
+
5
+ // add AI SDK default provider to the globalThis object
6
+ declare global {
7
+ /**
8
+ * The default provider to use for the AI SDK.
9
+ * String model ids are resolved to the default provider and model id.
10
+ *
11
+ * If not set, the default provider is the Vercel AI gateway provider.
12
+ *
13
+ * @see https://ai-sdk.dev/docs/ai-sdk-core/provider-management#global-provider-configuration
14
+ */
15
+ var AI_SDK_DEFAULT_PROVIDER: ProviderV4 | ProviderV3 | ProviderV2 | undefined;
16
+
17
+ /**
18
+ * The warning logger to use for the AI SDK.
19
+ *
20
+ * If not set, the default logger is the console.warn function.
21
+ *
22
+ * If set to false, no warnings are logged.
23
+ */
24
+ var AI_SDK_LOG_WARNINGS: LogWarningsFunction | undefined | false;
25
+
26
+ /**
27
+ * Globally registered telemetry integrations for the AI SDK.
28
+ *
29
+ * Integrations registered here receive lifecycle events (onStart, onStepStart,
30
+ * etc.) from every `generateText`, `streamText`, and similar call.
31
+ *
32
+ * Prefer using `registerTelemetryIntegration()` from `'ai'` instead of
33
+ * assigning this directly.
34
+ */
35
+ var AI_SDK_TELEMETRY_INTEGRATIONS: TelemetryIntegration[] | undefined;
36
+ }
package/src/index.ts ADDED
@@ -0,0 +1,49 @@
1
+ // re-exports:
2
+ export { createGateway, gateway, type GatewayModelId } from '@ai-sdk/gateway';
3
+ export {
4
+ asSchema,
5
+ createIdGenerator,
6
+ dynamicTool,
7
+ generateId,
8
+ jsonSchema,
9
+ parseJsonEventStream,
10
+ tool,
11
+ zodSchema,
12
+ type FlexibleSchema,
13
+ type IdGenerator,
14
+ type InferSchema,
15
+ type InferToolInput,
16
+ type InferToolOutput,
17
+ type Schema,
18
+ type Tool,
19
+ type ToolApprovalRequest,
20
+ type ToolApprovalResponse,
21
+ type ToolCallOptions,
22
+ type ToolExecutionOptions,
23
+ type ToolExecuteFunction,
24
+ } from '@ai-sdk/provider-utils';
25
+
26
+ // directory exports
27
+ export * from './agent';
28
+ export * from './embed';
29
+ export * from './error';
30
+ export * from './generate-image';
31
+ export * from './generate-object';
32
+ export * from './generate-speech';
33
+ export * from './generate-text';
34
+ export * from './generate-video';
35
+ export * from './logger';
36
+ export * from './middleware';
37
+ export * from './prompt';
38
+ export * from './registry';
39
+ export * from './rerank';
40
+ export * from './text-stream';
41
+ export * from './transcribe';
42
+ export * from './types';
43
+ export * from './ui';
44
+ export * from './ui-message-stream';
45
+ export * from './util';
46
+ export * from './telemetry';
47
+
48
+ // import globals
49
+ import './global';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @deprecated Use `LogWarningsFunction` instead.
3
+ */
4
+ export type { LogWarningsFunction as Experimental_LogWarningsFunction } from './log-warnings';
5
+
6
+ export { type LogWarningsFunction } from './log-warnings';
@@ -0,0 +1,140 @@
1
+ import { Warning } from '../types';
2
+
3
+ /**
4
+ * A function for logging warnings.
5
+ *
6
+ * You can assign it to the `AI_SDK_LOG_WARNINGS` global variable to use it as the default warning logger.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * globalThis.AI_SDK_LOG_WARNINGS = (options) => {
11
+ * console.log('WARNINGS:', options.warnings, options.provider, options.model);
12
+ * };
13
+ * ```
14
+ */
15
+ export type LogWarningsFunction = (options: {
16
+ /**
17
+ * The warnings returned by the model provider.
18
+ */
19
+ warnings: Warning[];
20
+
21
+ /**
22
+ * The provider id used for the call.
23
+ */
24
+ provider: string;
25
+
26
+ /**
27
+ * The model id used for the call.
28
+ */
29
+ model: string;
30
+ }) => void;
31
+
32
+ /**
33
+ * Formats a warning object into a human-readable string with clear AI SDK branding.
34
+ *
35
+ * @param options - The options for formatting the warning.
36
+ * @param options.warning - The warning to format.
37
+ * @param options.provider - The provider id used for the call.
38
+ * @param options.model - The model id used for the call.
39
+ * @returns A formatted warning message string.
40
+ */
41
+ function formatWarning({
42
+ warning,
43
+ provider,
44
+ model,
45
+ }: {
46
+ warning: Warning;
47
+ provider: string;
48
+ model: string;
49
+ }): string {
50
+ const prefix = `AI SDK Warning (${provider} / ${model}):`;
51
+
52
+ switch (warning.type) {
53
+ case 'unsupported': {
54
+ let message = `${prefix} The feature "${warning.feature}" is not supported.`;
55
+ if (warning.details) {
56
+ message += ` ${warning.details}`;
57
+ }
58
+ return message;
59
+ }
60
+
61
+ case 'compatibility': {
62
+ let message = `${prefix} The feature "${warning.feature}" is used in a compatibility mode.`;
63
+ if (warning.details) {
64
+ message += ` ${warning.details}`;
65
+ }
66
+ return message;
67
+ }
68
+
69
+ case 'other': {
70
+ return `${prefix} ${warning.message}`;
71
+ }
72
+
73
+ default: {
74
+ // Fallback for any unknown warning types
75
+ return `${prefix} ${JSON.stringify(warning, null, 2)}`;
76
+ }
77
+ }
78
+ }
79
+
80
+ export const FIRST_WARNING_INFO_MESSAGE =
81
+ 'AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.';
82
+
83
+ let hasLoggedBefore = false;
84
+
85
+ /**
86
+ * Logs warnings to the console or uses a custom logger if configured.
87
+ *
88
+ * The behavior can be customized via the `AI_SDK_LOG_WARNINGS` global variable:
89
+ * - If set to `false`, warnings are suppressed.
90
+ * - If set to a function, that function is called with the warnings.
91
+ * - Otherwise, warnings are logged to the console using `console.warn`.
92
+ *
93
+ * @param options - The options containing warnings and context.
94
+ * @param options.warnings - The warnings to log.
95
+ * @param options.provider - The provider id used for the call.
96
+ * @param options.model - The model id used for the call.
97
+ */
98
+ export const logWarnings: LogWarningsFunction = options => {
99
+ // if the warnings array is empty, do nothing
100
+ if (options.warnings.length === 0) {
101
+ return;
102
+ }
103
+
104
+ const logger = globalThis.AI_SDK_LOG_WARNINGS;
105
+
106
+ // if the logger is set to false, do nothing
107
+ if (logger === false) {
108
+ return;
109
+ }
110
+
111
+ // use the provided logger if it is a function
112
+ if (typeof logger === 'function') {
113
+ logger(options);
114
+ return;
115
+ }
116
+
117
+ // display information note on first call
118
+ if (!hasLoggedBefore) {
119
+ hasLoggedBefore = true;
120
+ console.info(FIRST_WARNING_INFO_MESSAGE);
121
+ }
122
+
123
+ // default behavior: log warnings to the console
124
+ for (const warning of options.warnings) {
125
+ console.warn(
126
+ formatWarning({
127
+ warning,
128
+ provider: options.provider,
129
+ model: options.model,
130
+ }),
131
+ );
132
+ }
133
+ };
134
+
135
+ /**
136
+ * Resets the internal logging state. Used for testing purposes.
137
+ */
138
+ export const resetLogWarningsState = () => {
139
+ hasLoggedBefore = false;
140
+ };