@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,189 @@
1
+ import type { JSONObject, JSONValue } from '@ai-sdk/provider';
2
+ import type { ProviderOptions } from '@ai-sdk/provider-utils';
3
+ import type { ProviderMetadata } from '../types';
4
+ import type { Warning } from '../types/warning';
5
+
6
+ /**
7
+ * Event passed to the `onStart` callback for rerank operations.
8
+ *
9
+ * Called when the operation begins, before the reranking model is called.
10
+ */
11
+ export interface RerankOnStartEvent {
12
+ /** Unique identifier for this rerank call, used to correlate events. */
13
+ readonly callId: string;
14
+
15
+ /** Identifies the operation type ('ai.rerank'). */
16
+ readonly operationId: string;
17
+
18
+ //** The provider identifier (e.g., 'openai', 'anthropic'). */
19
+ readonly provider: string;
20
+
21
+ /** The specific model identifier (e.g., 'gpt-4o'). */
22
+ readonly modelId: string;
23
+ /** The documents being reranked. */
24
+ readonly documents: Array<JSONObject | string>;
25
+
26
+ /** The query to rerank the documents against. */
27
+ readonly query: string;
28
+
29
+ /** Number of top documents to return. */
30
+ readonly topN: number | undefined;
31
+
32
+ /** Maximum number of retries for failed requests. */
33
+ readonly maxRetries: number;
34
+
35
+ /** Abort signal for cancelling the operation. */
36
+ readonly abortSignal: AbortSignal | undefined;
37
+
38
+ /** Additional HTTP headers sent with the request. */
39
+ readonly headers: Record<string, string | undefined> | undefined;
40
+
41
+ /** Additional provider-specific options. */
42
+ readonly providerOptions: ProviderOptions | undefined;
43
+
44
+ /** Whether telemetry is enabled. */
45
+ readonly isEnabled: boolean | undefined;
46
+
47
+ /** Whether to record inputs in telemetry. Enabled by default. */
48
+ readonly recordInputs: boolean | undefined;
49
+
50
+ /** Whether to record outputs in telemetry. Enabled by default. */
51
+ readonly recordOutputs: boolean | undefined;
52
+
53
+ /** Identifier from telemetry settings for grouping related operations. */
54
+ readonly functionId: string | undefined;
55
+
56
+ /** Additional metadata from telemetry settings. */
57
+ readonly metadata: Record<string, JSONValue> | undefined;
58
+ }
59
+
60
+ /**
61
+ * Event passed to the `onFinish` callback for rerank operations.
62
+ *
63
+ * Called when the operation completes, after the reranking model returns.
64
+ */
65
+ export interface RerankOnFinishEvent {
66
+ /** Unique identifier for this rerank call, used to correlate events. */
67
+ readonly callId: string;
68
+
69
+ /** Identifies the operation type ('ai.rerank'). */
70
+ readonly operationId: string;
71
+
72
+ //** The provider identifier (e.g., 'openai', 'anthropic'). */
73
+ readonly provider: string;
74
+
75
+ /** The specific model identifier (e.g., 'gpt-4o'). */
76
+ readonly modelId: string;
77
+
78
+ /** The documents that were reranked. */
79
+ readonly documents: Array<JSONObject | string>;
80
+
81
+ /** The query that documents were reranked against. */
82
+ readonly query: string;
83
+
84
+ /** The reranked results sorted by relevance score in descending order. */
85
+ readonly ranking: Array<{
86
+ originalIndex: number;
87
+ score: number;
88
+ document: JSONObject | string;
89
+ }>;
90
+
91
+ /** Warnings from the reranking model. */
92
+ readonly warnings: Array<Warning>;
93
+
94
+ /** Optional provider-specific metadata. */
95
+ readonly providerMetadata: ProviderMetadata | undefined;
96
+
97
+ /** Response data including headers and body. */
98
+ readonly response: {
99
+ id?: string;
100
+ timestamp: Date;
101
+ modelId: string;
102
+ headers?: Record<string, string>;
103
+ body?: unknown;
104
+ };
105
+
106
+ /** Whether telemetry is enabled. */
107
+ readonly isEnabled: boolean | undefined;
108
+
109
+ /** Whether to record inputs in telemetry. Enabled by default. */
110
+ readonly recordInputs: boolean | undefined;
111
+
112
+ /** Whether to record outputs in telemetry. Enabled by default. */
113
+ readonly recordOutputs: boolean | undefined;
114
+
115
+ /** Identifier from telemetry settings for grouping related operations. */
116
+ readonly functionId: string | undefined;
117
+
118
+ /** Additional metadata from telemetry settings. */
119
+ readonly metadata: Record<string, JSONValue> | undefined;
120
+ }
121
+
122
+ /**
123
+ * Event fired when an individual reranking model call (inner doRerank) begins.
124
+ */
125
+ export interface RerankStartEvent {
126
+ /** Unique identifier for this rerank call, used to correlate events. */
127
+ readonly callId: string;
128
+
129
+ /** Identifies the inner operation ('ai.rerank.doRerank'). */
130
+ readonly operationId: string;
131
+
132
+ /** The provider identifier. */
133
+ readonly provider: string;
134
+
135
+ /** The specific model identifier. */
136
+ readonly modelId: string;
137
+
138
+ /** The documents being reranked. */
139
+ readonly documents: Array<JSONObject | string>;
140
+
141
+ /** The type of documents ('text' or 'object'). */
142
+ readonly documentsType: string;
143
+
144
+ /** The query to rerank against. */
145
+ readonly query: string;
146
+
147
+ /** Number of top documents to return. */
148
+ readonly topN: number | undefined;
149
+
150
+ /** Whether telemetry is enabled. */
151
+ readonly isEnabled: boolean | undefined;
152
+
153
+ /** Whether to record inputs in telemetry. Enabled by default. */
154
+ readonly recordInputs: boolean | undefined;
155
+
156
+ /** Whether to record outputs in telemetry. Enabled by default. */
157
+ readonly recordOutputs: boolean | undefined;
158
+
159
+ /** Identifier from telemetry settings for grouping related operations. */
160
+ readonly functionId: string | undefined;
161
+
162
+ /** Additional metadata from telemetry settings. */
163
+ readonly metadata: Record<string, JSONValue> | undefined;
164
+ }
165
+
166
+ /**
167
+ * Event fired when an individual reranking model call (doRerank) completes.
168
+ *
169
+ * Contains the ranking results from the model response.
170
+ */
171
+ export interface RerankFinishEvent {
172
+ /** Unique identifier for this rerank call, used to correlate events. */
173
+ readonly callId: string;
174
+
175
+ /** Identifies the inner operation ('ai.rerank.doRerank'). */
176
+ readonly operationId: string;
177
+
178
+ /** The provider identifier. */
179
+ readonly provider: string;
180
+
181
+ /** The specific model identifier. */
182
+ readonly modelId: string;
183
+
184
+ /** The type of documents ('text' or 'object'). */
185
+ readonly documentsType: string;
186
+
187
+ /** The ranking results from the model. */
188
+ readonly ranking: Array<{ index: number; relevanceScore: number }>;
189
+ }
@@ -0,0 +1,70 @@
1
+ import { ProviderMetadata } from '../types/provider-metadata';
2
+
3
+ /**
4
+ * The result of a `rerank` call.
5
+ * It contains the original documents, the reranked documents, and additional information.
6
+ */
7
+ export interface RerankResult<VALUE> {
8
+ /**
9
+ * The original documents that were reranked.
10
+ */
11
+ readonly originalDocuments: Array<VALUE>;
12
+
13
+ /**
14
+ * Reranked documents.
15
+ *
16
+ * Sorted by relevance score in descending order.
17
+ *
18
+ * Can be less than the original documents if there was a topN limit.
19
+ */
20
+ readonly rerankedDocuments: Array<VALUE>;
21
+
22
+ /**
23
+ * The ranking is a list of objects with the original index,
24
+ * relevance score, and the reranked document.
25
+ *
26
+ * Sorted by relevance score in descending order.
27
+ *
28
+ * Can be less than the original documents if there was a topN limit.
29
+ */
30
+ readonly ranking: Array<{
31
+ originalIndex: number;
32
+ score: number;
33
+ document: VALUE;
34
+ }>;
35
+
36
+ /**
37
+ * Optional provider-specific metadata.
38
+ */
39
+ readonly providerMetadata?: ProviderMetadata;
40
+
41
+ /**
42
+ * Optional raw response data.
43
+ */
44
+ readonly response: {
45
+ /**
46
+ * ID for the generated response if the provider sends one.
47
+ */
48
+ id?: string;
49
+
50
+ /**
51
+ * Timestamp of the generated response.
52
+ */
53
+ timestamp: Date;
54
+
55
+ /**
56
+ * The ID of the model that was used to generate the response.
57
+ */
58
+ modelId: string;
59
+
60
+ /**
61
+ * Response headers.
62
+ */
63
+ headers?: Record<string, string>;
64
+
65
+ /**
66
+ * The response body.
67
+ */
68
+ body?: unknown;
69
+ };
70
+ }
@@ -0,0 +1,348 @@
1
+ import { JSONObject, RerankingModelV4CallOptions } from '@ai-sdk/provider';
2
+ import { createIdGenerator, ProviderOptions } from '@ai-sdk/provider-utils';
3
+ import { prepareRetries } from '../../src/util/prepare-retries';
4
+ import { logWarnings } from '../logger/log-warnings';
5
+ import { getGlobalTelemetryIntegration } from '../telemetry/get-global-telemetry-integration';
6
+ import { TelemetrySettings } from '../telemetry/telemetry-settings';
7
+ import { RerankingModel } from '../types';
8
+ import { notify } from '../util/notify';
9
+ import type { Listener } from '../util/notify';
10
+ import type { RerankOnFinishEvent, RerankOnStartEvent } from './rerank-events';
11
+ import { RerankResult } from './rerank-result';
12
+
13
+ const originalGenerateCallId = createIdGenerator({
14
+ prefix: 'call',
15
+ size: 24,
16
+ });
17
+
18
+ /**
19
+ * Rerank documents using a reranking model. The type of the value is defined by the reranking model.
20
+ *
21
+ * @param model - The reranking model to use.
22
+ * @param documents - The documents that should be reranked.
23
+ * @param query - The query to rerank the documents against.
24
+ * @param topN - Number of top documents to return.
25
+ *
26
+ * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
27
+ * @param abortSignal - An optional abort signal that can be used to cancel the call.
28
+ * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
29
+ * @param providerOptions - Additional provider-specific options.
30
+ * @param experimental_telemetry - Optional telemetry configuration (experimental).
31
+ *
32
+ * @returns A result object that contains the reranked documents, the reranked indices, and additional information.
33
+ */
34
+ export async function rerank<VALUE extends JSONObject | string>({
35
+ model,
36
+ documents,
37
+ query,
38
+ topN,
39
+ maxRetries: maxRetriesArg,
40
+ abortSignal,
41
+ headers,
42
+ providerOptions,
43
+ experimental_telemetry: telemetry,
44
+ experimental_onStart: onStart,
45
+ experimental_onFinish: onFinish,
46
+ _internal: { generateCallId = originalGenerateCallId } = {},
47
+ }: {
48
+ /**
49
+ * The reranking model to use.
50
+ */
51
+ model: RerankingModel;
52
+
53
+ /**
54
+ * The documents that should be reranked.
55
+ */
56
+ documents: Array<VALUE>;
57
+
58
+ /**
59
+ * The query to rerank the documents against.
60
+ */
61
+ query: string;
62
+
63
+ /**
64
+ * Number of top documents to return.
65
+ */
66
+ topN?: number;
67
+
68
+ /**
69
+ * Maximum number of retries per reranking model call. Set to 0 to disable retries.
70
+ *
71
+ * @default 2
72
+ */
73
+ maxRetries?: number;
74
+
75
+ /**
76
+ * Abort signal.
77
+ */
78
+ abortSignal?: AbortSignal;
79
+
80
+ /**
81
+ * Additional headers to include in the request.
82
+ * Only applicable for HTTP-based providers.
83
+ */
84
+ headers?: Record<string, string>;
85
+
86
+ /**
87
+ * Optional telemetry configuration (experimental).
88
+ */
89
+ experimental_telemetry?: TelemetrySettings;
90
+
91
+ /**
92
+ * Additional provider-specific options. They are passed through
93
+ * to the provider from the AI SDK and enable provider-specific
94
+ * functionality that can be fully encapsulated in the provider.
95
+ */
96
+ providerOptions?: ProviderOptions;
97
+
98
+ /**
99
+ * Callback that is called when the rerank operation begins,
100
+ * before the reranking model is called.
101
+ */
102
+ experimental_onStart?: Listener<RerankOnStartEvent>;
103
+
104
+ /**
105
+ * Callback that is called when the rerank operation completes,
106
+ * after the reranking model returns.
107
+ */
108
+ experimental_onFinish?: Listener<RerankOnFinishEvent>;
109
+
110
+ /**
111
+ * Internal. For test use only. May change without notice.
112
+ */
113
+ _internal?: {
114
+ generateCallId?: () => string;
115
+ };
116
+ }): Promise<RerankResult<VALUE>> {
117
+ const callId = generateCallId();
118
+
119
+ const createGlobalTelemetry = getGlobalTelemetryIntegration();
120
+ const globalTelemetry = createGlobalTelemetry({
121
+ integrations: telemetry?.integrations,
122
+ });
123
+
124
+ if (documents.length === 0) {
125
+ await notify({
126
+ event: {
127
+ callId,
128
+ operationId: 'ai.rerank',
129
+ provider: model.provider,
130
+ modelId: model.modelId,
131
+ documents,
132
+ query,
133
+ topN,
134
+ maxRetries: maxRetriesArg ?? 2,
135
+ abortSignal,
136
+ headers,
137
+ providerOptions,
138
+ isEnabled: telemetry?.isEnabled,
139
+ recordInputs: telemetry?.recordInputs,
140
+ recordOutputs: telemetry?.recordOutputs,
141
+ functionId: telemetry?.functionId,
142
+ metadata: telemetry?.metadata,
143
+ },
144
+ callbacks: [onStart, globalTelemetry.onStart],
145
+ });
146
+
147
+ await notify({
148
+ event: {
149
+ callId,
150
+ operationId: 'ai.rerank',
151
+ provider: model.provider,
152
+ modelId: model.modelId,
153
+ documents,
154
+ query,
155
+ ranking: [],
156
+ warnings: [],
157
+ providerMetadata: undefined,
158
+ response: {
159
+ timestamp: new Date(),
160
+ modelId: model.modelId,
161
+ },
162
+ isEnabled: telemetry?.isEnabled,
163
+ recordInputs: telemetry?.recordInputs,
164
+ recordOutputs: telemetry?.recordOutputs,
165
+ functionId: telemetry?.functionId,
166
+ metadata: telemetry?.metadata,
167
+ },
168
+ callbacks: [onFinish, globalTelemetry.onFinish],
169
+ });
170
+
171
+ return new DefaultRerankResult({
172
+ originalDocuments: [],
173
+ ranking: [],
174
+ providerMetadata: undefined,
175
+ response: {
176
+ timestamp: new Date(),
177
+ modelId: model.modelId,
178
+ },
179
+ });
180
+ }
181
+
182
+ const { maxRetries, retry } = prepareRetries({
183
+ maxRetries: maxRetriesArg,
184
+ abortSignal,
185
+ });
186
+
187
+ const documentsToSend: RerankingModelV4CallOptions['documents'] =
188
+ typeof documents[0] === 'string'
189
+ ? { type: 'text', values: documents as string[] }
190
+ : { type: 'object', values: documents as JSONObject[] };
191
+
192
+ await notify({
193
+ event: {
194
+ callId,
195
+ operationId: 'ai.rerank',
196
+ provider: model.provider,
197
+ modelId: model.modelId,
198
+ documents,
199
+ query,
200
+ topN,
201
+ maxRetries,
202
+ abortSignal,
203
+ headers,
204
+ providerOptions,
205
+ isEnabled: telemetry?.isEnabled,
206
+ recordInputs: telemetry?.recordInputs,
207
+ recordOutputs: telemetry?.recordOutputs,
208
+ functionId: telemetry?.functionId,
209
+ metadata: telemetry?.metadata,
210
+ },
211
+ callbacks: [onStart, globalTelemetry.onStart],
212
+ });
213
+
214
+ try {
215
+ const { ranking, response, providerMetadata, warnings } = await retry(
216
+ async () => {
217
+ await notify({
218
+ event: {
219
+ callId,
220
+ operationId: 'ai.rerank.doRerank',
221
+ provider: model.provider,
222
+ modelId: model.modelId,
223
+ documents,
224
+ documentsType: documentsToSend.type,
225
+ query,
226
+ topN,
227
+ isEnabled: telemetry?.isEnabled,
228
+ recordInputs: telemetry?.recordInputs,
229
+ recordOutputs: telemetry?.recordOutputs,
230
+ functionId: telemetry?.functionId,
231
+ metadata: telemetry?.metadata,
232
+ },
233
+ callbacks: [globalTelemetry.onRerankStart],
234
+ });
235
+
236
+ const modelResponse = await model.doRerank({
237
+ documents: documentsToSend,
238
+ query,
239
+ topN,
240
+ providerOptions,
241
+ abortSignal,
242
+ headers,
243
+ });
244
+
245
+ const ranking = modelResponse.ranking;
246
+
247
+ await notify({
248
+ event: {
249
+ callId,
250
+ operationId: 'ai.rerank.doRerank',
251
+ provider: model.provider,
252
+ modelId: model.modelId,
253
+ documentsType: documentsToSend.type,
254
+ ranking,
255
+ },
256
+ callbacks: [globalTelemetry.onRerankFinish],
257
+ });
258
+
259
+ return {
260
+ ranking,
261
+ providerMetadata: modelResponse.providerMetadata,
262
+ response: modelResponse.response,
263
+ warnings: modelResponse.warnings,
264
+ };
265
+ },
266
+ );
267
+
268
+ logWarnings({
269
+ warnings: warnings ?? [],
270
+ provider: model.provider,
271
+ model: model.modelId,
272
+ });
273
+
274
+ await notify({
275
+ event: {
276
+ callId,
277
+ operationId: 'ai.rerank',
278
+ provider: model.provider,
279
+ modelId: model.modelId,
280
+ documents,
281
+ query,
282
+ ranking: ranking.map(r => ({
283
+ originalIndex: r.index,
284
+ score: r.relevanceScore,
285
+ document: documents[r.index],
286
+ })),
287
+ warnings: warnings ?? [],
288
+ providerMetadata,
289
+ response: {
290
+ id: response?.id,
291
+ timestamp: response?.timestamp ?? new Date(),
292
+ modelId: response?.modelId ?? model.modelId,
293
+ headers: response?.headers,
294
+ body: response?.body,
295
+ },
296
+ isEnabled: telemetry?.isEnabled,
297
+ recordInputs: telemetry?.recordInputs,
298
+ recordOutputs: telemetry?.recordOutputs,
299
+ functionId: telemetry?.functionId,
300
+ metadata: telemetry?.metadata,
301
+ },
302
+ callbacks: [onFinish, globalTelemetry.onFinish],
303
+ });
304
+
305
+ return new DefaultRerankResult({
306
+ originalDocuments: documents,
307
+ ranking: ranking.map(ranking => ({
308
+ originalIndex: ranking.index,
309
+ score: ranking.relevanceScore,
310
+ document: documents[ranking.index],
311
+ })),
312
+ providerMetadata,
313
+ response: {
314
+ id: response?.id,
315
+ timestamp: response?.timestamp ?? new Date(),
316
+ modelId: response?.modelId ?? model.modelId,
317
+ headers: response?.headers,
318
+ body: response?.body,
319
+ },
320
+ });
321
+ } catch (error) {
322
+ await globalTelemetry.onError?.({ callId, error });
323
+ throw error;
324
+ }
325
+ }
326
+
327
+ class DefaultRerankResult<VALUE> implements RerankResult<VALUE> {
328
+ readonly originalDocuments: RerankResult<VALUE>['originalDocuments'];
329
+ readonly ranking: RerankResult<VALUE>['ranking'];
330
+ readonly response: RerankResult<VALUE>['response'];
331
+ readonly providerMetadata: RerankResult<VALUE>['providerMetadata'];
332
+
333
+ constructor(options: {
334
+ originalDocuments: RerankResult<VALUE>['originalDocuments'];
335
+ ranking: RerankResult<VALUE>['ranking'];
336
+ providerMetadata?: RerankResult<VALUE>['providerMetadata'];
337
+ response: RerankResult<VALUE>['response'];
338
+ }) {
339
+ this.originalDocuments = options.originalDocuments;
340
+ this.ranking = options.ranking;
341
+ this.response = options.response;
342
+ this.providerMetadata = options.providerMetadata;
343
+ }
344
+
345
+ get rerankedDocuments(): RerankResult<VALUE>['rerankedDocuments'] {
346
+ return this.ranking.map(ranking => ranking.document);
347
+ }
348
+ }
@@ -0,0 +1,21 @@
1
+ import { TelemetrySettings } from './telemetry-settings';
2
+
3
+ export function assembleOperationName({
4
+ operationId,
5
+ telemetry,
6
+ }: {
7
+ operationId: string;
8
+ telemetry?: TelemetrySettings;
9
+ }) {
10
+ return {
11
+ // standardized operation and resource name:
12
+ 'operation.name': `${operationId}${
13
+ telemetry?.functionId != null ? ` ${telemetry.functionId}` : ''
14
+ }`,
15
+ 'resource.name': telemetry?.functionId,
16
+
17
+ // detailed, AI SDK specific data:
18
+ 'ai.operationId': operationId,
19
+ 'ai.telemetry.functionId': telemetry?.functionId,
20
+ };
21
+ }
@@ -0,0 +1,45 @@
1
+ import { Attributes, AttributeValue } from '@opentelemetry/api';
2
+ import { CallSettings } from '../prompt/call-settings';
3
+ import { TelemetrySettings } from './telemetry-settings';
4
+
5
+ export function getBaseTelemetryAttributes({
6
+ model,
7
+ settings,
8
+ telemetry,
9
+ headers,
10
+ }: {
11
+ model: { modelId: string; provider: string };
12
+ settings: Omit<CallSettings, 'abortSignal' | 'headers' | 'temperature'>;
13
+ telemetry: TelemetrySettings | undefined;
14
+ headers: Record<string, string | undefined> | undefined;
15
+ }): Attributes {
16
+ return {
17
+ 'ai.model.provider': model.provider,
18
+ 'ai.model.id': model.modelId,
19
+
20
+ // settings:
21
+ ...Object.entries(settings).reduce((attributes, [key, value]) => {
22
+ attributes[`ai.settings.${key}`] = value as AttributeValue;
23
+ return attributes;
24
+ }, {} as Attributes),
25
+
26
+ // add metadata as attributes:
27
+ ...Object.entries(telemetry?.metadata ?? {}).reduce(
28
+ (attributes, [key, value]) => {
29
+ if (value != undefined) {
30
+ attributes[`ai.telemetry.metadata.${key}`] = value as AttributeValue;
31
+ }
32
+ return attributes;
33
+ },
34
+ {} as Attributes,
35
+ ),
36
+
37
+ // request headers
38
+ ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {
39
+ if (value !== undefined) {
40
+ attributes[`ai.request.headers.${key}`] = value;
41
+ }
42
+ return attributes;
43
+ }, {} as Attributes),
44
+ };
45
+ }