@fairyhunter13/ai-sdk 6.0.116-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/CHANGELOG.md +7582 -0
  2. package/README.md +238 -0
  3. package/dist/index.d.mts +6751 -0
  4. package/dist/index.d.ts +6751 -0
  5. package/dist/index.js +14155 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +14127 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/internal/index.d.mts +324 -0
  10. package/dist/internal/index.d.ts +324 -0
  11. package/dist/internal/index.js +1352 -0
  12. package/dist/internal/index.js.map +1 -0
  13. package/dist/internal/index.mjs +1336 -0
  14. package/dist/internal/index.mjs.map +1 -0
  15. package/dist/test/index.d.mts +265 -0
  16. package/dist/test/index.d.ts +265 -0
  17. package/dist/test/index.js +509 -0
  18. package/dist/test/index.js.map +1 -0
  19. package/dist/test/index.mjs +472 -0
  20. package/dist/test/index.mjs.map +1 -0
  21. package/docs/00-introduction/index.mdx +76 -0
  22. package/docs/02-foundations/01-overview.mdx +43 -0
  23. package/docs/02-foundations/02-providers-and-models.mdx +158 -0
  24. package/docs/02-foundations/03-prompts.mdx +616 -0
  25. package/docs/02-foundations/04-tools.mdx +251 -0
  26. package/docs/02-foundations/05-streaming.mdx +62 -0
  27. package/docs/02-foundations/06-provider-options.mdx +345 -0
  28. package/docs/02-foundations/index.mdx +49 -0
  29. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  30. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  31. package/docs/02-getting-started/02-nextjs-app-router.mdx +559 -0
  32. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  33. package/docs/02-getting-started/04-svelte.mdx +627 -0
  34. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  35. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  36. package/docs/02-getting-started/07-expo.mdx +766 -0
  37. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  38. package/docs/02-getting-started/09-coding-agents.mdx +179 -0
  39. package/docs/02-getting-started/index.mdx +44 -0
  40. package/docs/03-agents/01-overview.mdx +96 -0
  41. package/docs/03-agents/02-building-agents.mdx +449 -0
  42. package/docs/03-agents/03-workflows.mdx +386 -0
  43. package/docs/03-agents/04-loop-control.mdx +394 -0
  44. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  45. package/docs/03-agents/06-memory.mdx +222 -0
  46. package/docs/03-agents/06-subagents.mdx +362 -0
  47. package/docs/03-agents/index.mdx +46 -0
  48. package/docs/03-ai-sdk-core/01-overview.mdx +31 -0
  49. package/docs/03-ai-sdk-core/05-generating-text.mdx +707 -0
  50. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +498 -0
  51. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1144 -0
  52. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +383 -0
  53. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +146 -0
  54. package/docs/03-ai-sdk-core/25-settings.mdx +216 -0
  55. package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
  56. package/docs/03-ai-sdk-core/30-embeddings.mdx +246 -0
  57. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  58. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  59. package/docs/03-ai-sdk-core/36-transcription.mdx +227 -0
  60. package/docs/03-ai-sdk-core/37-speech.mdx +169 -0
  61. package/docs/03-ai-sdk-core/38-video-generation.mdx +366 -0
  62. package/docs/03-ai-sdk-core/40-middleware.mdx +485 -0
  63. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  64. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  65. package/docs/03-ai-sdk-core/55-testing.mdx +219 -0
  66. package/docs/03-ai-sdk-core/60-telemetry.mdx +391 -0
  67. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  68. package/docs/03-ai-sdk-core/65-event-listeners.mdx +1118 -0
  69. package/docs/03-ai-sdk-core/index.mdx +99 -0
  70. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  71. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1320 -0
  72. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  73. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  74. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  75. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  76. package/docs/04-ai-sdk-ui/05-completion.mdx +181 -0
  77. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  78. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  79. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  80. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  81. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  82. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  83. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +503 -0
  84. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  85. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  86. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  87. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  88. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  89. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  90. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +157 -0
  91. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  92. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +94 -0
  93. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  94. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  95. package/docs/05-ai-sdk-rsc/index.mdx +63 -0
  96. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  97. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  98. package/docs/06-advanced/03-backpressure.mdx +173 -0
  99. package/docs/06-advanced/04-caching.mdx +169 -0
  100. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  101. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  102. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +225 -0
  103. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  104. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  105. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  106. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  107. package/docs/06-advanced/index.mdx +11 -0
  108. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2785 -0
  109. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3752 -0
  110. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +332 -0
  111. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +330 -0
  112. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  113. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +251 -0
  114. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +152 -0
  115. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +221 -0
  116. package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +264 -0
  117. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +235 -0
  118. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +973 -0
  119. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +154 -0
  120. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +173 -0
  121. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +150 -0
  122. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +209 -0
  123. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +223 -0
  124. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +423 -0
  125. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  126. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  128. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +58 -0
  129. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  130. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +435 -0
  131. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +264 -0
  132. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  133. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  134. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +198 -0
  135. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +157 -0
  136. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  137. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  138. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  139. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +74 -0
  140. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  141. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  142. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  143. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  144. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  145. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  146. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  147. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  148. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  149. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +30 -0
  150. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  151. package/docs/07-reference/01-ai-sdk-core/92-default-generated-file.mdx +68 -0
  152. package/docs/07-reference/01-ai-sdk-core/index.mdx +160 -0
  153. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +493 -0
  154. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +185 -0
  155. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +196 -0
  156. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +231 -0
  157. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  158. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +162 -0
  159. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +119 -0
  160. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +77 -0
  161. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  162. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  163. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  164. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  165. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  166. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  167. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  168. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  169. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +78 -0
  170. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +79 -0
  171. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  172. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  173. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  174. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  175. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  176. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  177. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +266 -0
  178. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +31 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +28 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +26 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +24 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-output-generated-error.mdx +25 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +24 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +24 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-no-video-generated-error.mdx +39 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  205. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +25 -0
  206. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  207. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  208. package/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx +67 -0
  209. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  210. package/docs/07-reference/05-ai-sdk-errors/index.mdx +39 -0
  211. package/docs/07-reference/index.mdx +28 -0
  212. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  213. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +95 -0
  214. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  215. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  216. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  217. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  218. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  219. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  220. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  221. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  222. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  223. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  224. package/docs/08-migration-guides/index.mdx +22 -0
  225. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  226. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  227. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  228. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  229. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  230. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  231. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  232. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  233. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  234. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  235. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  236. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  237. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  238. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  239. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  240. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  241. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  242. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  243. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  244. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  245. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  246. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  247. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  248. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  249. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +76 -0
  250. package/docs/09-troubleshooting/21-missing-tool-results-error.mdx +82 -0
  251. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  252. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  253. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  254. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  255. package/docs/09-troubleshooting/70-high-memory-usage-with-images.mdx +108 -0
  256. package/docs/09-troubleshooting/index.mdx +11 -0
  257. package/internal.d.ts +1 -0
  258. package/package.json +120 -0
  259. package/src/agent/agent.ts +156 -0
  260. package/src/agent/create-agent-ui-stream-response.ts +61 -0
  261. package/src/agent/create-agent-ui-stream.ts +84 -0
  262. package/src/agent/index.ts +37 -0
  263. package/src/agent/infer-agent-tools.ts +7 -0
  264. package/src/agent/infer-agent-ui-message.ts +11 -0
  265. package/src/agent/pipe-agent-ui-stream-to-response.ts +64 -0
  266. package/src/agent/tool-loop-agent-settings.ts +244 -0
  267. package/src/agent/tool-loop-agent.ts +205 -0
  268. package/src/embed/embed-events.ts +109 -0
  269. package/src/embed/embed-many-result.ts +53 -0
  270. package/src/embed/embed-many.ts +484 -0
  271. package/src/embed/embed-result.ts +50 -0
  272. package/src/embed/embed.ts +294 -0
  273. package/src/embed/index.ts +5 -0
  274. package/src/error/index.ts +37 -0
  275. package/src/error/invalid-argument-error.ts +34 -0
  276. package/src/error/invalid-stream-part-error.ts +28 -0
  277. package/src/error/invalid-tool-approval-error.ts +26 -0
  278. package/src/error/invalid-tool-input-error.ts +33 -0
  279. package/src/error/missing-tool-result-error.ts +28 -0
  280. package/src/error/no-image-generated-error.ts +39 -0
  281. package/src/error/no-object-generated-error.ts +70 -0
  282. package/src/error/no-output-generated-error.ts +26 -0
  283. package/src/error/no-speech-generated-error.ts +28 -0
  284. package/src/error/no-such-tool-error.ts +35 -0
  285. package/src/error/no-transcript-generated-error.ts +30 -0
  286. package/src/error/no-video-generated-error.ts +57 -0
  287. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  288. package/src/error/tool-call-repair-error.ts +30 -0
  289. package/src/error/ui-message-stream-error.ts +48 -0
  290. package/src/error/unsupported-model-version-error.ts +23 -0
  291. package/src/error/verify-no-object-generated-error.ts +27 -0
  292. package/src/generate-image/generate-image-result.ts +42 -0
  293. package/src/generate-image/generate-image.ts +361 -0
  294. package/src/generate-image/index.ts +18 -0
  295. package/src/generate-object/generate-object-result.ts +67 -0
  296. package/src/generate-object/generate-object.ts +514 -0
  297. package/src/generate-object/index.ts +9 -0
  298. package/src/generate-object/inject-json-instruction.ts +30 -0
  299. package/src/generate-object/output-strategy.ts +415 -0
  300. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  301. package/src/generate-object/repair-text.ts +12 -0
  302. package/src/generate-object/stream-object-result.ts +120 -0
  303. package/src/generate-object/stream-object.ts +984 -0
  304. package/src/generate-object/validate-object-generation-input.ts +144 -0
  305. package/src/generate-speech/generate-speech-result.ts +30 -0
  306. package/src/generate-speech/generate-speech.ts +191 -0
  307. package/src/generate-speech/generated-audio-file.ts +65 -0
  308. package/src/generate-speech/index.ts +3 -0
  309. package/src/generate-text/collect-tool-approvals.ts +116 -0
  310. package/src/generate-text/content-part.ts +31 -0
  311. package/src/generate-text/core-events.ts +390 -0
  312. package/src/generate-text/create-execute-tools-transformation.ts +168 -0
  313. package/src/generate-text/create-stream-text-part-transform.ts +229 -0
  314. package/src/generate-text/execute-tool-call.ts +190 -0
  315. package/src/generate-text/extract-reasoning-content.ts +17 -0
  316. package/src/generate-text/extract-text-content.ts +15 -0
  317. package/src/generate-text/generate-text-result.ts +168 -0
  318. package/src/generate-text/generate-text.ts +1411 -0
  319. package/src/generate-text/generated-file.ts +70 -0
  320. package/src/generate-text/index.ts +74 -0
  321. package/src/generate-text/is-approval-needed.ts +29 -0
  322. package/src/generate-text/output-utils.ts +23 -0
  323. package/src/generate-text/output.ts +590 -0
  324. package/src/generate-text/parse-tool-call.ts +188 -0
  325. package/src/generate-text/prepare-step.ts +103 -0
  326. package/src/generate-text/prune-messages.ts +167 -0
  327. package/src/generate-text/reasoning-output.ts +99 -0
  328. package/src/generate-text/reasoning.ts +10 -0
  329. package/src/generate-text/response-message.ts +10 -0
  330. package/src/generate-text/smooth-stream.ts +162 -0
  331. package/src/generate-text/step-result.ts +310 -0
  332. package/src/generate-text/stop-condition.ts +29 -0
  333. package/src/generate-text/stream-text-result.ts +536 -0
  334. package/src/generate-text/stream-text.ts +2693 -0
  335. package/src/generate-text/to-response-messages.ts +178 -0
  336. package/src/generate-text/tool-approval-request-output.ts +21 -0
  337. package/src/generate-text/tool-call-repair-function.ts +27 -0
  338. package/src/generate-text/tool-call.ts +47 -0
  339. package/src/generate-text/tool-error.ts +34 -0
  340. package/src/generate-text/tool-output-denied.ts +21 -0
  341. package/src/generate-text/tool-output.ts +7 -0
  342. package/src/generate-text/tool-result.ts +36 -0
  343. package/src/generate-text/tool-set.ts +14 -0
  344. package/src/generate-video/generate-video-result.ts +36 -0
  345. package/src/generate-video/generate-video.ts +402 -0
  346. package/src/generate-video/index.ts +3 -0
  347. package/src/global.ts +36 -0
  348. package/src/index.ts +49 -0
  349. package/src/logger/index.ts +6 -0
  350. package/src/logger/log-warnings.ts +140 -0
  351. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  352. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  353. package/src/middleware/default-settings-middleware.ts +33 -0
  354. package/src/middleware/extract-json-middleware.ts +197 -0
  355. package/src/middleware/extract-reasoning-middleware.ts +249 -0
  356. package/src/middleware/index.ts +10 -0
  357. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  358. package/src/middleware/wrap-embedding-model.ts +89 -0
  359. package/src/middleware/wrap-image-model.ts +92 -0
  360. package/src/middleware/wrap-language-model.ts +108 -0
  361. package/src/middleware/wrap-provider.ts +51 -0
  362. package/src/model/as-embedding-model-v3.ts +24 -0
  363. package/src/model/as-embedding-model-v4.ts +25 -0
  364. package/src/model/as-image-model-v3.ts +24 -0
  365. package/src/model/as-image-model-v4.ts +21 -0
  366. package/src/model/as-language-model-v3.ts +103 -0
  367. package/src/model/as-language-model-v4.ts +25 -0
  368. package/src/model/as-provider-v3.ts +36 -0
  369. package/src/model/as-provider-v4.ts +47 -0
  370. package/src/model/as-reranking-model-v4.ts +16 -0
  371. package/src/model/as-speech-model-v3.ts +24 -0
  372. package/src/model/as-speech-model-v4.ts +21 -0
  373. package/src/model/as-transcription-model-v3.ts +24 -0
  374. package/src/model/as-transcription-model-v4.ts +25 -0
  375. package/src/model/as-video-model-v4.ts +19 -0
  376. package/src/model/resolve-model.ts +172 -0
  377. package/src/prompt/call-settings.ts +177 -0
  378. package/src/prompt/content-part.ts +236 -0
  379. package/src/prompt/convert-to-language-model-prompt.ts +548 -0
  380. package/src/prompt/create-tool-model-output.ts +34 -0
  381. package/src/prompt/data-content.ts +134 -0
  382. package/src/prompt/index.ts +27 -0
  383. package/src/prompt/invalid-data-content-error.ts +29 -0
  384. package/src/prompt/invalid-message-role-error.ts +27 -0
  385. package/src/prompt/message-conversion-error.ts +28 -0
  386. package/src/prompt/message.ts +72 -0
  387. package/src/prompt/prepare-call-settings.ts +110 -0
  388. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  389. package/src/prompt/prompt.ts +43 -0
  390. package/src/prompt/split-data-url.ts +17 -0
  391. package/src/prompt/standardize-prompt.ts +99 -0
  392. package/src/prompt/wrap-gateway-error.ts +29 -0
  393. package/src/registry/custom-provider.ts +210 -0
  394. package/src/registry/index.ts +7 -0
  395. package/src/registry/no-such-provider-error.ts +41 -0
  396. package/src/registry/provider-registry.ts +331 -0
  397. package/src/rerank/index.ts +2 -0
  398. package/src/rerank/rerank-result.ts +70 -0
  399. package/src/rerank/rerank.ts +239 -0
  400. package/src/telemetry/assemble-operation-name.ts +21 -0
  401. package/src/telemetry/get-base-telemetry-attributes.ts +55 -0
  402. package/src/telemetry/get-global-telemetry-integration.ts +110 -0
  403. package/src/telemetry/get-tracer.ts +20 -0
  404. package/src/telemetry/index.ts +4 -0
  405. package/src/telemetry/noop-tracer.ts +69 -0
  406. package/src/telemetry/open-telemetry-integration.ts +537 -0
  407. package/src/telemetry/record-span.ts +75 -0
  408. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  409. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  410. package/src/telemetry/telemetry-integration-registry.ts +22 -0
  411. package/src/telemetry/telemetry-integration.ts +100 -0
  412. package/src/telemetry/telemetry-settings.ts +55 -0
  413. package/src/test/mock-embedding-model-v2.ts +35 -0
  414. package/src/test/mock-embedding-model-v3.ts +48 -0
  415. package/src/test/mock-embedding-model-v4.ts +48 -0
  416. package/src/test/mock-image-model-v2.ts +28 -0
  417. package/src/test/mock-image-model-v3.ts +28 -0
  418. package/src/test/mock-image-model-v4.ts +28 -0
  419. package/src/test/mock-language-model-v2.ts +72 -0
  420. package/src/test/mock-language-model-v3.ts +77 -0
  421. package/src/test/mock-language-model-v4.ts +77 -0
  422. package/src/test/mock-provider-v2.ts +68 -0
  423. package/src/test/mock-provider-v3.ts +80 -0
  424. package/src/test/mock-provider-v4.ts +80 -0
  425. package/src/test/mock-reranking-model-v3.ts +25 -0
  426. package/src/test/mock-reranking-model-v4.ts +25 -0
  427. package/src/test/mock-server-response.ts +69 -0
  428. package/src/test/mock-speech-model-v2.ts +24 -0
  429. package/src/test/mock-speech-model-v3.ts +24 -0
  430. package/src/test/mock-speech-model-v4.ts +24 -0
  431. package/src/test/mock-tracer.ts +156 -0
  432. package/src/test/mock-transcription-model-v2.ts +24 -0
  433. package/src/test/mock-transcription-model-v3.ts +24 -0
  434. package/src/test/mock-transcription-model-v4.ts +24 -0
  435. package/src/test/mock-values.ts +4 -0
  436. package/src/test/mock-video-model-v3.ts +28 -0
  437. package/src/test/mock-video-model-v4.ts +28 -0
  438. package/src/test/not-implemented.ts +3 -0
  439. package/src/text-stream/create-text-stream-response.ts +30 -0
  440. package/src/text-stream/index.ts +2 -0
  441. package/src/text-stream/pipe-text-stream-to-response.ts +38 -0
  442. package/src/transcribe/index.ts +2 -0
  443. package/src/transcribe/transcribe-result.ts +60 -0
  444. package/src/transcribe/transcribe.ts +187 -0
  445. package/src/types/embedding-model-middleware.ts +15 -0
  446. package/src/types/embedding-model.ts +20 -0
  447. package/src/types/image-model-middleware.ts +15 -0
  448. package/src/types/image-model-response-metadata.ts +16 -0
  449. package/src/types/image-model.ts +19 -0
  450. package/src/types/index.ts +29 -0
  451. package/src/types/json-value.ts +15 -0
  452. package/src/types/language-model-middleware.ts +15 -0
  453. package/src/types/language-model-request-metadata.ts +6 -0
  454. package/src/types/language-model-response-metadata.ts +21 -0
  455. package/src/types/language-model.ts +106 -0
  456. package/src/types/provider-metadata.ts +16 -0
  457. package/src/types/provider.ts +55 -0
  458. package/src/types/reranking-model.ts +6 -0
  459. package/src/types/speech-model-response-metadata.ts +21 -0
  460. package/src/types/speech-model.ts +10 -0
  461. package/src/types/transcription-model-response-metadata.ts +16 -0
  462. package/src/types/transcription-model.ts +14 -0
  463. package/src/types/usage.ts +200 -0
  464. package/src/types/video-model-response-metadata.ts +28 -0
  465. package/src/types/video-model.ts +15 -0
  466. package/src/types/warning.ts +7 -0
  467. package/src/ui/call-completion-api.ts +157 -0
  468. package/src/ui/chat-transport.ts +83 -0
  469. package/src/ui/chat.ts +786 -0
  470. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  471. package/src/ui/convert-to-model-messages.ts +403 -0
  472. package/src/ui/default-chat-transport.ts +36 -0
  473. package/src/ui/direct-chat-transport.ts +117 -0
  474. package/src/ui/http-chat-transport.ts +273 -0
  475. package/src/ui/index.ts +76 -0
  476. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  477. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  478. package/src/ui/process-text-stream.ts +16 -0
  479. package/src/ui/process-ui-message-stream.ts +858 -0
  480. package/src/ui/text-stream-chat-transport.ts +23 -0
  481. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  482. package/src/ui/ui-messages.ts +602 -0
  483. package/src/ui/use-completion.ts +84 -0
  484. package/src/ui/validate-ui-messages.ts +521 -0
  485. package/src/ui-message-stream/create-ui-message-stream-response.ts +44 -0
  486. package/src/ui-message-stream/create-ui-message-stream.ts +145 -0
  487. package/src/ui-message-stream/get-response-ui-message-id.ts +35 -0
  488. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +170 -0
  489. package/src/ui-message-stream/index.ts +14 -0
  490. package/src/ui-message-stream/json-to-sse-transform-stream.ts +17 -0
  491. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +51 -0
  492. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  493. package/src/ui-message-stream/ui-message-chunks.ts +372 -0
  494. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  495. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  496. package/src/ui-message-stream/ui-message-stream-on-step-finish-callback.ts +25 -0
  497. package/src/ui-message-stream/ui-message-stream-response-init.ts +14 -0
  498. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  499. package/src/util/as-array.ts +3 -0
  500. package/src/util/async-iterable-stream.ts +94 -0
  501. package/src/util/consume-stream.ts +31 -0
  502. package/src/util/cosine-similarity.ts +46 -0
  503. package/src/util/create-resolvable-promise.ts +30 -0
  504. package/src/util/create-stitchable-stream.ts +112 -0
  505. package/src/util/data-url.ts +17 -0
  506. package/src/util/deep-partial.ts +84 -0
  507. package/src/util/detect-media-type.ts +226 -0
  508. package/src/util/download/create-download.ts +13 -0
  509. package/src/util/download/download-function.ts +45 -0
  510. package/src/util/download/download.ts +74 -0
  511. package/src/util/error-handler.ts +1 -0
  512. package/src/util/fix-json.ts +401 -0
  513. package/src/util/get-potential-start-index.ts +39 -0
  514. package/src/util/index.ts +12 -0
  515. package/src/util/is-deep-equal-data.ts +48 -0
  516. package/src/util/is-non-empty-object.ts +5 -0
  517. package/src/util/job.ts +1 -0
  518. package/src/util/log-v2-compatibility-warning.ts +21 -0
  519. package/src/util/merge-abort-signals.ts +43 -0
  520. package/src/util/merge-objects.ts +79 -0
  521. package/src/util/notify.ts +22 -0
  522. package/src/util/now.ts +4 -0
  523. package/src/util/parse-partial-json.ts +30 -0
  524. package/src/util/prepare-headers.ts +14 -0
  525. package/src/util/prepare-retries.ts +47 -0
  526. package/src/util/retry-error.ts +41 -0
  527. package/src/util/retry-with-exponential-backoff.ts +154 -0
  528. package/src/util/serial-job-executor.ts +36 -0
  529. package/src/util/simulate-readable-stream.ts +39 -0
  530. package/src/util/split-array.ts +20 -0
  531. package/src/util/value-of.ts +65 -0
  532. package/src/util/write-to-server-response.ts +49 -0
  533. package/src/version.ts +5 -0
  534. package/test.d.ts +1 -0
