@mastra/core 1.0.0-beta.2 → 1.0.0-beta.4

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 (313) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/dist/agent/agent-legacy.d.ts +2 -2
  3. package/dist/agent/agent-legacy.d.ts.map +1 -1
  4. package/dist/agent/agent.d.ts +1 -1
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.types.d.ts +3 -2
  7. package/dist/agent/agent.types.d.ts.map +1 -1
  8. package/dist/agent/index.cjs +9 -9
  9. package/dist/agent/index.js +2 -2
  10. package/dist/agent/message-list/index.cjs +3 -3
  11. package/dist/agent/message-list/index.d.ts +5 -0
  12. package/dist/agent/message-list/index.d.ts.map +1 -1
  13. package/dist/agent/message-list/index.js +1 -1
  14. package/dist/agent/message-list/prompt/convert-file.d.ts +1 -1
  15. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
  16. package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -1
  17. package/dist/agent/types.d.ts +1 -0
  18. package/dist/agent/types.d.ts.map +1 -1
  19. package/dist/agent/utils.d.ts.map +1 -1
  20. package/dist/agent/workflows/prepare-stream/index.d.ts +2 -1
  21. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  22. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts +3 -1
  23. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  24. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +2 -1
  25. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
  26. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +2 -1
  27. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  28. package/dist/agent/workflows/prepare-stream/stream-step.d.ts +3 -1
  29. package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
  30. package/dist/{chunk-YCVEJ3UN.cjs → chunk-2NVBZKZI.cjs} +988 -233
  31. package/dist/chunk-2NVBZKZI.cjs.map +1 -0
  32. package/dist/{chunk-SNPVZPLB.js → chunk-2OTDXX73.js} +6 -5
  33. package/dist/chunk-2OTDXX73.js.map +1 -0
  34. package/dist/chunk-3PSWNGBF.js +3 -0
  35. package/dist/{chunk-ZV5CC35D.js.map → chunk-3PSWNGBF.js.map} +1 -1
  36. package/dist/{chunk-ZGHTOYHW.js → chunk-3RW5EMSB.js} +155 -24
  37. package/dist/chunk-3RW5EMSB.js.map +1 -0
  38. package/dist/chunk-3W5RQCCY.cjs +440 -0
  39. package/dist/chunk-3W5RQCCY.cjs.map +1 -0
  40. package/dist/{chunk-ET6UOTTU.cjs → chunk-4IKJAKCD.cjs} +40 -4
  41. package/dist/chunk-4IKJAKCD.cjs.map +1 -0
  42. package/dist/{chunk-2ZVKF4HP.cjs → chunk-4RXG622P.cjs} +184 -285
  43. package/dist/chunk-4RXG622P.cjs.map +1 -0
  44. package/dist/{chunk-22443P6A.cjs → chunk-5WXEYDFI.cjs} +173 -42
  45. package/dist/chunk-5WXEYDFI.cjs.map +1 -0
  46. package/dist/{chunk-ZWNI5IWX.cjs → chunk-CYVNOIXS.cjs} +13 -12
  47. package/dist/chunk-CYVNOIXS.cjs.map +1 -0
  48. package/dist/{chunk-4CDL2QJT.js → chunk-D6EDHNGV.js} +53 -16
  49. package/dist/chunk-D6EDHNGV.js.map +1 -0
  50. package/dist/chunk-FVNT7VTO.js +436 -0
  51. package/dist/chunk-FVNT7VTO.js.map +1 -0
  52. package/dist/{chunk-WM6CK2F3.cjs → chunk-HBJPYQRN.cjs} +57 -19
  53. package/dist/chunk-HBJPYQRN.cjs.map +1 -0
  54. package/dist/{chunk-HDJFSJCK.js → chunk-IHJDOC3A.js} +35 -587
  55. package/dist/chunk-IHJDOC3A.js.map +1 -0
  56. package/dist/{chunk-QUKUN6NR.cjs → chunk-ISMGVGUM.cjs} +105 -5
  57. package/dist/chunk-ISMGVGUM.cjs.map +1 -0
  58. package/dist/{chunk-JYYQQEBH.cjs → chunk-IWB65P37.cjs} +241 -4
  59. package/dist/chunk-IWB65P37.cjs.map +1 -0
  60. package/dist/{chunk-MV7KHWUT.js → chunk-IWQDBVJK.js} +25 -4
  61. package/dist/chunk-IWQDBVJK.js.map +1 -0
  62. package/dist/{chunk-XEVG546F.js → chunk-JXESKY4A.js} +3 -3
  63. package/dist/{chunk-XEVG546F.js.map → chunk-JXESKY4A.js.map} +1 -1
  64. package/dist/{chunk-7AHYOMHJ.js → chunk-KEURQGCQ.js} +40 -5
  65. package/dist/chunk-KEURQGCQ.js.map +1 -0
  66. package/dist/{chunk-JPGVRWWL.js → chunk-MDKPL2R2.js} +470 -124
  67. package/dist/chunk-MDKPL2R2.js.map +1 -0
  68. package/dist/{chunk-UIZSWUKP.js → chunk-NZAXAFI3.js} +104 -6
  69. package/dist/chunk-NZAXAFI3.js.map +1 -0
  70. package/dist/{chunk-VOY2RXOC.cjs → chunk-O6NA3Z43.cjs} +6 -6
  71. package/dist/{chunk-VOY2RXOC.cjs.map → chunk-O6NA3Z43.cjs.map} +1 -1
  72. package/dist/chunk-PE3V7GUL.cjs +4 -0
  73. package/dist/{chunk-LJFJTTZQ.cjs.map → chunk-PE3V7GUL.cjs.map} +1 -1
  74. package/dist/{chunk-I4CXL4SR.js → chunk-RXDJL5QT.js} +5 -4
  75. package/dist/chunk-RXDJL5QT.js.map +1 -0
  76. package/dist/{chunk-LWBQ4P4N.cjs → chunk-S6OEQHEI.cjs} +62 -614
  77. package/dist/chunk-S6OEQHEI.cjs.map +1 -0
  78. package/dist/{chunk-7PO6SEJF.js → chunk-U7VECK2G.js} +240 -3
  79. package/dist/chunk-U7VECK2G.js.map +1 -0
  80. package/dist/{chunk-ECFXGXWO.cjs → chunk-VSM3NLUX.cjs} +312 -210
  81. package/dist/chunk-VSM3NLUX.cjs.map +1 -0
  82. package/dist/{chunk-IQO7ANVS.cjs → chunk-VZC4BWWH.cjs} +10 -9
  83. package/dist/chunk-VZC4BWWH.cjs.map +1 -0
  84. package/dist/{chunk-JV2KH24V.js → chunk-W3DD3XP5.js} +312 -210
  85. package/dist/chunk-W3DD3XP5.js.map +1 -0
  86. package/dist/{chunk-GGYKYORQ.cjs → chunk-WQSGX6XA.cjs} +27 -6
  87. package/dist/chunk-WQSGX6XA.cjs.map +1 -0
  88. package/dist/{chunk-W7UH2PWL.js → chunk-WTYNK7Q4.js} +179 -282
  89. package/dist/chunk-WTYNK7Q4.js.map +1 -0
  90. package/dist/{chunk-7CBEP2ZQ.js → chunk-XXBWX7DT.js} +949 -197
  91. package/dist/chunk-XXBWX7DT.js.map +1 -0
  92. package/dist/{chunk-CB575O6L.cjs → chunk-ZCVTH3CH.cjs} +470 -130
  93. package/dist/chunk-ZCVTH3CH.cjs.map +1 -0
  94. package/dist/evals/base.d.ts.map +1 -1
  95. package/dist/evals/index.cjs +4 -4
  96. package/dist/evals/index.js +1 -1
  97. package/dist/evals/scoreTraces/index.cjs +5 -4
  98. package/dist/evals/scoreTraces/index.cjs.map +1 -1
  99. package/dist/evals/scoreTraces/index.js +3 -2
  100. package/dist/evals/scoreTraces/index.js.map +1 -1
  101. package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
  102. package/dist/index.cjs +2 -2
  103. package/dist/index.js +1 -1
  104. package/dist/integration/index.cjs +2 -2
  105. package/dist/integration/index.js +1 -1
  106. package/dist/llm/index.cjs +26 -10
  107. package/dist/llm/index.d.ts +1 -0
  108. package/dist/llm/index.d.ts.map +1 -1
  109. package/dist/llm/index.js +5 -1
  110. package/dist/llm/model/aisdk/v5/model.d.ts +47 -0
  111. package/dist/llm/model/aisdk/v5/model.d.ts.map +1 -0
  112. package/dist/llm/model/gateways/base.d.ts +8 -0
  113. package/dist/llm/model/gateways/base.d.ts.map +1 -1
  114. package/dist/llm/model/gateways/models-dev.d.ts +1 -0
  115. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  116. package/dist/llm/model/gateways/netlify.d.ts +2 -1
  117. package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
  118. package/dist/llm/model/is-v2-model.d.ts +3 -0
  119. package/dist/llm/model/is-v2-model.d.ts.map +1 -0
  120. package/dist/llm/model/model-method-from-agent.d.ts +4 -0
  121. package/dist/llm/model/model-method-from-agent.d.ts.map +1 -0
  122. package/dist/llm/model/model.loop.d.ts +2 -2
  123. package/dist/llm/model/model.loop.d.ts.map +1 -1
  124. package/dist/llm/model/model.loop.types.d.ts +2 -0
  125. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  126. package/dist/llm/model/provider-registry.d.ts +11 -1
  127. package/dist/llm/model/provider-registry.d.ts.map +1 -1
  128. package/dist/llm/model/provider-types.generated.d.ts +56 -7
  129. package/dist/llm/model/registry-generator.d.ts.map +1 -1
  130. package/dist/llm/model/resolve-model.d.ts +1 -1
  131. package/dist/llm/model/resolve-model.d.ts.map +1 -1
  132. package/dist/llm/model/router.d.ts +12 -5
  133. package/dist/llm/model/router.d.ts.map +1 -1
  134. package/dist/llm/model/shared.types.d.ts +10 -4
  135. package/dist/llm/model/shared.types.d.ts.map +1 -1
  136. package/dist/loop/index.cjs +2 -2
  137. package/dist/loop/index.js +1 -1
  138. package/dist/loop/network/index.d.ts.map +1 -1
  139. package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts +37 -0
  140. package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts.map +1 -0
  141. package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
  142. package/dist/loop/test-utils/generateText.d.ts.map +1 -1
  143. package/dist/loop/test-utils/options.d.ts.map +1 -1
  144. package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
  145. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  146. package/dist/loop/test-utils/textStream.d.ts.map +1 -1
  147. package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
  148. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  149. package/dist/loop/test-utils/utils.d.ts +1 -1
  150. package/dist/loop/test-utils/utils.d.ts.map +1 -1
  151. package/dist/loop/types.d.ts +8 -3
  152. package/dist/loop/types.d.ts.map +1 -1
  153. package/dist/loop/workflows/agentic-execution/index.d.ts +12 -12
  154. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  155. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +9 -9
  156. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  157. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +4 -4
  158. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  159. package/dist/loop/workflows/agentic-loop/index.d.ts +13 -12
  160. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  161. package/dist/loop/workflows/run-state.d.ts +2 -2
  162. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  163. package/dist/loop/workflows/schema.d.ts +4 -4
  164. package/dist/loop/workflows/stream.d.ts.map +1 -1
  165. package/dist/mastra/index.cjs +2 -2
  166. package/dist/mastra/index.d.ts +127 -3
  167. package/dist/mastra/index.d.ts.map +1 -1
  168. package/dist/mastra/index.js +1 -1
  169. package/dist/memory/index.cjs +8 -8
  170. package/dist/memory/index.js +4 -4
  171. package/dist/models-dev-6PRLJKVZ.js +3 -0
  172. package/dist/{models-dev-DNBKXHT4.js.map → models-dev-6PRLJKVZ.js.map} +1 -1
  173. package/dist/models-dev-WHMI5G6Y.cjs +12 -0
  174. package/dist/{models-dev-YBEEQIX6.cjs.map → models-dev-WHMI5G6Y.cjs.map} +1 -1
  175. package/dist/netlify-46I3SNNV.cjs +12 -0
  176. package/dist/{netlify-GWNGSIRZ.cjs.map → netlify-46I3SNNV.cjs.map} +1 -1
  177. package/dist/netlify-EBQ6YUC6.js +3 -0
  178. package/dist/{netlify-7G2L5VSH.js.map → netlify-EBQ6YUC6.js.map} +1 -1
  179. package/dist/processors/index.cjs +11 -11
  180. package/dist/processors/index.js +1 -1
  181. package/dist/provider-registry-HDG6UMUC.js +3 -0
  182. package/dist/provider-registry-HDG6UMUC.js.map +1 -0
  183. package/dist/provider-registry-RP2W4B24.cjs +40 -0
  184. package/dist/provider-registry-RP2W4B24.cjs.map +1 -0
  185. package/dist/provider-registry.json +140 -18
  186. package/dist/{registry-generator-MK63POJO.cjs → registry-generator-JPCV47SC.cjs} +6 -4
  187. package/dist/registry-generator-JPCV47SC.cjs.map +1 -0
  188. package/dist/{registry-generator-H4YNODDH.js → registry-generator-XD4FPZTU.js} +6 -4
  189. package/dist/registry-generator-XD4FPZTU.js.map +1 -0
  190. package/dist/relevance/index.cjs +2 -2
  191. package/dist/relevance/index.js +1 -1
  192. package/dist/server/auth.d.ts +11 -0
  193. package/dist/server/auth.d.ts.map +1 -1
  194. package/dist/server/index.cjs +12 -1
  195. package/dist/server/index.cjs.map +1 -1
  196. package/dist/server/index.d.ts +4 -0
  197. package/dist/server/index.d.ts.map +1 -1
  198. package/dist/server/index.js +12 -1
  199. package/dist/server/index.js.map +1 -1
  200. package/dist/storage/domains/workflows/inmemory.d.ts +1 -1
  201. package/dist/storage/domains/workflows/inmemory.d.ts.map +1 -1
  202. package/dist/storage/index.cjs +29 -29
  203. package/dist/storage/index.js +1 -1
  204. package/dist/storage/types.d.ts +2 -1
  205. package/dist/storage/types.d.ts.map +1 -1
  206. package/dist/stream/RunOutput.d.ts +1 -1
  207. package/dist/stream/RunOutput.d.ts.map +1 -1
  208. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
  209. package/dist/stream/aisdk/v5/execute.d.ts +6 -3
  210. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  211. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  212. package/dist/stream/base/input.d.ts +1 -1
  213. package/dist/stream/base/output.d.ts.map +1 -1
  214. package/dist/stream/index.cjs +11 -11
  215. package/dist/stream/index.js +2 -2
  216. package/dist/stream/types.d.ts +4 -3
  217. package/dist/stream/types.d.ts.map +1 -1
  218. package/dist/test-utils/llm-mock.cjs +68 -31
  219. package/dist/test-utils/llm-mock.cjs.map +1 -1
  220. package/dist/test-utils/llm-mock.d.ts +4 -2
  221. package/dist/test-utils/llm-mock.d.ts.map +1 -1
  222. package/dist/test-utils/llm-mock.js +67 -30
  223. package/dist/test-utils/llm-mock.js.map +1 -1
  224. package/dist/tools/index.cjs +4 -4
  225. package/dist/tools/index.js +1 -1
  226. package/dist/tools/is-vercel-tool.cjs +2 -2
  227. package/dist/tools/is-vercel-tool.js +1 -1
  228. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  229. package/dist/tools/tool.d.ts.map +1 -1
  230. package/dist/tools/types.d.ts +1 -0
  231. package/dist/tools/types.d.ts.map +1 -1
  232. package/dist/tools/validation.d.ts +12 -0
  233. package/dist/tools/validation.d.ts.map +1 -1
  234. package/dist/utils.cjs +25 -21
  235. package/dist/utils.d.ts +4 -1
  236. package/dist/utils.d.ts.map +1 -1
  237. package/dist/utils.js +1 -1
  238. package/dist/voice/aisdk/index.d.ts +3 -0
  239. package/dist/voice/aisdk/index.d.ts.map +1 -0
  240. package/dist/voice/aisdk/speech.d.ts +23 -0
  241. package/dist/voice/aisdk/speech.d.ts.map +1 -0
  242. package/dist/voice/aisdk/transcription.d.ts +22 -0
  243. package/dist/voice/aisdk/transcription.d.ts.map +1 -0
  244. package/dist/voice/composite-voice.d.ts +4 -3
  245. package/dist/voice/composite-voice.d.ts.map +1 -1
  246. package/dist/voice/index.cjs +12 -4
  247. package/dist/voice/index.d.ts +1 -0
  248. package/dist/voice/index.d.ts.map +1 -1
  249. package/dist/voice/index.js +1 -1
  250. package/dist/workflows/default.d.ts +24 -8
  251. package/dist/workflows/default.d.ts.map +1 -1
  252. package/dist/workflows/evented/execution-engine.d.ts +3 -1
  253. package/dist/workflows/evented/execution-engine.d.ts.map +1 -1
  254. package/dist/workflows/evented/index.cjs +10 -10
  255. package/dist/workflows/evented/index.js +1 -1
  256. package/dist/workflows/evented/workflow-event-processor/index.d.ts +5 -4
  257. package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
  258. package/dist/workflows/evented/workflow-event-processor/loop.d.ts +1 -1
  259. package/dist/workflows/evented/workflow-event-processor/loop.d.ts.map +1 -1
  260. package/dist/workflows/evented/workflow-event-processor/parallel.d.ts +2 -2
  261. package/dist/workflows/evented/workflow-event-processor/parallel.d.ts.map +1 -1
  262. package/dist/workflows/evented/workflow-event-processor/sleep.d.ts +2 -2
  263. package/dist/workflows/evented/workflow-event-processor/sleep.d.ts.map +1 -1
  264. package/dist/workflows/evented/workflow.d.ts +2 -1
  265. package/dist/workflows/evented/workflow.d.ts.map +1 -1
  266. package/dist/workflows/execution-engine.d.ts +4 -2
  267. package/dist/workflows/execution-engine.d.ts.map +1 -1
  268. package/dist/workflows/index.cjs +28 -16
  269. package/dist/workflows/index.js +1 -1
  270. package/dist/workflows/step.d.ts +1 -0
  271. package/dist/workflows/step.d.ts.map +1 -1
  272. package/dist/workflows/types.d.ts +54 -2
  273. package/dist/workflows/types.d.ts.map +1 -1
  274. package/dist/workflows/utils.d.ts +20 -0
  275. package/dist/workflows/utils.d.ts.map +1 -1
  276. package/dist/workflows/workflow.d.ts +108 -40
  277. package/dist/workflows/workflow.d.ts.map +1 -1
  278. package/package.json +19 -27
  279. package/src/llm/model/provider-types.generated.d.ts +56 -7
  280. package/dist/chunk-22443P6A.cjs.map +0 -1
  281. package/dist/chunk-2ZVKF4HP.cjs.map +0 -1
  282. package/dist/chunk-4CDL2QJT.js.map +0 -1
  283. package/dist/chunk-7AHYOMHJ.js.map +0 -1
  284. package/dist/chunk-7CBEP2ZQ.js.map +0 -1
  285. package/dist/chunk-7PO6SEJF.js.map +0 -1
  286. package/dist/chunk-CB575O6L.cjs.map +0 -1
  287. package/dist/chunk-ECFXGXWO.cjs.map +0 -1
  288. package/dist/chunk-ET6UOTTU.cjs.map +0 -1
  289. package/dist/chunk-GGYKYORQ.cjs.map +0 -1
  290. package/dist/chunk-HDJFSJCK.js.map +0 -1
  291. package/dist/chunk-I4CXL4SR.js.map +0 -1
  292. package/dist/chunk-IQO7ANVS.cjs.map +0 -1
  293. package/dist/chunk-JPGVRWWL.js.map +0 -1
  294. package/dist/chunk-JV2KH24V.js.map +0 -1
  295. package/dist/chunk-JYYQQEBH.cjs.map +0 -1
  296. package/dist/chunk-LJFJTTZQ.cjs +0 -4
  297. package/dist/chunk-LWBQ4P4N.cjs.map +0 -1
  298. package/dist/chunk-MV7KHWUT.js.map +0 -1
  299. package/dist/chunk-QUKUN6NR.cjs.map +0 -1
  300. package/dist/chunk-SNPVZPLB.js.map +0 -1
  301. package/dist/chunk-UIZSWUKP.js.map +0 -1
  302. package/dist/chunk-W7UH2PWL.js.map +0 -1
  303. package/dist/chunk-WM6CK2F3.cjs.map +0 -1
  304. package/dist/chunk-YCVEJ3UN.cjs.map +0 -1
  305. package/dist/chunk-ZGHTOYHW.js.map +0 -1
  306. package/dist/chunk-ZV5CC35D.js +0 -3
  307. package/dist/chunk-ZWNI5IWX.cjs.map +0 -1
  308. package/dist/models-dev-DNBKXHT4.js +0 -3
  309. package/dist/models-dev-YBEEQIX6.cjs +0 -12
  310. package/dist/netlify-7G2L5VSH.js +0 -3
  311. package/dist/netlify-GWNGSIRZ.cjs +0 -12
  312. package/dist/registry-generator-H4YNODDH.js.map +0 -1
  313. package/dist/registry-generator-MK63POJO.cjs.map +0 -1
