ai 6.0.32 → 6.0.34

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 (353) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/index.js +12 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +12 -2
  5. package/dist/index.mjs.map +1 -1
  6. package/dist/internal/index.js +1 -1
  7. package/dist/internal/index.mjs +1 -1
  8. package/docs/02-foundations/03-prompts.mdx +2 -2
  9. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1 -1
  10. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +1 -1
  11. package/package.json +6 -4
  12. package/src/agent/agent.ts +116 -0
  13. package/src/agent/create-agent-ui-stream-response.test.ts +258 -0
  14. package/src/agent/create-agent-ui-stream-response.ts +50 -0
  15. package/src/agent/create-agent-ui-stream.ts +73 -0
  16. package/src/agent/index.ts +33 -0
  17. package/src/agent/infer-agent-tools.ts +7 -0
  18. package/src/agent/infer-agent-ui-message.test-d.ts +54 -0
  19. package/src/agent/infer-agent-ui-message.ts +11 -0
  20. package/src/agent/pipe-agent-ui-stream-to-response.ts +52 -0
  21. package/src/agent/tool-loop-agent-on-finish-callback.ts +31 -0
  22. package/src/agent/tool-loop-agent-on-step-finish-callback.ts +11 -0
  23. package/src/agent/tool-loop-agent-settings.ts +182 -0
  24. package/src/agent/tool-loop-agent.test-d.ts +114 -0
  25. package/src/agent/tool-loop-agent.test.ts +442 -0
  26. package/src/agent/tool-loop-agent.ts +114 -0
  27. package/src/embed/__snapshots__/embed-many.test.ts.snap +191 -0
  28. package/src/embed/__snapshots__/embed.test.ts.snap +81 -0
  29. package/src/embed/embed-many-result.ts +53 -0
  30. package/src/embed/embed-many.test.ts +653 -0
  31. package/src/embed/embed-many.ts +378 -0
  32. package/src/embed/embed-result.ts +50 -0
  33. package/src/embed/embed.test.ts +298 -0
  34. package/src/embed/embed.ts +211 -0
  35. package/src/embed/index.ts +4 -0
  36. package/src/error/index.ts +34 -0
  37. package/src/error/invalid-argument-error.ts +34 -0
  38. package/src/error/invalid-stream-part-error.ts +28 -0
  39. package/src/error/invalid-tool-approval-error.ts +26 -0
  40. package/src/error/invalid-tool-input-error.ts +33 -0
  41. package/src/error/no-image-generated-error.ts +39 -0
  42. package/src/error/no-object-generated-error.ts +70 -0
  43. package/src/error/no-output-generated-error.ts +26 -0
  44. package/src/error/no-speech-generated-error.ts +18 -0
  45. package/src/error/no-such-tool-error.ts +35 -0
  46. package/src/error/no-transcript-generated-error.ts +20 -0
  47. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  48. package/src/error/tool-call-repair-error.ts +30 -0
  49. package/src/error/unsupported-model-version-error.ts +23 -0
  50. package/src/error/verify-no-object-generated-error.ts +27 -0
  51. package/src/generate-image/generate-image-result.ts +42 -0
  52. package/src/generate-image/generate-image.test.ts +1420 -0
  53. package/src/generate-image/generate-image.ts +360 -0
  54. package/src/generate-image/index.ts +18 -0
  55. package/src/generate-object/__snapshots__/generate-object.test.ts.snap +133 -0
  56. package/src/generate-object/__snapshots__/stream-object.test.ts.snap +297 -0
  57. package/src/generate-object/generate-object-result.ts +67 -0
  58. package/src/generate-object/generate-object.test-d.ts +49 -0
  59. package/src/generate-object/generate-object.test.ts +1191 -0
  60. package/src/generate-object/generate-object.ts +518 -0
  61. package/src/generate-object/index.ts +9 -0
  62. package/src/generate-object/inject-json-instruction.test.ts +181 -0
  63. package/src/generate-object/inject-json-instruction.ts +30 -0
  64. package/src/generate-object/output-strategy.ts +415 -0
  65. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  66. package/src/generate-object/repair-text.ts +12 -0
  67. package/src/generate-object/stream-object-result.ts +120 -0
  68. package/src/generate-object/stream-object.test-d.ts +74 -0
  69. package/src/generate-object/stream-object.test.ts +1950 -0
  70. package/src/generate-object/stream-object.ts +986 -0
  71. package/src/generate-object/validate-object-generation-input.ts +144 -0
  72. package/src/generate-speech/generate-speech-result.ts +30 -0
  73. package/src/generate-speech/generate-speech.test.ts +300 -0
  74. package/src/generate-speech/generate-speech.ts +190 -0
  75. package/src/generate-speech/generated-audio-file.ts +65 -0
  76. package/src/generate-speech/index.ts +3 -0
  77. package/src/generate-text/__snapshots__/generate-text.test.ts.snap +1872 -0
  78. package/src/generate-text/__snapshots__/stream-text.test.ts.snap +1255 -0
  79. package/src/generate-text/collect-tool-approvals.test.ts +553 -0
  80. package/src/generate-text/collect-tool-approvals.ts +116 -0
  81. package/src/generate-text/content-part.ts +25 -0
  82. package/src/generate-text/execute-tool-call.ts +129 -0
  83. package/src/generate-text/extract-reasoning-content.ts +17 -0
  84. package/src/generate-text/extract-text-content.ts +15 -0
  85. package/src/generate-text/generate-text-result.ts +168 -0
  86. package/src/generate-text/generate-text.test-d.ts +68 -0
  87. package/src/generate-text/generate-text.test.ts +7011 -0
  88. package/src/generate-text/generate-text.ts +1223 -0
  89. package/src/generate-text/generated-file.ts +70 -0
  90. package/src/generate-text/index.ts +57 -0
  91. package/src/generate-text/is-approval-needed.ts +29 -0
  92. package/src/generate-text/output-utils.ts +23 -0
  93. package/src/generate-text/output.test.ts +698 -0
  94. package/src/generate-text/output.ts +590 -0
  95. package/src/generate-text/parse-tool-call.test.ts +570 -0
  96. package/src/generate-text/parse-tool-call.ts +188 -0
  97. package/src/generate-text/prepare-step.ts +103 -0
  98. package/src/generate-text/prune-messages.test.ts +720 -0
  99. package/src/generate-text/prune-messages.ts +167 -0
  100. package/src/generate-text/reasoning-output.ts +20 -0
  101. package/src/generate-text/reasoning.ts +8 -0
  102. package/src/generate-text/response-message.ts +10 -0
  103. package/src/generate-text/run-tools-transformation.test.ts +1143 -0
  104. package/src/generate-text/run-tools-transformation.ts +420 -0
  105. package/src/generate-text/smooth-stream.test.ts +2101 -0
  106. package/src/generate-text/smooth-stream.ts +162 -0
  107. package/src/generate-text/step-result.ts +238 -0
  108. package/src/generate-text/stop-condition.ts +29 -0
  109. package/src/generate-text/stream-text-result.ts +463 -0
  110. package/src/generate-text/stream-text.test-d.ts +200 -0
  111. package/src/generate-text/stream-text.test.ts +19979 -0
  112. package/src/generate-text/stream-text.ts +2505 -0
  113. package/src/generate-text/to-response-messages.test.ts +922 -0
  114. package/src/generate-text/to-response-messages.ts +163 -0
  115. package/src/generate-text/tool-approval-request-output.ts +21 -0
  116. package/src/generate-text/tool-call-repair-function.ts +27 -0
  117. package/src/generate-text/tool-call.ts +47 -0
  118. package/src/generate-text/tool-error.ts +34 -0
  119. package/src/generate-text/tool-output-denied.ts +21 -0
  120. package/src/generate-text/tool-output.ts +7 -0
  121. package/src/generate-text/tool-result.ts +36 -0
  122. package/src/generate-text/tool-set.ts +14 -0
  123. package/src/global.ts +24 -0
  124. package/src/index.ts +50 -0
  125. package/src/logger/index.ts +6 -0
  126. package/src/logger/log-warnings.test.ts +351 -0
  127. package/src/logger/log-warnings.ts +119 -0
  128. package/src/middleware/__snapshots__/simulate-streaming-middleware.test.ts.snap +64 -0
  129. package/src/middleware/add-tool-input-examples-middleware.test.ts +476 -0
  130. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  131. package/src/middleware/default-embedding-settings-middleware.test.ts +126 -0
  132. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  133. package/src/middleware/default-settings-middleware.test.ts +388 -0
  134. package/src/middleware/default-settings-middleware.ts +33 -0
  135. package/src/middleware/extract-json-middleware.test.ts +827 -0
  136. package/src/middleware/extract-json-middleware.ts +197 -0
  137. package/src/middleware/extract-reasoning-middleware.test.ts +1028 -0
  138. package/src/middleware/extract-reasoning-middleware.ts +238 -0
  139. package/src/middleware/index.ts +10 -0
  140. package/src/middleware/simulate-streaming-middleware.test.ts +911 -0
  141. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  142. package/src/middleware/wrap-embedding-model.test.ts +358 -0
  143. package/src/middleware/wrap-embedding-model.ts +86 -0
  144. package/src/middleware/wrap-image-model.test.ts +423 -0
  145. package/src/middleware/wrap-image-model.ts +85 -0
  146. package/src/middleware/wrap-language-model.test.ts +518 -0
  147. package/src/middleware/wrap-language-model.ts +104 -0
  148. package/src/middleware/wrap-provider.test.ts +120 -0
  149. package/src/middleware/wrap-provider.ts +51 -0
  150. package/src/model/as-embedding-model-v3.test.ts +319 -0
  151. package/src/model/as-embedding-model-v3.ts +24 -0
  152. package/src/model/as-image-model-v3.test.ts +409 -0
  153. package/src/model/as-image-model-v3.ts +24 -0
  154. package/src/model/as-language-model-v3.test.ts +508 -0
  155. package/src/model/as-language-model-v3.ts +103 -0
  156. package/src/model/as-provider-v3.ts +36 -0
  157. package/src/model/as-speech-model-v3.test.ts +356 -0
  158. package/src/model/as-speech-model-v3.ts +24 -0
  159. package/src/model/as-transcription-model-v3.test.ts +529 -0
  160. package/src/model/as-transcription-model-v3.ts +24 -0
  161. package/src/model/resolve-model.test.ts +244 -0
  162. package/src/model/resolve-model.ts +126 -0
  163. package/src/prompt/call-settings.ts +148 -0
  164. package/src/prompt/content-part.ts +209 -0
  165. package/src/prompt/convert-to-language-model-prompt.test.ts +2018 -0
  166. package/src/prompt/convert-to-language-model-prompt.ts +442 -0
  167. package/src/prompt/create-tool-model-output.test.ts +508 -0
  168. package/src/prompt/create-tool-model-output.ts +34 -0
  169. package/src/prompt/data-content.test.ts +15 -0
  170. package/src/prompt/data-content.ts +134 -0
  171. package/src/prompt/index.ts +27 -0
  172. package/src/prompt/invalid-data-content-error.ts +29 -0
  173. package/src/prompt/invalid-message-role-error.ts +27 -0
  174. package/src/prompt/message-conversion-error.ts +28 -0
  175. package/src/prompt/message.ts +68 -0
  176. package/src/prompt/prepare-call-settings.test.ts +159 -0
  177. package/src/prompt/prepare-call-settings.ts +108 -0
  178. package/src/prompt/prepare-tools-and-tool-choice.test.ts +461 -0
  179. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  180. package/src/prompt/prompt.ts +43 -0
  181. package/src/prompt/split-data-url.ts +17 -0
  182. package/src/prompt/standardize-prompt.test.ts +82 -0
  183. package/src/prompt/standardize-prompt.ts +99 -0
  184. package/src/prompt/wrap-gateway-error.ts +29 -0
  185. package/src/registry/custom-provider.test.ts +211 -0
  186. package/src/registry/custom-provider.ts +155 -0
  187. package/src/registry/index.ts +7 -0
  188. package/src/registry/no-such-provider-error.ts +41 -0
  189. package/src/registry/provider-registry.test.ts +691 -0
  190. package/src/registry/provider-registry.ts +328 -0
  191. package/src/rerank/index.ts +2 -0
  192. package/src/rerank/rerank-result.ts +70 -0
  193. package/src/rerank/rerank.test.ts +516 -0
  194. package/src/rerank/rerank.ts +237 -0
  195. package/src/telemetry/assemble-operation-name.ts +21 -0
  196. package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
  197. package/src/telemetry/get-tracer.ts +20 -0
  198. package/src/telemetry/noop-tracer.ts +69 -0
  199. package/src/telemetry/record-span.ts +63 -0
  200. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  201. package/src/telemetry/select-temetry-attributes.test.ts +114 -0
  202. package/src/telemetry/stringify-for-telemetry.test.ts +114 -0
  203. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  204. package/src/telemetry/telemetry-settings.ts +44 -0
  205. package/src/test/mock-embedding-model-v2.ts +35 -0
  206. package/src/test/mock-embedding-model-v3.ts +48 -0
  207. package/src/test/mock-image-model-v2.ts +28 -0
  208. package/src/test/mock-image-model-v3.ts +28 -0
  209. package/src/test/mock-language-model-v2.ts +72 -0
  210. package/src/test/mock-language-model-v3.ts +77 -0
  211. package/src/test/mock-provider-v2.ts +68 -0
  212. package/src/test/mock-provider-v3.ts +80 -0
  213. package/src/test/mock-reranking-model-v3.ts +25 -0
  214. package/src/test/mock-server-response.ts +69 -0
  215. package/src/test/mock-speech-model-v2.ts +24 -0
  216. package/src/test/mock-speech-model-v3.ts +24 -0
  217. package/src/test/mock-tracer.ts +156 -0
  218. package/src/test/mock-transcription-model-v2.ts +24 -0
  219. package/src/test/mock-transcription-model-v3.ts +24 -0
  220. package/src/test/mock-values.ts +4 -0
  221. package/src/test/not-implemented.ts +3 -0
  222. package/src/text-stream/create-text-stream-response.test.ts +38 -0
  223. package/src/text-stream/create-text-stream-response.ts +18 -0
  224. package/src/text-stream/index.ts +2 -0
  225. package/src/text-stream/pipe-text-stream-to-response.test.ts +38 -0
  226. package/src/text-stream/pipe-text-stream-to-response.ts +26 -0
  227. package/src/transcribe/index.ts +2 -0
  228. package/src/transcribe/transcribe-result.ts +60 -0
  229. package/src/transcribe/transcribe.test.ts +313 -0
  230. package/src/transcribe/transcribe.ts +173 -0
  231. package/src/types/embedding-model-middleware.ts +3 -0
  232. package/src/types/embedding-model.ts +18 -0
  233. package/src/types/image-model-middleware.ts +3 -0
  234. package/src/types/image-model-response-metadata.ts +16 -0
  235. package/src/types/image-model.ts +19 -0
  236. package/src/types/index.ts +29 -0
  237. package/src/types/json-value.ts +15 -0
  238. package/src/types/language-model-middleware.ts +3 -0
  239. package/src/types/language-model-request-metadata.ts +6 -0
  240. package/src/types/language-model-response-metadata.ts +21 -0
  241. package/src/types/language-model.ts +104 -0
  242. package/src/types/provider-metadata.ts +16 -0
  243. package/src/types/provider.ts +55 -0
  244. package/src/types/reranking-model.ts +6 -0
  245. package/src/types/speech-model-response-metadata.ts +21 -0
  246. package/src/types/speech-model.ts +6 -0
  247. package/src/types/transcription-model-response-metadata.ts +16 -0
  248. package/src/types/transcription-model.ts +9 -0
  249. package/src/types/usage.ts +200 -0
  250. package/src/types/warning.ts +7 -0
  251. package/src/ui/__snapshots__/append-response-messages.test.ts.snap +416 -0
  252. package/src/ui/__snapshots__/convert-to-model-messages.test.ts.snap +419 -0
  253. package/src/ui/__snapshots__/process-chat-text-response.test.ts.snap +142 -0
  254. package/src/ui/call-completion-api.ts +157 -0
  255. package/src/ui/chat-transport.ts +83 -0
  256. package/src/ui/chat.test-d.ts +233 -0
  257. package/src/ui/chat.test.ts +2695 -0
  258. package/src/ui/chat.ts +716 -0
  259. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  260. package/src/ui/convert-to-model-messages.test.ts +2775 -0
  261. package/src/ui/convert-to-model-messages.ts +373 -0
  262. package/src/ui/default-chat-transport.ts +36 -0
  263. package/src/ui/direct-chat-transport.test.ts +446 -0
  264. package/src/ui/direct-chat-transport.ts +118 -0
  265. package/src/ui/http-chat-transport.test.ts +185 -0
  266. package/src/ui/http-chat-transport.ts +292 -0
  267. package/src/ui/index.ts +71 -0
  268. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  269. package/src/ui/last-assistant-message-is-complete-with-tool-calls.test.ts +371 -0
  270. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  271. package/src/ui/process-text-stream.test.ts +38 -0
  272. package/src/ui/process-text-stream.ts +16 -0
  273. package/src/ui/process-ui-message-stream.test.ts +8052 -0
  274. package/src/ui/process-ui-message-stream.ts +713 -0
  275. package/src/ui/text-stream-chat-transport.ts +23 -0
  276. package/src/ui/transform-text-to-ui-message-stream.test.ts +124 -0
  277. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  278. package/src/ui/ui-messages.test.ts +48 -0
  279. package/src/ui/ui-messages.ts +534 -0
  280. package/src/ui/use-completion.ts +84 -0
  281. package/src/ui/validate-ui-messages.test.ts +1428 -0
  282. package/src/ui/validate-ui-messages.ts +476 -0
  283. package/src/ui-message-stream/create-ui-message-stream-response.test.ts +266 -0
  284. package/src/ui-message-stream/create-ui-message-stream-response.ts +32 -0
  285. package/src/ui-message-stream/create-ui-message-stream.test.ts +639 -0
  286. package/src/ui-message-stream/create-ui-message-stream.ts +124 -0
  287. package/src/ui-message-stream/get-response-ui-message-id.test.ts +55 -0
  288. package/src/ui-message-stream/get-response-ui-message-id.ts +24 -0
  289. package/src/ui-message-stream/handle-ui-message-stream-finish.test.ts +429 -0
  290. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +135 -0
  291. package/src/ui-message-stream/index.ts +13 -0
  292. package/src/ui-message-stream/json-to-sse-transform-stream.ts +12 -0
  293. package/src/ui-message-stream/pipe-ui-message-stream-to-response.test.ts +90 -0
  294. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +40 -0
  295. package/src/ui-message-stream/read-ui-message-stream.test.ts +122 -0
  296. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  297. package/src/ui-message-stream/ui-message-chunks.test-d.ts +18 -0
  298. package/src/ui-message-stream/ui-message-chunks.ts +344 -0
  299. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  300. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  301. package/src/ui-message-stream/ui-message-stream-response-init.ts +5 -0
  302. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  303. package/src/util/as-array.ts +3 -0
  304. package/src/util/async-iterable-stream.test.ts +241 -0
  305. package/src/util/async-iterable-stream.ts +94 -0
  306. package/src/util/consume-stream.ts +29 -0
  307. package/src/util/cosine-similarity.test.ts +57 -0
  308. package/src/util/cosine-similarity.ts +47 -0
  309. package/src/util/create-resolvable-promise.ts +30 -0
  310. package/src/util/create-stitchable-stream.test.ts +239 -0
  311. package/src/util/create-stitchable-stream.ts +112 -0
  312. package/src/util/data-url.ts +17 -0
  313. package/src/util/deep-partial.ts +84 -0
  314. package/src/util/detect-media-type.test.ts +670 -0
  315. package/src/util/detect-media-type.ts +184 -0
  316. package/src/util/download/download-function.ts +45 -0
  317. package/src/util/download/download.test.ts +69 -0
  318. package/src/util/download/download.ts +46 -0
  319. package/src/util/error-handler.ts +1 -0
  320. package/src/util/fix-json.test.ts +279 -0
  321. package/src/util/fix-json.ts +401 -0
  322. package/src/util/get-potential-start-index.test.ts +34 -0
  323. package/src/util/get-potential-start-index.ts +30 -0
  324. package/src/util/index.ts +11 -0
  325. package/src/util/is-deep-equal-data.test.ts +119 -0
  326. package/src/util/is-deep-equal-data.ts +48 -0
  327. package/src/util/is-non-empty-object.ts +5 -0
  328. package/src/util/job.ts +1 -0
  329. package/src/util/log-v2-compatibility-warning.ts +21 -0
  330. package/src/util/merge-abort-signals.test.ts +155 -0
  331. package/src/util/merge-abort-signals.ts +43 -0
  332. package/src/util/merge-objects.test.ts +118 -0
  333. package/src/util/merge-objects.ts +79 -0
  334. package/src/util/now.ts +4 -0
  335. package/src/util/parse-partial-json.test.ts +80 -0
  336. package/src/util/parse-partial-json.ts +30 -0
  337. package/src/util/prepare-headers.test.ts +51 -0
  338. package/src/util/prepare-headers.ts +14 -0
  339. package/src/util/prepare-retries.test.ts +10 -0
  340. package/src/util/prepare-retries.ts +47 -0
  341. package/src/util/retry-error.ts +41 -0
  342. package/src/util/retry-with-exponential-backoff.test.ts +446 -0
  343. package/src/util/retry-with-exponential-backoff.ts +154 -0
  344. package/src/util/serial-job-executor.test.ts +162 -0
  345. package/src/util/serial-job-executor.ts +36 -0
  346. package/src/util/simulate-readable-stream.test.ts +98 -0
  347. package/src/util/simulate-readable-stream.ts +39 -0
  348. package/src/util/split-array.test.ts +60 -0
  349. package/src/util/split-array.ts +20 -0
  350. package/src/util/value-of.ts +65 -0
  351. package/src/util/write-to-server-response.test.ts +266 -0
  352. package/src/util/write-to-server-response.ts +49 -0
  353. package/src/version.ts +5 -0