@@ -0,0 +1,67 @@
1
+ import {
2
+ CallWarning,
3
+ FinishReason,
4
+ LanguageModelRequestMetadata,
5
+ LanguageModelResponseMetadata,
6
+ ProviderMetadata,
7
+ } from '../types';
8
+ import { LanguageModelUsage } from '../types/usage';
9
+
10
+ /**
11
+ * The result of a `generateObject` call.
12
+ */
13
+ export interface GenerateObjectResult<OBJECT> {
14
+ /**
15
+ * The generated object (typed according to the schema).
16
+ */
17
+ readonly object: OBJECT;
18
+
19
+ /**
20
+ * The reasoning that was used to generate the object.
21
+ * Concatenated from all reasoning parts.
22
+ */
23
+ readonly reasoning: string | undefined;
24
+
25
+ /**
26
+ * The reason why the generation finished.
27
+ */
28
+ readonly finishReason: FinishReason;
29
+
30
+ /**
31
+ * The token usage of the generated response.
32
+ */
33
+ readonly usage: LanguageModelUsage;
34
+
35
+ /**
36
+ * Warnings from the model provider (e.g. unsupported settings).
37
+ */
38
+ readonly warnings: CallWarning[] | undefined;
39
+
40
+ /**
41
+ * Additional request information.
42
+ */
43
+ readonly request: LanguageModelRequestMetadata;
44
+
45
+ /**
46
+ * Additional response information.
47
+ */
48
+ readonly response: LanguageModelResponseMetadata & {
49
+ /**
50
+ * Response body (available only for providers that use HTTP requests).
51
+ */
52
+ body?: unknown;
53
+ };
54
+
55
+ /**
56
+ * Additional provider-specific metadata. They are passed through
57
+ * from the provider to the AI SDK and enable provider-specific
58
+ * results that can be fully encapsulated in the provider.
59
+ */
60
+ readonly providerMetadata: ProviderMetadata | undefined;
61
+
62
+ /**
63
+ * Converts the object to a JSON response.
64
+ * The response will have a status code of 200 and a content type of `application/json; charset=utf-8`.
65
+ */
66
+ toJsonResponse(init?: ResponseInit): Response;
67
+ }
@@ -0,0 +1,514 @@
1
+ import { JSONValue } from '@ai-sdk/provider';
2
+ import {
3
+ createIdGenerator,
4
+ FlexibleSchema,
5
+ InferSchema,
6
+ ProviderOptions,
7
+ withUserAgentSuffix,
8
+ } from '@ai-sdk/provider-utils';
9
+ import { NoObjectGeneratedError } from '../error/no-object-generated-error';
10
+ import { extractReasoningContent } from '../generate-text/extract-reasoning-content';
11
+ import { extractTextContent } from '../generate-text/extract-text-content';
12
+ import { logWarnings } from '../logger/log-warnings';
13
+ import { resolveLanguageModel } from '../model/resolve-model';
14
+ import { CallSettings } from '../prompt/call-settings';
15
+ import { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';
16
+ import { prepareCallSettings } from '../prompt/prepare-call-settings';
17
+ import { Prompt } from '../prompt/prompt';
18
+ import { standardizePrompt } from '../prompt/standardize-prompt';
19
+ import { wrapGatewayError } from '../prompt/wrap-gateway-error';
20
+ import { assembleOperationName } from '../telemetry/assemble-operation-name';
21
+ import { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';
22
+ import { getTracer } from '../telemetry/get-tracer';
23
+ import { recordSpan } from '../telemetry/record-span';
24
+ import { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';
25
+ import { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';
26
+ import { TelemetrySettings } from '../telemetry/telemetry-settings';
27
+ import {
28
+ CallWarning,
29
+ FinishReason,
30
+ LanguageModel,
31
+ } from '../types/language-model';
32
+ import { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';
33
+ import { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';
34
+ import { ProviderMetadata } from '../types/provider-metadata';
35
+ import { asLanguageModelUsage, LanguageModelUsage } from '../types/usage';
36
+ import { DownloadFunction } from '../util/download/download-function';
37
+ import { prepareHeaders } from '../util/prepare-headers';
38
+ import { prepareRetries } from '../util/prepare-retries';
39
+ import { VERSION } from '../version';
40
+ import { GenerateObjectResult } from './generate-object-result';
41
+ import { getOutputStrategy } from './output-strategy';
42
+ import { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';
43
+ import { RepairTextFunction } from './repair-text';
44
+ import { validateObjectGenerationInput } from './validate-object-generation-input';
45
+
46
+ const originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });
47
+
48
+ /**
49
+ * Generate a structured, typed object for a given prompt and schema using a language model.
50
+ *
51
+ * This function does not stream the output. If you want to stream the output, use `streamObject` instead.
52
+ *
53
+ * @param model - The language model to use.
54
+ *
55
+ * @param system - A system message that will be part of the prompt.
56
+ * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.
57
+ * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.
58
+ *
59
+ * @param maxOutputTokens - Maximum number of tokens to generate.
60
+ * @param temperature - Temperature setting.
61
+ * The value is passed through to the provider. The range depends on the provider and model.
62
+ * It is recommended to set either `temperature` or `topP`, but not both.
63
+ * @param topP - Nucleus sampling.
64
+ * The value is passed through to the provider. The range depends on the provider and model.
65
+ * It is recommended to set either `temperature` or `topP`, but not both.
66
+ * @param topK - Only sample from the top K options for each subsequent token.
67
+ * Used to remove "long tail" low probability responses.
68
+ * Recommended for advanced use cases only. You usually only need to use temperature.
69
+ * @param presencePenalty - Presence penalty setting.
70
+ * It affects the likelihood of the model to repeat information that is already in the prompt.
71
+ * The value is passed through to the provider. The range depends on the provider and model.
72
+ * @param frequencyPenalty - Frequency penalty setting.
73
+ * It affects the likelihood of the model to repeatedly use the same words or phrases.
74
+ * The value is passed through to the provider. The range depends on the provider and model.
75
+ * @param stopSequences - Stop sequences.
76
+ * If set, the model will stop generating text when one of the stop sequences is generated.
77
+ * @param seed - The seed (integer) to use for random sampling.
78
+ * If set and supported by the model, calls will generate deterministic results.
79
+ *
80
+ * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
81
+ * @param abortSignal - An optional abort signal that can be used to cancel the call.
82
+ * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
83
+ *
84
+ * @param schema - The schema of the object that the model should generate.
85
+ * @param schemaName - Optional name of the output that should be generated.
86
+ * Used by some providers for additional LLM guidance, e.g.
87
+ * via tool or schema name.
88
+ * @param schemaDescription - Optional description of the output that should be generated.
89
+ * Used by some providers for additional LLM guidance, e.g.
90
+ * via tool or schema description.
91
+ *
92
+ * @param output - The type of the output.
93
+ *
94
+ * - 'object': The output is an object.
95
+ * - 'array': The output is an array.
96
+ * - 'enum': The output is an enum.
97
+ * - 'no-schema': The output is not a schema.
98
+ *
99
+ * @param experimental_repairText - A function that attempts to repair the raw output of the model
100
+ * to enable JSON parsing.
101
+ *
102
+ * @param experimental_telemetry - Optional telemetry configuration (experimental).
103
+ *
104
+ * @param providerOptions - Additional provider-specific options. They are passed through
105
+ * to the provider from the AI SDK and enable provider-specific
106
+ * functionality that can be fully encapsulated in the provider.
107
+ *
108
+ * @returns
109
+ * A result object that contains the generated object, the finish reason, the token usage, and additional information.
110
+ *
111
+ * @deprecated Use `generateText` with an `output` setting instead.
112
+ */
113
+ export async function generateObject<
114
+ SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,
115
+ OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =
116
+ InferSchema<SCHEMA> extends string ? 'enum' : 'object',
117
+ RESULT = OUTPUT extends 'array'
118
+ ? Array<InferSchema<SCHEMA>>
119
+ : InferSchema<SCHEMA>,
120
+ >(
121
+ options: Omit<CallSettings<any>, 'stopSequences'> &
122
+ Prompt &
123
+ (OUTPUT extends 'enum'
124
+ ? {
125
+ /**
126
+ * The enum values that the model should use.
127
+ */
128
+ enum: Array<RESULT>;
129
+ output: 'enum';
130
+ }
131
+ : OUTPUT extends 'no-schema'
132
+ ? {}
133
+ : {
134
+ /**
135
+ * The schema of the object that the model should generate.
136
+ */
137
+ schema: SCHEMA;
138
+
139
+ /**
140
+ * Optional name of the output that should be generated.
141
+ * Used by some providers for additional LLM guidance, e.g.
142
+ * via tool or schema name.
143
+ */
144
+ schemaName?: string;
145
+
146
+ /**
147
+ * Optional description of the output that should be generated.
148
+ * Used by some providers for additional LLM guidance, e.g.
149
+ * via tool or schema description.
150
+ */
151
+ schemaDescription?: string;
152
+ }) & {
153
+ output?: OUTPUT;
154
+
155
+ /**
156
+ * The language model to use.
157
+ */
158
+ model: LanguageModel;
159
+ /**
160
+ * A function that attempts to repair the raw output of the model
161
+ * to enable JSON parsing.
162
+ */
163
+ experimental_repairText?: RepairTextFunction;
164
+
165
+ /**
166
+ * Optional telemetry configuration (experimental).
167
+ */
168
+
169
+ experimental_telemetry?: TelemetrySettings;
170
+
171
+ /**
172
+ * Custom download function to use for URLs.
173
+ *
174
+ * By default, files are downloaded if the model does not support the URL for the given media type.
175
+ */
176
+ experimental_download?: DownloadFunction | undefined;
177
+
178
+ /**
179
+ * Additional provider-specific options. They are passed through
180
+ * to the provider from the AI SDK and enable provider-specific
181
+ * functionality that can be fully encapsulated in the provider.
182
+ */
183
+ providerOptions?: ProviderOptions;
184
+
185
+ /**
186
+ * Internal. For test use only. May change without notice.
187
+ */
188
+ _internal?: {
189
+ generateId?: () => string;
190
+ currentDate?: () => Date;
191
+ };
192
+ },
193
+ ): Promise<GenerateObjectResult<RESULT>> {
194
+ const {
195
+ model: modelArg,
196
+ output = 'object',
197
+ system,
198
+ prompt,
199
+ messages,
200
+ maxRetries: maxRetriesArg,
201
+ abortSignal,
202
+ headers,
203
+ experimental_repairText: repairText,
204
+ experimental_telemetry: telemetry,
205
+ experimental_download: download,
206
+ providerOptions,
207
+ _internal: {
208
+ generateId = originalGenerateId,
209
+ currentDate = () => new Date(),
210
+ } = {},
211
+ ...settings
212
+ } = options;
213
+
214
+ const model = resolveLanguageModel(modelArg);
215
+
216
+ const enumValues = 'enum' in options ? options.enum : undefined;
217
+ const {
218
+ schema: inputSchema,
219
+ schemaDescription,
220
+ schemaName,
221
+ } = 'schema' in options ? options : {};
222
+
223
+ validateObjectGenerationInput({
224
+ output,
225
+ schema: inputSchema,
226
+ schemaName,
227
+ schemaDescription,
228
+ enumValues,
229
+ });
230
+
231
+ const { maxRetries, retry } = prepareRetries({
232
+ maxRetries: maxRetriesArg,
233
+ abortSignal,
234
+ });
235
+
236
+ const outputStrategy = getOutputStrategy({
237
+ output,
238
+ schema: inputSchema,
239
+ enumValues,
240
+ });
241
+
242
+ const callSettings = prepareCallSettings(settings);
243
+
244
+ const headersWithUserAgent = withUserAgentSuffix(
245
+ headers ?? {},
246
+ `ai/${VERSION}`,
247
+ );
248
+
249
+ const baseTelemetryAttributes = getBaseTelemetryAttributes({
250
+ model,
251
+ telemetry,
252
+ headers: headersWithUserAgent,
253
+ settings: { ...callSettings, maxRetries },
254
+ });
255
+
256
+ const tracer = getTracer(telemetry);
257
+ const jsonSchema = await outputStrategy.jsonSchema();
258
+
259
+ try {
260
+ return await recordSpan({
261
+ name: 'ai.generateObject',
262
+ attributes: selectTelemetryAttributes({
263
+ telemetry,
264
+ attributes: {
265
+ ...assembleOperationName({
266
+ operationId: 'ai.generateObject',
267
+ telemetry,
268
+ }),
269
+ ...baseTelemetryAttributes,
270
+ // specific settings that only make sense on the outer level:
271
+ 'ai.prompt': {
272
+ input: () => JSON.stringify({ system, prompt, messages }),
273
+ },
274
+ 'ai.schema':
275
+ jsonSchema != null
276
+ ? { input: () => JSON.stringify(jsonSchema) }
277
+ : undefined,
278
+ 'ai.schema.name': schemaName,
279
+ 'ai.schema.description': schemaDescription,
280
+ 'ai.settings.output': outputStrategy.type,
281
+ },
282
+ }),
283
+ tracer,
284
+ fn: async span => {
285
+ let result: string;
286
+ let finishReason: FinishReason;
287
+ let usage: LanguageModelUsage;
288
+ let warnings: CallWarning[] | undefined;
289
+ let response: LanguageModelResponseMetadata;
290
+ let request: LanguageModelRequestMetadata;
291
+ let resultProviderMetadata: ProviderMetadata | undefined;
292
+ let reasoning: string | undefined;
293
+
294
+ const standardizedPrompt = await standardizePrompt({
295
+ system,
296
+ prompt,
297
+ messages,
298
+ } as Prompt);
299
+
300
+ const promptMessages = await convertToLanguageModelPrompt({
301
+ prompt: standardizedPrompt,
302
+ supportedUrls: await model.supportedUrls,
303
+ download,
304
+ });
305
+
306
+ const generateResult = await retry(() =>
307
+ recordSpan({
308
+ name: 'ai.generateObject.doGenerate',
309
+ attributes: selectTelemetryAttributes({
310
+ telemetry,
311
+ attributes: {
312
+ ...assembleOperationName({
313
+ operationId: 'ai.generateObject.doGenerate',
314
+ telemetry,
315
+ }),
316
+ ...baseTelemetryAttributes,
317
+ 'ai.prompt.messages': {
318
+ input: () => stringifyForTelemetry(promptMessages),
319
+ },
320
+
321
+ // standardized gen-ai llm span attributes:
322
+ 'gen_ai.system': model.provider,
323
+ 'gen_ai.request.model': model.modelId,
324
+ 'gen_ai.request.frequency_penalty':
325
+ callSettings.frequencyPenalty,
326
+ 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,
327
+ 'gen_ai.request.presence_penalty': callSettings.presencePenalty,
328
+ 'gen_ai.request.temperature': callSettings.temperature,
329
+ 'gen_ai.request.top_k': callSettings.topK,
330
+ 'gen_ai.request.top_p': callSettings.topP,
331
+ },
332
+ }),
333
+ tracer,
334
+ fn: async span => {
335
+ const result = await model.doGenerate({
336
+ responseFormat: {
337
+ type: 'json',
338
+ schema: jsonSchema,
339
+ name: schemaName,
340
+ description: schemaDescription,
341
+ },
342
+ ...prepareCallSettings(settings),
343
+ prompt: promptMessages,
344
+ providerOptions,
345
+ abortSignal,
346
+ headers: headersWithUserAgent,
347
+ });
348
+
349
+ const responseData = {
350
+ id: result.response?.id ?? generateId(),
351
+ timestamp: result.response?.timestamp ?? currentDate(),
352
+ modelId: result.response?.modelId ?? model.modelId,
353
+ headers: result.response?.headers,
354
+ body: result.response?.body,
355
+ };
356
+
357
+ const text = extractTextContent(result.content);
358
+ const reasoning = extractReasoningContent(result.content);
359
+
360
+ if (text === undefined) {
361
+ throw new NoObjectGeneratedError({
362
+ message:
363
+ 'No object generated: the model did not return a response.',
364
+ response: responseData,
365
+ usage: asLanguageModelUsage(result.usage),
366
+ finishReason: result.finishReason.unified,
367
+ });
368
+ }
369
+
370
+ // Add response information to the span:
371
+ span.setAttributes(
372
+ await selectTelemetryAttributes({
373
+ telemetry,
374
+ attributes: {
375
+ 'ai.response.finishReason': result.finishReason.unified,
376
+ 'ai.response.object': { output: () => text },
377
+ 'ai.response.id': responseData.id,
378
+ 'ai.response.model': responseData.modelId,
379
+ 'ai.response.timestamp':
380
+ responseData.timestamp.toISOString(),
381
+ 'ai.response.providerMetadata': JSON.stringify(
382
+ result.providerMetadata,
383
+ ),
384
+
385
+ // TODO rename telemetry attributes to inputTokens and outputTokens
386
+ 'ai.usage.promptTokens': result.usage.inputTokens.total,
387
+ 'ai.usage.completionTokens':
388
+ result.usage.outputTokens.total,
389
+
390
+ // standardized gen-ai llm span attributes:
391
+ 'gen_ai.response.finish_reasons': [
392
+ result.finishReason.unified,
393
+ ],
394
+ 'gen_ai.response.id': responseData.id,
395
+ 'gen_ai.response.model': responseData.modelId,
396
+ 'gen_ai.usage.input_tokens': result.usage.inputTokens.total,
397
+ 'gen_ai.usage.output_tokens':
398
+ result.usage.outputTokens.total,
399
+ },
400
+ }),
401
+ );
402
+
403
+ return {
404
+ ...result,
405
+ objectText: text,
406
+ reasoning,
407
+ responseData,
408
+ };
409
+ },
410
+ }),
411
+ );
412
+
413
+ result = generateResult.objectText;
414
+ finishReason = generateResult.finishReason.unified;
415
+ usage = asLanguageModelUsage(generateResult.usage);
416
+ warnings = generateResult.warnings;
417
+ resultProviderMetadata = generateResult.providerMetadata;
418
+ request = generateResult.request ?? {};
419
+ response = generateResult.responseData;
420
+ reasoning = generateResult.reasoning;
421
+
422
+ logWarnings({
423
+ warnings,
424
+ provider: model.provider,
425
+ model: model.modelId,
426
+ });
427
+
428
+ const object = await parseAndValidateObjectResultWithRepair(
429
+ result,
430
+ outputStrategy,
431
+ repairText,
432
+ {
433
+ response,
434
+ usage,
435
+ finishReason,
436
+ },
437
+ );
438
+
439
+ // Add response information to the span:
440
+ span.setAttributes(
441
+ await selectTelemetryAttributes({
442
+ telemetry,
443
+ attributes: {
444
+ 'ai.response.finishReason': finishReason,
445
+ 'ai.response.object': {
446
+ output: () => JSON.stringify(object),
447
+ },
448
+ 'ai.response.providerMetadata': JSON.stringify(
449
+ resultProviderMetadata,
450
+ ),
451
+
452
+ // TODO rename telemetry attributes to inputTokens and outputTokens
453
+ 'ai.usage.promptTokens': usage.inputTokens,
454
+ 'ai.usage.completionTokens': usage.outputTokens,
455
+ },
456
+ }),
457
+ );
458
+
459
+ return new DefaultGenerateObjectResult({
460
+ object,
461
+ reasoning,
462
+ finishReason,
463
+ usage,
464
+ warnings,
465
+ request,
466
+ response,
467
+ providerMetadata: resultProviderMetadata,
468
+ });
469
+ },
470
+ });
471
+ } catch (error) {
472
+ throw wrapGatewayError(error);
473
+ }
474
+ }
475
+
476
+ class DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {
477
+ readonly object: GenerateObjectResult<T>['object'];
478
+ readonly finishReason: GenerateObjectResult<T>['finishReason'];
479
+ readonly usage: GenerateObjectResult<T>['usage'];
480
+ readonly warnings: GenerateObjectResult<T>['warnings'];
481
+ readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];
482
+ readonly response: GenerateObjectResult<T>['response'];
483
+ readonly request: GenerateObjectResult<T>['request'];
484
+ readonly reasoning: GenerateObjectResult<T>['reasoning'];
485
+
486
+ constructor(options: {
487
+ object: GenerateObjectResult<T>['object'];
488
+ finishReason: GenerateObjectResult<T>['finishReason'];
489
+ usage: GenerateObjectResult<T>['usage'];
490
+ warnings: GenerateObjectResult<T>['warnings'];
491
+ providerMetadata: GenerateObjectResult<T>['providerMetadata'];
492
+ response: GenerateObjectResult<T>['response'];
493
+ request: GenerateObjectResult<T>['request'];
494
+ reasoning: GenerateObjectResult<T>['reasoning'];
495
+ }) {
496
+ this.object = options.object;
497
+ this.finishReason = options.finishReason;
498
+ this.usage = options.usage;
499
+ this.warnings = options.warnings;
500
+ this.providerMetadata = options.providerMetadata;
501
+ this.response = options.response;
502
+ this.request = options.request;
503
+ this.reasoning = options.reasoning;
504
+ }
505
+
506
+ toJsonResponse(init?: ResponseInit): Response {
507
+ return new Response(JSON.stringify(this.object), {
508
+ status: init?.status ?? 200,
509
+ headers: prepareHeaders(init?.headers, {
510
+ 'content-type': 'application/json; charset=utf-8',
511
+ }),
512
+ });
513
+ }
514
+ }
@@ -0,0 +1,9 @@
1
+ export { generateObject } from './generate-object';
2
+ export type { RepairTextFunction } from './repair-text';
3
+ export type { GenerateObjectResult } from './generate-object-result';
4
+ export { streamObject } from './stream-object';
5
+ export type { StreamObjectOnFinishCallback } from './stream-object';
6
+ export type {
7
+ ObjectStreamPart,
8
+ StreamObjectResult,
9
+ } from './stream-object-result';
@@ -0,0 +1,30 @@
1
+ import { JSONSchema7 } from '@ai-sdk/provider';
2
+
3
+ const DEFAULT_SCHEMA_PREFIX = 'JSON schema:';
4
+ const DEFAULT_SCHEMA_SUFFIX =
5
+ 'You MUST answer with a JSON object that matches the JSON schema above.';
6
+ const DEFAULT_GENERIC_SUFFIX = 'You MUST answer with JSON.';
7
+
8
+ export function injectJsonInstruction({
9
+ prompt,
10
+ schema,
11
+ schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : undefined,
12
+ schemaSuffix = schema != null
13
+ ? DEFAULT_SCHEMA_SUFFIX
14
+ : DEFAULT_GENERIC_SUFFIX,
15
+ }: {
16
+ prompt?: string;
17
+ schema?: JSONSchema7;
18
+ schemaPrefix?: string;
19
+ schemaSuffix?: string;
20
+ }): string {
21
+ return [
22
+ prompt != null && prompt.length > 0 ? prompt : undefined,
23
+ prompt != null && prompt.length > 0 ? '' : undefined, // add a newline if prompt is not null
24
+ schemaPrefix,
25
+ schema != null ? JSON.stringify(schema) : undefined,
26
+ schemaSuffix,
27
+ ]
28
+ .filter(line => line != null)
29
+ .join('\n');
30
+ }