@@ -173,7 +173,7 @@ function convertImageFilePart(part, downloadedAssets) {
173
173
  const { data: convertedData, mediaType: convertedMediaType } = convertToDataContent(originalData);
174
174
  let mediaType = convertedMediaType ?? part.mediaType;
175
175
  let data = convertedData;
176
- if (data instanceof URL) {
176
+ if (data instanceof URL && downloadedAssets) {
177
177
  const downloadedFile = downloadedAssets[data.toString()];
178
178
  if (downloadedFile) {
179
179
  data = downloadedFile.data;
@@ -675,18 +675,20 @@ async function downloadAssetsFromMessages({
675
675
  }
676
676
  }
677
677
  return { mediaType, data };
678
- }).filter((part) => part.data instanceof URL).map((part) => ({
679
- url: part.data,
680
- isUrlSupportedByModel: part.mediaType != null && isUrlSupported({
681
- url: part.data.toString(),
682
- mediaType: part.mediaType,
683
- supportedUrls: supportedUrls ?? {}
684
- })
685
- }));
678
+ }).filter((part) => part.data instanceof URL).map((part) => {
679
+ return {
680
+ url: part.data,
681
+ isUrlSupportedByModel: part.mediaType != null && isUrlSupported({
682
+ url: part.data.toString(),
683
+ mediaType: part.mediaType,
684
+ supportedUrls: supportedUrls ?? {}
685
+ })
686
+ };
687
+ });
686
688
  const downloadedFiles = await pMap(
687
689
  filesToDownload,
688
690
  async (fileItem) => {
689
- if (!fileItem.isUrlSupportedByModel) {
691
+ if (fileItem.isUrlSupportedByModel) {
690
692
  return null;
691
693
  }
692
694
  return {
@@ -1041,7 +1043,10 @@ var MessageList = class _MessageList {
1041
1043
  supportedUrls: options?.supportedUrls
1042
1044
  });
1043
1045
  let messages = [...systemMessages, ...modelMessages];
1044
- if (Object.keys(downloadedAssets || {}).length > 0) {
1046
+ const hasImageOrFileContent = modelMessages.some(
1047
+ (message) => message.role === "user" && typeof message.content !== "string" && message.content.some((part) => part.type === "image" || part.type === "file")
1048
+ );
1049
+ if (hasImageOrFileContent) {
1045
1050
  messages = messages.map((message) => {
1046
1051
  if (message.role === "user") {
1047
1052
  if (typeof message.content === "string") {
@@ -1853,6 +1858,12 @@ var MessageList = class _MessageList {
1853
1858
  return ti;
1854
1859
  });
1855
1860
  }
1861
+ if (!message.threadId && this.memoryInfo?.threadId) {
1862
+ message.threadId = this.memoryInfo.threadId;
1863
+ if (!message.resourceId && this.memoryInfo?.resourceId) {
1864
+ message.resourceId = this.memoryInfo.resourceId;
1865
+ }
1866
+ }
1856
1867
  return message;
1857
1868
  }
1858
1869
  aiV4UIMessageToMastraDBMessage(message, messageSource) {
@@ -1890,137 +1901,180 @@ var MessageList = class _MessageList {
1890
1901
  if (typeof coreMessage.content === "string") {
1891
1902
  parts.push({
1892
1903
  type: "text",
1893
- text: coreMessage.content,
1894
- // Preserve providerOptions from CoreMessage (e.g., for system messages with cacheControl)
1895
- ..."providerOptions" in coreMessage && coreMessage.providerOptions ? { providerMetadata: coreMessage.providerOptions } : {}
1904
+ text: coreMessage.content
1896
1905
  });
1897
1906
  } else if (Array.isArray(coreMessage.content)) {
1898
- for (const part of coreMessage.content) {
1899
- switch (part.type) {
1900
- case "text":
1907
+ for (const aiV4Part of coreMessage.content) {
1908
+ switch (aiV4Part.type) {
1909
+ case "text": {
1901
1910
  const prevPart = parts.at(-1);
1902
1911
  if (coreMessage.role === "assistant" && prevPart && prevPart.type === "tool-invocation") {
1903
1912
  parts.push({ type: "step-start" });
1904
1913
  }
1905
- const mergedProviderMetadata = {
1906
- ..."providerOptions" in coreMessage && coreMessage.providerOptions ? coreMessage.providerOptions : {},
1907
- ..."providerOptions" in part && part.providerOptions ? part.providerOptions : {}
1908
- };
1909
- parts.push({
1914
+ const part = {
1910
1915
  type: "text",
1911
- text: part.text,
1912
- ...Object.keys(mergedProviderMetadata).length > 0 ? { providerMetadata: mergedProviderMetadata } : {}
1913
- });
1916
+ text: aiV4Part.text
1917
+ };
1918
+ if (aiV4Part.providerOptions) {
1919
+ part.providerMetadata = aiV4Part.providerOptions;
1920
+ }
1921
+ parts.push(part);
1914
1922
  break;
1915
- case "tool-call":
1916
- parts.push({
1923
+ }
1924
+ case "tool-call": {
1925
+ const part = {
1917
1926
  type: "tool-invocation",
1918
1927
  toolInvocation: {
1919
1928
  state: "call",
1920
- toolCallId: part.toolCallId,
1921
- toolName: part.toolName,
1922
- args: part.args
1929
+ toolCallId: aiV4Part.toolCallId,
1930
+ toolName: aiV4Part.toolName,
1931
+ args: aiV4Part.args
1923
1932
  }
1924
- });
1933
+ };
1934
+ if (aiV4Part.providerOptions) {
1935
+ part.providerMetadata = aiV4Part.providerOptions;
1936
+ }
1937
+ parts.push(part);
1925
1938
  break;
1939
+ }
1926
1940
  case "tool-result":
1927
- let toolArgs = {};
1928
- const toolCallInSameMsg = coreMessage.content.find(
1929
- (p) => p.type === "tool-call" && p.toolCallId === part.toolCallId
1930
- );
1931
- if (toolCallInSameMsg && toolCallInSameMsg.type === "tool-call") {
1932
- toolArgs = toolCallInSameMsg.args;
1933
- }
1934
- if (Object.keys(toolArgs).length === 0) {
1935
- for (let i = this.messages.length - 1; i >= 0; i--) {
1936
- const msg = this.messages[i];
1937
- if (msg && msg.role === "assistant" && msg.content.parts) {
1938
- const toolCallPart = msg.content.parts.find(
1939
- (p) => p.type === "tool-invocation" && p.toolInvocation.toolCallId === part.toolCallId && p.toolInvocation.state === "call"
1940
- );
1941
- if (toolCallPart && toolCallPart.type === "tool-invocation" && toolCallPart.toolInvocation.args) {
1942
- toolArgs = toolCallPart.toolInvocation.args;
1943
- break;
1941
+ {
1942
+ let toolArgs = {};
1943
+ const toolCallInSameMsg = coreMessage.content.find(
1944
+ (p) => p.type === "tool-call" && p.toolCallId === aiV4Part.toolCallId
1945
+ );
1946
+ if (toolCallInSameMsg && toolCallInSameMsg.type === "tool-call") {
1947
+ toolArgs = toolCallInSameMsg.args;
1948
+ }
1949
+ if (Object.keys(toolArgs).length === 0) {
1950
+ for (let i = this.messages.length - 1; i >= 0; i--) {
1951
+ const msg = this.messages[i];
1952
+ if (msg && msg.role === "assistant" && msg.content.parts) {
1953
+ const toolCallPart = msg.content.parts.find(
1954
+ (p) => p.type === "tool-invocation" && p.toolInvocation.toolCallId === aiV4Part.toolCallId && p.toolInvocation.state === "call"
1955
+ );
1956
+ if (toolCallPart && toolCallPart.type === "tool-invocation" && toolCallPart.toolInvocation.args) {
1957
+ toolArgs = toolCallPart.toolInvocation.args;
1958
+ break;
1959
+ }
1944
1960
  }
1945
1961
  }
1946
1962
  }
1963
+ const invocation = {
1964
+ state: "result",
1965
+ toolCallId: aiV4Part.toolCallId,
1966
+ toolName: aiV4Part.toolName,
1967
+ result: aiV4Part.result ?? "",
1968
+ // undefined will cause AI SDK to throw an error, but for client side tool calls this really could be undefined
1969
+ args: toolArgs
1970
+ // Use the args from the corresponding tool-call
1971
+ };
1972
+ const part = {
1973
+ type: "tool-invocation",
1974
+ toolInvocation: invocation
1975
+ };
1976
+ if (aiV4Part.providerOptions) {
1977
+ part.providerMetadata = aiV4Part.providerOptions;
1978
+ }
1979
+ parts.push(part);
1980
+ toolInvocations.push(invocation);
1947
1981
  }
1948
- const invocation = {
1949
- state: "result",
1950
- toolCallId: part.toolCallId,
1951
- toolName: part.toolName,
1952
- result: part.result ?? "",
1953
- // undefined will cause AI SDK to throw an error, but for client side tool calls this really could be undefined
1954
- args: toolArgs
1955
- // Use the args from the corresponding tool-call
1956
- };
1957
- parts.push({
1958
- type: "tool-invocation",
1959
- toolInvocation: invocation
1960
- });
1961
- toolInvocations.push(invocation);
1962
1982
  break;
1963
1983
  case "reasoning":
1964
- parts.push({
1965
- type: "reasoning",
1966
- reasoning: "",
1967
- // leave this blank so we aren't double storing it in the db along with details
1968
- details: [{ type: "text", text: part.text, signature: part.signature }]
1969
- });
1984
+ {
1985
+ const part = {
1986
+ type: "reasoning",
1987
+ reasoning: "",
1988
+ // leave this blank so we aren't double storing it in the db along with details
1989
+ details: [{ type: "text", text: aiV4Part.text, signature: aiV4Part.signature }]
1990
+ };
1991
+ if (aiV4Part.providerOptions) {
1992
+ part.providerMetadata = aiV4Part.providerOptions;
1993
+ }
1994
+ parts.push(part);
1995
+ }
1970
1996
  break;
1971
1997
  case "redacted-reasoning":
1972
- parts.push({
1973
- type: "reasoning",
1974
- reasoning: "",
1975
- // No text reasoning for redacted parts
1976
- details: [{ type: "redacted", data: part.data }]
1977
- });
1998
+ {
1999
+ const part = {
2000
+ type: "reasoning",
2001
+ reasoning: "",
2002
+ // No text reasoning for redacted parts
2003
+ details: [{ type: "redacted", data: aiV4Part.data }]
2004
+ };
2005
+ if (aiV4Part.providerOptions) {
2006
+ part.providerMetadata = aiV4Part.providerOptions;
2007
+ }
2008
+ parts.push(part);
2009
+ }
1978
2010
  break;
1979
- case "image":
1980
- parts.push({
2011
+ case "image": {
2012
+ const part = {
1981
2013
  type: "file",
1982
- data: imageContentToString(part.image),
1983
- mimeType: part.mimeType
1984
- });
2014
+ data: imageContentToString(aiV4Part.image),
2015
+ mimeType: aiV4Part.mimeType
2016
+ };
2017
+ if (aiV4Part.providerOptions) {
2018
+ part.providerMetadata = aiV4Part.providerOptions;
2019
+ }
2020
+ parts.push(part);
1985
2021
  break;
1986
- case "file":
1987
- if (part.data instanceof URL) {
1988
- parts.push({
2022
+ }
2023
+ case "file": {
2024
+ if (aiV4Part.data instanceof URL) {
2025
+ const part = {
1989
2026
  type: "file",
1990
- data: part.data.toString(),
1991
- mimeType: part.mimeType
1992
- });
1993
- } else if (typeof part.data === "string") {
1994
- const categorized = categorizeFileData(part.data, part.mimeType);
2027
+ data: aiV4Part.data.toString(),
2028
+ mimeType: aiV4Part.mimeType
2029
+ };
2030
+ if (aiV4Part.providerOptions) {
2031
+ part.providerMetadata = aiV4Part.providerOptions;
2032
+ }
2033
+ parts.push(part);
2034
+ } else if (typeof aiV4Part.data === "string") {
2035
+ const categorized = categorizeFileData(aiV4Part.data, aiV4Part.mimeType);
1995
2036
  if (categorized.type === "url" || categorized.type === "dataUri") {
1996
- parts.push({
2037
+ const part = {
1997
2038
  type: "file",
1998
- data: part.data,
2039
+ data: aiV4Part.data,
1999
2040
  mimeType: categorized.mimeType || "image/png"
2000
- });
2041
+ };
2042
+ if (aiV4Part.providerOptions) {
2043
+ part.providerMetadata = aiV4Part.providerOptions;
2044
+ }
2045
+ parts.push(part);
2001
2046
  } else {
2002
2047
  try {
2003
- parts.push({
2048
+ const part = {
2004
2049
  type: "file",
2005
2050
  mimeType: categorized.mimeType || "image/png",
2006
- data: convertDataContentToBase64String(part.data)
2007
- });
2051
+ data: convertDataContentToBase64String(aiV4Part.data)
2052
+ };
2053
+ if (aiV4Part.providerOptions) {
2054
+ part.providerMetadata = aiV4Part.providerOptions;
2055
+ }
2056
+ parts.push(part);
2008
2057
  } catch (error) {
2009
2058
  console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
2010
2059
  }
2011
2060
  }
2012
2061
  } else {
2013
2062
  try {
2014
- parts.push({
2063
+ const part = {
2015
2064
  type: "file",
2016
- mimeType: part.mimeType,
2017
- data: convertDataContentToBase64String(part.data)
2018
- });
2065
+ mimeType: aiV4Part.mimeType,
2066
+ data: convertDataContentToBase64String(aiV4Part.data)
2067
+ };
2068
+ if (aiV4Part.providerOptions) {
2069
+ part.providerMetadata = aiV4Part.providerOptions;
2070
+ }
2071
+ parts.push(part);
2019
2072
  } catch (error) {
2020
2073
  console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
2021
2074
  }
2022
2075
  }
2023
2076
  break;
2077
+ }
2024
2078
  }
2025
2079
  }
2026
2080
  }
@@ -2031,6 +2085,9 @@ var MessageList = class _MessageList {
2031
2085
  if (toolInvocations.length) content.toolInvocations = toolInvocations;
2032
2086
  if (typeof coreMessage.content === `string`) content.content = coreMessage.content;
2033
2087
  if (experimentalAttachments.length) content.experimental_attachments = experimentalAttachments;
2088
+ if (coreMessage.providerOptions) {
2089
+ content.providerMetadata = coreMessage.providerOptions;
2090
+ }
2034
2091
  return {
2035
2092
  id,
2036
2093
  role: _MessageList.getRole(coreMessage),
@@ -2381,6 +2438,9 @@ var MessageList = class _MessageList {
2381
2438
  if (dbMsg.createdAt) metadata.createdAt = dbMsg.createdAt;
2382
2439
  if (dbMsg.threadId) metadata.threadId = dbMsg.threadId;
2383
2440
  if (dbMsg.resourceId) metadata.resourceId = dbMsg.resourceId;
2441
+ if (dbMsg.content.providerMetadata) {
2442
+ metadata.providerMetadata = dbMsg.content.providerMetadata;
2443
+ }
2384
2444
  const hasToolInvocationParts = dbMsg.content.parts?.some((p) => p.type === "tool-invocation");
2385
2445
  if (dbMsg.content.toolInvocations && !hasToolInvocationParts) {
2386
2446
  for (const invocation of dbMsg.content.toolInvocations) {
@@ -2447,18 +2507,20 @@ var MessageList = class _MessageList {
2447
2507
  continue;
2448
2508
  }
2449
2509
  if (part.type === "reasoning") {
2450
- const reasoningPart = part;
2451
- const text = reasoningPart.text || reasoningPart.reasoning || (reasoningPart.details?.reduce((p, c) => {
2510
+ const text = part.reasoning || (part.details?.reduce((p, c) => {
2452
2511
  if (c.type === `text` && c.text) return p + c.text;
2453
2512
  return p;
2454
2513
  }, "") ?? "");
2455
- if (text || reasoningPart.details?.length) {
2456
- parts.push({
2514
+ if (text || part.details?.length) {
2515
+ const v5UIPart = {
2457
2516
  type: "reasoning",
2458
2517
  text: text || "",
2459
- state: "done",
2460
- ...part.providerMetadata && { providerMetadata: part.providerMetadata }
2461
- });
2518
+ state: "done"
2519
+ };
2520
+ if (part.providerMetadata) {
2521
+ v5UIPart.providerMetadata = part.providerMetadata;
2522
+ }
2523
+ parts.push(v5UIPart);
2462
2524
  }
2463
2525
  continue;
2464
2526
  }
@@ -2471,12 +2533,15 @@ var MessageList = class _MessageList {
2471
2533
  }
2472
2534
  const categorized = typeof part.data === "string" ? categorizeFileData(part.data, part.mimeType) : { type: "raw", mimeType: part.mimeType};
2473
2535
  if (categorized.type === "url" && typeof part.data === "string") {
2474
- parts.push({
2536
+ const v5UIPart = {
2475
2537
  type: "file",
2476
2538
  url: part.data,
2477
- mediaType: categorized.mimeType || "image/png",
2478
- providerMetadata: part.providerMetadata
2479
- });
2539
+ mediaType: categorized.mimeType || "image/png"
2540
+ };
2541
+ if (part.providerMetadata) {
2542
+ v5UIPart.providerMetadata = part.providerMetadata;
2543
+ }
2544
+ parts.push(v5UIPart);
2480
2545
  } else {
2481
2546
  let filePartData;
2482
2547
  let extractedMimeType = part.mimeType;
@@ -2500,27 +2565,37 @@ var MessageList = class _MessageList {
2500
2565
  } else {
2501
2566
  dataUri = createDataUri(filePartData, finalMimeType);
2502
2567
  }
2503
- parts.push({
2568
+ const v5UIPart = {
2504
2569
  type: "file",
2505
2570
  url: dataUri,
2506
2571
  // Use url field with data URI
2507
- mediaType: finalMimeType,
2508
- providerMetadata: part.providerMetadata
2509
- });
2572
+ mediaType: finalMimeType
2573
+ };
2574
+ if (part.providerMetadata) {
2575
+ v5UIPart.providerMetadata = part.providerMetadata;
2576
+ }
2577
+ parts.push(v5UIPart);
2510
2578
  }
2511
2579
  } else if (part.type === "source") {
2512
- const sourcePart = part;
2513
- parts.push({
2580
+ const v5UIPart = {
2514
2581
  type: "source-url",
2515
- url: sourcePart.source.url,
2516
- ...part.providerMetadata && { providerMetadata: part.providerMetadata }
2517
- });
2582
+ url: part.source.url,
2583
+ sourceId: part.source.id,
2584
+ title: part.source.title
2585
+ };
2586
+ if (part.providerMetadata) {
2587
+ v5UIPart.providerMetadata = part.providerMetadata;
2588
+ }
2589
+ parts.push(v5UIPart);
2518
2590
  } else if (part.type === "text") {
2519
- parts.push({
2591
+ const v5UIPart = {
2520
2592
  type: "text",
2521
- text: part.text,
2522
- ...part.providerMetadata && { providerMetadata: part.providerMetadata }
2523
- });
2593
+ text: part.text
2594
+ };
2595
+ if (part.providerMetadata) {
2596
+ v5UIPart.providerMetadata = part.providerMetadata;
2597
+ }
2598
+ parts.push(v5UIPart);
2524
2599
  hasNonToolReasoningParts = true;
2525
2600
  } else {
2526
2601
  parts.push(part);
@@ -2684,32 +2759,69 @@ var MessageList = class _MessageList {
2684
2759
  }
2685
2760
  };
2686
2761
  }
2762
+ /**
2763
+ * Convert image or file to data URI or URL for V2 file part
2764
+ */
2765
+ static getDataStringFromAIV5DataPart = (part) => {
2766
+ let mimeType;
2767
+ let data;
2768
+ if ("data" in part) {
2769
+ mimeType = part.mediaType || "application/octet-stream";
2770
+ data = part.data;
2771
+ } else if ("image" in part) {
2772
+ mimeType = part.mediaType || "image/jpeg";
2773
+ data = part.image;
2774
+ } else {
2775
+ throw new MastraError({
2776
+ id: "MASTRA_AIV5_DATA_PART_INVALID",
2777
+ domain: "AGENT" /* AGENT */,
2778
+ category: "USER" /* USER */,
2779
+ text: "Invalid AIV5 data part in getDataStringFromAIV5DataPart",
2780
+ details: {
2781
+ part
2782
+ }
2783
+ });
2784
+ }
2785
+ if (data instanceof URL) {
2786
+ return data.toString();
2787
+ } else {
2788
+ if (data instanceof Buffer) {
2789
+ const base64 = data.toString("base64");
2790
+ return `data:${mimeType};base64,${base64}`;
2791
+ } else if (typeof data === "string") {
2792
+ return data.startsWith("data:") || data.startsWith("http") ? data : `data:${mimeType};base64,${data}`;
2793
+ } else if (data instanceof Uint8Array) {
2794
+ const base64 = Buffer.from(data).toString("base64");
2795
+ return `data:${mimeType};base64,${base64}`;
2796
+ } else if (data instanceof ArrayBuffer) {
2797
+ const base64 = Buffer.from(data).toString("base64");
2798
+ return `data:${mimeType};base64,${base64}`;
2799
+ } else {
2800
+ return "";
2801
+ }
2802
+ }
2803
+ };
2687
2804
  /**
2688
2805
  * Direct conversion from AIV5 ModelMessage to MastraDBMessage
2689
2806
  * Combines logic from aiV5ModelMessageToMastraMessageV3 + mastraMessageV3ToV2
2690
2807
  */
2691
2808
  static aiV5ModelMessageToMastraDBMessage(modelMsg, _messageSource) {
2692
2809
  const content = Array.isArray(modelMsg.content) ? modelMsg.content : [{ type: "text", text: modelMsg.content }];
2693
- const v2Parts = [];
2810
+ const mastraDBParts = [];
2694
2811
  const toolInvocations = [];
2695
2812
  const reasoningParts = [];
2696
2813
  const experimental_attachments = [];
2697
- const textParts = [];
2698
2814
  let lastPartWasToolResult = false;
2699
2815
  for (const part of content) {
2700
- const providerMetadata = {
2701
- ...modelMsg.providerMetadata || {},
2702
- ...part.providerMetadata || {}
2703
- };
2704
- const hasProviderMetadata = Object.keys(providerMetadata).length > 0;
2705
2816
  if (part.type === "text") {
2706
2817
  const textPart = {
2707
2818
  type: "text",
2708
- text: part.text,
2709
- ...hasProviderMetadata && { experimental_providerMetadata: providerMetadata }
2819
+ text: part.text
2710
2820
  };
2711
- v2Parts.push(textPart);
2712
- textParts.push({ text: part.text, providerMetadata: hasProviderMetadata ? providerMetadata : void 0 });
2821
+ if (part.providerOptions) {
2822
+ textPart.providerMetadata = part.providerOptions;
2823
+ }
2824
+ mastraDBParts.push(textPart);
2713
2825
  lastPartWasToolResult = false;
2714
2826
  } else if (part.type === "tool-call") {
2715
2827
  const toolCallPart = part;
@@ -2720,10 +2832,12 @@ var MessageList = class _MessageList {
2720
2832
  toolName: toolCallPart.toolName,
2721
2833
  args: toolCallPart.input,
2722
2834
  state: "call"
2723
- },
2724
- ...hasProviderMetadata && { providerMetadata }
2835
+ }
2725
2836
  };
2726
- v2Parts.push(toolInvocationPart);
2837
+ if (part.providerOptions) {
2838
+ toolInvocationPart.providerMetadata = part.providerOptions;
2839
+ }
2840
+ mastraDBParts.push(toolInvocationPart);
2727
2841
  toolInvocations.push({
2728
2842
  toolCallId: toolCallPart.toolCallId,
2729
2843
  toolName: toolCallPart.toolName,
@@ -2734,78 +2848,67 @@ var MessageList = class _MessageList {
2734
2848
  } else if (part.type === "tool-result") {
2735
2849
  const toolResultPart = part;
2736
2850
  const matchingCall = toolInvocations.find((inv) => inv.toolCallId === toolResultPart.toolCallId);
2737
- const matchingV2Part = v2Parts.find(
2851
+ const matchingV2Part = mastraDBParts.find(
2738
2852
  (p) => p.type === "tool-invocation" && "toolInvocation" in p && p.toolInvocation.toolCallId === toolResultPart.toolCallId
2739
2853
  );
2854
+ const updateMatchingCallInvocationResult = (toolResultPart2, matchingCall2) => {
2855
+ matchingCall2.state = "result";
2856
+ matchingCall2.result = typeof toolResultPart2.output === "object" && toolResultPart2.output && "value" in toolResultPart2.output ? toolResultPart2.output.value : toolResultPart2.output;
2857
+ };
2740
2858
  if (matchingCall) {
2741
- matchingCall.state = "result";
2742
- matchingCall.result = typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output;
2859
+ updateMatchingCallInvocationResult(toolResultPart, matchingCall);
2743
2860
  } else {
2744
- const resultPartWithName = toolResultPart;
2745
- toolInvocations.push({
2861
+ const call = {
2862
+ state: "call",
2746
2863
  toolCallId: toolResultPart.toolCallId,
2747
- toolName: resultPartWithName.toolName || "unknown",
2748
- args: {},
2749
- result: typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output,
2750
- state: "result"
2751
- });
2864
+ toolName: toolResultPart.toolName || "unknown",
2865
+ args: {}
2866
+ };
2867
+ updateMatchingCallInvocationResult(toolResultPart, call);
2868
+ toolInvocations.push(call);
2752
2869
  }
2753
2870
  if (matchingV2Part && matchingV2Part.type === "tool-invocation") {
2754
- matchingV2Part.toolInvocation.state = "result";
2755
- matchingV2Part.toolInvocation.result = typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output;
2756
- if (hasProviderMetadata) {
2757
- matchingV2Part.providerMetadata = providerMetadata;
2758
- }
2871
+ updateMatchingCallInvocationResult(toolResultPart, matchingV2Part.toolInvocation);
2759
2872
  } else {
2760
- const resultPartWithName = toolResultPart;
2761
2873
  const toolInvocationPart = {
2762
2874
  type: "tool-invocation",
2763
2875
  toolInvocation: {
2764
2876
  toolCallId: toolResultPart.toolCallId,
2765
- toolName: resultPartWithName.toolName || "unknown",
2877
+ toolName: toolResultPart.toolName || "unknown",
2766
2878
  args: {},
2767
- result: typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output,
2768
- state: "result"
2769
- },
2770
- ...hasProviderMetadata && { providerMetadata }
2879
+ state: "call"
2880
+ }
2771
2881
  };
2772
- v2Parts.push(toolInvocationPart);
2882
+ updateMatchingCallInvocationResult(toolResultPart, toolInvocationPart.toolInvocation);
2883
+ mastraDBParts.push(toolInvocationPart);
2773
2884
  }
2774
2885
  lastPartWasToolResult = true;
2775
2886
  } else if (part.type === "reasoning") {
2776
- const reasoningPart = part;
2777
2887
  const v2ReasoningPart = {
2778
2888
  type: "reasoning",
2779
- reasoning: reasoningPart.text,
2780
- details: [{ type: "text", text: reasoningPart.text }],
2781
- ...hasProviderMetadata && { providerMetadata }
2889
+ reasoning: "",
2890
+ // leave this blank so we aren't double storing it in the db along with details
2891
+ details: [{ type: "text", text: part.text }]
2782
2892
  };
2783
- v2Parts.push(v2ReasoningPart);
2784
- reasoningParts.push(reasoningPart.text);
2893
+ if (part.providerOptions) {
2894
+ v2ReasoningPart.providerMetadata = part.providerOptions;
2895
+ }
2896
+ mastraDBParts.push(v2ReasoningPart);
2897
+ reasoningParts.push(part.text);
2785
2898
  lastPartWasToolResult = false;
2786
2899
  } else if (part.type === "image") {
2787
2900
  const imagePart = part;
2788
- let imageData;
2789
- const mimeType = imagePart.mimeType || "image/jpeg";
2790
- if ("url" in imagePart && typeof imagePart.url === "string") {
2791
- imageData = imagePart.url;
2792
- } else if ("data" in imagePart) {
2793
- if (typeof imagePart.data === "string") {
2794
- imageData = imagePart.data.startsWith("data:") || imagePart.data.startsWith("http") ? imagePart.data : `data:${mimeType};base64,${imagePart.data}`;
2795
- } else {
2796
- const base64 = Buffer.from(imagePart.data).toString("base64");
2797
- imageData = `data:${mimeType};base64,${base64}`;
2798
- }
2799
- } else {
2800
- imageData = "";
2801
- }
2901
+ const mimeType = imagePart.mediaType || "image/jpeg";
2902
+ const imageData = this.getDataStringFromAIV5DataPart(imagePart);
2802
2903
  const imageFilePart = {
2803
2904
  type: "file",
2804
2905
  data: imageData,
2805
- mimeType,
2806
- ...hasProviderMetadata && { providerMetadata }
2906
+ mimeType
2807
2907
  };
2808
- v2Parts.push(imageFilePart);
2908
+ if (part.providerOptions) {
2909
+ imageFilePart.providerMetadata = part.providerOptions;
2910
+ }
2911
+ mastraDBParts.push(imageFilePart);
2809
2912
  experimental_attachments.push({
2810
2913
  url: imageData,
2811
2914
  contentType: mimeType
@@ -2814,26 +2917,16 @@ var MessageList = class _MessageList {
2814
2917
  } else if (part.type === "file") {
2815
2918
  const filePart = part;
2816
2919
  const mimeType = filePart.mediaType || "application/octet-stream";
2817
- let fileData;
2818
- if ("url" in filePart && typeof filePart.url === "string") {
2819
- fileData = filePart.url;
2820
- } else if ("data" in filePart) {
2821
- if (typeof filePart.data === "string") {
2822
- fileData = filePart.data.startsWith("data:") || filePart.data.startsWith("http") ? filePart.data : `data:${mimeType};base64,${filePart.data}`;
2823
- } else {
2824
- const base64 = Buffer.from(filePart.data).toString("base64");
2825
- fileData = `data:${mimeType};base64,${base64}`;
2826
- }
2827
- } else {
2828
- fileData = "";
2829
- }
2920
+ const fileData = this.getDataStringFromAIV5DataPart(filePart);
2830
2921
  const v2FilePart = {
2831
2922
  type: "file",
2832
2923
  data: fileData,
2833
- mimeType,
2834
- ...hasProviderMetadata && { providerMetadata }
2924
+ mimeType
2835
2925
  };
2836
- v2Parts.push(v2FilePart);
2926
+ if (part.providerOptions) {
2927
+ v2FilePart.providerMetadata = part.providerOptions;
2928
+ }
2929
+ mastraDBParts.push(v2FilePart);
2837
2930
  experimental_attachments.push({
2838
2931
  url: fileData,
2839
2932
  contentType: mimeType
@@ -2841,34 +2934,34 @@ var MessageList = class _MessageList {
2841
2934
  lastPartWasToolResult = false;
2842
2935
  }
2843
2936
  }
2844
- if (modelMsg.role === "assistant" && lastPartWasToolResult && v2Parts.length > 0) {
2845
- const lastPart = v2Parts[v2Parts.length - 1];
2937
+ if (modelMsg.role === "assistant" && lastPartWasToolResult && mastraDBParts.length > 0) {
2938
+ const lastPart = mastraDBParts[mastraDBParts.length - 1];
2846
2939
  if (lastPart && lastPart.type !== "text") {
2847
2940
  const emptyTextPart = { type: "text", text: "" };
2848
- v2Parts.push(emptyTextPart);
2849
- textParts.push({ text: "" });
2941
+ mastraDBParts.push(emptyTextPart);
2850
2942
  }
2851
2943
  }
2852
- let contentString = void 0;
2853
- if (textParts.length > 0) {
2854
- contentString = textParts.map((p) => p.text).join("\n");
2855
- }
2944
+ const contentString = mastraDBParts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
2856
2945
  const metadata = {};
2857
2946
  const id = `id` in modelMsg && typeof modelMsg.id === `string` ? modelMsg.id : `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
2858
- return {
2947
+ const message = {
2859
2948
  id,
2860
2949
  role: _MessageList.getRole(modelMsg),
2861
2950
  createdAt: /* @__PURE__ */ new Date(),
2862
2951
  content: {
2863
2952
  format: 2,
2864
- parts: v2Parts,
2953
+ parts: mastraDBParts,
2865
2954
  toolInvocations: toolInvocations.length > 0 ? toolInvocations : void 0,
2866
2955
  reasoning: reasoningParts.length > 0 ? reasoningParts.join("\n") : void 0,
2867
2956
  experimental_attachments: experimental_attachments.length > 0 ? experimental_attachments : void 0,
2868
- content: contentString,
2957
+ content: contentString || void 0,
2869
2958
  metadata
2870
2959
  }
2871
2960
  };
2961
+ if (modelMsg.providerOptions) {
2962
+ message.content.providerMetadata = modelMsg.providerOptions;
2963
+ }
2964
+ return message;
2872
2965
  }
2873
2966
  aiV4CoreMessagesToAIV5ModelMessages(messages, source) {
2874
2967
  return this.aiV5UIMessagesToAIV5ModelMessages(
@@ -2879,7 +2972,16 @@ var MessageList = class _MessageList {
2879
2972
  const sanitized = this.sanitizeV5UIMessages(messages, filterIncompleteToolCalls);
2880
2973
  const preprocessed = this.addStartStepPartsForAIV5(sanitized);
2881
2974
  const result = AIV5.convertToModelMessages(preprocessed);
2882
- return result;
2975
+ return result.map((modelMsg, index) => {
2976
+ const uiMsg = preprocessed[index];
2977
+ if (uiMsg?.metadata && typeof uiMsg.metadata === "object" && "providerMetadata" in uiMsg.metadata && uiMsg.metadata.providerMetadata) {
2978
+ return {
2979
+ ...modelMsg,
2980
+ providerOptions: uiMsg.metadata.providerMetadata
2981
+ };
2982
+ }
2983
+ return modelMsg;
2984
+ });
2883
2985
  }
2884
2986
  addStartStepPartsForAIV5(messages) {
2885
2987
  for (const message of messages) {
@@ -3012,5 +3114,5 @@ var MessageList = class _MessageList {
3012
3114
  };
3013
3115
 
3014
3116
  export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
3015
- //# sourceMappingURL=chunk-JV2KH24V.js.map
3016
- //# sourceMappingURL=chunk-JV2KH24V.js.map
3117
+ //# sourceMappingURL=chunk-W3DD3XP5.js.map
3118
+ //# sourceMappingURL=chunk-W3DD3XP5.js.map