@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,401 @@
1
+ type State =
2
+ | 'ROOT'
3
+ | 'FINISH'
4
+ | 'INSIDE_STRING'
5
+ | 'INSIDE_STRING_ESCAPE'
6
+ | 'INSIDE_LITERAL'
7
+ | 'INSIDE_NUMBER'
8
+ | 'INSIDE_OBJECT_START'
9
+ | 'INSIDE_OBJECT_KEY'
10
+ | 'INSIDE_OBJECT_AFTER_KEY'
11
+ | 'INSIDE_OBJECT_BEFORE_VALUE'
12
+ | 'INSIDE_OBJECT_AFTER_VALUE'
13
+ | 'INSIDE_OBJECT_AFTER_COMMA'
14
+ | 'INSIDE_ARRAY_START'
15
+ | 'INSIDE_ARRAY_AFTER_VALUE'
16
+ | 'INSIDE_ARRAY_AFTER_COMMA';
17
+
18
+ // Implemented as a scanner with additional fixing
19
+ // that performs a single linear time scan pass over the partial JSON.
20
+ //
21
+ // The states should ideally match relevant states from the JSON spec:
22
+ // https://www.json.org/json-en.html
23
+ //
24
+ // Please note that invalid JSON is not considered/covered, because it
25
+ // is assumed that the resulting JSON will be processed by a standard
26
+ // JSON parser that will detect any invalid JSON.
27
+ export function fixJson(input: string): string {
28
+ const stack: State[] = ['ROOT'];
29
+ let lastValidIndex = -1;
30
+ let literalStart: number | null = null;
31
+
32
+ function processValueStart(char: string, i: number, swapState: State) {
33
+ {
34
+ switch (char) {
35
+ case '"': {
36
+ lastValidIndex = i;
37
+ stack.pop();
38
+ stack.push(swapState);
39
+ stack.push('INSIDE_STRING');
40
+ break;
41
+ }
42
+
43
+ case 'f':
44
+ case 't':
45
+ case 'n': {
46
+ lastValidIndex = i;
47
+ literalStart = i;
48
+ stack.pop();
49
+ stack.push(swapState);
50
+ stack.push('INSIDE_LITERAL');
51
+ break;
52
+ }
53
+
54
+ case '-': {
55
+ stack.pop();
56
+ stack.push(swapState);
57
+ stack.push('INSIDE_NUMBER');
58
+ break;
59
+ }
60
+ case '0':
61
+ case '1':
62
+ case '2':
63
+ case '3':
64
+ case '4':
65
+ case '5':
66
+ case '6':
67
+ case '7':
68
+ case '8':
69
+ case '9': {
70
+ lastValidIndex = i;
71
+ stack.pop();
72
+ stack.push(swapState);
73
+ stack.push('INSIDE_NUMBER');
74
+ break;
75
+ }
76
+
77
+ case '{': {
78
+ lastValidIndex = i;
79
+ stack.pop();
80
+ stack.push(swapState);
81
+ stack.push('INSIDE_OBJECT_START');
82
+ break;
83
+ }
84
+
85
+ case '[': {
86
+ lastValidIndex = i;
87
+ stack.pop();
88
+ stack.push(swapState);
89
+ stack.push('INSIDE_ARRAY_START');
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ function processAfterObjectValue(char: string, i: number) {
97
+ switch (char) {
98
+ case ',': {
99
+ stack.pop();
100
+ stack.push('INSIDE_OBJECT_AFTER_COMMA');
101
+ break;
102
+ }
103
+ case '}': {
104
+ lastValidIndex = i;
105
+ stack.pop();
106
+ break;
107
+ }
108
+ }
109
+ }
110
+
111
+ function processAfterArrayValue(char: string, i: number) {
112
+ switch (char) {
113
+ case ',': {
114
+ stack.pop();
115
+ stack.push('INSIDE_ARRAY_AFTER_COMMA');
116
+ break;
117
+ }
118
+ case ']': {
119
+ lastValidIndex = i;
120
+ stack.pop();
121
+ break;
122
+ }
123
+ }
124
+ }
125
+
126
+ for (let i = 0; i < input.length; i++) {
127
+ const char = input[i];
128
+ const currentState = stack[stack.length - 1];
129
+
130
+ switch (currentState) {
131
+ case 'ROOT':
132
+ processValueStart(char, i, 'FINISH');
133
+ break;
134
+
135
+ case 'INSIDE_OBJECT_START': {
136
+ switch (char) {
137
+ case '"': {
138
+ stack.pop();
139
+ stack.push('INSIDE_OBJECT_KEY');
140
+ break;
141
+ }
142
+ case '}': {
143
+ lastValidIndex = i;
144
+ stack.pop();
145
+ break;
146
+ }
147
+ }
148
+ break;
149
+ }
150
+
151
+ case 'INSIDE_OBJECT_AFTER_COMMA': {
152
+ switch (char) {
153
+ case '"': {
154
+ stack.pop();
155
+ stack.push('INSIDE_OBJECT_KEY');
156
+ break;
157
+ }
158
+ }
159
+ break;
160
+ }
161
+
162
+ case 'INSIDE_OBJECT_KEY': {
163
+ switch (char) {
164
+ case '"': {
165
+ stack.pop();
166
+ stack.push('INSIDE_OBJECT_AFTER_KEY');
167
+ break;
168
+ }
169
+ }
170
+ break;
171
+ }
172
+
173
+ case 'INSIDE_OBJECT_AFTER_KEY': {
174
+ switch (char) {
175
+ case ':': {
176
+ stack.pop();
177
+ stack.push('INSIDE_OBJECT_BEFORE_VALUE');
178
+
179
+ break;
180
+ }
181
+ }
182
+ break;
183
+ }
184
+
185
+ case 'INSIDE_OBJECT_BEFORE_VALUE': {
186
+ processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');
187
+ break;
188
+ }
189
+
190
+ case 'INSIDE_OBJECT_AFTER_VALUE': {
191
+ processAfterObjectValue(char, i);
192
+ break;
193
+ }
194
+
195
+ case 'INSIDE_STRING': {
196
+ switch (char) {
197
+ case '"': {
198
+ stack.pop();
199
+ lastValidIndex = i;
200
+ break;
201
+ }
202
+
203
+ case '\\': {
204
+ stack.push('INSIDE_STRING_ESCAPE');
205
+ break;
206
+ }
207
+
208
+ default: {
209
+ lastValidIndex = i;
210
+ }
211
+ }
212
+
213
+ break;
214
+ }
215
+
216
+ case 'INSIDE_ARRAY_START': {
217
+ switch (char) {
218
+ case ']': {
219
+ lastValidIndex = i;
220
+ stack.pop();
221
+ break;
222
+ }
223
+
224
+ default: {
225
+ lastValidIndex = i;
226
+ processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');
227
+ break;
228
+ }
229
+ }
230
+ break;
231
+ }
232
+
233
+ case 'INSIDE_ARRAY_AFTER_VALUE': {
234
+ switch (char) {
235
+ case ',': {
236
+ stack.pop();
237
+ stack.push('INSIDE_ARRAY_AFTER_COMMA');
238
+ break;
239
+ }
240
+
241
+ case ']': {
242
+ lastValidIndex = i;
243
+ stack.pop();
244
+ break;
245
+ }
246
+
247
+ default: {
248
+ lastValidIndex = i;
249
+ break;
250
+ }
251
+ }
252
+
253
+ break;
254
+ }
255
+
256
+ case 'INSIDE_ARRAY_AFTER_COMMA': {
257
+ processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');
258
+ break;
259
+ }
260
+
261
+ case 'INSIDE_STRING_ESCAPE': {
262
+ stack.pop();
263
+ lastValidIndex = i;
264
+
265
+ break;
266
+ }
267
+
268
+ case 'INSIDE_NUMBER': {
269
+ switch (char) {
270
+ case '0':
271
+ case '1':
272
+ case '2':
273
+ case '3':
274
+ case '4':
275
+ case '5':
276
+ case '6':
277
+ case '7':
278
+ case '8':
279
+ case '9': {
280
+ lastValidIndex = i;
281
+ break;
282
+ }
283
+
284
+ case 'e':
285
+ case 'E':
286
+ case '-':
287
+ case '.': {
288
+ break;
289
+ }
290
+
291
+ case ',': {
292
+ stack.pop();
293
+
294
+ if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
295
+ processAfterArrayValue(char, i);
296
+ }
297
+
298
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
299
+ processAfterObjectValue(char, i);
300
+ }
301
+
302
+ break;
303
+ }
304
+
305
+ case '}': {
306
+ stack.pop();
307
+
308
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
309
+ processAfterObjectValue(char, i);
310
+ }
311
+
312
+ break;
313
+ }
314
+
315
+ case ']': {
316
+ stack.pop();
317
+
318
+ if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
319
+ processAfterArrayValue(char, i);
320
+ }
321
+
322
+ break;
323
+ }
324
+
325
+ default: {
326
+ stack.pop();
327
+ break;
328
+ }
329
+ }
330
+
331
+ break;
332
+ }
333
+
334
+ case 'INSIDE_LITERAL': {
335
+ const partialLiteral = input.substring(literalStart!, i + 1);
336
+
337
+ if (
338
+ !'false'.startsWith(partialLiteral) &&
339
+ !'true'.startsWith(partialLiteral) &&
340
+ !'null'.startsWith(partialLiteral)
341
+ ) {
342
+ stack.pop();
343
+
344
+ if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {
345
+ processAfterObjectValue(char, i);
346
+ } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {
347
+ processAfterArrayValue(char, i);
348
+ }
349
+ } else {
350
+ lastValidIndex = i;
351
+ }
352
+
353
+ break;
354
+ }
355
+ }
356
+ }
357
+
358
+ let result = input.slice(0, lastValidIndex + 1);
359
+
360
+ for (let i = stack.length - 1; i >= 0; i--) {
361
+ const state = stack[i];
362
+
363
+ switch (state) {
364
+ case 'INSIDE_STRING': {
365
+ result += '"';
366
+ break;
367
+ }
368
+
369
+ case 'INSIDE_OBJECT_KEY':
370
+ case 'INSIDE_OBJECT_AFTER_KEY':
371
+ case 'INSIDE_OBJECT_AFTER_COMMA':
372
+ case 'INSIDE_OBJECT_START':
373
+ case 'INSIDE_OBJECT_BEFORE_VALUE':
374
+ case 'INSIDE_OBJECT_AFTER_VALUE': {
375
+ result += '}';
376
+ break;
377
+ }
378
+
379
+ case 'INSIDE_ARRAY_START':
380
+ case 'INSIDE_ARRAY_AFTER_COMMA':
381
+ case 'INSIDE_ARRAY_AFTER_VALUE': {
382
+ result += ']';
383
+ break;
384
+ }
385
+
386
+ case 'INSIDE_LITERAL': {
387
+ const partialLiteral = input.substring(literalStart!, input.length);
388
+
389
+ if ('true'.startsWith(partialLiteral)) {
390
+ result += 'true'.slice(partialLiteral.length);
391
+ } else if ('false'.startsWith(partialLiteral)) {
392
+ result += 'false'.slice(partialLiteral.length);
393
+ } else if ('null'.startsWith(partialLiteral)) {
394
+ result += 'null'.slice(partialLiteral.length);
395
+ }
396
+ }
397
+ }
398
+ }
399
+
400
+ return result;
401
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Finds the potential starting index where searchedText could begin in text.
3
+ *
4
+ * This function checks for both complete and partial matches:
5
+ * - If searchedText is found as a complete substring, returns the index of the first occurrence.
6
+ * - If the end of text matches the beginning of searchedText (partial match),
7
+ * returns the index where that partial match starts.
8
+ *
9
+ * @param text - The text to search within.
10
+ * @param searchedText - The text to search for.
11
+ * @returns The starting index of the match (complete or partial), or null if
12
+ * searchedText is empty or no match is found.
13
+ */
14
+ export function getPotentialStartIndex(
15
+ text: string,
16
+ searchedText: string,
17
+ ): number | null {
18
+ // Return null immediately if searchedText is empty.
19
+ if (searchedText.length === 0) {
20
+ return null;
21
+ }
22
+
23
+ // Check if the searchedText exists as a direct substring of text.
24
+ const directIndex = text.indexOf(searchedText);
25
+ if (directIndex !== -1) {
26
+ return directIndex;
27
+ }
28
+
29
+ // Otherwise, look for the largest suffix of "text" that matches
30
+ // a prefix of "searchedText". We go from the end of text inward.
31
+ for (let i = text.length - 1; i >= 0; i--) {
32
+ const suffix = text.substring(i);
33
+ if (searchedText.startsWith(suffix)) {
34
+ return i;
35
+ }
36
+ }
37
+
38
+ return null;
39
+ }
@@ -0,0 +1,12 @@
1
+ export type { AsyncIterableStream } from './async-iterable-stream';
2
+ export { consumeStream } from './consume-stream';
3
+ export { cosineSimilarity } from './cosine-similarity';
4
+ export { createDownload } from './download/create-download';
5
+ export { getTextFromDataUrl } from './data-url';
6
+ export type { DeepPartial } from './deep-partial';
7
+ export type { DownloadFunction as Experimental_DownloadFunction } from './download/download-function';
8
+ export { type ErrorHandler } from './error-handler';
9
+ export { isDeepEqualData } from './is-deep-equal-data';
10
+ export { parsePartialJson } from './parse-partial-json';
11
+ export { SerialJobExecutor } from './serial-job-executor';
12
+ export { simulateReadableStream } from './simulate-readable-stream';
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Performs a deep-equal comparison of two parsed JSON objects.
3
+ *
4
+ * @param {any} obj1 - The first object to compare.
5
+ * @param {any} obj2 - The second object to compare.
6
+ * @returns {boolean} - Returns true if the two objects are deeply equal, false otherwise.
7
+ */
8
+ export function isDeepEqualData(obj1: any, obj2: any): boolean {
9
+ // Check for strict equality first
10
+ if (obj1 === obj2) return true;
11
+
12
+ // Check if either is null or undefined
13
+ if (obj1 == null || obj2 == null) return false;
14
+
15
+ // Check if both are objects
16
+ if (typeof obj1 !== 'object' && typeof obj2 !== 'object')
17
+ return obj1 === obj2;
18
+
19
+ // If they are not strictly equal, they both need to be Objects
20
+ if (obj1.constructor !== obj2.constructor) return false;
21
+
22
+ // Special handling for Date objects
23
+ if (obj1 instanceof Date && obj2 instanceof Date) {
24
+ return obj1.getTime() === obj2.getTime();
25
+ }
26
+
27
+ // Handle arrays: compare length and then perform a recursive deep comparison on each item
28
+ if (Array.isArray(obj1)) {
29
+ if (obj1.length !== obj2.length) return false;
30
+ for (let i = 0; i < obj1.length; i++) {
31
+ if (!isDeepEqualData(obj1[i], obj2[i])) return false;
32
+ }
33
+ return true; // All array elements matched
34
+ }
35
+
36
+ // Compare the set of keys in each object
37
+ const keys1 = Object.keys(obj1);
38
+ const keys2 = Object.keys(obj2);
39
+ if (keys1.length !== keys2.length) return false;
40
+
41
+ // Check each key-value pair recursively
42
+ for (const key of keys1) {
43
+ if (!keys2.includes(key)) return false;
44
+ if (!isDeepEqualData(obj1[key], obj2[key])) return false;
45
+ }
46
+
47
+ return true; // All keys and values matched
48
+ }
@@ -0,0 +1,5 @@
1
+ export function isNonEmptyObject(
2
+ object: Record<string, unknown> | undefined | null,
3
+ ): object is Record<string, unknown> {
4
+ return object != null && Object.keys(object).length > 0;
5
+ }
@@ -0,0 +1 @@
1
+ export type Job = () => Promise<void>;
@@ -0,0 +1,21 @@
1
+ import { logWarnings } from '../logger/log-warnings';
2
+
3
+ export function logV2CompatibilityWarning({
4
+ provider,
5
+ modelId,
6
+ }: {
7
+ provider: string;
8
+ modelId: string;
9
+ }): void {
10
+ logWarnings({
11
+ warnings: [
12
+ {
13
+ type: 'compatibility',
14
+ feature: 'specificationVersion',
15
+ details: `Using v2 specification compatibility mode. Some features may not be available.`,
16
+ },
17
+ ],
18
+ provider,
19
+ model: modelId,
20
+ });
21
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Merges multiple AbortSignals into a single AbortSignal.
3
+ * The returned signal will abort when any of the input signals abort,
4
+ * with the same reason as the first signal to abort.
5
+ *
6
+ * @param signals - The AbortSignals to merge. Null and undefined values are filtered out.
7
+ * @returns An AbortSignal that aborts when any of the input signals abort,
8
+ * or undefined if no valid signals are provided.
9
+ */
10
+ export function mergeAbortSignals(
11
+ ...signals: (AbortSignal | null | undefined)[]
12
+ ): AbortSignal | undefined {
13
+ const validSignals = signals.filter(
14
+ (signal): signal is AbortSignal => signal != null,
15
+ );
16
+
17
+ if (validSignals.length === 0) {
18
+ return undefined;
19
+ }
20
+
21
+ if (validSignals.length === 1) {
22
+ return validSignals[0];
23
+ }
24
+
25
+ const controller = new AbortController();
26
+
27
+ for (const signal of validSignals) {
28
+ if (signal.aborted) {
29
+ controller.abort(signal.reason);
30
+ return controller.signal;
31
+ }
32
+
33
+ signal.addEventListener(
34
+ 'abort',
35
+ () => {
36
+ controller.abort(signal.reason);
37
+ },
38
+ { once: true },
39
+ );
40
+ }
41
+
42
+ return controller.signal;
43
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Deeply merges two objects together.
3
+ * - Properties from the `overrides` object override those in the `base` object with the same key.
4
+ * - For nested objects, the merge is performed recursively (deep merge).
5
+ * - Arrays are replaced, not merged.
6
+ * - Primitive values are replaced.
7
+ * - If both `base` and `overrides` are undefined, returns undefined.
8
+ * - If one of `base` or `overrides` is undefined, returns the other.
9
+ *
10
+ * @param base The target object to merge into
11
+ * @param overrides The source object to merge from
12
+ * @returns A new object with the merged properties, or undefined if both inputs are undefined
13
+ */
14
+ export function mergeObjects<T extends object, U extends object>(
15
+ base: T | undefined,
16
+ overrides: U | undefined,
17
+ ): (T & U) | T | U | undefined {
18
+ // If both inputs are undefined, return undefined
19
+ if (base === undefined && overrides === undefined) {
20
+ return undefined;
21
+ }
22
+
23
+ // If target is undefined, return source
24
+ if (base === undefined) {
25
+ return overrides;
26
+ }
27
+
28
+ // If source is undefined, return target
29
+ if (overrides === undefined) {
30
+ return base;
31
+ }
32
+
33
+ // Create a new object to avoid mutating the inputs
34
+ const result = { ...base } as T & U;
35
+
36
+ // Iterate through all keys in the source object
37
+ for (const key in overrides) {
38
+ if (Object.prototype.hasOwnProperty.call(overrides, key)) {
39
+ const overridesValue = overrides[key];
40
+
41
+ // Skip if the overrides value is undefined
42
+ if (overridesValue === undefined) continue;
43
+
44
+ // Get the base value if it exists
45
+ const baseValue =
46
+ key in base ? base[key as unknown as keyof T] : undefined;
47
+
48
+ // Check if both values are objects that can be deeply merged
49
+ const isSourceObject =
50
+ overridesValue !== null &&
51
+ typeof overridesValue === 'object' &&
52
+ !Array.isArray(overridesValue) &&
53
+ !(overridesValue instanceof Date) &&
54
+ !(overridesValue instanceof RegExp);
55
+
56
+ const isTargetObject =
57
+ baseValue !== null &&
58
+ baseValue !== undefined &&
59
+ typeof baseValue === 'object' &&
60
+ !Array.isArray(baseValue) &&
61
+ !(baseValue instanceof Date) &&
62
+ !(baseValue instanceof RegExp);
63
+
64
+ // If both values are mergeable objects, merge them recursively
65
+ if (isSourceObject && isTargetObject) {
66
+ result[key as keyof (T & U)] = mergeObjects(
67
+ baseValue as object,
68
+ overridesValue as object,
69
+ ) as any;
70
+ } else {
71
+ // For primitives, arrays, or when one value is not a mergeable object,
72
+ // simply override with the source value
73
+ result[key as keyof (T & U)] = overridesValue as any;
74
+ }
75
+ }
76
+ }
77
+
78
+ return result;
79
+ }
@@ -0,0 +1,22 @@
1
+ import { asArray } from './as-array';
2
+
3
+ /**
4
+ * A callback function that can be used to notify listeners.
5
+ */
6
+ export type Listener<EVENT> = (event: EVENT) => PromiseLike<void> | void;
7
+
8
+ /**
9
+ * Notifies all provided callbacks with the given event.
10
+ * Errors in callbacks do not break the generation flow.
11
+ */
12
+ export async function notify<EVENT>(options: {
13
+ event: EVENT;
14
+ callbacks?: Listener<EVENT> | Array<Listener<EVENT> | undefined | null>;
15
+ }): Promise<void> {
16
+ for (const callback of asArray(options.callbacks)) {
17
+ if (callback == null) continue;
18
+ try {
19
+ await callback(options.event);
20
+ } catch (_ignored) {}
21
+ }
22
+ }
@@ -0,0 +1,4 @@
1
+ // Shim for performance.now() to support environments that don't have it:
2
+ export function now(): number {
3
+ return globalThis?.performance?.now() ?? Date.now();
4
+ }