ai 6.0.33 → 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 (351) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/dist/internal/index.mjs +1 -1
  6. package/docs/02-foundations/03-prompts.mdx +2 -2
  7. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1 -1
  8. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +1 -1
  9. package/package.json +6 -4
  10. package/src/agent/agent.ts +116 -0
  11. package/src/agent/create-agent-ui-stream-response.test.ts +258 -0
  12. package/src/agent/create-agent-ui-stream-response.ts +50 -0
  13. package/src/agent/create-agent-ui-stream.ts +73 -0
  14. package/src/agent/index.ts +33 -0
  15. package/src/agent/infer-agent-tools.ts +7 -0
  16. package/src/agent/infer-agent-ui-message.test-d.ts +54 -0
  17. package/src/agent/infer-agent-ui-message.ts +11 -0
  18. package/src/agent/pipe-agent-ui-stream-to-response.ts +52 -0
  19. package/src/agent/tool-loop-agent-on-finish-callback.ts +31 -0
  20. package/src/agent/tool-loop-agent-on-step-finish-callback.ts +11 -0
  21. package/src/agent/tool-loop-agent-settings.ts +182 -0
  22. package/src/agent/tool-loop-agent.test-d.ts +114 -0
  23. package/src/agent/tool-loop-agent.test.ts +442 -0
  24. package/src/agent/tool-loop-agent.ts +114 -0
  25. package/src/embed/__snapshots__/embed-many.test.ts.snap +191 -0
  26. package/src/embed/__snapshots__/embed.test.ts.snap +81 -0
  27. package/src/embed/embed-many-result.ts +53 -0
  28. package/src/embed/embed-many.test.ts +653 -0
  29. package/src/embed/embed-many.ts +378 -0
  30. package/src/embed/embed-result.ts +50 -0
  31. package/src/embed/embed.test.ts +298 -0
  32. package/src/embed/embed.ts +211 -0
  33. package/src/embed/index.ts +4 -0
  34. package/src/error/index.ts +34 -0
  35. package/src/error/invalid-argument-error.ts +34 -0
  36. package/src/error/invalid-stream-part-error.ts +28 -0
  37. package/src/error/invalid-tool-approval-error.ts +26 -0
  38. package/src/error/invalid-tool-input-error.ts +33 -0
  39. package/src/error/no-image-generated-error.ts +39 -0
  40. package/src/error/no-object-generated-error.ts +70 -0
  41. package/src/error/no-output-generated-error.ts +26 -0
  42. package/src/error/no-speech-generated-error.ts +18 -0
  43. package/src/error/no-such-tool-error.ts +35 -0
  44. package/src/error/no-transcript-generated-error.ts +20 -0
  45. package/src/error/tool-call-not-found-for-approval-error.ts +32 -0
  46. package/src/error/tool-call-repair-error.ts +30 -0
  47. package/src/error/unsupported-model-version-error.ts +23 -0
  48. package/src/error/verify-no-object-generated-error.ts +27 -0
  49. package/src/generate-image/generate-image-result.ts +42 -0
  50. package/src/generate-image/generate-image.test.ts +1420 -0
  51. package/src/generate-image/generate-image.ts +360 -0
  52. package/src/generate-image/index.ts +18 -0
  53. package/src/generate-object/__snapshots__/generate-object.test.ts.snap +133 -0
  54. package/src/generate-object/__snapshots__/stream-object.test.ts.snap +297 -0
  55. package/src/generate-object/generate-object-result.ts +67 -0
  56. package/src/generate-object/generate-object.test-d.ts +49 -0
  57. package/src/generate-object/generate-object.test.ts +1191 -0
  58. package/src/generate-object/generate-object.ts +518 -0
  59. package/src/generate-object/index.ts +9 -0
  60. package/src/generate-object/inject-json-instruction.test.ts +181 -0
  61. package/src/generate-object/inject-json-instruction.ts +30 -0
  62. package/src/generate-object/output-strategy.ts +415 -0
  63. package/src/generate-object/parse-and-validate-object-result.ts +111 -0
  64. package/src/generate-object/repair-text.ts +12 -0
  65. package/src/generate-object/stream-object-result.ts +120 -0
  66. package/src/generate-object/stream-object.test-d.ts +74 -0
  67. package/src/generate-object/stream-object.test.ts +1950 -0
  68. package/src/generate-object/stream-object.ts +986 -0
  69. package/src/generate-object/validate-object-generation-input.ts +144 -0
  70. package/src/generate-speech/generate-speech-result.ts +30 -0
  71. package/src/generate-speech/generate-speech.test.ts +300 -0
  72. package/src/generate-speech/generate-speech.ts +190 -0
  73. package/src/generate-speech/generated-audio-file.ts +65 -0
  74. package/src/generate-speech/index.ts +3 -0
  75. package/src/generate-text/__snapshots__/generate-text.test.ts.snap +1872 -0
  76. package/src/generate-text/__snapshots__/stream-text.test.ts.snap +1255 -0
  77. package/src/generate-text/collect-tool-approvals.test.ts +553 -0
  78. package/src/generate-text/collect-tool-approvals.ts +116 -0
  79. package/src/generate-text/content-part.ts +25 -0
  80. package/src/generate-text/execute-tool-call.ts +129 -0
  81. package/src/generate-text/extract-reasoning-content.ts +17 -0
  82. package/src/generate-text/extract-text-content.ts +15 -0
  83. package/src/generate-text/generate-text-result.ts +168 -0
  84. package/src/generate-text/generate-text.test-d.ts +68 -0
  85. package/src/generate-text/generate-text.test.ts +7011 -0
  86. package/src/generate-text/generate-text.ts +1223 -0
  87. package/src/generate-text/generated-file.ts +70 -0
  88. package/src/generate-text/index.ts +57 -0
  89. package/src/generate-text/is-approval-needed.ts +29 -0
  90. package/src/generate-text/output-utils.ts +23 -0
  91. package/src/generate-text/output.test.ts +698 -0
  92. package/src/generate-text/output.ts +590 -0
  93. package/src/generate-text/parse-tool-call.test.ts +570 -0
  94. package/src/generate-text/parse-tool-call.ts +188 -0
  95. package/src/generate-text/prepare-step.ts +103 -0
  96. package/src/generate-text/prune-messages.test.ts +720 -0
  97. package/src/generate-text/prune-messages.ts +167 -0
  98. package/src/generate-text/reasoning-output.ts +20 -0
  99. package/src/generate-text/reasoning.ts +8 -0
  100. package/src/generate-text/response-message.ts +10 -0
  101. package/src/generate-text/run-tools-transformation.test.ts +1143 -0
  102. package/src/generate-text/run-tools-transformation.ts +420 -0
  103. package/src/generate-text/smooth-stream.test.ts +2101 -0
  104. package/src/generate-text/smooth-stream.ts +162 -0
  105. package/src/generate-text/step-result.ts +238 -0
  106. package/src/generate-text/stop-condition.ts +29 -0
  107. package/src/generate-text/stream-text-result.ts +463 -0
  108. package/src/generate-text/stream-text.test-d.ts +200 -0
  109. package/src/generate-text/stream-text.test.ts +19979 -0
  110. package/src/generate-text/stream-text.ts +2505 -0
  111. package/src/generate-text/to-response-messages.test.ts +922 -0
  112. package/src/generate-text/to-response-messages.ts +163 -0
  113. package/src/generate-text/tool-approval-request-output.ts +21 -0
  114. package/src/generate-text/tool-call-repair-function.ts +27 -0
  115. package/src/generate-text/tool-call.ts +47 -0
  116. package/src/generate-text/tool-error.ts +34 -0
  117. package/src/generate-text/tool-output-denied.ts +21 -0
  118. package/src/generate-text/tool-output.ts +7 -0
  119. package/src/generate-text/tool-result.ts +36 -0
  120. package/src/generate-text/tool-set.ts +14 -0
  121. package/src/global.ts +24 -0
  122. package/src/index.ts +50 -0
  123. package/src/logger/index.ts +6 -0
  124. package/src/logger/log-warnings.test.ts +351 -0
  125. package/src/logger/log-warnings.ts +119 -0
  126. package/src/middleware/__snapshots__/simulate-streaming-middleware.test.ts.snap +64 -0
  127. package/src/middleware/add-tool-input-examples-middleware.test.ts +476 -0
  128. package/src/middleware/add-tool-input-examples-middleware.ts +90 -0
  129. package/src/middleware/default-embedding-settings-middleware.test.ts +126 -0
  130. package/src/middleware/default-embedding-settings-middleware.ts +22 -0
  131. package/src/middleware/default-settings-middleware.test.ts +388 -0
  132. package/src/middleware/default-settings-middleware.ts +33 -0
  133. package/src/middleware/extract-json-middleware.test.ts +827 -0
  134. package/src/middleware/extract-json-middleware.ts +197 -0
  135. package/src/middleware/extract-reasoning-middleware.test.ts +1028 -0
  136. package/src/middleware/extract-reasoning-middleware.ts +238 -0
  137. package/src/middleware/index.ts +10 -0
  138. package/src/middleware/simulate-streaming-middleware.test.ts +911 -0
  139. package/src/middleware/simulate-streaming-middleware.ts +79 -0
  140. package/src/middleware/wrap-embedding-model.test.ts +358 -0
  141. package/src/middleware/wrap-embedding-model.ts +86 -0
  142. package/src/middleware/wrap-image-model.test.ts +423 -0
  143. package/src/middleware/wrap-image-model.ts +85 -0
  144. package/src/middleware/wrap-language-model.test.ts +518 -0
  145. package/src/middleware/wrap-language-model.ts +104 -0
  146. package/src/middleware/wrap-provider.test.ts +120 -0
  147. package/src/middleware/wrap-provider.ts +51 -0
  148. package/src/model/as-embedding-model-v3.test.ts +319 -0
  149. package/src/model/as-embedding-model-v3.ts +24 -0
  150. package/src/model/as-image-model-v3.test.ts +409 -0
  151. package/src/model/as-image-model-v3.ts +24 -0
  152. package/src/model/as-language-model-v3.test.ts +508 -0
  153. package/src/model/as-language-model-v3.ts +103 -0
  154. package/src/model/as-provider-v3.ts +36 -0
  155. package/src/model/as-speech-model-v3.test.ts +356 -0
  156. package/src/model/as-speech-model-v3.ts +24 -0
  157. package/src/model/as-transcription-model-v3.test.ts +529 -0
  158. package/src/model/as-transcription-model-v3.ts +24 -0
  159. package/src/model/resolve-model.test.ts +244 -0
  160. package/src/model/resolve-model.ts +126 -0
  161. package/src/prompt/call-settings.ts +148 -0
  162. package/src/prompt/content-part.ts +209 -0
  163. package/src/prompt/convert-to-language-model-prompt.test.ts +2018 -0
  164. package/src/prompt/convert-to-language-model-prompt.ts +442 -0
  165. package/src/prompt/create-tool-model-output.test.ts +508 -0
  166. package/src/prompt/create-tool-model-output.ts +34 -0
  167. package/src/prompt/data-content.test.ts +15 -0
  168. package/src/prompt/data-content.ts +134 -0
  169. package/src/prompt/index.ts +27 -0
  170. package/src/prompt/invalid-data-content-error.ts +29 -0
  171. package/src/prompt/invalid-message-role-error.ts +27 -0
  172. package/src/prompt/message-conversion-error.ts +28 -0
  173. package/src/prompt/message.ts +68 -0
  174. package/src/prompt/prepare-call-settings.test.ts +159 -0
  175. package/src/prompt/prepare-call-settings.ts +108 -0
  176. package/src/prompt/prepare-tools-and-tool-choice.test.ts +461 -0
  177. package/src/prompt/prepare-tools-and-tool-choice.ts +86 -0
  178. package/src/prompt/prompt.ts +43 -0
  179. package/src/prompt/split-data-url.ts +17 -0
  180. package/src/prompt/standardize-prompt.test.ts +82 -0
  181. package/src/prompt/standardize-prompt.ts +99 -0
  182. package/src/prompt/wrap-gateway-error.ts +29 -0
  183. package/src/registry/custom-provider.test.ts +211 -0
  184. package/src/registry/custom-provider.ts +155 -0
  185. package/src/registry/index.ts +7 -0
  186. package/src/registry/no-such-provider-error.ts +41 -0
  187. package/src/registry/provider-registry.test.ts +691 -0
  188. package/src/registry/provider-registry.ts +328 -0
  189. package/src/rerank/index.ts +2 -0
  190. package/src/rerank/rerank-result.ts +70 -0
  191. package/src/rerank/rerank.test.ts +516 -0
  192. package/src/rerank/rerank.ts +237 -0
  193. package/src/telemetry/assemble-operation-name.ts +21 -0
  194. package/src/telemetry/get-base-telemetry-attributes.ts +53 -0
  195. package/src/telemetry/get-tracer.ts +20 -0
  196. package/src/telemetry/noop-tracer.ts +69 -0
  197. package/src/telemetry/record-span.ts +63 -0
  198. package/src/telemetry/select-telemetry-attributes.ts +78 -0
  199. package/src/telemetry/select-temetry-attributes.test.ts +114 -0
  200. package/src/telemetry/stringify-for-telemetry.test.ts +114 -0
  201. package/src/telemetry/stringify-for-telemetry.ts +33 -0
  202. package/src/telemetry/telemetry-settings.ts +44 -0
  203. package/src/test/mock-embedding-model-v2.ts +35 -0
  204. package/src/test/mock-embedding-model-v3.ts +48 -0
  205. package/src/test/mock-image-model-v2.ts +28 -0
  206. package/src/test/mock-image-model-v3.ts +28 -0
  207. package/src/test/mock-language-model-v2.ts +72 -0
  208. package/src/test/mock-language-model-v3.ts +77 -0
  209. package/src/test/mock-provider-v2.ts +68 -0
  210. package/src/test/mock-provider-v3.ts +80 -0
  211. package/src/test/mock-reranking-model-v3.ts +25 -0
  212. package/src/test/mock-server-response.ts +69 -0
  213. package/src/test/mock-speech-model-v2.ts +24 -0
  214. package/src/test/mock-speech-model-v3.ts +24 -0
  215. package/src/test/mock-tracer.ts +156 -0
  216. package/src/test/mock-transcription-model-v2.ts +24 -0
  217. package/src/test/mock-transcription-model-v3.ts +24 -0
  218. package/src/test/mock-values.ts +4 -0
  219. package/src/test/not-implemented.ts +3 -0
  220. package/src/text-stream/create-text-stream-response.test.ts +38 -0
  221. package/src/text-stream/create-text-stream-response.ts +18 -0
  222. package/src/text-stream/index.ts +2 -0
  223. package/src/text-stream/pipe-text-stream-to-response.test.ts +38 -0
  224. package/src/text-stream/pipe-text-stream-to-response.ts +26 -0
  225. package/src/transcribe/index.ts +2 -0
  226. package/src/transcribe/transcribe-result.ts +60 -0
  227. package/src/transcribe/transcribe.test.ts +313 -0
  228. package/src/transcribe/transcribe.ts +173 -0
  229. package/src/types/embedding-model-middleware.ts +3 -0
  230. package/src/types/embedding-model.ts +18 -0
  231. package/src/types/image-model-middleware.ts +3 -0
  232. package/src/types/image-model-response-metadata.ts +16 -0
  233. package/src/types/image-model.ts +19 -0
  234. package/src/types/index.ts +29 -0
  235. package/src/types/json-value.ts +15 -0
  236. package/src/types/language-model-middleware.ts +3 -0
  237. package/src/types/language-model-request-metadata.ts +6 -0
  238. package/src/types/language-model-response-metadata.ts +21 -0
  239. package/src/types/language-model.ts +104 -0
  240. package/src/types/provider-metadata.ts +16 -0
  241. package/src/types/provider.ts +55 -0
  242. package/src/types/reranking-model.ts +6 -0
  243. package/src/types/speech-model-response-metadata.ts +21 -0
  244. package/src/types/speech-model.ts +6 -0
  245. package/src/types/transcription-model-response-metadata.ts +16 -0
  246. package/src/types/transcription-model.ts +9 -0
  247. package/src/types/usage.ts +200 -0
  248. package/src/types/warning.ts +7 -0
  249. package/src/ui/__snapshots__/append-response-messages.test.ts.snap +416 -0
  250. package/src/ui/__snapshots__/convert-to-model-messages.test.ts.snap +419 -0
  251. package/src/ui/__snapshots__/process-chat-text-response.test.ts.snap +142 -0
  252. package/src/ui/call-completion-api.ts +157 -0
  253. package/src/ui/chat-transport.ts +83 -0
  254. package/src/ui/chat.test-d.ts +233 -0
  255. package/src/ui/chat.test.ts +2695 -0
  256. package/src/ui/chat.ts +716 -0
  257. package/src/ui/convert-file-list-to-file-ui-parts.ts +36 -0
  258. package/src/ui/convert-to-model-messages.test.ts +2775 -0
  259. package/src/ui/convert-to-model-messages.ts +373 -0
  260. package/src/ui/default-chat-transport.ts +36 -0
  261. package/src/ui/direct-chat-transport.test.ts +446 -0
  262. package/src/ui/direct-chat-transport.ts +118 -0
  263. package/src/ui/http-chat-transport.test.ts +185 -0
  264. package/src/ui/http-chat-transport.ts +292 -0
  265. package/src/ui/index.ts +71 -0
  266. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +44 -0
  267. package/src/ui/last-assistant-message-is-complete-with-tool-calls.test.ts +371 -0
  268. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +39 -0
  269. package/src/ui/process-text-stream.test.ts +38 -0
  270. package/src/ui/process-text-stream.ts +16 -0
  271. package/src/ui/process-ui-message-stream.test.ts +8052 -0
  272. package/src/ui/process-ui-message-stream.ts +713 -0
  273. package/src/ui/text-stream-chat-transport.ts +23 -0
  274. package/src/ui/transform-text-to-ui-message-stream.test.ts +124 -0
  275. package/src/ui/transform-text-to-ui-message-stream.ts +27 -0
  276. package/src/ui/ui-messages.test.ts +48 -0
  277. package/src/ui/ui-messages.ts +534 -0
  278. package/src/ui/use-completion.ts +84 -0
  279. package/src/ui/validate-ui-messages.test.ts +1428 -0
  280. package/src/ui/validate-ui-messages.ts +476 -0
  281. package/src/ui-message-stream/create-ui-message-stream-response.test.ts +266 -0
  282. package/src/ui-message-stream/create-ui-message-stream-response.ts +32 -0
  283. package/src/ui-message-stream/create-ui-message-stream.test.ts +639 -0
  284. package/src/ui-message-stream/create-ui-message-stream.ts +124 -0
  285. package/src/ui-message-stream/get-response-ui-message-id.test.ts +55 -0
  286. package/src/ui-message-stream/get-response-ui-message-id.ts +24 -0
  287. package/src/ui-message-stream/handle-ui-message-stream-finish.test.ts +429 -0
  288. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +135 -0
  289. package/src/ui-message-stream/index.ts +13 -0
  290. package/src/ui-message-stream/json-to-sse-transform-stream.ts +12 -0
  291. package/src/ui-message-stream/pipe-ui-message-stream-to-response.test.ts +90 -0
  292. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +40 -0
  293. package/src/ui-message-stream/read-ui-message-stream.test.ts +122 -0
  294. package/src/ui-message-stream/read-ui-message-stream.ts +87 -0
  295. package/src/ui-message-stream/ui-message-chunks.test-d.ts +18 -0
  296. package/src/ui-message-stream/ui-message-chunks.ts +344 -0
  297. package/src/ui-message-stream/ui-message-stream-headers.ts +7 -0
  298. package/src/ui-message-stream/ui-message-stream-on-finish-callback.ts +32 -0
  299. package/src/ui-message-stream/ui-message-stream-response-init.ts +5 -0
  300. package/src/ui-message-stream/ui-message-stream-writer.ts +24 -0
  301. package/src/util/as-array.ts +3 -0
  302. package/src/util/async-iterable-stream.test.ts +241 -0
  303. package/src/util/async-iterable-stream.ts +94 -0
  304. package/src/util/consume-stream.ts +29 -0
  305. package/src/util/cosine-similarity.test.ts +57 -0
  306. package/src/util/cosine-similarity.ts +47 -0
  307. package/src/util/create-resolvable-promise.ts +30 -0
  308. package/src/util/create-stitchable-stream.test.ts +239 -0
  309. package/src/util/create-stitchable-stream.ts +112 -0
  310. package/src/util/data-url.ts +17 -0
  311. package/src/util/deep-partial.ts +84 -0
  312. package/src/util/detect-media-type.test.ts +670 -0
  313. package/src/util/detect-media-type.ts +184 -0
  314. package/src/util/download/download-function.ts +45 -0
  315. package/src/util/download/download.test.ts +69 -0
  316. package/src/util/download/download.ts +46 -0
  317. package/src/util/error-handler.ts +1 -0
  318. package/src/util/fix-json.test.ts +279 -0
  319. package/src/util/fix-json.ts +401 -0
  320. package/src/util/get-potential-start-index.test.ts +34 -0
  321. package/src/util/get-potential-start-index.ts +30 -0
  322. package/src/util/index.ts +11 -0
  323. package/src/util/is-deep-equal-data.test.ts +119 -0
  324. package/src/util/is-deep-equal-data.ts +48 -0
  325. package/src/util/is-non-empty-object.ts +5 -0
  326. package/src/util/job.ts +1 -0
  327. package/src/util/log-v2-compatibility-warning.ts +21 -0
  328. package/src/util/merge-abort-signals.test.ts +155 -0
  329. package/src/util/merge-abort-signals.ts +43 -0
  330. package/src/util/merge-objects.test.ts +118 -0
  331. package/src/util/merge-objects.ts +79 -0
  332. package/src/util/now.ts +4 -0
  333. package/src/util/parse-partial-json.test.ts +80 -0
  334. package/src/util/parse-partial-json.ts +30 -0
  335. package/src/util/prepare-headers.test.ts +51 -0
  336. package/src/util/prepare-headers.ts +14 -0
  337. package/src/util/prepare-retries.test.ts +10 -0
  338. package/src/util/prepare-retries.ts +47 -0
  339. package/src/util/retry-error.ts +41 -0
  340. package/src/util/retry-with-exponential-backoff.test.ts +446 -0
  341. package/src/util/retry-with-exponential-backoff.ts +154 -0
  342. package/src/util/serial-job-executor.test.ts +162 -0
  343. package/src/util/serial-job-executor.ts +36 -0
  344. package/src/util/simulate-readable-stream.test.ts +98 -0
  345. package/src/util/simulate-readable-stream.ts +39 -0
  346. package/src/util/split-array.test.ts +60 -0
  347. package/src/util/split-array.ts +20 -0
  348. package/src/util/value-of.ts +65 -0
  349. package/src/util/write-to-server-response.test.ts +266 -0
  350. package/src/util/write-to-server-response.ts +49 -0
  351. package/src/version.ts +5 -0
