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,1255 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`streamText > errors > should swallow error to prevent server crash 1`] = `[]`;
4
+
5
+ exports[`streamText > options.stopWhen > 2 steps: initial, tool-result > should record telemetry data for each step 1`] = `
6
+ [
7
+ {
8
+ "attributes": {
9
+ "ai.model.id": "mock-model-id",
10
+ "ai.model.provider": "mock-provider",
11
+ "ai.operationId": "ai.streamText",
12
+ "ai.prompt": "{"prompt":"test-input"}",
13
+ "ai.response.finishReason": "stop",
14
+ "ai.response.text": "Hello, world!",
15
+ "ai.settings.maxRetries": 2,
16
+ "ai.usage.cachedInputTokens": 0,
17
+ "ai.usage.inputTokens": 6,
18
+ "ai.usage.outputTokens": 20,
19
+ "ai.usage.reasoningTokens": 10,
20
+ "ai.usage.totalTokens": 26,
21
+ "operation.name": "ai.streamText",
22
+ },
23
+ "events": [],
24
+ "name": "ai.streamText",
25
+ },
26
+ {
27
+ "attributes": {
28
+ "ai.model.id": "mock-model-id",
29
+ "ai.model.provider": "mock-provider",
30
+ "ai.operationId": "ai.streamText.doStream",
31
+ "ai.prompt.messages": "[{"role":"user","content":[{"type":"text","text":"test-input"}]}]",
32
+ "ai.prompt.toolChoice": "{"type":"auto"}",
33
+ "ai.prompt.tools": [
34
+ "{"type":"function","name":"tool1","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":false}}",
35
+ ],
36
+ "ai.response.avgOutputTokensPerSecond": 20,
37
+ "ai.response.finishReason": "tool-calls",
38
+ "ai.response.id": "id-0",
39
+ "ai.response.model": "mock-model-id",
40
+ "ai.response.msToFinish": 500,
41
+ "ai.response.msToFirstChunk": 100,
42
+ "ai.response.text": "",
43
+ "ai.response.timestamp": "1970-01-01T00:00:00.000Z",
44
+ "ai.response.toolCalls": "[{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"value"}}]",
45
+ "ai.settings.maxRetries": 2,
46
+ "ai.usage.inputTokens": 3,
47
+ "ai.usage.outputTokens": 10,
48
+ "ai.usage.totalTokens": 13,
49
+ "gen_ai.request.model": "mock-model-id",
50
+ "gen_ai.response.finish_reasons": [
51
+ "tool-calls",
52
+ ],
53
+ "gen_ai.response.id": "id-0",
54
+ "gen_ai.response.model": "mock-model-id",
55
+ "gen_ai.system": "mock-provider",
56
+ "gen_ai.usage.input_tokens": 3,
57
+ "gen_ai.usage.output_tokens": 10,
58
+ "operation.name": "ai.streamText.doStream",
59
+ },
60
+ "events": [
61
+ {
62
+ "attributes": {
63
+ "ai.response.msToFirstChunk": 100,
64
+ },
65
+ "name": "ai.stream.firstChunk",
66
+ },
67
+ {
68
+ "attributes": undefined,
69
+ "name": "ai.stream.finish",
70
+ },
71
+ ],
72
+ "name": "ai.streamText.doStream",
73
+ },
74
+ {
75
+ "attributes": {
76
+ "ai.operationId": "ai.toolCall",
77
+ "ai.toolCall.args": "{"value":"value"}",
78
+ "ai.toolCall.id": "call-1",
79
+ "ai.toolCall.name": "tool1",
80
+ "ai.toolCall.result": ""result1"",
81
+ "operation.name": "ai.toolCall",
82
+ },
83
+ "events": [],
84
+ "name": "ai.toolCall",
85
+ },
86
+ {
87
+ "attributes": {
88
+ "ai.model.id": "mock-model-id",
89
+ "ai.model.provider": "mock-provider",
90
+ "ai.operationId": "ai.streamText.doStream",
91
+ "ai.prompt.messages": "[{"role":"user","content":[{"type":"text","text":"test-input"}]},{"role":"assistant","content":[{"type":"reasoning","text":"thinking"},{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"value"}}]},{"role":"tool","content":[{"type":"tool-result","toolCallId":"call-1","toolName":"tool1","output":{"type":"text","value":"result1"}}]}]",
92
+ "ai.prompt.toolChoice": "{"type":"auto"}",
93
+ "ai.prompt.tools": [
94
+ "{"type":"function","name":"tool1","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":false}}",
95
+ ],
96
+ "ai.response.avgOutputTokensPerSecond": 25,
97
+ "ai.response.finishReason": "stop",
98
+ "ai.response.id": "id-1",
99
+ "ai.response.model": "mock-model-id",
100
+ "ai.response.msToFinish": 400,
101
+ "ai.response.msToFirstChunk": 400,
102
+ "ai.response.text": "Hello, world!",
103
+ "ai.response.timestamp": "1970-01-01T00:00:01.000Z",
104
+ "ai.settings.maxRetries": 2,
105
+ "ai.usage.cachedInputTokens": 0,
106
+ "ai.usage.inputTokens": 3,
107
+ "ai.usage.outputTokens": 10,
108
+ "ai.usage.reasoningTokens": 10,
109
+ "ai.usage.totalTokens": 13,
110
+ "gen_ai.request.model": "mock-model-id",
111
+ "gen_ai.response.finish_reasons": [
112
+ "stop",
113
+ ],
114
+ "gen_ai.response.id": "id-1",
115
+ "gen_ai.response.model": "mock-model-id",
116
+ "gen_ai.system": "mock-provider",
117
+ "gen_ai.usage.input_tokens": 3,
118
+ "gen_ai.usage.output_tokens": 10,
119
+ "operation.name": "ai.streamText.doStream",
120
+ },
121
+ "events": [
122
+ {
123
+ "attributes": {
124
+ "ai.response.msToFirstChunk": 400,
125
+ },
126
+ "name": "ai.stream.firstChunk",
127
+ },
128
+ {
129
+ "attributes": undefined,
130
+ "name": "ai.stream.finish",
131
+ },
132
+ ],
133
+ "name": "ai.streamText.doStream",
134
+ },
135
+ ]
136
+ `;
137
+
138
+ exports[`streamText > options.transform > with base transformation > telemetry should record transformed data when enabled 1`] = `
139
+ [
140
+ {
141
+ "attributes": {
142
+ "ai.model.id": "mock-model-id",
143
+ "ai.model.provider": "mock-provider",
144
+ "ai.operationId": "ai.streamText",
145
+ "ai.prompt": "{"prompt":"test-input"}",
146
+ "ai.response.finishReason": "stop",
147
+ "ai.response.providerMetadata": "{"testProvider":{"testKey":"TEST VALUE"}}",
148
+ "ai.response.text": "HELLO, WORLD!",
149
+ "ai.response.toolCalls": "[{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"VALUE"}}]",
150
+ "ai.settings.maxRetries": 2,
151
+ "ai.usage.inputTokens": 3,
152
+ "ai.usage.outputTokens": 10,
153
+ "ai.usage.totalTokens": 13,
154
+ "operation.name": "ai.streamText",
155
+ },
156
+ "events": [],
157
+ "name": "ai.streamText",
158
+ },
159
+ {
160
+ "attributes": {
161
+ "ai.model.id": "mock-model-id",
162
+ "ai.model.provider": "mock-provider",
163
+ "ai.operationId": "ai.streamText.doStream",
164
+ "ai.prompt.messages": "[{"role":"user","content":[{"type":"text","text":"test-input"}]}]",
165
+ "ai.prompt.toolChoice": "{"type":"auto"}",
166
+ "ai.prompt.tools": [
167
+ "{"type":"function","name":"tool1","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":false}}",
168
+ ],
169
+ "ai.response.avgOutputTokensPerSecond": 20,
170
+ "ai.response.finishReason": "stop",
171
+ "ai.response.id": "id-0",
172
+ "ai.response.model": "mock-model-id",
173
+ "ai.response.msToFinish": 500,
174
+ "ai.response.msToFirstChunk": 100,
175
+ "ai.response.providerMetadata": "{"testProvider":{"testKey":"testValue"}}",
176
+ "ai.response.text": "Hello, world!",
177
+ "ai.response.timestamp": "1970-01-01T00:00:00.000Z",
178
+ "ai.response.toolCalls": "[{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"VALUE"}}]",
179
+ "ai.settings.maxRetries": 2,
180
+ "ai.usage.inputTokens": 3,
181
+ "ai.usage.outputTokens": 10,
182
+ "ai.usage.totalTokens": 13,
183
+ "gen_ai.request.model": "mock-model-id",
184
+ "gen_ai.response.finish_reasons": [
185
+ "stop",
186
+ ],
187
+ "gen_ai.response.id": "id-0",
188
+ "gen_ai.response.model": "mock-model-id",
189
+ "gen_ai.system": "mock-provider",
190
+ "gen_ai.usage.input_tokens": 3,
191
+ "gen_ai.usage.output_tokens": 10,
192
+ "operation.name": "ai.streamText.doStream",
193
+ },
194
+ "events": [
195
+ {
196
+ "attributes": {
197
+ "ai.response.msToFirstChunk": 100,
198
+ },
199
+ "name": "ai.stream.firstChunk",
200
+ },
201
+ {
202
+ "attributes": undefined,
203
+ "name": "ai.stream.finish",
204
+ },
205
+ ],
206
+ "name": "ai.streamText.doStream",
207
+ },
208
+ {
209
+ "attributes": {
210
+ "ai.operationId": "ai.toolCall",
211
+ "ai.toolCall.args": "{"value":"value"}",
212
+ "ai.toolCall.id": "call-1",
213
+ "ai.toolCall.name": "tool1",
214
+ "ai.toolCall.result": ""value-result"",
215
+ "operation.name": "ai.toolCall",
216
+ },
217
+ "events": [],
218
+ "name": "ai.toolCall",
219
+ },
220
+ ]
221
+ `;
222
+
223
+ exports[`streamText > programmatic tool calling > 5 steps: code_execution triggers client tool across multiple turns (dice game fixture) > step inputs > should include all previous messages in step 5 prompt (final step) 1`] = `
224
+ [
225
+ {
226
+ "content": [
227
+ {
228
+ "text": "Play a dice game between two players.",
229
+ "type": "text",
230
+ },
231
+ ],
232
+ "providerOptions": undefined,
233
+ "role": "user",
234
+ },
235
+ {
236
+ "content": [
237
+ {
238
+ "providerOptions": undefined,
239
+ "text": "I'll help you simulate this game between two players where one is using a loaded die.",
240
+ "type": "text",
241
+ },
242
+ {
243
+ "input": {
244
+ "code": "game_loop()",
245
+ },
246
+ "providerExecuted": true,
247
+ "providerOptions": undefined,
248
+ "toolCallId": "srvtoolu_01MzSrFWsmzBdcoQkGWLyRjK",
249
+ "toolName": "code_execution",
250
+ "type": "tool-call",
251
+ },
252
+ {
253
+ "input": {
254
+ "player": "player1",
255
+ },
256
+ "providerExecuted": undefined,
257
+ "providerOptions": undefined,
258
+ "toolCallId": "toolu_019jKkXz4jAdwHweHBw92CVY",
259
+ "toolName": "rollDie",
260
+ "type": "tool-call",
261
+ },
262
+ ],
263
+ "providerOptions": undefined,
264
+ "role": "assistant",
265
+ },
266
+ {
267
+ "content": [
268
+ {
269
+ "output": {
270
+ "type": "json",
271
+ "value": 6,
272
+ },
273
+ "providerOptions": undefined,
274
+ "toolCallId": "toolu_019jKkXz4jAdwHweHBw92CVY",
275
+ "toolName": "rollDie",
276
+ "type": "tool-result",
277
+ },
278
+ ],
279
+ "providerOptions": undefined,
280
+ "role": "tool",
281
+ },
282
+ {
283
+ "content": [
284
+ {
285
+ "input": {
286
+ "player": "player2",
287
+ },
288
+ "providerExecuted": undefined,
289
+ "providerOptions": undefined,
290
+ "toolCallId": "toolu_015dGLMbwBKv1ZRQr6KdJzeH",
291
+ "toolName": "rollDie",
292
+ "type": "tool-call",
293
+ },
294
+ ],
295
+ "providerOptions": undefined,
296
+ "role": "assistant",
297
+ },
298
+ {
299
+ "content": [
300
+ {
301
+ "output": {
302
+ "type": "json",
303
+ "value": 3,
304
+ },
305
+ "providerOptions": undefined,
306
+ "toolCallId": "toolu_015dGLMbwBKv1ZRQr6KdJzeH",
307
+ "toolName": "rollDie",
308
+ "type": "tool-result",
309
+ },
310
+ ],
311
+ "providerOptions": undefined,
312
+ "role": "tool",
313
+ },
314
+ {
315
+ "content": [
316
+ {
317
+ "input": {
318
+ "player": "player1",
319
+ },
320
+ "providerExecuted": undefined,
321
+ "providerOptions": undefined,
322
+ "toolCallId": "toolu_01YYqBNq5mk1wMtv3PAqY44m",
323
+ "toolName": "rollDie",
324
+ "type": "tool-call",
325
+ },
326
+ ],
327
+ "providerOptions": undefined,
328
+ "role": "assistant",
329
+ },
330
+ {
331
+ "content": [
332
+ {
333
+ "output": {
334
+ "type": "json",
335
+ "value": 6,
336
+ },
337
+ "providerOptions": undefined,
338
+ "toolCallId": "toolu_01YYqBNq5mk1wMtv3PAqY44m",
339
+ "toolName": "rollDie",
340
+ "type": "tool-result",
341
+ },
342
+ ],
343
+ "providerOptions": undefined,
344
+ "role": "tool",
345
+ },
346
+ {
347
+ "content": [
348
+ {
349
+ "input": {
350
+ "player": "player2",
351
+ },
352
+ "providerExecuted": undefined,
353
+ "providerOptions": undefined,
354
+ "toolCallId": "toolu_018WxjDkQG8h7i63poySGT2x",
355
+ "toolName": "rollDie",
356
+ "type": "tool-call",
357
+ },
358
+ ],
359
+ "providerOptions": undefined,
360
+ "role": "assistant",
361
+ },
362
+ {
363
+ "content": [
364
+ {
365
+ "output": {
366
+ "type": "json",
367
+ "value": 3,
368
+ },
369
+ "providerOptions": undefined,
370
+ "toolCallId": "toolu_018WxjDkQG8h7i63poySGT2x",
371
+ "toolName": "rollDie",
372
+ "type": "tool-result",
373
+ },
374
+ ],
375
+ "providerOptions": undefined,
376
+ "role": "tool",
377
+ },
378
+ ]
379
+ `;
380
+
381
+ exports[`streamText > result.files > should contain files 1`] = `
382
+ [
383
+ DefaultGeneratedFileWithType {
384
+ "base64Data": "Hello World",
385
+ "mediaType": "text/plain",
386
+ "type": "file",
387
+ "uint8ArrayData": undefined,
388
+ },
389
+ DefaultGeneratedFileWithType {
390
+ "base64Data": "QkFVRw==",
391
+ "mediaType": "image/jpeg",
392
+ "type": "file",
393
+ "uint8ArrayData": undefined,
394
+ },
395
+ ]
396
+ `;
397
+
398
+ exports[`streamText > result.fullStream > should send delayed asynchronous tool results 1`] = `
399
+ [
400
+ {
401
+ "type": "start",
402
+ },
403
+ {
404
+ "request": {},
405
+ "type": "start-step",
406
+ "warnings": [],
407
+ },
408
+ {
409
+ "input": {
410
+ "value": "value",
411
+ },
412
+ "providerExecuted": undefined,
413
+ "providerMetadata": undefined,
414
+ "title": "Tool 1",
415
+ "toolCallId": "call-1",
416
+ "toolName": "tool1",
417
+ "type": "tool-call",
418
+ },
419
+ {
420
+ "dynamic": false,
421
+ "input": {
422
+ "value": "value",
423
+ },
424
+ "output": "value-result",
425
+ "toolCallId": "call-1",
426
+ "toolName": "tool1",
427
+ "type": "tool-result",
428
+ },
429
+ {
430
+ "finishReason": "stop",
431
+ "providerMetadata": undefined,
432
+ "rawFinishReason": "stop",
433
+ "response": {
434
+ "headers": undefined,
435
+ "id": "id-0",
436
+ "modelId": "mock-model-id",
437
+ "timestamp": 1970-01-01T00:00:00.000Z,
438
+ },
439
+ "type": "finish-step",
440
+ "usage": {
441
+ "cachedInputTokens": undefined,
442
+ "inputTokenDetails": {
443
+ "cacheReadTokens": undefined,
444
+ "cacheWriteTokens": undefined,
445
+ "noCacheTokens": 3,
446
+ },
447
+ "inputTokens": 3,
448
+ "outputTokenDetails": {
449
+ "reasoningTokens": undefined,
450
+ "textTokens": 10,
451
+ },
452
+ "outputTokens": 10,
453
+ "raw": undefined,
454
+ "reasoningTokens": undefined,
455
+ "totalTokens": 13,
456
+ },
457
+ },
458
+ {
459
+ "finishReason": "stop",
460
+ "rawFinishReason": "stop",
461
+ "totalUsage": {
462
+ "cachedInputTokens": undefined,
463
+ "inputTokenDetails": {
464
+ "cacheReadTokens": undefined,
465
+ "cacheWriteTokens": undefined,
466
+ "noCacheTokens": 3,
467
+ },
468
+ "inputTokens": 3,
469
+ "outputTokenDetails": {
470
+ "reasoningTokens": undefined,
471
+ "textTokens": 10,
472
+ },
473
+ "outputTokens": 10,
474
+ "reasoningTokens": undefined,
475
+ "totalTokens": 13,
476
+ },
477
+ "type": "finish",
478
+ },
479
+ ]
480
+ `;
481
+
482
+ exports[`streamText > result.fullStream > should send tool calls 1`] = `
483
+ [
484
+ {
485
+ "type": "start",
486
+ },
487
+ {
488
+ "request": {},
489
+ "type": "start-step",
490
+ "warnings": [],
491
+ },
492
+ {
493
+ "input": {
494
+ "value": "value",
495
+ },
496
+ "providerExecuted": undefined,
497
+ "providerMetadata": {
498
+ "testProvider": {
499
+ "signature": "sig",
500
+ },
501
+ },
502
+ "title": "Tool 1",
503
+ "toolCallId": "call-1",
504
+ "toolName": "tool1",
505
+ "type": "tool-call",
506
+ },
507
+ {
508
+ "finishReason": "stop",
509
+ "providerMetadata": undefined,
510
+ "rawFinishReason": "stop",
511
+ "response": {
512
+ "headers": undefined,
513
+ "id": "id-0",
514
+ "modelId": "mock-model-id",
515
+ "timestamp": 1970-01-01T00:00:00.000Z,
516
+ },
517
+ "type": "finish-step",
518
+ "usage": {
519
+ "cachedInputTokens": undefined,
520
+ "inputTokenDetails": {
521
+ "cacheReadTokens": undefined,
522
+ "cacheWriteTokens": undefined,
523
+ "noCacheTokens": 3,
524
+ },
525
+ "inputTokens": 3,
526
+ "outputTokenDetails": {
527
+ "reasoningTokens": undefined,
528
+ "textTokens": 10,
529
+ },
530
+ "outputTokens": 10,
531
+ "raw": undefined,
532
+ "reasoningTokens": undefined,
533
+ "totalTokens": 13,
534
+ },
535
+ },
536
+ {
537
+ "finishReason": "stop",
538
+ "rawFinishReason": "stop",
539
+ "totalUsage": {
540
+ "cachedInputTokens": undefined,
541
+ "inputTokenDetails": {
542
+ "cacheReadTokens": undefined,
543
+ "cacheWriteTokens": undefined,
544
+ "noCacheTokens": 3,
545
+ },
546
+ "inputTokens": 3,
547
+ "outputTokenDetails": {
548
+ "reasoningTokens": undefined,
549
+ "textTokens": 10,
550
+ },
551
+ "outputTokens": 10,
552
+ "reasoningTokens": undefined,
553
+ "totalTokens": 13,
554
+ },
555
+ "type": "finish",
556
+ },
557
+ ]
558
+ `;
559
+
560
+ exports[`streamText > result.fullStream > should send tool results 1`] = `
561
+ [
562
+ {
563
+ "type": "start",
564
+ },
565
+ {
566
+ "request": {},
567
+ "type": "start-step",
568
+ "warnings": [],
569
+ },
570
+ {
571
+ "input": {
572
+ "value": "value",
573
+ },
574
+ "providerExecuted": undefined,
575
+ "providerMetadata": undefined,
576
+ "title": "Tool 1",
577
+ "toolCallId": "call-1",
578
+ "toolName": "tool1",
579
+ "type": "tool-call",
580
+ },
581
+ {
582
+ "dynamic": false,
583
+ "input": {
584
+ "value": "value",
585
+ },
586
+ "output": "value-result",
587
+ "toolCallId": "call-1",
588
+ "toolName": "tool1",
589
+ "type": "tool-result",
590
+ },
591
+ {
592
+ "finishReason": "stop",
593
+ "providerMetadata": undefined,
594
+ "rawFinishReason": "stop",
595
+ "response": {
596
+ "headers": undefined,
597
+ "id": "id-0",
598
+ "modelId": "mock-model-id",
599
+ "timestamp": 1970-01-01T00:00:00.000Z,
600
+ },
601
+ "type": "finish-step",
602
+ "usage": {
603
+ "cachedInputTokens": undefined,
604
+ "inputTokenDetails": {
605
+ "cacheReadTokens": undefined,
606
+ "cacheWriteTokens": undefined,
607
+ "noCacheTokens": 3,
608
+ },
609
+ "inputTokens": 3,
610
+ "outputTokenDetails": {
611
+ "reasoningTokens": undefined,
612
+ "textTokens": 10,
613
+ },
614
+ "outputTokens": 10,
615
+ "raw": undefined,
616
+ "reasoningTokens": undefined,
617
+ "totalTokens": 13,
618
+ },
619
+ },
620
+ {
621
+ "finishReason": "stop",
622
+ "rawFinishReason": "stop",
623
+ "totalUsage": {
624
+ "cachedInputTokens": undefined,
625
+ "inputTokenDetails": {
626
+ "cacheReadTokens": undefined,
627
+ "cacheWriteTokens": undefined,
628
+ "noCacheTokens": 3,
629
+ },
630
+ "inputTokens": 3,
631
+ "outputTokenDetails": {
632
+ "reasoningTokens": undefined,
633
+ "textTokens": 10,
634
+ },
635
+ "outputTokens": 10,
636
+ "reasoningTokens": undefined,
637
+ "totalTokens": 13,
638
+ },
639
+ "type": "finish",
640
+ },
641
+ ]
642
+ `;
643
+
644
+ exports[`streamText > result.pipeUIMessageStreamToResponse > should mask error messages by default 1`] = `
645
+ [
646
+ "data: {"type":"start"}
647
+
648
+ ",
649
+ "data: {"type":"start-step"}
650
+
651
+ ",
652
+ "data: {"type":"error","errorText":"error"}
653
+
654
+ ",
655
+ "data: {"type":"finish-step"}
656
+
657
+ ",
658
+ "data: {"type":"finish","finishReason":"error"}
659
+
660
+ ",
661
+ "data: [DONE]
662
+
663
+ ",
664
+ ]
665
+ `;
666
+
667
+ exports[`streamText > result.pipeUIMessageStreamToResponse > should support custom error messages 1`] = `
668
+ [
669
+ "data: {"type":"start"}
670
+
671
+ ",
672
+ "data: {"type":"start-step"}
673
+
674
+ ",
675
+ "data: {"type":"error","errorText":"custom error message: error"}
676
+
677
+ ",
678
+ "data: {"type":"finish-step"}
679
+
680
+ ",
681
+ "data: {"type":"finish","finishReason":"error"}
682
+
683
+ ",
684
+ "data: [DONE]
685
+
686
+ ",
687
+ ]
688
+ `;
689
+
690
+ exports[`streamText > result.reasoning > should contain reasoning from model response 1`] = `
691
+ [
692
+ {
693
+ "providerMetadata": {
694
+ "testProvider": {
695
+ "signature": "1234567890",
696
+ },
697
+ },
698
+ "text": "I will open the conversation with witty banter.",
699
+ "type": "reasoning",
700
+ },
701
+ {
702
+ "providerMetadata": {
703
+ "testProvider": {
704
+ "redactedData": "redacted-reasoning-data",
705
+ },
706
+ },
707
+ "text": "",
708
+ "type": "reasoning",
709
+ },
710
+ {
711
+ "providerMetadata": {
712
+ "testProvider": {
713
+ "signature": "1234567890",
714
+ },
715
+ },
716
+ "text": " Once the user has relaxed, I will pry for valuable information.",
717
+ "type": "reasoning",
718
+ },
719
+ {
720
+ "providerMetadata": {
721
+ "testProvider": {
722
+ "signature": "0987654321",
723
+ },
724
+ },
725
+ "text": " I need to think about this problem carefully.",
726
+ "type": "reasoning",
727
+ },
728
+ {
729
+ "providerMetadata": {
730
+ "testProvider": {
731
+ "signature": "0987654321",
732
+ },
733
+ },
734
+ "text": " The best solution requires careful consideration of all factors.",
735
+ "type": "reasoning",
736
+ },
737
+ ]
738
+ `;
739
+
740
+ exports[`streamText > result.reasoningText > should contain reasoning text from model response 1`] = `"I will open the conversation with witty banter. Once the user has relaxed, I will pry for valuable information. I need to think about this problem carefully. The best solution requires careful consideration of all factors."`;
741
+
742
+ exports[`streamText > result.sources > should contain sources 1`] = `
743
+ [
744
+ {
745
+ "id": "123",
746
+ "providerMetadata": {
747
+ "provider": {
748
+ "custom": "value",
749
+ },
750
+ },
751
+ "sourceType": "url",
752
+ "title": "Example",
753
+ "type": "source",
754
+ "url": "https://example.com",
755
+ },
756
+ {
757
+ "id": "456",
758
+ "providerMetadata": {
759
+ "provider": {
760
+ "custom": "value2",
761
+ },
762
+ },
763
+ "sourceType": "url",
764
+ "title": "Example 2",
765
+ "type": "source",
766
+ "url": "https://example.com/2",
767
+ },
768
+ ]
769
+ `;
770
+
771
+ exports[`streamText > result.text > should resolve with full text 1`] = `"Hello, world!"`;
772
+
773
+ exports[`streamText > result.textStream > should filter out empty text deltas 1`] = `
774
+ [
775
+ "Hello",
776
+ ", ",
777
+ "world!",
778
+ ]
779
+ `;
780
+
781
+ exports[`streamText > result.textStream > should not include reasoning content in textStream 1`] = `
782
+ [
783
+ "Hi",
784
+ " there!",
785
+ ]
786
+ `;
787
+
788
+ exports[`streamText > result.toUIMessageStream > should mask error messages by default 1`] = `
789
+ [
790
+ {
791
+ "type": "start",
792
+ },
793
+ {
794
+ "type": "start-step",
795
+ },
796
+ {
797
+ "errorText": "error",
798
+ "type": "error",
799
+ },
800
+ {
801
+ "type": "finish-step",
802
+ },
803
+ {
804
+ "finishReason": "error",
805
+ "type": "finish",
806
+ },
807
+ ]
808
+ `;
809
+
810
+ exports[`streamText > result.toUIMessageStream > should send tool call, tool call stream start, tool call deltas, and tool result stream parts 1`] = `
811
+ [
812
+ {
813
+ "type": "start",
814
+ },
815
+ {
816
+ "type": "start-step",
817
+ },
818
+ {
819
+ "toolCallId": "call-1",
820
+ "toolName": "tool1",
821
+ "type": "tool-input-start",
822
+ },
823
+ {
824
+ "inputTextDelta": "{ "value":",
825
+ "toolCallId": "call-1",
826
+ "type": "tool-input-delta",
827
+ },
828
+ {
829
+ "inputTextDelta": " "value" }",
830
+ "toolCallId": "call-1",
831
+ "type": "tool-input-delta",
832
+ },
833
+ {
834
+ "input": {
835
+ "value": "value",
836
+ },
837
+ "toolCallId": "call-1",
838
+ "toolName": "tool1",
839
+ "type": "tool-input-available",
840
+ },
841
+ {
842
+ "output": "value-result",
843
+ "toolCallId": "call-1",
844
+ "type": "tool-output-available",
845
+ },
846
+ {
847
+ "type": "finish-step",
848
+ },
849
+ {
850
+ "finishReason": "stop",
851
+ "type": "finish",
852
+ },
853
+ ]
854
+ `;
855
+
856
+ exports[`streamText > result.toUIMessageStream > should support custom error messages 1`] = `
857
+ [
858
+ {
859
+ "type": "start",
860
+ },
861
+ {
862
+ "type": "start-step",
863
+ },
864
+ {
865
+ "errorText": "custom error message: error",
866
+ "type": "error",
867
+ },
868
+ {
869
+ "type": "finish-step",
870
+ },
871
+ {
872
+ "finishReason": "error",
873
+ "type": "finish",
874
+ },
875
+ ]
876
+ `;
877
+
878
+ exports[`streamText > result.toUIMessageStreamResponse > should mask error messages by default 1`] = `
879
+ [
880
+ "data: {"type":"start"}
881
+
882
+ ",
883
+ "data: {"type":"start-step"}
884
+
885
+ ",
886
+ "data: {"type":"error","errorText":"error"}
887
+
888
+ ",
889
+ "data: {"type":"finish-step"}
890
+
891
+ ",
892
+ "data: {"type":"finish","finishReason":"error"}
893
+
894
+ ",
895
+ "data: [DONE]
896
+
897
+ ",
898
+ ]
899
+ `;
900
+
901
+ exports[`streamText > result.toUIMessageStreamResponse > should support custom error messages 1`] = `
902
+ [
903
+ "data: {"type":"start"}
904
+
905
+ ",
906
+ "data: {"type":"start-step"}
907
+
908
+ ",
909
+ "data: {"type":"error","errorText":"custom error message: error"}
910
+
911
+ ",
912
+ "data: {"type":"finish-step"}
913
+
914
+ ",
915
+ "data: {"type":"finish","finishReason":"error"}
916
+
917
+ ",
918
+ "data: [DONE]
919
+
920
+ ",
921
+ ]
922
+ `;
923
+
924
+ exports[`streamText > telemetry > should not record any telemetry data when not explicitly enabled 1`] = `[]`;
925
+
926
+ exports[`streamText > telemetry > should not record telemetry inputs / outputs when disabled 1`] = `
927
+ [
928
+ {
929
+ "attributes": {
930
+ "ai.model.id": "mock-model-id",
931
+ "ai.model.provider": "mock-provider",
932
+ "ai.operationId": "ai.streamText",
933
+ "ai.response.finishReason": "stop",
934
+ "ai.settings.maxRetries": 2,
935
+ "ai.usage.inputTokens": 3,
936
+ "ai.usage.outputTokens": 10,
937
+ "ai.usage.totalTokens": 13,
938
+ "operation.name": "ai.streamText",
939
+ },
940
+ "events": [],
941
+ "name": "ai.streamText",
942
+ },
943
+ {
944
+ "attributes": {
945
+ "ai.model.id": "mock-model-id",
946
+ "ai.model.provider": "mock-provider",
947
+ "ai.operationId": "ai.streamText.doStream",
948
+ "ai.response.avgOutputTokensPerSecond": 20,
949
+ "ai.response.finishReason": "stop",
950
+ "ai.response.id": "id-0",
951
+ "ai.response.model": "mock-model-id",
952
+ "ai.response.msToFinish": 500,
953
+ "ai.response.msToFirstChunk": 100,
954
+ "ai.response.timestamp": "1970-01-01T00:00:00.000Z",
955
+ "ai.settings.maxRetries": 2,
956
+ "ai.usage.inputTokens": 3,
957
+ "ai.usage.outputTokens": 10,
958
+ "ai.usage.totalTokens": 13,
959
+ "gen_ai.request.model": "mock-model-id",
960
+ "gen_ai.response.finish_reasons": [
961
+ "stop",
962
+ ],
963
+ "gen_ai.response.id": "id-0",
964
+ "gen_ai.response.model": "mock-model-id",
965
+ "gen_ai.system": "mock-provider",
966
+ "gen_ai.usage.input_tokens": 3,
967
+ "gen_ai.usage.output_tokens": 10,
968
+ "operation.name": "ai.streamText.doStream",
969
+ },
970
+ "events": [
971
+ {
972
+ "attributes": {
973
+ "ai.response.msToFirstChunk": 100,
974
+ },
975
+ "name": "ai.stream.firstChunk",
976
+ },
977
+ {
978
+ "attributes": undefined,
979
+ "name": "ai.stream.finish",
980
+ },
981
+ ],
982
+ "name": "ai.streamText.doStream",
983
+ },
984
+ {
985
+ "attributes": {
986
+ "ai.operationId": "ai.toolCall",
987
+ "ai.toolCall.id": "call-1",
988
+ "ai.toolCall.name": "tool1",
989
+ "operation.name": "ai.toolCall",
990
+ },
991
+ "events": [],
992
+ "name": "ai.toolCall",
993
+ },
994
+ ]
995
+ `;
996
+
997
+ exports[`streamText > telemetry > should record successful tool call 1`] = `
998
+ [
999
+ {
1000
+ "attributes": {
1001
+ "ai.model.id": "mock-model-id",
1002
+ "ai.model.provider": "mock-provider",
1003
+ "ai.operationId": "ai.streamText",
1004
+ "ai.prompt": "{"prompt":"test-input"}",
1005
+ "ai.response.finishReason": "stop",
1006
+ "ai.response.text": "",
1007
+ "ai.response.toolCalls": "[{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"value"}}]",
1008
+ "ai.settings.maxRetries": 2,
1009
+ "ai.usage.inputTokens": 3,
1010
+ "ai.usage.outputTokens": 10,
1011
+ "ai.usage.totalTokens": 13,
1012
+ "operation.name": "ai.streamText",
1013
+ },
1014
+ "events": [],
1015
+ "name": "ai.streamText",
1016
+ },
1017
+ {
1018
+ "attributes": {
1019
+ "ai.model.id": "mock-model-id",
1020
+ "ai.model.provider": "mock-provider",
1021
+ "ai.operationId": "ai.streamText.doStream",
1022
+ "ai.prompt.messages": "[{"role":"user","content":[{"type":"text","text":"test-input"}]}]",
1023
+ "ai.prompt.toolChoice": "{"type":"auto"}",
1024
+ "ai.prompt.tools": [
1025
+ "{"type":"function","name":"tool1","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":false}}",
1026
+ ],
1027
+ "ai.response.avgOutputTokensPerSecond": 20,
1028
+ "ai.response.finishReason": "stop",
1029
+ "ai.response.id": "id-0",
1030
+ "ai.response.model": "mock-model-id",
1031
+ "ai.response.msToFinish": 500,
1032
+ "ai.response.msToFirstChunk": 100,
1033
+ "ai.response.text": "",
1034
+ "ai.response.timestamp": "1970-01-01T00:00:00.000Z",
1035
+ "ai.response.toolCalls": "[{"type":"tool-call","toolCallId":"call-1","toolName":"tool1","input":{"value":"value"}}]",
1036
+ "ai.settings.maxRetries": 2,
1037
+ "ai.usage.inputTokens": 3,
1038
+ "ai.usage.outputTokens": 10,
1039
+ "ai.usage.totalTokens": 13,
1040
+ "gen_ai.request.model": "mock-model-id",
1041
+ "gen_ai.response.finish_reasons": [
1042
+ "stop",
1043
+ ],
1044
+ "gen_ai.response.id": "id-0",
1045
+ "gen_ai.response.model": "mock-model-id",
1046
+ "gen_ai.system": "mock-provider",
1047
+ "gen_ai.usage.input_tokens": 3,
1048
+ "gen_ai.usage.output_tokens": 10,
1049
+ "operation.name": "ai.streamText.doStream",
1050
+ },
1051
+ "events": [
1052
+ {
1053
+ "attributes": {
1054
+ "ai.response.msToFirstChunk": 100,
1055
+ },
1056
+ "name": "ai.stream.firstChunk",
1057
+ },
1058
+ {
1059
+ "attributes": undefined,
1060
+ "name": "ai.stream.finish",
1061
+ },
1062
+ ],
1063
+ "name": "ai.streamText.doStream",
1064
+ },
1065
+ {
1066
+ "attributes": {
1067
+ "ai.operationId": "ai.toolCall",
1068
+ "ai.toolCall.args": "{"value":"value"}",
1069
+ "ai.toolCall.id": "call-1",
1070
+ "ai.toolCall.name": "tool1",
1071
+ "ai.toolCall.result": ""value-result"",
1072
+ "operation.name": "ai.toolCall",
1073
+ },
1074
+ "events": [],
1075
+ "name": "ai.toolCall",
1076
+ },
1077
+ ]
1078
+ `;
1079
+
1080
+ exports[`streamText > telemetry > should record telemetry data when enabled 1`] = `
1081
+ [
1082
+ {
1083
+ "attributes": {
1084
+ "ai.model.id": "mock-model-id",
1085
+ "ai.model.provider": "mock-provider",
1086
+ "ai.operationId": "ai.streamText",
1087
+ "ai.prompt": "{"prompt":"test-input"}",
1088
+ "ai.request.headers.header1": "value1",
1089
+ "ai.request.headers.header2": "value2",
1090
+ "ai.response.finishReason": "stop",
1091
+ "ai.response.providerMetadata": "{"testProvider":{"testKey":"testValue"}}",
1092
+ "ai.response.text": "Hello, world!",
1093
+ "ai.settings.frequencyPenalty": 0.3,
1094
+ "ai.settings.maxRetries": 2,
1095
+ "ai.settings.presencePenalty": 0.4,
1096
+ "ai.settings.stopSequences": [
1097
+ "stop",
1098
+ ],
1099
+ "ai.settings.temperature": 0.5,
1100
+ "ai.settings.topK": 0.1,
1101
+ "ai.settings.topP": 0.2,
1102
+ "ai.telemetry.functionId": "test-function-id",
1103
+ "ai.telemetry.metadata.test1": "value1",
1104
+ "ai.telemetry.metadata.test2": false,
1105
+ "ai.usage.inputTokens": 3,
1106
+ "ai.usage.outputTokens": 10,
1107
+ "ai.usage.totalTokens": 13,
1108
+ "operation.name": "ai.streamText test-function-id",
1109
+ "resource.name": "test-function-id",
1110
+ },
1111
+ "events": [],
1112
+ "name": "ai.streamText",
1113
+ },
1114
+ {
1115
+ "attributes": {
1116
+ "ai.model.id": "mock-model-id",
1117
+ "ai.model.provider": "mock-provider",
1118
+ "ai.operationId": "ai.streamText.doStream",
1119
+ "ai.prompt.messages": "[{"role":"user","content":[{"type":"text","text":"test-input"}]}]",
1120
+ "ai.request.headers.header1": "value1",
1121
+ "ai.request.headers.header2": "value2",
1122
+ "ai.response.avgOutputTokensPerSecond": 20,
1123
+ "ai.response.finishReason": "stop",
1124
+ "ai.response.id": "id-0",
1125
+ "ai.response.model": "mock-model-id",
1126
+ "ai.response.msToFinish": 500,
1127
+ "ai.response.msToFirstChunk": 100,
1128
+ "ai.response.providerMetadata": "{"testProvider":{"testKey":"testValue"}}",
1129
+ "ai.response.text": "Hello, world!",
1130
+ "ai.response.timestamp": "1970-01-01T00:00:00.000Z",
1131
+ "ai.settings.frequencyPenalty": 0.3,
1132
+ "ai.settings.maxRetries": 2,
1133
+ "ai.settings.presencePenalty": 0.4,
1134
+ "ai.settings.stopSequences": [
1135
+ "stop",
1136
+ ],
1137
+ "ai.settings.temperature": 0.5,
1138
+ "ai.settings.topK": 0.1,
1139
+ "ai.settings.topP": 0.2,
1140
+ "ai.telemetry.functionId": "test-function-id",
1141
+ "ai.telemetry.metadata.test1": "value1",
1142
+ "ai.telemetry.metadata.test2": false,
1143
+ "ai.usage.inputTokens": 3,
1144
+ "ai.usage.outputTokens": 10,
1145
+ "ai.usage.totalTokens": 13,
1146
+ "gen_ai.request.frequency_penalty": 0.3,
1147
+ "gen_ai.request.model": "mock-model-id",
1148
+ "gen_ai.request.presence_penalty": 0.4,
1149
+ "gen_ai.request.stop_sequences": [
1150
+ "stop",
1151
+ ],
1152
+ "gen_ai.request.temperature": 0.5,
1153
+ "gen_ai.request.top_k": 0.1,
1154
+ "gen_ai.request.top_p": 0.2,
1155
+ "gen_ai.response.finish_reasons": [
1156
+ "stop",
1157
+ ],
1158
+ "gen_ai.response.id": "id-0",
1159
+ "gen_ai.response.model": "mock-model-id",
1160
+ "gen_ai.system": "mock-provider",
1161
+ "gen_ai.usage.input_tokens": 3,
1162
+ "gen_ai.usage.output_tokens": 10,
1163
+ "operation.name": "ai.streamText.doStream test-function-id",
1164
+ "resource.name": "test-function-id",
1165
+ },
1166
+ "events": [
1167
+ {
1168
+ "attributes": {
1169
+ "ai.response.msToFirstChunk": 100,
1170
+ },
1171
+ "name": "ai.stream.firstChunk",
1172
+ },
1173
+ {
1174
+ "attributes": undefined,
1175
+ "name": "ai.stream.finish",
1176
+ },
1177
+ ],
1178
+ "name": "ai.streamText.doStream",
1179
+ },
1180
+ ]
1181
+ `;
1182
+
1183
+ exports[`streamText > tools with custom schema > should send tool calls 1`] = `
1184
+ [
1185
+ {
1186
+ "type": "start",
1187
+ },
1188
+ {
1189
+ "request": {},
1190
+ "type": "start-step",
1191
+ "warnings": [],
1192
+ },
1193
+ {
1194
+ "input": {
1195
+ "value": "value",
1196
+ },
1197
+ "providerExecuted": undefined,
1198
+ "providerMetadata": undefined,
1199
+ "title": "Tool 1",
1200
+ "toolCallId": "call-1",
1201
+ "toolName": "tool1",
1202
+ "type": "tool-call",
1203
+ },
1204
+ {
1205
+ "finishReason": "stop",
1206
+ "providerMetadata": undefined,
1207
+ "rawFinishReason": "stop",
1208
+ "response": {
1209
+ "headers": undefined,
1210
+ "id": "id-0",
1211
+ "modelId": "mock-model-id",
1212
+ "timestamp": 1970-01-01T00:00:00.000Z,
1213
+ },
1214
+ "type": "finish-step",
1215
+ "usage": {
1216
+ "cachedInputTokens": undefined,
1217
+ "inputTokenDetails": {
1218
+ "cacheReadTokens": undefined,
1219
+ "cacheWriteTokens": undefined,
1220
+ "noCacheTokens": 3,
1221
+ },
1222
+ "inputTokens": 3,
1223
+ "outputTokenDetails": {
1224
+ "reasoningTokens": undefined,
1225
+ "textTokens": 10,
1226
+ },
1227
+ "outputTokens": 10,
1228
+ "raw": undefined,
1229
+ "reasoningTokens": undefined,
1230
+ "totalTokens": 13,
1231
+ },
1232
+ },
1233
+ {
1234
+ "finishReason": "stop",
1235
+ "rawFinishReason": "stop",
1236
+ "totalUsage": {
1237
+ "cachedInputTokens": undefined,
1238
+ "inputTokenDetails": {
1239
+ "cacheReadTokens": undefined,
1240
+ "cacheWriteTokens": undefined,
1241
+ "noCacheTokens": 3,
1242
+ },
1243
+ "inputTokens": 3,
1244
+ "outputTokenDetails": {
1245
+ "reasoningTokens": undefined,
1246
+ "textTokens": 10,
1247
+ },
1248
+ "outputTokens": 10,
1249
+ "reasoningTokens": undefined,
1250
+ "totalTokens": 13,
1251
+ },
1252
+ "type": "finish",
1253
+ },
1254
+ ]
1255
+ `;