@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,1336 @@
1
+ // internal/index.ts
2
+ import { convertAsyncIteratorToReadableStream } from "@ai-sdk/provider-utils";
3
+
4
+ // src/prompt/convert-to-language-model-prompt.ts
5
+ import {
6
+ isUrlSupported
7
+ } from "@ai-sdk/provider-utils";
8
+
9
+ // src/util/detect-media-type.ts
10
+ import { convertBase64ToUint8Array } from "@ai-sdk/provider-utils";
11
+ var imageMediaTypeSignatures = [
12
+ {
13
+ mediaType: "image/gif",
14
+ bytesPrefix: [71, 73, 70]
15
+ // GIF
16
+ },
17
+ {
18
+ mediaType: "image/png",
19
+ bytesPrefix: [137, 80, 78, 71]
20
+ // PNG
21
+ },
22
+ {
23
+ mediaType: "image/jpeg",
24
+ bytesPrefix: [255, 216]
25
+ // JPEG
26
+ },
27
+ {
28
+ mediaType: "image/webp",
29
+ bytesPrefix: [
30
+ 82,
31
+ 73,
32
+ 70,
33
+ 70,
34
+ // "RIFF"
35
+ null,
36
+ null,
37
+ null,
38
+ null,
39
+ // file size (variable)
40
+ 87,
41
+ 69,
42
+ 66,
43
+ 80
44
+ // "WEBP"
45
+ ]
46
+ },
47
+ {
48
+ mediaType: "image/bmp",
49
+ bytesPrefix: [66, 77]
50
+ },
51
+ {
52
+ mediaType: "image/tiff",
53
+ bytesPrefix: [73, 73, 42, 0]
54
+ },
55
+ {
56
+ mediaType: "image/tiff",
57
+ bytesPrefix: [77, 77, 0, 42]
58
+ },
59
+ {
60
+ mediaType: "image/avif",
61
+ bytesPrefix: [
62
+ 0,
63
+ 0,
64
+ 0,
65
+ 32,
66
+ 102,
67
+ 116,
68
+ 121,
69
+ 112,
70
+ 97,
71
+ 118,
72
+ 105,
73
+ 102
74
+ ]
75
+ },
76
+ {
77
+ mediaType: "image/heic",
78
+ bytesPrefix: [
79
+ 0,
80
+ 0,
81
+ 0,
82
+ 32,
83
+ 102,
84
+ 116,
85
+ 121,
86
+ 112,
87
+ 104,
88
+ 101,
89
+ 105,
90
+ 99
91
+ ]
92
+ }
93
+ ];
94
+ var stripID3 = (data) => {
95
+ const bytes = typeof data === "string" ? convertBase64ToUint8Array(data) : data;
96
+ const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;
97
+ return bytes.slice(id3Size + 10);
98
+ };
99
+ function stripID3TagsIfPresent(data) {
100
+ const hasId3 = typeof data === "string" && data.startsWith("SUQz") || typeof data !== "string" && data.length > 10 && data[0] === 73 && // 'I'
101
+ data[1] === 68 && // 'D'
102
+ data[2] === 51;
103
+ return hasId3 ? stripID3(data) : data;
104
+ }
105
+ function detectMediaType({
106
+ data,
107
+ signatures
108
+ }) {
109
+ const processedData = stripID3TagsIfPresent(data);
110
+ const bytes = typeof processedData === "string" ? convertBase64ToUint8Array(
111
+ processedData.substring(0, Math.min(processedData.length, 24))
112
+ ) : processedData;
113
+ for (const signature of signatures) {
114
+ if (bytes.length >= signature.bytesPrefix.length && signature.bytesPrefix.every(
115
+ (byte, index) => byte === null || bytes[index] === byte
116
+ )) {
117
+ return signature.mediaType;
118
+ }
119
+ }
120
+ return void 0;
121
+ }
122
+
123
+ // src/util/download/download.ts
124
+ import {
125
+ DownloadError,
126
+ readResponseWithSizeLimit,
127
+ DEFAULT_MAX_DOWNLOAD_SIZE,
128
+ validateDownloadUrl
129
+ } from "@ai-sdk/provider-utils";
130
+ import {
131
+ withUserAgentSuffix,
132
+ getRuntimeEnvironmentUserAgent
133
+ } from "@ai-sdk/provider-utils";
134
+
135
+ // src/version.ts
136
+ var VERSION = true ? "7.0.0-beta.45" : "0.0.0-test";
137
+
138
+ // src/util/download/download.ts
139
+ var download = async ({
140
+ url,
141
+ maxBytes,
142
+ abortSignal
143
+ }) => {
144
+ var _a5;
145
+ const urlText = url.toString();
146
+ validateDownloadUrl(urlText);
147
+ try {
148
+ const response = await fetch(urlText, {
149
+ headers: withUserAgentSuffix(
150
+ {},
151
+ `ai-sdk/${VERSION}`,
152
+ getRuntimeEnvironmentUserAgent()
153
+ ),
154
+ signal: abortSignal
155
+ });
156
+ if (response.redirected) {
157
+ validateDownloadUrl(response.url);
158
+ }
159
+ if (!response.ok) {
160
+ throw new DownloadError({
161
+ url: urlText,
162
+ statusCode: response.status,
163
+ statusText: response.statusText
164
+ });
165
+ }
166
+ const data = await readResponseWithSizeLimit({
167
+ response,
168
+ url: urlText,
169
+ maxBytes: maxBytes != null ? maxBytes : DEFAULT_MAX_DOWNLOAD_SIZE
170
+ });
171
+ return {
172
+ data,
173
+ mediaType: (_a5 = response.headers.get("content-type")) != null ? _a5 : void 0
174
+ };
175
+ } catch (error) {
176
+ if (DownloadError.isInstance(error)) {
177
+ throw error;
178
+ }
179
+ throw new DownloadError({ url: urlText, cause: error });
180
+ }
181
+ };
182
+
183
+ // src/util/download/download-function.ts
184
+ var createDefaultDownloadFunction = (download2 = download) => (requestedDownloads) => Promise.all(
185
+ requestedDownloads.map(
186
+ async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : download2(requestedDownload)
187
+ )
188
+ );
189
+
190
+ // src/prompt/data-content.ts
191
+ import { AISDKError } from "@ai-sdk/provider";
192
+ import {
193
+ convertBase64ToUint8Array as convertBase64ToUint8Array2,
194
+ convertUint8ArrayToBase64
195
+ } from "@ai-sdk/provider-utils";
196
+ import { z } from "zod/v4";
197
+
198
+ // src/prompt/split-data-url.ts
199
+ function splitDataUrl(dataUrl) {
200
+ try {
201
+ const [header, base64Content] = dataUrl.split(",");
202
+ return {
203
+ mediaType: header.split(";")[0].split(":")[1],
204
+ base64Content
205
+ };
206
+ } catch (error) {
207
+ return {
208
+ mediaType: void 0,
209
+ base64Content: void 0
210
+ };
211
+ }
212
+ }
213
+
214
+ // src/prompt/data-content.ts
215
+ var dataContentSchema = z.union([
216
+ z.string(),
217
+ z.instanceof(Uint8Array),
218
+ z.instanceof(ArrayBuffer),
219
+ z.custom(
220
+ // Buffer might not be available in some environments such as CloudFlare:
221
+ (value) => {
222
+ var _a5, _b;
223
+ return (_b = (_a5 = globalThis.Buffer) == null ? void 0 : _a5.isBuffer(value)) != null ? _b : false;
224
+ },
225
+ { message: "Must be a Buffer" }
226
+ )
227
+ ]);
228
+ function convertToLanguageModelV4DataContent(content) {
229
+ if (content instanceof Uint8Array) {
230
+ return { data: content, mediaType: void 0 };
231
+ }
232
+ if (content instanceof ArrayBuffer) {
233
+ return { data: new Uint8Array(content), mediaType: void 0 };
234
+ }
235
+ if (typeof content === "string") {
236
+ try {
237
+ content = new URL(content);
238
+ } catch (error) {
239
+ }
240
+ }
241
+ if (content instanceof URL && content.protocol === "data:") {
242
+ const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
243
+ content.toString()
244
+ );
245
+ if (dataUrlMediaType == null || base64Content == null) {
246
+ throw new AISDKError({
247
+ name: "InvalidDataContentError",
248
+ message: `Invalid data URL format in content ${content.toString()}`
249
+ });
250
+ }
251
+ return { data: base64Content, mediaType: dataUrlMediaType };
252
+ }
253
+ return { data: content, mediaType: void 0 };
254
+ }
255
+
256
+ // src/prompt/invalid-message-role-error.ts
257
+ import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
258
+ var name = "AI_InvalidMessageRoleError";
259
+ var marker = `vercel.ai.error.${name}`;
260
+ var symbol = Symbol.for(marker);
261
+ var _a;
262
+ var InvalidMessageRoleError = class extends AISDKError2 {
263
+ constructor({
264
+ role,
265
+ message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
266
+ }) {
267
+ super({ name, message });
268
+ this[_a] = true;
269
+ this.role = role;
270
+ }
271
+ static isInstance(error) {
272
+ return AISDKError2.hasMarker(error, marker);
273
+ }
274
+ };
275
+ _a = symbol;
276
+
277
+ // src/util/as-array.ts
278
+ function asArray(value) {
279
+ return value === void 0 ? [] : Array.isArray(value) ? value : [value];
280
+ }
281
+
282
+ // src/error/missing-tool-result-error.ts
283
+ import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
284
+ var name2 = "AI_MissingToolResultsError";
285
+ var marker2 = `vercel.ai.error.${name2}`;
286
+ var symbol2 = Symbol.for(marker2);
287
+ var _a2;
288
+ var MissingToolResultsError = class extends AISDKError3 {
289
+ constructor({ toolCallIds }) {
290
+ super({
291
+ name: name2,
292
+ message: `Tool result${toolCallIds.length > 1 ? "s are" : " is"} missing for tool call${toolCallIds.length > 1 ? "s" : ""} ${toolCallIds.join(
293
+ ", "
294
+ )}.`
295
+ });
296
+ this[_a2] = true;
297
+ this.toolCallIds = toolCallIds;
298
+ }
299
+ static isInstance(error) {
300
+ return AISDKError3.hasMarker(error, marker2);
301
+ }
302
+ };
303
+ _a2 = symbol2;
304
+
305
+ // src/prompt/convert-to-language-model-prompt.ts
306
+ async function convertToLanguageModelPrompt({
307
+ prompt,
308
+ supportedUrls,
309
+ download: download2 = createDefaultDownloadFunction()
310
+ }) {
311
+ const downloadedAssets = await downloadAssets(
312
+ prompt.messages,
313
+ download2,
314
+ supportedUrls
315
+ );
316
+ const approvalIdToToolCallId = /* @__PURE__ */ new Map();
317
+ for (const message of prompt.messages) {
318
+ if (message.role === "assistant" && Array.isArray(message.content)) {
319
+ for (const part of message.content) {
320
+ if (part.type === "tool-approval-request" && "approvalId" in part && "toolCallId" in part) {
321
+ approvalIdToToolCallId.set(
322
+ part.approvalId,
323
+ part.toolCallId
324
+ );
325
+ }
326
+ }
327
+ }
328
+ }
329
+ const approvedToolCallIds = /* @__PURE__ */ new Set();
330
+ for (const message of prompt.messages) {
331
+ if (message.role === "tool") {
332
+ for (const part of message.content) {
333
+ if (part.type === "tool-approval-response") {
334
+ const toolCallId = approvalIdToToolCallId.get(part.approvalId);
335
+ if (toolCallId) {
336
+ approvedToolCallIds.add(toolCallId);
337
+ }
338
+ }
339
+ }
340
+ }
341
+ }
342
+ const messages = [
343
+ ...prompt.system != null ? typeof prompt.system === "string" ? [{ role: "system", content: prompt.system }] : asArray(prompt.system).map((message) => ({
344
+ role: "system",
345
+ content: message.content,
346
+ providerOptions: message.providerOptions
347
+ })) : [],
348
+ ...prompt.messages.map(
349
+ (message) => convertToLanguageModelMessage({ message, downloadedAssets })
350
+ )
351
+ ];
352
+ const combinedMessages = [];
353
+ for (const message of messages) {
354
+ if (message.role !== "tool") {
355
+ combinedMessages.push(message);
356
+ continue;
357
+ }
358
+ const lastCombinedMessage = combinedMessages.at(-1);
359
+ if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === "tool") {
360
+ lastCombinedMessage.content.push(...message.content);
361
+ } else {
362
+ combinedMessages.push(message);
363
+ }
364
+ }
365
+ const toolCallIds = /* @__PURE__ */ new Set();
366
+ for (const message of combinedMessages) {
367
+ switch (message.role) {
368
+ case "assistant": {
369
+ for (const content of message.content) {
370
+ if (content.type === "tool-call" && !content.providerExecuted) {
371
+ toolCallIds.add(content.toolCallId);
372
+ }
373
+ }
374
+ break;
375
+ }
376
+ case "tool": {
377
+ for (const content of message.content) {
378
+ if (content.type === "tool-result") {
379
+ toolCallIds.delete(content.toolCallId);
380
+ }
381
+ }
382
+ break;
383
+ }
384
+ case "user":
385
+ case "system":
386
+ for (const id of approvedToolCallIds) {
387
+ toolCallIds.delete(id);
388
+ }
389
+ if (toolCallIds.size > 0) {
390
+ throw new MissingToolResultsError({
391
+ toolCallIds: Array.from(toolCallIds)
392
+ });
393
+ }
394
+ break;
395
+ }
396
+ }
397
+ for (const id of approvedToolCallIds) {
398
+ toolCallIds.delete(id);
399
+ }
400
+ if (toolCallIds.size > 0) {
401
+ throw new MissingToolResultsError({ toolCallIds: Array.from(toolCallIds) });
402
+ }
403
+ return combinedMessages.filter(
404
+ // Filter out empty tool messages (e.g. if they only contained
405
+ // tool-approval-response parts that were removed).
406
+ // This prevents sending invalid empty messages to the provider.
407
+ // Note: provider-executed tool-approval-response parts are preserved.
408
+ (message) => message.role !== "tool" || message.content.length > 0
409
+ );
410
+ }
411
+ function convertToLanguageModelMessage({
412
+ message,
413
+ downloadedAssets
414
+ }) {
415
+ const role = message.role;
416
+ switch (role) {
417
+ case "system": {
418
+ return {
419
+ role: "system",
420
+ content: message.content,
421
+ providerOptions: message.providerOptions
422
+ };
423
+ }
424
+ case "user": {
425
+ if (typeof message.content === "string") {
426
+ return {
427
+ role: "user",
428
+ content: [{ type: "text", text: message.content }],
429
+ providerOptions: message.providerOptions
430
+ };
431
+ }
432
+ return {
433
+ role: "user",
434
+ content: message.content.map((part) => convertPartToLanguageModelPart(part, downloadedAssets)).filter((part) => part.type !== "text" || part.text !== ""),
435
+ providerOptions: message.providerOptions
436
+ };
437
+ }
438
+ case "assistant": {
439
+ if (typeof message.content === "string") {
440
+ return {
441
+ role: "assistant",
442
+ content: [{ type: "text", text: message.content }],
443
+ providerOptions: message.providerOptions
444
+ };
445
+ }
446
+ return {
447
+ role: "assistant",
448
+ content: message.content.filter(
449
+ // remove empty text parts (no text, and no provider options):
450
+ (part) => part.type !== "text" || part.text !== "" || part.providerOptions != null
451
+ ).filter(
452
+ (part) => part.type !== "tool-approval-request"
453
+ ).map((part) => {
454
+ const providerOptions = part.providerOptions;
455
+ switch (part.type) {
456
+ case "custom": {
457
+ return {
458
+ type: "custom",
459
+ kind: part.kind,
460
+ providerOptions
461
+ };
462
+ }
463
+ case "file": {
464
+ const { data, mediaType } = convertToLanguageModelV4DataContent(
465
+ part.data
466
+ );
467
+ return {
468
+ type: "file",
469
+ data,
470
+ filename: part.filename,
471
+ mediaType: mediaType != null ? mediaType : part.mediaType,
472
+ providerOptions
473
+ };
474
+ }
475
+ case "reasoning": {
476
+ return {
477
+ type: "reasoning",
478
+ text: part.text,
479
+ providerOptions
480
+ };
481
+ }
482
+ case "reasoning-file": {
483
+ const { data, mediaType } = convertToLanguageModelV4DataContent(
484
+ part.data
485
+ );
486
+ return {
487
+ type: "reasoning-file",
488
+ data,
489
+ mediaType: mediaType != null ? mediaType : part.mediaType,
490
+ providerOptions
491
+ };
492
+ }
493
+ case "text": {
494
+ return {
495
+ type: "text",
496
+ text: part.text,
497
+ providerOptions
498
+ };
499
+ }
500
+ case "tool-call": {
501
+ return {
502
+ type: "tool-call",
503
+ toolCallId: part.toolCallId,
504
+ toolName: part.toolName,
505
+ input: part.input,
506
+ providerExecuted: part.providerExecuted,
507
+ providerOptions
508
+ };
509
+ }
510
+ case "tool-result": {
511
+ return {
512
+ type: "tool-result",
513
+ toolCallId: part.toolCallId,
514
+ toolName: part.toolName,
515
+ output: mapToolResultOutput(part.output),
516
+ providerOptions
517
+ };
518
+ }
519
+ }
520
+ }),
521
+ providerOptions: message.providerOptions
522
+ };
523
+ }
524
+ case "tool": {
525
+ return {
526
+ role: "tool",
527
+ content: message.content.filter(
528
+ // Only include tool-approval-response for provider-executed tools
529
+ (part) => part.type !== "tool-approval-response" || part.providerExecuted
530
+ ).map((part) => {
531
+ switch (part.type) {
532
+ case "tool-result": {
533
+ return {
534
+ type: "tool-result",
535
+ toolCallId: part.toolCallId,
536
+ toolName: part.toolName,
537
+ output: mapToolResultOutput(part.output),
538
+ providerOptions: part.providerOptions
539
+ };
540
+ }
541
+ case "tool-approval-response": {
542
+ return {
543
+ type: "tool-approval-response",
544
+ approvalId: part.approvalId,
545
+ approved: part.approved,
546
+ reason: part.reason
547
+ };
548
+ }
549
+ }
550
+ }),
551
+ providerOptions: message.providerOptions
552
+ };
553
+ }
554
+ default: {
555
+ const _exhaustiveCheck = role;
556
+ throw new InvalidMessageRoleError({ role: _exhaustiveCheck });
557
+ }
558
+ }
559
+ }
560
+ async function downloadAssets(messages, download2, supportedUrls) {
561
+ const plannedDownloads = messages.filter((message) => message.role === "user").map((message) => message.content).filter(
562
+ (content) => Array.isArray(content)
563
+ ).flat().filter(
564
+ (part) => part.type === "image" || part.type === "file"
565
+ ).map((part) => {
566
+ var _a5;
567
+ const mediaType = (_a5 = part.mediaType) != null ? _a5 : part.type === "image" ? "image/*" : void 0;
568
+ let data = part.type === "image" ? part.image : part.data;
569
+ if (typeof data === "string") {
570
+ try {
571
+ data = new URL(data);
572
+ } catch (ignored) {
573
+ }
574
+ }
575
+ return { mediaType, data };
576
+ }).filter(
577
+ (part) => part.data instanceof URL
578
+ ).map((part) => ({
579
+ url: part.data,
580
+ isUrlSupportedByModel: part.mediaType != null && isUrlSupported({
581
+ url: part.data.toString(),
582
+ mediaType: part.mediaType,
583
+ supportedUrls
584
+ })
585
+ }));
586
+ const downloadedFiles = await download2(plannedDownloads);
587
+ return Object.fromEntries(
588
+ downloadedFiles.map(
589
+ (file, index) => file == null ? null : [
590
+ plannedDownloads[index].url.toString(),
591
+ { data: file.data, mediaType: file.mediaType }
592
+ ]
593
+ ).filter((file) => file != null)
594
+ );
595
+ }
596
+ function convertPartToLanguageModelPart(part, downloadedAssets) {
597
+ var _a5;
598
+ if (part.type === "text") {
599
+ return {
600
+ type: "text",
601
+ text: part.text,
602
+ providerOptions: part.providerOptions
603
+ };
604
+ }
605
+ let originalData;
606
+ const type = part.type;
607
+ switch (type) {
608
+ case "image":
609
+ originalData = part.image;
610
+ break;
611
+ case "file":
612
+ originalData = part.data;
613
+ break;
614
+ default:
615
+ throw new Error(`Unsupported part type: ${type}`);
616
+ }
617
+ const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV4DataContent(originalData);
618
+ let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
619
+ let data = convertedData;
620
+ if (data instanceof URL) {
621
+ const downloadedFile = downloadedAssets[data.toString()];
622
+ if (downloadedFile) {
623
+ data = downloadedFile.data;
624
+ mediaType != null ? mediaType : mediaType = downloadedFile.mediaType;
625
+ }
626
+ }
627
+ switch (type) {
628
+ case "image": {
629
+ if (data instanceof Uint8Array || typeof data === "string") {
630
+ mediaType = (_a5 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a5 : mediaType;
631
+ }
632
+ return {
633
+ type: "file",
634
+ mediaType: mediaType != null ? mediaType : "image/*",
635
+ // any image
636
+ filename: void 0,
637
+ data,
638
+ providerOptions: part.providerOptions
639
+ };
640
+ }
641
+ case "file": {
642
+ if (mediaType == null) {
643
+ throw new Error(`Media type is missing for file part`);
644
+ }
645
+ return {
646
+ type: "file",
647
+ mediaType,
648
+ filename: part.filename,
649
+ data,
650
+ providerOptions: part.providerOptions
651
+ };
652
+ }
653
+ }
654
+ }
655
+ function mapToolResultOutput(output) {
656
+ if (output.type !== "content") {
657
+ return output;
658
+ }
659
+ return {
660
+ type: "content",
661
+ value: output.value.map((item) => {
662
+ if (item.type !== "media") {
663
+ return item;
664
+ }
665
+ if (item.mediaType.startsWith("image/")) {
666
+ return {
667
+ type: "image-data",
668
+ data: item.data,
669
+ mediaType: item.mediaType
670
+ };
671
+ }
672
+ return {
673
+ type: "file-data",
674
+ data: item.data,
675
+ mediaType: item.mediaType
676
+ };
677
+ })
678
+ };
679
+ }
680
+
681
+ // src/prompt/prepare-tools-and-tool-choice.ts
682
+ import { asSchema } from "@ai-sdk/provider-utils";
683
+
684
+ // src/util/is-non-empty-object.ts
685
+ function isNonEmptyObject(object) {
686
+ return object != null && Object.keys(object).length > 0;
687
+ }
688
+
689
+ // src/prompt/prepare-tools-and-tool-choice.ts
690
+ async function prepareToolsAndToolChoice({
691
+ tools,
692
+ toolChoice,
693
+ activeTools
694
+ }) {
695
+ if (!isNonEmptyObject(tools)) {
696
+ return {
697
+ tools: void 0,
698
+ toolChoice: void 0
699
+ };
700
+ }
701
+ const filteredTools = activeTools != null ? Object.entries(tools).filter(
702
+ ([name5]) => activeTools.includes(name5)
703
+ ) : Object.entries(tools);
704
+ const languageModelTools = [];
705
+ for (const [name5, tool] of filteredTools) {
706
+ const toolType = tool.type;
707
+ switch (toolType) {
708
+ case void 0:
709
+ case "dynamic":
710
+ case "function":
711
+ languageModelTools.push({
712
+ type: "function",
713
+ name: name5,
714
+ description: tool.description,
715
+ inputSchema: await asSchema(tool.inputSchema).jsonSchema,
716
+ ...tool.inputExamples != null ? { inputExamples: tool.inputExamples } : {},
717
+ providerOptions: tool.providerOptions,
718
+ ...tool.strict != null ? { strict: tool.strict } : {}
719
+ });
720
+ break;
721
+ case "provider":
722
+ languageModelTools.push({
723
+ type: "provider",
724
+ name: name5,
725
+ id: tool.id,
726
+ args: tool.args
727
+ });
728
+ break;
729
+ default: {
730
+ const exhaustiveCheck = toolType;
731
+ throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
732
+ }
733
+ }
734
+ }
735
+ return {
736
+ tools: languageModelTools,
737
+ toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
738
+ };
739
+ }
740
+
741
+ // src/prompt/standardize-prompt.ts
742
+ import { InvalidPromptError } from "@ai-sdk/provider";
743
+ import {
744
+ safeValidateTypes
745
+ } from "@ai-sdk/provider-utils";
746
+ import { z as z6 } from "zod/v4";
747
+
748
+ // src/prompt/message.ts
749
+ import { z as z5 } from "zod/v4";
750
+
751
+ // src/types/provider-metadata.ts
752
+ import { z as z3 } from "zod/v4";
753
+
754
+ // src/types/json-value.ts
755
+ import { z as z2 } from "zod/v4";
756
+ var jsonValueSchema = z2.lazy(
757
+ () => z2.union([
758
+ z2.null(),
759
+ z2.string(),
760
+ z2.number(),
761
+ z2.boolean(),
762
+ z2.record(z2.string(), jsonValueSchema.optional()),
763
+ z2.array(jsonValueSchema)
764
+ ])
765
+ );
766
+
767
+ // src/types/provider-metadata.ts
768
+ var providerMetadataSchema = z3.record(
769
+ z3.string(),
770
+ z3.record(z3.string(), jsonValueSchema.optional())
771
+ );
772
+
773
+ // src/prompt/content-part.ts
774
+ import { z as z4 } from "zod/v4";
775
+ var textPartSchema = z4.object({
776
+ type: z4.literal("text"),
777
+ text: z4.string(),
778
+ providerOptions: providerMetadataSchema.optional()
779
+ });
780
+ var imagePartSchema = z4.object({
781
+ type: z4.literal("image"),
782
+ image: z4.union([dataContentSchema, z4.instanceof(URL)]),
783
+ mediaType: z4.string().optional(),
784
+ providerOptions: providerMetadataSchema.optional()
785
+ });
786
+ var filePartSchema = z4.object({
787
+ type: z4.literal("file"),
788
+ data: z4.union([dataContentSchema, z4.instanceof(URL)]),
789
+ filename: z4.string().optional(),
790
+ mediaType: z4.string(),
791
+ providerOptions: providerMetadataSchema.optional()
792
+ });
793
+ var reasoningPartSchema = z4.object({
794
+ type: z4.literal("reasoning"),
795
+ text: z4.string(),
796
+ providerOptions: providerMetadataSchema.optional()
797
+ });
798
+ var customPartSchema = z4.object({
799
+ type: z4.literal("custom"),
800
+ kind: z4.string().transform((value) => value),
801
+ providerOptions: providerMetadataSchema.optional()
802
+ });
803
+ var reasoningFilePartSchema = z4.object({
804
+ type: z4.literal("reasoning-file"),
805
+ data: z4.union([dataContentSchema, z4.instanceof(URL)]),
806
+ mediaType: z4.string(),
807
+ providerOptions: providerMetadataSchema.optional()
808
+ });
809
+ var toolCallPartSchema = z4.object({
810
+ type: z4.literal("tool-call"),
811
+ toolCallId: z4.string(),
812
+ toolName: z4.string(),
813
+ input: z4.unknown(),
814
+ providerOptions: providerMetadataSchema.optional(),
815
+ providerExecuted: z4.boolean().optional()
816
+ });
817
+ var outputSchema = z4.discriminatedUnion(
818
+ "type",
819
+ [
820
+ z4.object({
821
+ type: z4.literal("text"),
822
+ value: z4.string(),
823
+ providerOptions: providerMetadataSchema.optional()
824
+ }),
825
+ z4.object({
826
+ type: z4.literal("json"),
827
+ value: jsonValueSchema,
828
+ providerOptions: providerMetadataSchema.optional()
829
+ }),
830
+ z4.object({
831
+ type: z4.literal("execution-denied"),
832
+ reason: z4.string().optional(),
833
+ providerOptions: providerMetadataSchema.optional()
834
+ }),
835
+ z4.object({
836
+ type: z4.literal("error-text"),
837
+ value: z4.string(),
838
+ providerOptions: providerMetadataSchema.optional()
839
+ }),
840
+ z4.object({
841
+ type: z4.literal("error-json"),
842
+ value: jsonValueSchema,
843
+ providerOptions: providerMetadataSchema.optional()
844
+ }),
845
+ z4.object({
846
+ type: z4.literal("content"),
847
+ value: z4.array(
848
+ z4.union([
849
+ z4.object({
850
+ type: z4.literal("text"),
851
+ text: z4.string(),
852
+ providerOptions: providerMetadataSchema.optional()
853
+ }),
854
+ z4.object({
855
+ type: z4.literal("media"),
856
+ data: z4.string(),
857
+ mediaType: z4.string()
858
+ }),
859
+ z4.object({
860
+ type: z4.literal("file-data"),
861
+ data: z4.string(),
862
+ mediaType: z4.string(),
863
+ filename: z4.string().optional(),
864
+ providerOptions: providerMetadataSchema.optional()
865
+ }),
866
+ z4.object({
867
+ type: z4.literal("file-url"),
868
+ url: z4.string(),
869
+ providerOptions: providerMetadataSchema.optional()
870
+ }),
871
+ z4.object({
872
+ type: z4.literal("file-id"),
873
+ fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
874
+ providerOptions: providerMetadataSchema.optional()
875
+ }),
876
+ z4.object({
877
+ type: z4.literal("image-data"),
878
+ data: z4.string(),
879
+ mediaType: z4.string(),
880
+ providerOptions: providerMetadataSchema.optional()
881
+ }),
882
+ z4.object({
883
+ type: z4.literal("image-url"),
884
+ url: z4.string(),
885
+ providerOptions: providerMetadataSchema.optional()
886
+ }),
887
+ z4.object({
888
+ type: z4.literal("image-file-id"),
889
+ fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
890
+ providerOptions: providerMetadataSchema.optional()
891
+ }),
892
+ z4.object({
893
+ type: z4.literal("custom"),
894
+ providerOptions: providerMetadataSchema.optional()
895
+ })
896
+ ])
897
+ )
898
+ })
899
+ ]
900
+ );
901
+ var toolResultPartSchema = z4.object({
902
+ type: z4.literal("tool-result"),
903
+ toolCallId: z4.string(),
904
+ toolName: z4.string(),
905
+ output: outputSchema,
906
+ providerOptions: providerMetadataSchema.optional()
907
+ });
908
+ var toolApprovalRequestSchema = z4.object({
909
+ type: z4.literal("tool-approval-request"),
910
+ approvalId: z4.string(),
911
+ toolCallId: z4.string()
912
+ });
913
+ var toolApprovalResponseSchema = z4.object({
914
+ type: z4.literal("tool-approval-response"),
915
+ approvalId: z4.string(),
916
+ approved: z4.boolean(),
917
+ reason: z4.string().optional()
918
+ });
919
+
920
+ // src/prompt/message.ts
921
+ var systemModelMessageSchema = z5.object(
922
+ {
923
+ role: z5.literal("system"),
924
+ content: z5.string(),
925
+ providerOptions: providerMetadataSchema.optional()
926
+ }
927
+ );
928
+ var userModelMessageSchema = z5.object({
929
+ role: z5.literal("user"),
930
+ content: z5.union([
931
+ z5.string(),
932
+ z5.array(z5.union([textPartSchema, imagePartSchema, filePartSchema]))
933
+ ]),
934
+ providerOptions: providerMetadataSchema.optional()
935
+ });
936
+ var assistantModelMessageSchema = z5.object({
937
+ role: z5.literal("assistant"),
938
+ content: z5.union([
939
+ z5.string(),
940
+ z5.array(
941
+ z5.union([
942
+ textPartSchema,
943
+ customPartSchema,
944
+ filePartSchema,
945
+ reasoningPartSchema,
946
+ reasoningFilePartSchema,
947
+ toolCallPartSchema,
948
+ toolResultPartSchema,
949
+ toolApprovalRequestSchema
950
+ ])
951
+ )
952
+ ]),
953
+ providerOptions: providerMetadataSchema.optional()
954
+ });
955
+ var toolModelMessageSchema = z5.object({
956
+ role: z5.literal("tool"),
957
+ content: z5.array(z5.union([toolResultPartSchema, toolApprovalResponseSchema])),
958
+ providerOptions: providerMetadataSchema.optional()
959
+ });
960
+ var modelMessageSchema = z5.union([
961
+ systemModelMessageSchema,
962
+ userModelMessageSchema,
963
+ assistantModelMessageSchema,
964
+ toolModelMessageSchema
965
+ ]);
966
+
967
+ // src/prompt/standardize-prompt.ts
968
+ async function standardizePrompt(prompt) {
969
+ if (prompt.prompt == null && prompt.messages == null) {
970
+ throw new InvalidPromptError({
971
+ prompt,
972
+ message: "prompt or messages must be defined"
973
+ });
974
+ }
975
+ if (prompt.prompt != null && prompt.messages != null) {
976
+ throw new InvalidPromptError({
977
+ prompt,
978
+ message: "prompt and messages cannot be defined at the same time"
979
+ });
980
+ }
981
+ if (prompt.system != null && typeof prompt.system !== "string" && !asArray(prompt.system).every(
982
+ (message) => typeof message === "object" && message !== null && "role" in message && message.role === "system"
983
+ )) {
984
+ throw new InvalidPromptError({
985
+ prompt,
986
+ message: "system must be a string, SystemModelMessage, or array of SystemModelMessage"
987
+ });
988
+ }
989
+ let messages;
990
+ if (prompt.prompt != null && typeof prompt.prompt === "string") {
991
+ messages = [{ role: "user", content: prompt.prompt }];
992
+ } else if (prompt.prompt != null && Array.isArray(prompt.prompt)) {
993
+ messages = prompt.prompt;
994
+ } else if (prompt.messages != null) {
995
+ messages = prompt.messages;
996
+ } else {
997
+ throw new InvalidPromptError({
998
+ prompt,
999
+ message: "prompt or messages must be defined"
1000
+ });
1001
+ }
1002
+ if (messages.length === 0) {
1003
+ throw new InvalidPromptError({
1004
+ prompt,
1005
+ message: "messages must not be empty"
1006
+ });
1007
+ }
1008
+ const validationResult = await safeValidateTypes({
1009
+ value: messages,
1010
+ schema: z6.array(modelMessageSchema)
1011
+ });
1012
+ if (!validationResult.success) {
1013
+ throw new InvalidPromptError({
1014
+ prompt,
1015
+ message: "The messages do not match the ModelMessage[] schema.",
1016
+ cause: validationResult.error
1017
+ });
1018
+ }
1019
+ return {
1020
+ messages,
1021
+ system: prompt.system
1022
+ };
1023
+ }
1024
+
1025
+ // src/error/invalid-argument-error.ts
1026
+ import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
1027
+ var name3 = "AI_InvalidArgumentError";
1028
+ var marker3 = `vercel.ai.error.${name3}`;
1029
+ var symbol3 = Symbol.for(marker3);
1030
+ var _a3;
1031
+ var InvalidArgumentError = class extends AISDKError4 {
1032
+ constructor({
1033
+ parameter,
1034
+ value,
1035
+ message
1036
+ }) {
1037
+ super({
1038
+ name: name3,
1039
+ message: `Invalid argument for parameter ${parameter}: ${message}`
1040
+ });
1041
+ this[_a3] = true;
1042
+ this.parameter = parameter;
1043
+ this.value = value;
1044
+ }
1045
+ static isInstance(error) {
1046
+ return AISDKError4.hasMarker(error, marker3);
1047
+ }
1048
+ };
1049
+ _a3 = symbol3;
1050
+
1051
+ // src/prompt/prepare-call-settings.ts
1052
+ function prepareCallSettings({
1053
+ maxOutputTokens,
1054
+ temperature,
1055
+ topP,
1056
+ topK,
1057
+ presencePenalty,
1058
+ frequencyPenalty,
1059
+ seed,
1060
+ stopSequences,
1061
+ reasoning
1062
+ }) {
1063
+ if (maxOutputTokens != null) {
1064
+ if (!Number.isInteger(maxOutputTokens)) {
1065
+ throw new InvalidArgumentError({
1066
+ parameter: "maxOutputTokens",
1067
+ value: maxOutputTokens,
1068
+ message: "maxOutputTokens must be an integer"
1069
+ });
1070
+ }
1071
+ if (maxOutputTokens < 1) {
1072
+ throw new InvalidArgumentError({
1073
+ parameter: "maxOutputTokens",
1074
+ value: maxOutputTokens,
1075
+ message: "maxOutputTokens must be >= 1"
1076
+ });
1077
+ }
1078
+ }
1079
+ if (temperature != null) {
1080
+ if (typeof temperature !== "number") {
1081
+ throw new InvalidArgumentError({
1082
+ parameter: "temperature",
1083
+ value: temperature,
1084
+ message: "temperature must be a number"
1085
+ });
1086
+ }
1087
+ }
1088
+ if (topP != null) {
1089
+ if (typeof topP !== "number") {
1090
+ throw new InvalidArgumentError({
1091
+ parameter: "topP",
1092
+ value: topP,
1093
+ message: "topP must be a number"
1094
+ });
1095
+ }
1096
+ }
1097
+ if (topK != null) {
1098
+ if (typeof topK !== "number") {
1099
+ throw new InvalidArgumentError({
1100
+ parameter: "topK",
1101
+ value: topK,
1102
+ message: "topK must be a number"
1103
+ });
1104
+ }
1105
+ }
1106
+ if (presencePenalty != null) {
1107
+ if (typeof presencePenalty !== "number") {
1108
+ throw new InvalidArgumentError({
1109
+ parameter: "presencePenalty",
1110
+ value: presencePenalty,
1111
+ message: "presencePenalty must be a number"
1112
+ });
1113
+ }
1114
+ }
1115
+ if (frequencyPenalty != null) {
1116
+ if (typeof frequencyPenalty !== "number") {
1117
+ throw new InvalidArgumentError({
1118
+ parameter: "frequencyPenalty",
1119
+ value: frequencyPenalty,
1120
+ message: "frequencyPenalty must be a number"
1121
+ });
1122
+ }
1123
+ }
1124
+ if (seed != null) {
1125
+ if (!Number.isInteger(seed)) {
1126
+ throw new InvalidArgumentError({
1127
+ parameter: "seed",
1128
+ value: seed,
1129
+ message: "seed must be an integer"
1130
+ });
1131
+ }
1132
+ }
1133
+ return {
1134
+ maxOutputTokens,
1135
+ temperature,
1136
+ topP,
1137
+ topK,
1138
+ presencePenalty,
1139
+ frequencyPenalty,
1140
+ stopSequences,
1141
+ seed,
1142
+ reasoning
1143
+ };
1144
+ }
1145
+
1146
+ // src/util/retry-with-exponential-backoff.ts
1147
+ import { APICallError } from "@ai-sdk/provider";
1148
+ import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
1149
+
1150
+ // src/util/retry-error.ts
1151
+ import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
1152
+ var name4 = "AI_RetryError";
1153
+ var marker4 = `vercel.ai.error.${name4}`;
1154
+ var symbol4 = Symbol.for(marker4);
1155
+ var _a4;
1156
+ var RetryError = class extends AISDKError5 {
1157
+ constructor({
1158
+ message,
1159
+ reason,
1160
+ errors
1161
+ }) {
1162
+ super({ name: name4, message });
1163
+ this[_a4] = true;
1164
+ this.reason = reason;
1165
+ this.errors = errors;
1166
+ this.lastError = errors[errors.length - 1];
1167
+ }
1168
+ static isInstance(error) {
1169
+ return AISDKError5.hasMarker(error, marker4);
1170
+ }
1171
+ };
1172
+ _a4 = symbol4;
1173
+
1174
+ // src/util/retry-with-exponential-backoff.ts
1175
+ function getRetryDelayInMs({
1176
+ error,
1177
+ exponentialBackoffDelay
1178
+ }) {
1179
+ const headers = error.responseHeaders;
1180
+ if (!headers)
1181
+ return exponentialBackoffDelay;
1182
+ let ms;
1183
+ const retryAfterMs = headers["retry-after-ms"];
1184
+ if (retryAfterMs) {
1185
+ const timeoutMs = parseFloat(retryAfterMs);
1186
+ if (!Number.isNaN(timeoutMs)) {
1187
+ ms = timeoutMs;
1188
+ }
1189
+ }
1190
+ const retryAfter = headers["retry-after"];
1191
+ if (retryAfter && ms === void 0) {
1192
+ const timeoutSeconds = parseFloat(retryAfter);
1193
+ if (!Number.isNaN(timeoutSeconds)) {
1194
+ ms = timeoutSeconds * 1e3;
1195
+ } else {
1196
+ ms = Date.parse(retryAfter) - Date.now();
1197
+ }
1198
+ }
1199
+ if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {
1200
+ return ms;
1201
+ }
1202
+ return exponentialBackoffDelay;
1203
+ }
1204
+ var retryWithExponentialBackoffRespectingRetryHeaders = ({
1205
+ maxRetries = 2,
1206
+ initialDelayInMs = 2e3,
1207
+ backoffFactor = 2,
1208
+ abortSignal
1209
+ } = {}) => async (f) => _retryWithExponentialBackoff(f, {
1210
+ maxRetries,
1211
+ delayInMs: initialDelayInMs,
1212
+ backoffFactor,
1213
+ abortSignal
1214
+ });
1215
+ async function _retryWithExponentialBackoff(f, {
1216
+ maxRetries,
1217
+ delayInMs,
1218
+ backoffFactor,
1219
+ abortSignal
1220
+ }, errors = []) {
1221
+ try {
1222
+ return await f();
1223
+ } catch (error) {
1224
+ if (isAbortError(error)) {
1225
+ throw error;
1226
+ }
1227
+ if (maxRetries === 0) {
1228
+ throw error;
1229
+ }
1230
+ const errorMessage = getErrorMessage(error);
1231
+ const newErrors = [...errors, error];
1232
+ const tryNumber = newErrors.length;
1233
+ if (tryNumber > maxRetries) {
1234
+ throw new RetryError({
1235
+ message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
1236
+ reason: "maxRetriesExceeded",
1237
+ errors: newErrors
1238
+ });
1239
+ }
1240
+ if (error instanceof Error && APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
1241
+ await delay(
1242
+ getRetryDelayInMs({
1243
+ error,
1244
+ exponentialBackoffDelay: delayInMs
1245
+ }),
1246
+ { abortSignal }
1247
+ );
1248
+ return _retryWithExponentialBackoff(
1249
+ f,
1250
+ {
1251
+ maxRetries,
1252
+ delayInMs: backoffFactor * delayInMs,
1253
+ backoffFactor,
1254
+ abortSignal
1255
+ },
1256
+ newErrors
1257
+ );
1258
+ }
1259
+ if (tryNumber === 1) {
1260
+ throw error;
1261
+ }
1262
+ throw new RetryError({
1263
+ message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
1264
+ reason: "errorNotRetryable",
1265
+ errors: newErrors
1266
+ });
1267
+ }
1268
+ }
1269
+
1270
+ // src/util/prepare-retries.ts
1271
+ function prepareRetries({
1272
+ maxRetries,
1273
+ abortSignal
1274
+ }) {
1275
+ if (maxRetries != null) {
1276
+ if (!Number.isInteger(maxRetries)) {
1277
+ throw new InvalidArgumentError({
1278
+ parameter: "maxRetries",
1279
+ value: maxRetries,
1280
+ message: "maxRetries must be an integer"
1281
+ });
1282
+ }
1283
+ if (maxRetries < 0) {
1284
+ throw new InvalidArgumentError({
1285
+ parameter: "maxRetries",
1286
+ value: maxRetries,
1287
+ message: "maxRetries must be >= 0"
1288
+ });
1289
+ }
1290
+ }
1291
+ const maxRetriesResult = maxRetries != null ? maxRetries : 2;
1292
+ return {
1293
+ maxRetries: maxRetriesResult,
1294
+ retry: retryWithExponentialBackoffRespectingRetryHeaders({
1295
+ maxRetries: maxRetriesResult,
1296
+ abortSignal
1297
+ })
1298
+ };
1299
+ }
1300
+
1301
+ // src/types/usage.ts
1302
+ function asLanguageModelUsage(usage) {
1303
+ return {
1304
+ inputTokens: usage.inputTokens.total,
1305
+ inputTokenDetails: {
1306
+ noCacheTokens: usage.inputTokens.noCache,
1307
+ cacheReadTokens: usage.inputTokens.cacheRead,
1308
+ cacheWriteTokens: usage.inputTokens.cacheWrite
1309
+ },
1310
+ outputTokens: usage.outputTokens.total,
1311
+ outputTokenDetails: {
1312
+ textTokens: usage.outputTokens.text,
1313
+ reasoningTokens: usage.outputTokens.reasoning
1314
+ },
1315
+ totalTokens: addTokenCounts(
1316
+ usage.inputTokens.total,
1317
+ usage.outputTokens.total
1318
+ ),
1319
+ raw: usage.raw,
1320
+ reasoningTokens: usage.outputTokens.reasoning,
1321
+ cachedInputTokens: usage.inputTokens.cacheRead
1322
+ };
1323
+ }
1324
+ function addTokenCounts(tokenCount1, tokenCount2) {
1325
+ return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
1326
+ }
1327
+ export {
1328
+ asLanguageModelUsage,
1329
+ convertAsyncIteratorToReadableStream,
1330
+ convertToLanguageModelPrompt,
1331
+ prepareCallSettings,
1332
+ prepareRetries,
1333
+ prepareToolsAndToolChoice,
1334
+ standardizePrompt
1335
+ };
1336
+ //# sourceMappingURL=index.mjs.map