@@ -0,0 +1,163 @@
1
+ import {
2
+ AssistantContent,
3
+ AssistantModelMessage,
4
+ ToolContent,
5
+ ToolModelMessage,
6
+ } from '../prompt';
7
+ import { createToolModelOutput } from '../prompt/create-tool-model-output';
8
+ import { ContentPart } from './content-part';
9
+ import { ToolSet } from './tool-set';
10
+
11
+ /**
12
+ Converts the result of a `generateText` or `streamText` call to a list of response messages.
13
+ */
14
+ export async function toResponseMessages<TOOLS extends ToolSet>({
15
+ content: inputContent,
16
+ tools,
17
+ }: {
18
+ content: Array<ContentPart<TOOLS>>;
19
+ tools: TOOLS | undefined;
20
+ }): Promise<Array<AssistantModelMessage | ToolModelMessage>> {
21
+ const responseMessages: Array<AssistantModelMessage | ToolModelMessage> = [];
22
+
23
+ const content: AssistantContent = [];
24
+ for (const part of inputContent) {
25
+ // Skip sources - they are response-only content that no provider expects back
26
+ if (part.type === 'source') {
27
+ continue;
28
+ }
29
+
30
+ // Skip non-provider-executed tool results/errors (they go in the tool message)
31
+ if (
32
+ (part.type === 'tool-result' || part.type === 'tool-error') &&
33
+ !part.providerExecuted
34
+ ) {
35
+ continue;
36
+ }
37
+
38
+ // Skip empty text
39
+ if (part.type === 'text' && part.text.length === 0) {
40
+ continue;
41
+ }
42
+
43
+ switch (part.type) {
44
+ case 'text':
45
+ content.push({
46
+ type: 'text',
47
+ text: part.text,
48
+ providerOptions: part.providerMetadata,
49
+ });
50
+ break;
51
+ case 'reasoning':
52
+ content.push({
53
+ type: 'reasoning',
54
+ text: part.text,
55
+ providerOptions: part.providerMetadata,
56
+ });
57
+ break;
58
+ case 'file':
59
+ content.push({
60
+ type: 'file',
61
+ data: part.file.base64,
62
+ mediaType: part.file.mediaType,
63
+ providerOptions: part.providerMetadata,
64
+ });
65
+ break;
66
+ case 'tool-call':
67
+ content.push({
68
+ type: 'tool-call',
69
+ toolCallId: part.toolCallId,
70
+ toolName: part.toolName,
71
+ input: part.input,
72
+ providerExecuted: part.providerExecuted,
73
+ providerOptions: part.providerMetadata,
74
+ });
75
+ break;
76
+ case 'tool-result': {
77
+ const output = await createToolModelOutput({
78
+ toolCallId: part.toolCallId,
79
+ input: part.input,
80
+ tool: tools?.[part.toolName],
81
+ output: part.output,
82
+ errorMode: 'none',
83
+ });
84
+ content.push({
85
+ type: 'tool-result',
86
+ toolCallId: part.toolCallId,
87
+ toolName: part.toolName,
88
+ output,
89
+ providerOptions: part.providerMetadata,
90
+ });
91
+ break;
92
+ }
93
+ case 'tool-error': {
94
+ const output = await createToolModelOutput({
95
+ toolCallId: part.toolCallId,
96
+ input: part.input,
97
+ tool: tools?.[part.toolName],
98
+ output: part.error,
99
+ errorMode: 'json',
100
+ });
101
+ content.push({
102
+ type: 'tool-result',
103
+ toolCallId: part.toolCallId,
104
+ toolName: part.toolName,
105
+ output,
106
+ providerOptions: part.providerMetadata,
107
+ });
108
+ break;
109
+ }
110
+ case 'tool-approval-request':
111
+ content.push({
112
+ type: 'tool-approval-request',
113
+ approvalId: part.approvalId,
114
+ toolCallId: part.toolCall.toolCallId,
115
+ });
116
+ break;
117
+ }
118
+ }
119
+
120
+ if (content.length > 0) {
121
+ responseMessages.push({
122
+ role: 'assistant',
123
+ content,
124
+ });
125
+ }
126
+
127
+ const toolResultContent: ToolContent = [];
128
+ for (const part of inputContent) {
129
+ if (
130
+ !(part.type === 'tool-result' || part.type === 'tool-error') ||
131
+ part.providerExecuted
132
+ ) {
133
+ continue;
134
+ }
135
+
136
+ const output = await createToolModelOutput({
137
+ toolCallId: part.toolCallId,
138
+ input: part.input,
139
+ tool: tools?.[part.toolName],
140
+ output: part.type === 'tool-result' ? part.output : part.error,
141
+ errorMode: part.type === 'tool-error' ? 'text' : 'none',
142
+ });
143
+
144
+ toolResultContent.push({
145
+ type: 'tool-result',
146
+ toolCallId: part.toolCallId,
147
+ toolName: part.toolName,
148
+ output,
149
+ ...(part.providerMetadata != null
150
+ ? { providerOptions: part.providerMetadata }
151
+ : {}),
152
+ });
153
+ }
154
+
155
+ if (toolResultContent.length > 0) {
156
+ responseMessages.push({
157
+ role: 'tool',
158
+ content: toolResultContent,
159
+ });
160
+ }
161
+
162
+ return responseMessages;
163
+ }
@@ -0,0 +1,21 @@
1
+ import { TypedToolCall } from './tool-call';
2
+ import { ToolSet } from './tool-set';
3
+
4
+ /**
5
+ * Output part that indicates that a tool approval request has been made.
6
+ *
7
+ * The tool approval request can be approved or denied in the next tool message.
8
+ */
9
+ export type ToolApprovalRequestOutput<TOOLS extends ToolSet> = {
10
+ type: 'tool-approval-request';
11
+
12
+ /**
13
+ * ID of the tool approval request.
14
+ */
15
+ approvalId: string;
16
+
17
+ /**
18
+ * Tool call that the approval request is for.
19
+ */
20
+ toolCall: TypedToolCall<TOOLS>;
21
+ };
@@ -0,0 +1,27 @@
1
+ import { JSONSchema7, LanguageModelV3ToolCall } from '@ai-sdk/provider';
2
+ import { InvalidToolInputError } from '../error/invalid-tool-input-error';
3
+ import { NoSuchToolError } from '../error/no-such-tool-error';
4
+ import { ModelMessage, SystemModelMessage } from '../prompt';
5
+ import { ToolSet } from './tool-set';
6
+
7
+ /**
8
+ * A function that attempts to repair a tool call that failed to parse.
9
+ *
10
+ * It receives the error and the context as arguments and returns the repair
11
+ * tool call JSON as text.
12
+ *
13
+ * @param options.system - The system prompt.
14
+ * @param options.messages - The messages in the current generation step.
15
+ * @param options.toolCall - The tool call that failed to parse.
16
+ * @param options.tools - The tools that are available.
17
+ * @param options.inputSchema - A function that returns the JSON Schema for a tool.
18
+ * @param options.error - The error that occurred while parsing the tool call.
19
+ */
20
+ export type ToolCallRepairFunction<TOOLS extends ToolSet> = (options: {
21
+ system: string | SystemModelMessage | Array<SystemModelMessage> | undefined;
22
+ messages: ModelMessage[];
23
+ toolCall: LanguageModelV3ToolCall;
24
+ tools: TOOLS;
25
+ inputSchema: (options: { toolName: string }) => PromiseLike<JSONSchema7>;
26
+ error: NoSuchToolError | InvalidToolInputError;
27
+ }) => Promise<LanguageModelV3ToolCall | null>;
@@ -0,0 +1,47 @@
1
+ import { Tool } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types';
3
+ import { ValueOf } from '../util/value-of';
4
+ import { ToolSet } from './tool-set';
5
+
6
+ type BaseToolCall = {
7
+ type: 'tool-call';
8
+ toolCallId: string;
9
+ providerExecuted?: boolean;
10
+ providerMetadata?: ProviderMetadata;
11
+ };
12
+
13
+ export type StaticToolCall<TOOLS extends ToolSet> = ValueOf<{
14
+ [NAME in keyof TOOLS]: BaseToolCall & {
15
+ toolName: NAME & string;
16
+ input: TOOLS[NAME] extends Tool<infer PARAMETERS> ? PARAMETERS : never;
17
+ dynamic?: false | undefined;
18
+ invalid?: false | undefined;
19
+ error?: never;
20
+ title?: string;
21
+ };
22
+ }>;
23
+
24
+ export type DynamicToolCall = BaseToolCall & {
25
+ toolName: string;
26
+ input: unknown;
27
+ dynamic: true;
28
+ title?: string;
29
+
30
+ /**
31
+ * True if this is caused by an unparsable tool call or
32
+ * a tool that does not exist.
33
+ */
34
+ // Added into DynamicToolCall to avoid breaking changes.
35
+ // TODO AI SDK 6: separate into a new InvalidToolCall type
36
+ invalid?: boolean;
37
+
38
+ /**
39
+ * The error that caused the tool call to be invalid.
40
+ */
41
+ // TODO AI SDK 6: separate into a new InvalidToolCall type
42
+ error?: unknown;
43
+ };
44
+
45
+ export type TypedToolCall<TOOLS extends ToolSet> =
46
+ | StaticToolCall<TOOLS>
47
+ | DynamicToolCall;
@@ -0,0 +1,34 @@
1
+ import { InferToolInput } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types';
3
+ import { ValueOf } from '../util/value-of';
4
+ import { ToolSet } from './tool-set';
5
+
6
+ export type StaticToolError<TOOLS extends ToolSet> = ValueOf<{
7
+ [NAME in keyof TOOLS]: {
8
+ type: 'tool-error';
9
+ toolCallId: string;
10
+ toolName: NAME & string;
11
+ input: InferToolInput<TOOLS[NAME]>;
12
+ error: unknown;
13
+ providerExecuted?: boolean;
14
+ providerMetadata?: ProviderMetadata;
15
+ dynamic?: false | undefined;
16
+ title?: string;
17
+ };
18
+ }>;
19
+
20
+ export type DynamicToolError = {
21
+ type: 'tool-error';
22
+ toolCallId: string;
23
+ toolName: string;
24
+ input: unknown;
25
+ error: unknown;
26
+ providerExecuted?: boolean;
27
+ providerMetadata?: ProviderMetadata;
28
+ dynamic: true;
29
+ title?: string;
30
+ };
31
+
32
+ export type TypedToolError<TOOLS extends ToolSet> =
33
+ | StaticToolError<TOOLS>
34
+ | DynamicToolError;
@@ -0,0 +1,21 @@
1
+ import { ValueOf } from '../util/value-of';
2
+ import { ToolSet } from './tool-set';
3
+
4
+ /**
5
+ * Tool output when the tool execution has been denied (for static tools).
6
+ */
7
+ export type StaticToolOutputDenied<TOOLS extends ToolSet> = ValueOf<{
8
+ [NAME in keyof TOOLS]: {
9
+ type: 'tool-output-denied';
10
+ toolCallId: string;
11
+ toolName: NAME & string;
12
+ providerExecuted?: boolean;
13
+ dynamic?: false | undefined;
14
+ };
15
+ }>;
16
+
17
+ /**
18
+ * Tool output when the tool execution has been denied.
19
+ */
20
+ export type TypedToolOutputDenied<TOOLS extends ToolSet> =
21
+ StaticToolOutputDenied<TOOLS>;
@@ -0,0 +1,7 @@
1
+ import { TypedToolError } from './tool-error';
2
+ import { TypedToolResult } from './tool-result';
3
+ import { ToolSet } from './tool-set';
4
+
5
+ export type ToolOutput<TOOLS extends ToolSet> =
6
+ | TypedToolResult<TOOLS>
7
+ | TypedToolError<TOOLS>;
@@ -0,0 +1,36 @@
1
+ import { InferToolInput, InferToolOutput } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types';
3
+ import { ValueOf } from '../../src/util/value-of';
4
+ import { ToolSet } from './tool-set';
5
+
6
+ export type StaticToolResult<TOOLS extends ToolSet> = ValueOf<{
7
+ [NAME in keyof TOOLS]: {
8
+ type: 'tool-result';
9
+ toolCallId: string;
10
+ toolName: NAME & string;
11
+ input: InferToolInput<TOOLS[NAME]>;
12
+ output: InferToolOutput<TOOLS[NAME]>;
13
+ providerExecuted?: boolean;
14
+ providerMetadata?: ProviderMetadata;
15
+ dynamic?: false | undefined;
16
+ preliminary?: boolean;
17
+ title?: string;
18
+ };
19
+ }>;
20
+
21
+ export type DynamicToolResult = {
22
+ type: 'tool-result';
23
+ toolCallId: string;
24
+ toolName: string;
25
+ input: unknown;
26
+ output: unknown;
27
+ providerExecuted?: boolean;
28
+ providerMetadata?: ProviderMetadata;
29
+ dynamic: true;
30
+ preliminary?: boolean;
31
+ title?: string;
32
+ };
33
+
34
+ export type TypedToolResult<TOOLS extends ToolSet> =
35
+ | StaticToolResult<TOOLS>
36
+ | DynamicToolResult;
@@ -0,0 +1,14 @@
1
+ import { Tool } from '@ai-sdk/provider-utils';
2
+
3
+ export type ToolSet = Record<
4
+ string,
5
+ (Tool<never, never> | Tool<any, any> | Tool<any, never> | Tool<never, any>) &
6
+ Pick<
7
+ Tool<any, any>,
8
+ | 'execute'
9
+ | 'onInputAvailable'
10
+ | 'onInputStart'
11
+ | 'onInputDelta'
12
+ | 'needsApproval'
13
+ >
14
+ >;
package/src/global.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { ProviderV3 } from '@ai-sdk/provider';
2
+ import { LogWarningsFunction } from './logger/log-warnings';
3
+
4
+ // add AI SDK default provider to the globalThis object
5
+ declare global {
6
+ /**
7
+ * The default provider to use for the AI SDK.
8
+ * String model ids are resolved to the default provider and model id.
9
+ *
10
+ * If not set, the default provider is the Vercel AI gateway provider.
11
+ *
12
+ * @see https://ai-sdk.dev/docs/ai-sdk-core/provider-management#global-provider-configuration
13
+ */
14
+ var AI_SDK_DEFAULT_PROVIDER: ProviderV3 | undefined;
15
+
16
+ /**
17
+ * The warning logger to use for the AI SDK.
18
+ *
19
+ * If not set, the default logger is the console.warn function.
20
+ *
21
+ * If set to false, no warnings are logged.
22
+ */
23
+ var AI_SDK_LOG_WARNINGS: LogWarningsFunction | undefined | false;
24
+ }
package/src/index.ts ADDED
@@ -0,0 +1,50 @@
1
+ // re-exports:
2
+ export { createGateway, gateway, type GatewayModelId } from '@ai-sdk/gateway';
3
+ export {
4
+ asSchema,
5
+ createIdGenerator,
6
+ dynamicTool,
7
+ generateId,
8
+ jsonSchema,
9
+ parseJsonEventStream,
10
+ tool,
11
+ zodSchema,
12
+ type FlexibleSchema,
13
+ type IdGenerator,
14
+ type InferSchema,
15
+ type InferToolInput,
16
+ type InferToolOutput,
17
+ type Schema,
18
+ type Tool,
19
+ type ToolApprovalRequest,
20
+ type ToolApprovalResponse,
21
+ type ToolCallOptions,
22
+ type ToolExecutionOptions,
23
+ type ToolExecuteFunction,
24
+ } from '@ai-sdk/provider-utils';
25
+
26
+ // directory exports
27
+ export * from './agent';
28
+ export * from './embed';
29
+ export * from './error';
30
+ export * from './generate-image';
31
+ export * from './generate-object';
32
+ export * from './generate-speech';
33
+ export * from './generate-text';
34
+ export * from './logger';
35
+ export * from './middleware';
36
+ export * from './prompt';
37
+ export * from './registry';
38
+ export * from './rerank';
39
+ export * from './text-stream';
40
+ export * from './transcribe';
41
+ export * from './types';
42
+ export * from './ui';
43
+ export * from './ui-message-stream';
44
+ export * from './util';
45
+
46
+ // telemetry types:
47
+ export type { TelemetrySettings } from './telemetry/telemetry-settings';
48
+
49
+ // import globals
50
+ import './global';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @deprecated Use `LogWarningsFunction` instead.
3
+ */
4
+ export type { LogWarningsFunction as Experimental_LogWarningsFunction } from './log-warnings';
5
+
6
+ export { type LogWarningsFunction } from './log-warnings';