@@ -0,0 +1,114 @@
1
+ import { stringifyForTelemetry } from './stringify-for-telemetry';
2
+ import { LanguageModelV3Prompt } from '@ai-sdk/provider';
3
+ import { describe, it, expect } from 'vitest';
4
+
5
+ describe('stringifyForTelemetry', () => {
6
+ it('should stringify a prompt with text parts', () => {
7
+ const prompt: LanguageModelV3Prompt = [
8
+ { role: 'system', content: 'You are a helpful assistant.' },
9
+ {
10
+ role: 'user',
11
+ content: [{ type: 'text', text: 'Hello!' }],
12
+ },
13
+ ];
14
+
15
+ const result = stringifyForTelemetry(prompt);
16
+
17
+ expect(result).toMatchInlineSnapshot(
18
+ `"[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":[{"type":"text","text":"Hello!"}]}]"`,
19
+ );
20
+ });
21
+
22
+ it('should convert Uint8Array images to base64 strings', () => {
23
+ const result = stringifyForTelemetry([
24
+ {
25
+ role: 'user',
26
+ content: [
27
+ {
28
+ type: 'file',
29
+ data: new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0xff, 0xff]),
30
+ mediaType: 'image/png',
31
+ },
32
+ ],
33
+ },
34
+ ]);
35
+
36
+ expect(result).toMatchInlineSnapshot(
37
+ `"[{"role":"user","content":[{"type":"file","data":"iVBOR///","mediaType":"image/png"}]}]"`,
38
+ );
39
+ });
40
+
41
+ it('should preserve the file name and provider options', () => {
42
+ const result = stringifyForTelemetry([
43
+ {
44
+ role: 'user',
45
+ content: [
46
+ {
47
+ type: 'file',
48
+ filename: 'image.png',
49
+ data: new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0xff, 0xff]),
50
+ mediaType: 'image/png',
51
+ providerOptions: {
52
+ anthropic: {
53
+ key: 'value',
54
+ },
55
+ },
56
+ },
57
+ ],
58
+ },
59
+ ]);
60
+
61
+ expect(result).toMatchInlineSnapshot(
62
+ `"[{"role":"user","content":[{"type":"file","filename":"image.png","data":"iVBOR///","mediaType":"image/png","providerOptions":{"anthropic":{"key":"value"}}}]}]"`,
63
+ );
64
+ });
65
+
66
+ it('should keep URL images as is', () => {
67
+ const result = stringifyForTelemetry([
68
+ {
69
+ role: 'user',
70
+ content: [
71
+ { type: 'text', text: 'Check this image:' },
72
+ {
73
+ type: 'file',
74
+ data: new URL('https://example.com/image.jpg'),
75
+ mediaType: 'image/jpeg',
76
+ },
77
+ ],
78
+ },
79
+ ]);
80
+
81
+ expect(result).toMatchInlineSnapshot(
82
+ `"[{"role":"user","content":[{"type":"text","text":"Check this image:"},{"type":"file","data":"https://example.com/image.jpg","mediaType":"image/jpeg"}]}]"`,
83
+ );
84
+ });
85
+
86
+ it('should handle a mixed prompt with various content types', () => {
87
+ const result = stringifyForTelemetry([
88
+ { role: 'system', content: 'You are a helpful assistant.' },
89
+ {
90
+ role: 'user',
91
+ content: [
92
+ {
93
+ type: 'file',
94
+ data: new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0xff, 0xff]),
95
+ mediaType: 'image/png',
96
+ },
97
+ {
98
+ type: 'file',
99
+ data: new URL('https://example.com/image.jpg'),
100
+ mediaType: 'image/jpeg',
101
+ },
102
+ ],
103
+ },
104
+ {
105
+ role: 'assistant',
106
+ content: [{ type: 'text', text: 'I see the images!' }],
107
+ },
108
+ ]);
109
+
110
+ expect(result).toMatchInlineSnapshot(
111
+ `"[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":[{"type":"file","data":"iVBOR///","mediaType":"image/png"},{"type":"file","data":"https://example.com/image.jpg","mediaType":"image/jpeg"}]},{"role":"assistant","content":[{"type":"text","text":"I see the images!"}]}]"`,
112
+ );
113
+ });
114
+ });
@@ -0,0 +1,33 @@
1
+ import {
2
+ LanguageModelV3Message,
3
+ LanguageModelV3Prompt,
4
+ } from '@ai-sdk/provider';
5
+ import { convertDataContentToBase64String } from '../prompt/data-content';
6
+
7
+ /**
8
+ * Helper utility to serialize prompt content for OpenTelemetry tracing.
9
+ * It is initially created because normalized LanguageModelV1Prompt carries
10
+ * images as Uint8Arrays, on which JSON.stringify acts weirdly, converting
11
+ * them to objects with stringified indices as keys, e.g. {"0": 42, "1": 69 }.
12
+ */
13
+ export function stringifyForTelemetry(prompt: LanguageModelV3Prompt): string {
14
+ return JSON.stringify(
15
+ prompt.map((message: LanguageModelV3Message) => ({
16
+ ...message,
17
+ content:
18
+ typeof message.content === 'string'
19
+ ? message.content
20
+ : message.content.map(part =>
21
+ part.type === 'file'
22
+ ? {
23
+ ...part,
24
+ data:
25
+ part.data instanceof Uint8Array
26
+ ? convertDataContentToBase64String(part.data)
27
+ : part.data,
28
+ }
29
+ : part,
30
+ ),
31
+ })),
32
+ );
33
+ }
@@ -0,0 +1,44 @@
1
+ import { AttributeValue, Tracer } from '@opentelemetry/api';
2
+
3
+ /**
4
+ * Telemetry configuration.
5
+ */
6
+ // This is meant to be both flexible for custom app requirements (metadata)
7
+ // and extensible for standardization (example: functionId, more to come).
8
+ export type TelemetrySettings = {
9
+ /**
10
+ * Enable or disable telemetry. Disabled by default while experimental.
11
+ */
12
+ isEnabled?: boolean;
13
+
14
+ /**
15
+ * Enable or disable input recording. Enabled by default.
16
+ *
17
+ * You might want to disable input recording to avoid recording sensitive
18
+ * information, to reduce data transfers, or to increase performance.
19
+ */
20
+ recordInputs?: boolean;
21
+
22
+ /**
23
+ * Enable or disable output recording. Enabled by default.
24
+ *
25
+ * You might want to disable output recording to avoid recording sensitive
26
+ * information, to reduce data transfers, or to increase performance.
27
+ */
28
+ recordOutputs?: boolean;
29
+
30
+ /**
31
+ * Identifier for this function. Used to group telemetry data by function.
32
+ */
33
+ functionId?: string;
34
+
35
+ /**
36
+ * Additional information to include in the telemetry data.
37
+ */
38
+ metadata?: Record<string, AttributeValue>;
39
+
40
+ /**
41
+ * A custom tracer to use for the telemetry data.
42
+ */
43
+ tracer?: Tracer;
44
+ };
@@ -0,0 +1,35 @@
1
+ import { EmbeddingModelV2 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockEmbeddingModelV2<VALUE> implements EmbeddingModelV2<VALUE> {
5
+ readonly specificationVersion = 'v2';
6
+
7
+ readonly provider: EmbeddingModelV2<VALUE>['provider'];
8
+ readonly modelId: EmbeddingModelV2<VALUE>['modelId'];
9
+ readonly maxEmbeddingsPerCall: EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall'];
10
+ readonly supportsParallelCalls: EmbeddingModelV2<VALUE>['supportsParallelCalls'];
11
+
12
+ doEmbed: EmbeddingModelV2<VALUE>['doEmbed'];
13
+
14
+ constructor({
15
+ provider = 'mock-provider',
16
+ modelId = 'mock-model-id',
17
+ maxEmbeddingsPerCall = 1,
18
+ supportsParallelCalls = false,
19
+ doEmbed = notImplemented,
20
+ }: {
21
+ provider?: EmbeddingModelV2<VALUE>['provider'];
22
+ modelId?: EmbeddingModelV2<VALUE>['modelId'];
23
+ maxEmbeddingsPerCall?:
24
+ | EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall']
25
+ | null;
26
+ supportsParallelCalls?: EmbeddingModelV2<VALUE>['supportsParallelCalls'];
27
+ doEmbed?: EmbeddingModelV2<VALUE>['doEmbed'];
28
+ } = {}) {
29
+ this.provider = provider;
30
+ this.modelId = modelId;
31
+ this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;
32
+ this.supportsParallelCalls = supportsParallelCalls;
33
+ this.doEmbed = doEmbed;
34
+ }
35
+ }
@@ -0,0 +1,48 @@
1
+ import { EmbeddingModelV3 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockEmbeddingModelV3 implements EmbeddingModelV3 {
5
+ readonly specificationVersion = 'v3';
6
+
7
+ readonly provider: EmbeddingModelV3['provider'];
8
+ readonly modelId: EmbeddingModelV3['modelId'];
9
+ readonly maxEmbeddingsPerCall: EmbeddingModelV3['maxEmbeddingsPerCall'];
10
+ readonly supportsParallelCalls: EmbeddingModelV3['supportsParallelCalls'];
11
+
12
+ doEmbed: EmbeddingModelV3['doEmbed'];
13
+
14
+ doEmbedCalls: Parameters<EmbeddingModelV3['doEmbed']>[0][] = [];
15
+
16
+ constructor({
17
+ provider = 'mock-provider',
18
+ modelId = 'mock-model-id',
19
+ maxEmbeddingsPerCall = 1,
20
+ supportsParallelCalls = false,
21
+ doEmbed = notImplemented,
22
+ }: {
23
+ provider?: EmbeddingModelV3['provider'];
24
+ modelId?: EmbeddingModelV3['modelId'];
25
+ maxEmbeddingsPerCall?: EmbeddingModelV3['maxEmbeddingsPerCall'] | null;
26
+ supportsParallelCalls?: EmbeddingModelV3['supportsParallelCalls'];
27
+ doEmbed?:
28
+ | EmbeddingModelV3['doEmbed']
29
+ | Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>
30
+ | Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>[];
31
+ } = {}) {
32
+ this.provider = provider;
33
+ this.modelId = modelId;
34
+ this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;
35
+ this.supportsParallelCalls = supportsParallelCalls;
36
+ this.doEmbed = async options => {
37
+ this.doEmbedCalls.push(options);
38
+
39
+ if (typeof doEmbed === 'function') {
40
+ return doEmbed(options);
41
+ } else if (Array.isArray(doEmbed)) {
42
+ return doEmbed[this.doEmbedCalls.length];
43
+ } else {
44
+ return doEmbed;
45
+ }
46
+ };
47
+ }
48
+ }
@@ -0,0 +1,28 @@
1
+ import { ImageModelV2 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockImageModelV2 implements ImageModelV2 {
5
+ readonly specificationVersion = 'v2';
6
+ readonly provider: ImageModelV2['provider'];
7
+ readonly modelId: ImageModelV2['modelId'];
8
+ readonly maxImagesPerCall: ImageModelV2['maxImagesPerCall'];
9
+
10
+ doGenerate: ImageModelV2['doGenerate'];
11
+
12
+ constructor({
13
+ provider = 'mock-provider',
14
+ modelId = 'mock-model-id',
15
+ maxImagesPerCall = 1,
16
+ doGenerate = notImplemented,
17
+ }: {
18
+ provider?: ImageModelV2['provider'];
19
+ modelId?: ImageModelV2['modelId'];
20
+ maxImagesPerCall?: ImageModelV2['maxImagesPerCall'];
21
+ doGenerate?: ImageModelV2['doGenerate'];
22
+ } = {}) {
23
+ this.provider = provider;
24
+ this.modelId = modelId;
25
+ this.maxImagesPerCall = maxImagesPerCall;
26
+ this.doGenerate = doGenerate;
27
+ }
28
+ }
@@ -0,0 +1,28 @@
1
+ import { ImageModelV3 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockImageModelV3 implements ImageModelV3 {
5
+ readonly specificationVersion = 'v3';
6
+ readonly provider: ImageModelV3['provider'];
7
+ readonly modelId: ImageModelV3['modelId'];
8
+ readonly maxImagesPerCall: ImageModelV3['maxImagesPerCall'];
9
+
10
+ doGenerate: ImageModelV3['doGenerate'];
11
+
12
+ constructor({
13
+ provider = 'mock-provider',
14
+ modelId = 'mock-model-id',
15
+ maxImagesPerCall = 1,
16
+ doGenerate = notImplemented,
17
+ }: {
18
+ provider?: ImageModelV3['provider'];
19
+ modelId?: ImageModelV3['modelId'];
20
+ maxImagesPerCall?: ImageModelV3['maxImagesPerCall'];
21
+ doGenerate?: ImageModelV3['doGenerate'];
22
+ } = {}) {
23
+ this.provider = provider;
24
+ this.modelId = modelId;
25
+ this.maxImagesPerCall = maxImagesPerCall;
26
+ this.doGenerate = doGenerate;
27
+ }
28
+ }
@@ -0,0 +1,72 @@
1
+ import { LanguageModelV2 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockLanguageModelV2 implements LanguageModelV2 {
5
+ readonly specificationVersion = 'v2';
6
+
7
+ private _supportedUrls: () => LanguageModelV2['supportedUrls'];
8
+
9
+ readonly provider: LanguageModelV2['provider'];
10
+ readonly modelId: LanguageModelV2['modelId'];
11
+
12
+ doGenerate: LanguageModelV2['doGenerate'];
13
+ doStream: LanguageModelV2['doStream'];
14
+
15
+ doGenerateCalls: Parameters<LanguageModelV2['doGenerate']>[0][] = [];
16
+ doStreamCalls: Parameters<LanguageModelV2['doStream']>[0][] = [];
17
+
18
+ constructor({
19
+ provider = 'mock-provider',
20
+ modelId = 'mock-model-id',
21
+ supportedUrls = {},
22
+ doGenerate = notImplemented,
23
+ doStream = notImplemented,
24
+ }: {
25
+ provider?: LanguageModelV2['provider'];
26
+ modelId?: LanguageModelV2['modelId'];
27
+ supportedUrls?:
28
+ | LanguageModelV2['supportedUrls']
29
+ | (() => LanguageModelV2['supportedUrls']);
30
+ doGenerate?:
31
+ | LanguageModelV2['doGenerate']
32
+ | Awaited<ReturnType<LanguageModelV2['doGenerate']>>
33
+ | Awaited<ReturnType<LanguageModelV2['doGenerate']>>[];
34
+ doStream?:
35
+ | LanguageModelV2['doStream']
36
+ | Awaited<ReturnType<LanguageModelV2['doStream']>>
37
+ | Awaited<ReturnType<LanguageModelV2['doStream']>>[];
38
+ } = {}) {
39
+ this.provider = provider;
40
+ this.modelId = modelId;
41
+ this.doGenerate = async options => {
42
+ this.doGenerateCalls.push(options);
43
+
44
+ if (typeof doGenerate === 'function') {
45
+ return doGenerate(options);
46
+ } else if (Array.isArray(doGenerate)) {
47
+ return doGenerate[this.doGenerateCalls.length];
48
+ } else {
49
+ return doGenerate;
50
+ }
51
+ };
52
+ this.doStream = async options => {
53
+ this.doStreamCalls.push(options);
54
+
55
+ if (typeof doStream === 'function') {
56
+ return doStream(options);
57
+ } else if (Array.isArray(doStream)) {
58
+ return doStream[this.doStreamCalls.length];
59
+ } else {
60
+ return doStream;
61
+ }
62
+ };
63
+ this._supportedUrls =
64
+ typeof supportedUrls === 'function'
65
+ ? supportedUrls
66
+ : async () => supportedUrls;
67
+ }
68
+
69
+ get supportedUrls() {
70
+ return this._supportedUrls();
71
+ }
72
+ }
@@ -0,0 +1,77 @@
1
+ import {
2
+ LanguageModelV3,
3
+ LanguageModelV3CallOptions,
4
+ LanguageModelV3GenerateResult,
5
+ LanguageModelV3StreamResult,
6
+ } from '@ai-sdk/provider';
7
+ import { notImplemented } from './not-implemented';
8
+
9
+ export class MockLanguageModelV3 implements LanguageModelV3 {
10
+ readonly specificationVersion = 'v3';
11
+
12
+ private _supportedUrls: () => LanguageModelV3['supportedUrls'];
13
+
14
+ readonly provider: LanguageModelV3['provider'];
15
+ readonly modelId: LanguageModelV3['modelId'];
16
+
17
+ doGenerate: LanguageModelV3['doGenerate'];
18
+ doStream: LanguageModelV3['doStream'];
19
+
20
+ doGenerateCalls: LanguageModelV3CallOptions[] = [];
21
+ doStreamCalls: LanguageModelV3CallOptions[] = [];
22
+
23
+ constructor({
24
+ provider = 'mock-provider',
25
+ modelId = 'mock-model-id',
26
+ supportedUrls = {},
27
+ doGenerate = notImplemented,
28
+ doStream = notImplemented,
29
+ }: {
30
+ provider?: LanguageModelV3['provider'];
31
+ modelId?: LanguageModelV3['modelId'];
32
+ supportedUrls?:
33
+ | LanguageModelV3['supportedUrls']
34
+ | (() => LanguageModelV3['supportedUrls']);
35
+ doGenerate?:
36
+ | LanguageModelV3['doGenerate']
37
+ | LanguageModelV3GenerateResult
38
+ | LanguageModelV3GenerateResult[];
39
+ doStream?:
40
+ | LanguageModelV3['doStream']
41
+ | LanguageModelV3StreamResult
42
+ | LanguageModelV3StreamResult[];
43
+ } = {}) {
44
+ this.provider = provider;
45
+ this.modelId = modelId;
46
+ this.doGenerate = async options => {
47
+ this.doGenerateCalls.push(options);
48
+
49
+ if (typeof doGenerate === 'function') {
50
+ return doGenerate(options);
51
+ } else if (Array.isArray(doGenerate)) {
52
+ return doGenerate[this.doGenerateCalls.length];
53
+ } else {
54
+ return doGenerate;
55
+ }
56
+ };
57
+ this.doStream = async options => {
58
+ this.doStreamCalls.push(options);
59
+
60
+ if (typeof doStream === 'function') {
61
+ return doStream(options);
62
+ } else if (Array.isArray(doStream)) {
63
+ return doStream[this.doStreamCalls.length];
64
+ } else {
65
+ return doStream;
66
+ }
67
+ };
68
+ this._supportedUrls =
69
+ typeof supportedUrls === 'function'
70
+ ? supportedUrls
71
+ : async () => supportedUrls;
72
+ }
73
+
74
+ get supportedUrls() {
75
+ return this._supportedUrls();
76
+ }
77
+ }
@@ -0,0 +1,68 @@
1
+ import {
2
+ EmbeddingModelV2,
3
+ ImageModelV2,
4
+ LanguageModelV2,
5
+ NoSuchModelError,
6
+ ProviderV2,
7
+ SpeechModelV2,
8
+ TranscriptionModelV2,
9
+ } from '@ai-sdk/provider';
10
+
11
+ export class MockProviderV2 implements ProviderV2 {
12
+ languageModel: ProviderV2['languageModel'];
13
+ textEmbeddingModel: ProviderV2['textEmbeddingModel'];
14
+ imageModel: ProviderV2['imageModel'];
15
+ transcriptionModel: ProviderV2['transcriptionModel'];
16
+ speechModel: ProviderV2['speechModel'];
17
+
18
+ constructor({
19
+ languageModels,
20
+ embeddingModels,
21
+ imageModels,
22
+ transcriptionModels,
23
+ speechModels,
24
+ }: {
25
+ languageModels?: Record<string, LanguageModelV2>;
26
+ embeddingModels?: Record<string, EmbeddingModelV2<string>>;
27
+ imageModels?: Record<string, ImageModelV2>;
28
+ transcriptionModels?: Record<string, TranscriptionModelV2>;
29
+ speechModels?: Record<string, SpeechModelV2>;
30
+ } = {}) {
31
+ this.languageModel = (modelId: string) => {
32
+ if (!languageModels?.[modelId]) {
33
+ throw new NoSuchModelError({ modelId, modelType: 'languageModel' });
34
+ }
35
+ return languageModels[modelId];
36
+ };
37
+ this.textEmbeddingModel = (modelId: string) => {
38
+ if (!embeddingModels?.[modelId]) {
39
+ throw new NoSuchModelError({
40
+ modelId,
41
+ modelType: 'textEmbeddingModel' as any, // backwards compatibility
42
+ });
43
+ }
44
+ return embeddingModels[modelId];
45
+ };
46
+ this.imageModel = (modelId: string) => {
47
+ if (!imageModels?.[modelId]) {
48
+ throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
49
+ }
50
+ return imageModels[modelId];
51
+ };
52
+ this.transcriptionModel = (modelId: string) => {
53
+ if (!transcriptionModels?.[modelId]) {
54
+ throw new NoSuchModelError({
55
+ modelId,
56
+ modelType: 'transcriptionModel',
57
+ });
58
+ }
59
+ return transcriptionModels[modelId];
60
+ };
61
+ this.speechModel = (modelId: string) => {
62
+ if (!speechModels?.[modelId]) {
63
+ throw new NoSuchModelError({ modelId, modelType: 'speechModel' });
64
+ }
65
+ return speechModels[modelId];
66
+ };
67
+ }
68
+ }
@@ -0,0 +1,80 @@
1
+ import {
2
+ EmbeddingModelV3,
3
+ ImageModelV3,
4
+ LanguageModelV3,
5
+ NoSuchModelError,
6
+ ProviderV3,
7
+ SpeechModelV3,
8
+ TranscriptionModelV3,
9
+ RerankingModelV3,
10
+ } from '@ai-sdk/provider';
11
+
12
+ export class MockProviderV3 implements ProviderV3 {
13
+ readonly specificationVersion = 'v3' as const;
14
+
15
+ languageModel: ProviderV3['languageModel'];
16
+ embeddingModel: ProviderV3['embeddingModel'];
17
+ imageModel: ProviderV3['imageModel'];
18
+ transcriptionModel: ProviderV3['transcriptionModel'];
19
+ speechModel: ProviderV3['speechModel'];
20
+ rerankingModel: ProviderV3['rerankingModel'];
21
+
22
+ constructor({
23
+ languageModels,
24
+ embeddingModels,
25
+ imageModels,
26
+ transcriptionModels,
27
+ speechModels,
28
+ rerankingModels,
29
+ }: {
30
+ languageModels?: Record<string, LanguageModelV3>;
31
+ embeddingModels?: Record<string, EmbeddingModelV3>;
32
+ imageModels?: Record<string, ImageModelV3>;
33
+ transcriptionModels?: Record<string, TranscriptionModelV3>;
34
+ speechModels?: Record<string, SpeechModelV3>;
35
+ rerankingModels?: Record<string, RerankingModelV3>;
36
+ } = {}) {
37
+ this.languageModel = (modelId: string) => {
38
+ if (!languageModels?.[modelId]) {
39
+ throw new NoSuchModelError({ modelId, modelType: 'languageModel' });
40
+ }
41
+ return languageModels[modelId];
42
+ };
43
+ this.embeddingModel = (modelId: string) => {
44
+ if (!embeddingModels?.[modelId]) {
45
+ throw new NoSuchModelError({
46
+ modelId,
47
+ modelType: 'embeddingModel',
48
+ });
49
+ }
50
+ return embeddingModels[modelId];
51
+ };
52
+ this.imageModel = (modelId: string) => {
53
+ if (!imageModels?.[modelId]) {
54
+ throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
55
+ }
56
+ return imageModels[modelId];
57
+ };
58
+ this.transcriptionModel = (modelId: string) => {
59
+ if (!transcriptionModels?.[modelId]) {
60
+ throw new NoSuchModelError({
61
+ modelId,
62
+ modelType: 'transcriptionModel',
63
+ });
64
+ }
65
+ return transcriptionModels[modelId];
66
+ };
67
+ this.speechModel = (modelId: string): SpeechModelV3 => {
68
+ if (!speechModels?.[modelId]) {
69
+ throw new NoSuchModelError({ modelId, modelType: 'speechModel' });
70
+ }
71
+ return speechModels[modelId];
72
+ };
73
+ this.rerankingModel = (modelId: string) => {
74
+ if (!rerankingModels?.[modelId]) {
75
+ throw new NoSuchModelError({ modelId, modelType: 'rerankingModel' });
76
+ }
77
+ return rerankingModels[modelId];
78
+ };
79
+ }
80
+ }
@@ -0,0 +1,25 @@
1
+ import { RerankingModelV3 } from '@ai-sdk/provider';
2
+ import { notImplemented } from './not-implemented';
3
+
4
+ export class MockRerankingModelV3 implements RerankingModelV3 {
5
+ readonly specificationVersion = 'v3';
6
+
7
+ readonly provider: RerankingModelV3['provider'];
8
+ readonly modelId: RerankingModelV3['modelId'];
9
+
10
+ doRerank: RerankingModelV3['doRerank'];
11
+
12
+ constructor({
13
+ provider = 'mock-provider',
14
+ modelId = 'mock-model-id',
15
+ doRerank = notImplemented,
16
+ }: {
17
+ provider?: RerankingModelV3['provider'];
18
+ modelId?: RerankingModelV3['modelId'];
19
+ doRerank?: RerankingModelV3['doRerank'];
20
+ } = {}) {
21
+ this.provider = provider;
22
+ this.modelId = modelId;
23
+ this.doRerank = doRerank;
24
+ }
25
+ }