@mastra/core 0.18.0 → 0.19.0-alpha.1

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 (343) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/action/index.d.ts +5 -5
  3. package/dist/action/index.d.ts.map +1 -1
  4. package/dist/agent/agent.d.ts +20 -10
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +11 -11
  7. package/dist/agent/index.d.ts +1 -1
  8. package/dist/agent/index.d.ts.map +1 -1
  9. package/dist/agent/index.js +2 -2
  10. package/dist/agent/input-processor/index.cjs +6 -6
  11. package/dist/agent/input-processor/index.js +1 -1
  12. package/dist/agent/message-list/index.d.ts +1 -1
  13. package/dist/agent/message-list/index.d.ts.map +1 -1
  14. package/dist/agent/trip-wire.d.ts +14 -0
  15. package/dist/agent/trip-wire.d.ts.map +1 -1
  16. package/dist/agent/types.d.ts +19 -11
  17. package/dist/agent/types.d.ts.map +1 -1
  18. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts +4 -33
  19. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  20. package/dist/agent/workflows/prepare-stream/schema.d.ts +3 -1
  21. package/dist/agent/workflows/prepare-stream/schema.d.ts.map +1 -1
  22. package/dist/ai-tracing/exporters/default.d.ts +2 -2
  23. package/dist/ai-tracing/exporters/default.d.ts.map +1 -1
  24. package/dist/ai-tracing/index.cjs +32 -32
  25. package/dist/ai-tracing/index.js +1 -1
  26. package/dist/ai-tracing/types.d.ts +2 -2
  27. package/dist/ai-tracing/types.d.ts.map +1 -1
  28. package/dist/base.d.ts +1 -1
  29. package/dist/{chunk-ITD7IHN5.js → chunk-2DGWSOVQ.js} +23 -5
  30. package/dist/chunk-2DGWSOVQ.js.map +1 -0
  31. package/dist/{chunk-WAGAASWE.cjs → chunk-2GHLV754.cjs} +5 -4
  32. package/dist/chunk-2GHLV754.cjs.map +1 -0
  33. package/dist/{chunk-JRTFV63C.cjs → chunk-3CCJVNYI.cjs} +48 -30
  34. package/dist/chunk-3CCJVNYI.cjs.map +1 -0
  35. package/dist/{chunk-TZZFP4EW.js → chunk-3WFH6YRI.js} +4 -4
  36. package/dist/{chunk-TZZFP4EW.js.map → chunk-3WFH6YRI.js.map} +1 -1
  37. package/dist/chunk-45CV4JYJ.cjs +4 -0
  38. package/dist/{chunk-VBPPPQO3.cjs.map → chunk-45CV4JYJ.cjs.map} +1 -1
  39. package/dist/{chunk-TJZ4ERV4.cjs → chunk-47WWN5FW.cjs} +19 -19
  40. package/dist/{chunk-TJZ4ERV4.cjs.map → chunk-47WWN5FW.cjs.map} +1 -1
  41. package/dist/{chunk-SEZBEL3U.js → chunk-4BEHJSL6.js} +4 -4
  42. package/dist/{chunk-SEZBEL3U.js.map → chunk-4BEHJSL6.js.map} +1 -1
  43. package/dist/{chunk-QIXLPKMN.cjs → chunk-4LGYM3WV.cjs} +4 -4
  44. package/dist/{chunk-QIXLPKMN.cjs.map → chunk-4LGYM3WV.cjs.map} +1 -1
  45. package/dist/chunk-4LSFAAZW.js +3 -0
  46. package/dist/{chunk-CE73R5W7.js.map → chunk-4LSFAAZW.js.map} +1 -1
  47. package/dist/{chunk-XUAWHRUO.cjs → chunk-4R2TBRS7.cjs} +37 -112
  48. package/dist/chunk-4R2TBRS7.cjs.map +1 -0
  49. package/dist/{chunk-AEYCHF2U.cjs → chunk-4VNAMG7K.cjs} +6 -6
  50. package/dist/{chunk-AEYCHF2U.cjs.map → chunk-4VNAMG7K.cjs.map} +1 -1
  51. package/dist/{chunk-FXLZYRV7.js → chunk-5HCVPQTD.js} +3 -3
  52. package/dist/{chunk-FXLZYRV7.js.map → chunk-5HCVPQTD.js.map} +1 -1
  53. package/dist/chunk-5M6ZTQJN.js +1374 -0
  54. package/dist/chunk-5M6ZTQJN.js.map +1 -0
  55. package/dist/{chunk-SW7WPHZ2.cjs → chunk-7E4ESNZS.cjs} +5 -5
  56. package/dist/{chunk-SW7WPHZ2.cjs.map → chunk-7E4ESNZS.cjs.map} +1 -1
  57. package/dist/{chunk-OVVKYARB.cjs → chunk-A4RAEU6X.cjs} +2 -2
  58. package/dist/chunk-A4RAEU6X.cjs.map +1 -0
  59. package/dist/{chunk-SHFLPFKN.js → chunk-BUY5X7DT.js} +4 -4
  60. package/dist/{chunk-SHFLPFKN.js.map → chunk-BUY5X7DT.js.map} +1 -1
  61. package/dist/{chunk-L7Z3C5XG.cjs → chunk-CQ73JM2N.cjs} +10 -10
  62. package/dist/{chunk-L7Z3C5XG.cjs.map → chunk-CQ73JM2N.cjs.map} +1 -1
  63. package/dist/{chunk-GGN63GU5.cjs → chunk-DRVSEV5Y.cjs} +25 -65
  64. package/dist/chunk-DRVSEV5Y.cjs.map +1 -0
  65. package/dist/{chunk-2TQHRYRK.cjs → chunk-EPMJYNEK.cjs} +4 -4
  66. package/dist/{chunk-2TQHRYRK.cjs.map → chunk-EPMJYNEK.cjs.map} +1 -1
  67. package/dist/{chunk-TKFLL33F.cjs → chunk-F6EJEELE.cjs} +9 -9
  68. package/dist/{chunk-TKFLL33F.cjs.map → chunk-F6EJEELE.cjs.map} +1 -1
  69. package/dist/{chunk-AR76DMZQ.js → chunk-FV4QVXO4.js} +2 -2
  70. package/dist/chunk-FV4QVXO4.js.map +1 -0
  71. package/dist/{chunk-O6PQYYT6.cjs → chunk-HQPFM22N.cjs} +63 -45
  72. package/dist/chunk-HQPFM22N.cjs.map +1 -0
  73. package/dist/{chunk-GMQUHK3L.js → chunk-IAXAPVOP.js} +4 -4
  74. package/dist/{chunk-GMQUHK3L.js.map → chunk-IAXAPVOP.js.map} +1 -1
  75. package/dist/{chunk-2ZSMA4EM.js → chunk-JJW5JU2G.js} +391 -367
  76. package/dist/chunk-JJW5JU2G.js.map +1 -0
  77. package/dist/{chunk-USHKSVKL.js → chunk-JWSZSM7U.js} +11 -9
  78. package/dist/{chunk-USHKSVKL.js.map → chunk-JWSZSM7U.js.map} +1 -1
  79. package/dist/{chunk-Y5XECV4O.cjs → chunk-K4AYIXVH.cjs} +4 -4
  80. package/dist/{chunk-Y5XECV4O.cjs.map → chunk-K4AYIXVH.cjs.map} +1 -1
  81. package/dist/{chunk-6NZTZOEI.js → chunk-LT6NPN3E.js} +33 -15
  82. package/dist/chunk-LT6NPN3E.js.map +1 -0
  83. package/dist/{chunk-7CF3FKP3.js → chunk-MAGA2UEJ.js} +4 -4
  84. package/dist/{chunk-7CF3FKP3.js.map → chunk-MAGA2UEJ.js.map} +1 -1
  85. package/dist/{chunk-RPFJBB5X.js → chunk-N4PK4MOG.js} +4 -4
  86. package/dist/{chunk-RPFJBB5X.js.map → chunk-N4PK4MOG.js.map} +1 -1
  87. package/dist/{chunk-TRZT7QPJ.cjs → chunk-NHJVMZIL.cjs} +19 -19
  88. package/dist/{chunk-TRZT7QPJ.cjs.map → chunk-NHJVMZIL.cjs.map} +1 -1
  89. package/dist/{chunk-BJZWMVNW.js → chunk-OBIF7QD5.js} +3 -3
  90. package/dist/{chunk-BJZWMVNW.js.map → chunk-OBIF7QD5.js.map} +1 -1
  91. package/dist/{chunk-JXRAFE3E.js → chunk-OSZMRVWP.js} +3 -3
  92. package/dist/{chunk-JXRAFE3E.js.map → chunk-OSZMRVWP.js.map} +1 -1
  93. package/dist/{chunk-SQFVIROI.js → chunk-PJ6HF3KW.js} +16 -56
  94. package/dist/chunk-PJ6HF3KW.js.map +1 -0
  95. package/dist/{chunk-CBV6EVJK.cjs → chunk-PLATPKJA.cjs} +433 -408
  96. package/dist/chunk-PLATPKJA.cjs.map +1 -0
  97. package/dist/{chunk-X2TVBX7O.js → chunk-RAXBZZKS.js} +4 -3
  98. package/dist/chunk-RAXBZZKS.js.map +1 -0
  99. package/dist/chunk-RFGQ3EQV.js +3 -0
  100. package/dist/chunk-RFGQ3EQV.js.map +1 -0
  101. package/dist/{chunk-YDLEEOJ6.js → chunk-RYFQKXXS.js} +3 -3
  102. package/dist/{chunk-YDLEEOJ6.js.map → chunk-RYFQKXXS.js.map} +1 -1
  103. package/dist/{chunk-C73WLCY3.cjs → chunk-S7UXT3V4.cjs} +21 -3
  104. package/dist/chunk-S7UXT3V4.cjs.map +1 -0
  105. package/dist/{chunk-R5GESRGB.js → chunk-SJMKDSRF.js} +37 -112
  106. package/dist/chunk-SJMKDSRF.js.map +1 -0
  107. package/dist/{chunk-YWXSGDDO.cjs → chunk-SQQMX4VC.cjs} +6 -6
  108. package/dist/{chunk-YWXSGDDO.cjs.map → chunk-SQQMX4VC.cjs.map} +1 -1
  109. package/dist/chunk-TCHOIK53.cjs +4 -0
  110. package/dist/chunk-TCHOIK53.cjs.map +1 -0
  111. package/dist/chunk-TIBULEK6.cjs +1379 -0
  112. package/dist/chunk-TIBULEK6.cjs.map +1 -0
  113. package/dist/{chunk-WECJNCGT.cjs → chunk-UTEH2LCJ.cjs} +19 -19
  114. package/dist/{chunk-WECJNCGT.cjs.map → chunk-UTEH2LCJ.cjs.map} +1 -1
  115. package/dist/{chunk-MCOVMKIS.js → chunk-WHFNGECY.js} +21 -4
  116. package/dist/chunk-WHFNGECY.js.map +1 -0
  117. package/dist/{chunk-NTXNE4YR.js → chunk-XG3SFWOH.js} +3 -3
  118. package/dist/{chunk-NTXNE4YR.js.map → chunk-XG3SFWOH.js.map} +1 -1
  119. package/dist/{chunk-UMATHB4Q.cjs → chunk-YJQDN37F.cjs} +40 -38
  120. package/dist/chunk-YJQDN37F.cjs.map +1 -0
  121. package/dist/error/index.cjs +5 -5
  122. package/dist/error/index.d.ts.map +1 -1
  123. package/dist/error/index.js +1 -1
  124. package/dist/error/utils.d.ts +8 -0
  125. package/dist/error/utils.d.ts.map +1 -0
  126. package/dist/eval/index.cjs +3 -3
  127. package/dist/eval/index.js +1 -1
  128. package/dist/index.cjs +87 -66
  129. package/dist/index.cjs.map +1 -1
  130. package/dist/index.js +18 -17
  131. package/dist/index.js.map +1 -1
  132. package/dist/integration/index.cjs +3 -3
  133. package/dist/integration/index.js +1 -1
  134. package/dist/llm/index.cjs +20 -0
  135. package/dist/llm/index.d.ts +3 -1
  136. package/dist/llm/index.d.ts.map +1 -1
  137. package/dist/llm/index.js +1 -1
  138. package/dist/llm/model/gateways/base.d.ts +42 -0
  139. package/dist/llm/model/gateways/base.d.ts.map +1 -0
  140. package/dist/llm/model/gateways/index.d.ts +3 -0
  141. package/dist/llm/model/gateways/index.d.ts.map +1 -0
  142. package/dist/llm/model/gateways/models-dev.d.ts +11 -0
  143. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -0
  144. package/dist/llm/model/index.d.ts +2 -0
  145. package/dist/llm/model/index.d.ts.map +1 -1
  146. package/dist/llm/model/model.loop.d.ts.map +1 -1
  147. package/dist/llm/model/openai-compatible.d.ts +32 -0
  148. package/dist/llm/model/openai-compatible.d.ts.map +1 -0
  149. package/dist/llm/model/provider-registry.generated.d.ts +462 -0
  150. package/dist/llm/model/provider-registry.generated.d.ts.map +1 -0
  151. package/dist/llm/model/shared.types.d.ts +8 -0
  152. package/dist/llm/model/shared.types.d.ts.map +1 -1
  153. package/dist/loop/index.cjs +2 -2
  154. package/dist/loop/index.js +1 -1
  155. package/dist/loop/network/index.d.ts +18 -18
  156. package/dist/loop/network/index.d.ts.map +1 -1
  157. package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
  158. package/dist/loop/test-utils/generateText.d.ts.map +1 -1
  159. package/dist/loop/test-utils/options.d.ts.map +1 -1
  160. package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
  161. package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
  162. package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
  163. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  164. package/dist/loop/types.d.ts +5 -5
  165. package/dist/loop/types.d.ts.map +1 -1
  166. package/dist/loop/workflows/agentic-execution/index.d.ts +147 -48
  167. package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
  168. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +98 -32
  169. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
  170. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +49 -16
  171. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  172. package/dist/loop/workflows/agentic-loop/index.d.ts +147 -48
  173. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  174. package/dist/loop/workflows/run-state.d.ts +5 -0
  175. package/dist/loop/workflows/run-state.d.ts.map +1 -1
  176. package/dist/loop/workflows/schema.d.ts +57 -19
  177. package/dist/loop/workflows/schema.d.ts.map +1 -1
  178. package/dist/loop/workflows/stream.d.ts +13 -0
  179. package/dist/loop/workflows/stream.d.ts.map +1 -1
  180. package/dist/mastra/index.cjs +2 -2
  181. package/dist/mastra/index.d.ts +1 -1
  182. package/dist/mastra/index.d.ts.map +1 -1
  183. package/dist/mastra/index.js +1 -1
  184. package/dist/memory/index.cjs +4 -4
  185. package/dist/memory/index.js +1 -1
  186. package/dist/memory/types.d.ts +1 -1
  187. package/dist/network/vNext/index.cjs +29 -29
  188. package/dist/network/vNext/index.cjs.map +1 -1
  189. package/dist/network/vNext/index.d.ts +14 -14
  190. package/dist/network/vNext/index.js +17 -17
  191. package/dist/network/vNext/index.js.map +1 -1
  192. package/dist/processors/index.cjs +10 -10
  193. package/dist/processors/index.js +1 -1
  194. package/dist/processors/processors/language-detector.d.ts.map +1 -1
  195. package/dist/processors/processors/moderation.d.ts.map +1 -1
  196. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  197. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  198. package/dist/processors/processors/structured-output.d.ts.map +1 -1
  199. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  200. package/dist/processors/runner.d.ts +7 -7
  201. package/dist/processors/runner.d.ts.map +1 -1
  202. package/dist/relevance/index.cjs +4 -4
  203. package/dist/relevance/index.js +1 -1
  204. package/dist/scores/index.cjs +9 -9
  205. package/dist/scores/index.js +2 -2
  206. package/dist/scores/scoreTraces/index.cjs +57 -68
  207. package/dist/scores/scoreTraces/index.cjs.map +1 -1
  208. package/dist/scores/scoreTraces/index.js +48 -59
  209. package/dist/scores/scoreTraces/index.js.map +1 -1
  210. package/dist/scores/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
  211. package/dist/scores/scoreTraces/utils.d.ts +4 -8
  212. package/dist/scores/scoreTraces/utils.d.ts.map +1 -1
  213. package/dist/scores/types.d.ts +8 -4
  214. package/dist/scores/types.d.ts.map +1 -1
  215. package/dist/server/index.cjs +7 -7
  216. package/dist/server/index.js +2 -2
  217. package/dist/storage/base.d.ts +14 -5
  218. package/dist/storage/base.d.ts.map +1 -1
  219. package/dist/storage/constants.d.ts.map +1 -1
  220. package/dist/storage/domains/observability/base.d.ts +5 -5
  221. package/dist/storage/domains/observability/base.d.ts.map +1 -1
  222. package/dist/storage/domains/observability/inmemory.d.ts +7 -7
  223. package/dist/storage/domains/observability/inmemory.d.ts.map +1 -1
  224. package/dist/storage/domains/scores/base.d.ts +8 -0
  225. package/dist/storage/domains/scores/base.d.ts.map +1 -1
  226. package/dist/storage/domains/scores/inmemory.d.ts +8 -0
  227. package/dist/storage/domains/scores/inmemory.d.ts.map +1 -1
  228. package/dist/storage/index.cjs +94 -64
  229. package/dist/storage/index.cjs.map +1 -1
  230. package/dist/storage/index.js +59 -29
  231. package/dist/storage/index.js.map +1 -1
  232. package/dist/storage/mock.d.ts +9 -0
  233. package/dist/storage/mock.d.ts.map +1 -1
  234. package/dist/storage/types.d.ts +2 -0
  235. package/dist/storage/types.d.ts.map +1 -1
  236. package/dist/stream/MastraAgentNetworkStream.d.ts.map +1 -1
  237. package/dist/stream/MastraWorkflowStream.d.ts.map +1 -1
  238. package/dist/stream/aisdk/v5/compat/ui-message.d.ts +5 -5
  239. package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -1
  240. package/dist/stream/aisdk/v5/execute.d.ts +2 -5
  241. package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
  242. package/dist/stream/aisdk/v5/input.d.ts +2 -1
  243. package/dist/stream/aisdk/v5/input.d.ts.map +1 -1
  244. package/dist/stream/aisdk/v5/output-helpers.d.ts +5 -11
  245. package/dist/stream/aisdk/v5/output-helpers.d.ts.map +1 -1
  246. package/dist/stream/aisdk/v5/output.d.ts +43 -16
  247. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  248. package/dist/stream/aisdk/v5/transform.d.ts +6 -6
  249. package/dist/stream/aisdk/v5/transform.d.ts.map +1 -1
  250. package/dist/stream/base/input.d.ts +2 -1
  251. package/dist/stream/base/input.d.ts.map +1 -1
  252. package/dist/stream/base/output.d.ts +69 -82
  253. package/dist/stream/base/output.d.ts.map +1 -1
  254. package/dist/stream/index.cjs +4 -4
  255. package/dist/stream/index.d.ts +1 -1
  256. package/dist/stream/index.d.ts.map +1 -1
  257. package/dist/stream/index.js +1 -1
  258. package/dist/stream/types.d.ts +217 -96
  259. package/dist/stream/types.d.ts.map +1 -1
  260. package/dist/telemetry/index.cjs +7 -7
  261. package/dist/telemetry/index.js +1 -1
  262. package/dist/test-utils/llm-mock.cjs +2 -2
  263. package/dist/test-utils/llm-mock.js +1 -1
  264. package/dist/tools/index.cjs +4 -4
  265. package/dist/tools/index.js +1 -1
  266. package/dist/tools/is-vercel-tool.cjs +2 -2
  267. package/dist/tools/is-vercel-tool.js +1 -1
  268. package/dist/tools/tool.d.ts +6 -8
  269. package/dist/tools/tool.d.ts.map +1 -1
  270. package/dist/tools/types.d.ts +8 -7
  271. package/dist/tools/types.d.ts.map +1 -1
  272. package/dist/tools/validation.d.ts +2 -1
  273. package/dist/tools/validation.d.ts.map +1 -1
  274. package/dist/tts/index.cjs +2 -2
  275. package/dist/tts/index.js +1 -1
  276. package/dist/{types.d.ts → types/dynamic-argument.d.ts} +3 -3
  277. package/dist/types/dynamic-argument.d.ts.map +1 -0
  278. package/dist/types/index.cjs +4 -0
  279. package/dist/types/index.cjs.map +1 -0
  280. package/dist/types/index.d.ts +2 -0
  281. package/dist/types/index.d.ts.map +1 -0
  282. package/dist/types/index.js +3 -0
  283. package/dist/types/index.js.map +1 -0
  284. package/dist/types/zod-compat.d.ts +23 -0
  285. package/dist/types/zod-compat.d.ts.map +1 -0
  286. package/dist/utils.cjs +17 -17
  287. package/dist/utils.js +1 -1
  288. package/dist/vector/index.cjs +4 -4
  289. package/dist/vector/index.js +1 -1
  290. package/dist/voice/index.cjs +4 -4
  291. package/dist/voice/index.js +1 -1
  292. package/dist/workflows/default.d.ts +1 -1
  293. package/dist/workflows/default.d.ts.map +1 -1
  294. package/dist/workflows/evented/index.cjs +10 -10
  295. package/dist/workflows/evented/index.js +1 -1
  296. package/dist/workflows/evented/step-executor.d.ts +1 -0
  297. package/dist/workflows/evented/step-executor.d.ts.map +1 -1
  298. package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
  299. package/dist/workflows/evented/workflow.d.ts +3 -1
  300. package/dist/workflows/evented/workflow.d.ts.map +1 -1
  301. package/dist/workflows/execution-engine.d.ts +2 -1
  302. package/dist/workflows/execution-engine.d.ts.map +1 -1
  303. package/dist/workflows/index.cjs +15 -11
  304. package/dist/workflows/index.d.ts +1 -0
  305. package/dist/workflows/index.d.ts.map +1 -1
  306. package/dist/workflows/index.js +1 -1
  307. package/dist/workflows/legacy/index.cjs +22 -22
  308. package/dist/workflows/legacy/index.js +1 -1
  309. package/dist/workflows/legacy/step.d.ts +4 -4
  310. package/dist/workflows/legacy/step.d.ts.map +1 -1
  311. package/dist/workflows/legacy/types.d.ts +12 -7
  312. package/dist/workflows/legacy/types.d.ts.map +1 -1
  313. package/dist/workflows/legacy/workflow-instance.d.ts +2 -2
  314. package/dist/workflows/step.d.ts +3 -1
  315. package/dist/workflows/step.d.ts.map +1 -1
  316. package/dist/workflows/types.d.ts +12 -1
  317. package/dist/workflows/types.d.ts.map +1 -1
  318. package/dist/workflows/utils.d.ts +10 -0
  319. package/dist/workflows/utils.d.ts.map +1 -0
  320. package/dist/workflows/workflow.d.ts +30 -14
  321. package/dist/workflows/workflow.d.ts.map +1 -1
  322. package/package.json +6 -3
  323. package/types.d.ts +1 -0
  324. package/dist/chunk-2ZSMA4EM.js.map +0 -1
  325. package/dist/chunk-6NZTZOEI.js.map +0 -1
  326. package/dist/chunk-AR76DMZQ.js.map +0 -1
  327. package/dist/chunk-C73WLCY3.cjs.map +0 -1
  328. package/dist/chunk-CBV6EVJK.cjs.map +0 -1
  329. package/dist/chunk-CE73R5W7.js +0 -3
  330. package/dist/chunk-GGN63GU5.cjs.map +0 -1
  331. package/dist/chunk-ITD7IHN5.js.map +0 -1
  332. package/dist/chunk-JRTFV63C.cjs.map +0 -1
  333. package/dist/chunk-MCOVMKIS.js.map +0 -1
  334. package/dist/chunk-O6PQYYT6.cjs.map +0 -1
  335. package/dist/chunk-OVVKYARB.cjs.map +0 -1
  336. package/dist/chunk-R5GESRGB.js.map +0 -1
  337. package/dist/chunk-SQFVIROI.js.map +0 -1
  338. package/dist/chunk-UMATHB4Q.cjs.map +0 -1
  339. package/dist/chunk-VBPPPQO3.cjs +0 -4
  340. package/dist/chunk-WAGAASWE.cjs.map +0 -1
  341. package/dist/chunk-X2TVBX7O.js.map +0 -1
  342. package/dist/chunk-XUAWHRUO.cjs.map +0 -1
  343. package/dist/types.d.ts.map +0 -1
@@ -1,37 +1,37 @@
1
1
  'use strict';
2
2
 
3
- var chunkTJZ4ERV4_cjs = require('../chunk-TJZ4ERV4.cjs');
4
- var chunkWAGAASWE_cjs = require('../chunk-WAGAASWE.cjs');
3
+ var chunk47WWN5FW_cjs = require('../chunk-47WWN5FW.cjs');
4
+ var chunk2GHLV754_cjs = require('../chunk-2GHLV754.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "MastraScorer", {
9
9
  enumerable: true,
10
- get: function () { return chunkTJZ4ERV4_cjs.MastraScorer; }
10
+ get: function () { return chunk47WWN5FW_cjs.MastraScorer; }
11
11
  });
12
12
  Object.defineProperty(exports, "createScorer", {
13
13
  enumerable: true,
14
- get: function () { return chunkTJZ4ERV4_cjs.createScorer; }
14
+ get: function () { return chunk47WWN5FW_cjs.createScorer; }
15
15
  });
16
16
  Object.defineProperty(exports, "runExperiment", {
17
17
  enumerable: true,
18
- get: function () { return chunkTJZ4ERV4_cjs.runExperiment; }
18
+ get: function () { return chunk47WWN5FW_cjs.runExperiment; }
19
19
  });
20
20
  Object.defineProperty(exports, "saveScorePayloadSchema", {
21
21
  enumerable: true,
22
- get: function () { return chunkWAGAASWE_cjs.saveScorePayloadSchema; }
22
+ get: function () { return chunk2GHLV754_cjs.saveScorePayloadSchema; }
23
23
  });
24
24
  Object.defineProperty(exports, "scoreResultSchema", {
25
25
  enumerable: true,
26
- get: function () { return chunkWAGAASWE_cjs.scoreResultSchema; }
26
+ get: function () { return chunk2GHLV754_cjs.scoreResultSchema; }
27
27
  });
28
28
  Object.defineProperty(exports, "scoringExtractStepResultSchema", {
29
29
  enumerable: true,
30
- get: function () { return chunkWAGAASWE_cjs.scoringExtractStepResultSchema; }
30
+ get: function () { return chunk2GHLV754_cjs.scoringExtractStepResultSchema; }
31
31
  });
32
32
  Object.defineProperty(exports, "scoringValueSchema", {
33
33
  enumerable: true,
34
- get: function () { return chunkWAGAASWE_cjs.scoringValueSchema; }
34
+ get: function () { return chunk2GHLV754_cjs.scoringValueSchema; }
35
35
  });
36
36
  //# sourceMappingURL=index.cjs.map
37
37
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { MastraScorer, createScorer, runExperiment } from '../chunk-7CF3FKP3.js';
2
- export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-X2TVBX7O.js';
1
+ export { MastraScorer, createScorer, runExperiment } from '../chunk-MAGA2UEJ.js';
2
+ export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-RAXBZZKS.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkJRTFV63C_cjs = require('../../chunk-JRTFV63C.cjs');
4
- var chunkWAGAASWE_cjs = require('../../chunk-WAGAASWE.cjs');
5
- var chunkL7Z3C5XG_cjs = require('../../chunk-L7Z3C5XG.cjs');
6
- var chunkC73WLCY3_cjs = require('../../chunk-C73WLCY3.cjs');
3
+ var chunk3CCJVNYI_cjs = require('../../chunk-3CCJVNYI.cjs');
4
+ var chunk2GHLV754_cjs = require('../../chunk-2GHLV754.cjs');
5
+ var chunkCQ73JM2N_cjs = require('../../chunk-CQ73JM2N.cjs');
6
+ var chunkS7UXT3V4_cjs = require('../../chunk-S7UXT3V4.cjs');
7
7
  var pMap = require('p-map');
8
8
  var z = require('zod');
9
9
 
@@ -23,7 +23,7 @@ async function scoreTraces({
23
23
  const run = await workflow.createRunAsync();
24
24
  await run.start({ inputData: { targets, scorerName } });
25
25
  } catch (error) {
26
- const mastraError = new chunkC73WLCY3_cjs.MastraError(
26
+ const mastraError = new chunkS7UXT3V4_cjs.MastraError(
27
27
  {
28
28
  category: "SYSTEM",
29
29
  domain: "SCORER",
@@ -76,7 +76,7 @@ function normalizeMessageContent(content) {
76
76
  role: "user",
77
77
  parts: content.map((part) => ({ type: part.type, text: part.text }))
78
78
  };
79
- const converted = chunkL7Z3C5XG_cjs.convertMessages(tempMessage).to("AIV4.UI");
79
+ const converted = chunkCQ73JM2N_cjs.convertMessages(tempMessage).to("AIV4.UI");
80
80
  return converted[0]?.content || "";
81
81
  }
82
82
  function convertToUIMessage(message, createdAt) {
@@ -94,7 +94,7 @@ function convertToUIMessage(message, createdAt) {
94
94
  parts: message.content.map((part) => ({ type: part.type, text: part.text }))
95
95
  };
96
96
  }
97
- const converted = chunkL7Z3C5XG_cjs.convertMessages(messageInput).to("AIV4.UI");
97
+ const converted = chunkCQ73JM2N_cjs.convertMessages(messageInput).to("AIV4.UI");
98
98
  const result = converted[0];
99
99
  if (!result) {
100
100
  throw new Error("Failed to convert message");
@@ -187,66 +187,54 @@ function findPrimaryLLMSpan(spanTree, rootAgentSpan) {
187
187
  }
188
188
  throw new Error("No LLM generation span found in trace");
189
189
  }
190
- function transformTraceToScorerInput(trace) {
191
- try {
192
- validateTrace(trace);
193
- const spanTree = buildSpanTree(trace.spans);
194
- const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
195
- if (!rootAgentSpan) {
196
- throw new Error("No root agent_run span found in trace");
197
- }
198
- const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);
199
- const inputMessages = extractInputMessages(rootAgentSpan);
200
- const systemMessages = extractSystemMessages(primaryLLMSpan);
201
- const currentInputContent = inputMessages[0]?.content || "";
202
- const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);
203
- return {
204
- // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata
205
- inputMessages,
206
- rememberedMessages,
207
- systemMessages,
208
- taggedSystemMessages: {}
209
- // Todo: Support tagged system messages
210
- };
211
- } catch (error) {
212
- throw new Error(
213
- `Failed to transform trace to scorer input: ${error instanceof Error ? error.message : "Unknown error"}`
214
- );
190
+ function prepareTraceForTransformation(trace) {
191
+ validateTrace(trace);
192
+ const spanTree = buildSpanTree(trace.spans);
193
+ const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
194
+ if (!rootAgentSpan) {
195
+ throw new Error("No root agent_run span found in trace");
215
196
  }
197
+ return { spanTree, rootAgentSpan };
216
198
  }
217
- function transformTraceToScorerOutput(trace) {
218
- try {
219
- validateTrace(trace);
220
- const spanTree = buildSpanTree(trace.spans);
221
- const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
222
- if (!rootAgentSpan) {
223
- throw new Error("No root agent_run span found in trace");
224
- }
225
- if (!rootAgentSpan.output) {
226
- throw new Error("Root agent span has no output");
227
- }
228
- const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);
229
- const responseText = rootAgentSpan.output.text || "";
230
- const responseMessage = {
231
- role: "assistant",
232
- content: responseText,
233
- createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),
234
- // @ts-ignore
235
- parts: createMessageParts(toolInvocations, responseText),
236
- experimental_attachments: [],
237
- // Tool invocations are being deprecated however we need to support it for now
238
- toolInvocations
239
- };
240
- return [responseMessage];
241
- } catch (error) {
242
- throw new Error(
243
- `Failed to transform trace to scorer output: ${error instanceof Error ? error.message : "Unknown error"}`
244
- );
199
+ function transformTraceToScorerInputAndOutput(trace) {
200
+ const { spanTree, rootAgentSpan } = prepareTraceForTransformation(trace);
201
+ if (!rootAgentSpan.output) {
202
+ throw new Error("Root agent span has no output");
245
203
  }
204
+ const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);
205
+ const inputMessages = extractInputMessages(rootAgentSpan);
206
+ const systemMessages = extractSystemMessages(primaryLLMSpan);
207
+ const currentInputContent = inputMessages[0]?.content || "";
208
+ const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);
209
+ const input = {
210
+ // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata
211
+ inputMessages,
212
+ rememberedMessages,
213
+ systemMessages,
214
+ taggedSystemMessages: {}
215
+ // Todo: Support tagged system messages
216
+ };
217
+ const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);
218
+ const responseText = rootAgentSpan.output.text || "";
219
+ const responseMessage = {
220
+ role: "assistant",
221
+ content: responseText,
222
+ createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),
223
+ // @ts-ignore
224
+ parts: createMessageParts(toolInvocations, responseText),
225
+ experimental_attachments: [],
226
+ // Tool invocations are being deprecated however we need to support it for now
227
+ toolInvocations
228
+ };
229
+ const output = [responseMessage];
230
+ return {
231
+ input,
232
+ output
233
+ };
246
234
  }
247
235
 
248
236
  // src/scores/scoreTraces/scoreTracesWorkflow.ts
249
- var getTraceStep = chunkJRTFV63C_cjs.createStep({
237
+ var getTraceStep = chunk3CCJVNYI_cjs.createStep({
250
238
  id: "__process-trace-scoring",
251
239
  inputSchema: z__default.default.object({
252
240
  targets: z__default.default.array(
@@ -267,7 +255,7 @@ var getTraceStep = chunkJRTFV63C_cjs.createStep({
267
255
  }
268
256
  const storage = mastra.getStorage();
269
257
  if (!storage) {
270
- const mastraError = new chunkC73WLCY3_cjs.MastraError({
258
+ const mastraError = new chunkS7UXT3V4_cjs.MastraError({
271
259
  id: "MASTRA_STORAGE_NOT_FOUND_FOR_TRACE_SCORING",
272
260
  domain: "STORAGE" /* STORAGE */,
273
261
  category: "SYSTEM" /* SYSTEM */,
@@ -284,7 +272,7 @@ var getTraceStep = chunkJRTFV63C_cjs.createStep({
284
272
  try {
285
273
  scorer = mastra.getScorerByName(inputData.scorerName);
286
274
  } catch (error) {
287
- const mastraError = new chunkC73WLCY3_cjs.MastraError(
275
+ const mastraError = new chunkS7UXT3V4_cjs.MastraError(
288
276
  {
289
277
  id: "MASTRA_SCORER_NOT_FOUND_FOR_TRACE_SCORING",
290
278
  domain: "SCORER" /* SCORER */,
@@ -306,7 +294,7 @@ var getTraceStep = chunkJRTFV63C_cjs.createStep({
306
294
  try {
307
295
  await runScorerOnTarget({ storage, scorer, target, tracingContext });
308
296
  } catch (error) {
309
- const mastraError = new chunkC73WLCY3_cjs.MastraError(
297
+ const mastraError = new chunkS7UXT3V4_cjs.MastraError(
310
298
  {
311
299
  id: "MASTRA_SCORER_FAILED_TO_RUN_SCORER_ON_TRACE",
312
300
  domain: "SCORER" /* SCORER */,
@@ -374,7 +362,7 @@ async function runScorerOnTarget({
374
362
  await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });
375
363
  }
376
364
  async function validateAndSaveScore({ storage, scorerResult }) {
377
- const payloadToSave = chunkWAGAASWE_cjs.saveScorePayloadSchema.parse(scorerResult);
365
+ const payloadToSave = chunk2GHLV754_cjs.saveScorePayloadSchema.parse(scorerResult);
378
366
  const result = await storage.saveScore(payloadToSave);
379
367
  return result.score;
380
368
  }
@@ -386,9 +374,10 @@ function buildScorerRun({
386
374
  }) {
387
375
  let runPayload;
388
376
  if (scorerType === "agent") {
377
+ const { input, output } = transformTraceToScorerInputAndOutput(trace);
389
378
  runPayload = {
390
- input: transformTraceToScorerInput(trace),
391
- output: transformTraceToScorerOutput(trace)
379
+ input,
380
+ output
392
381
  };
393
382
  } else {
394
383
  runPayload = { input: targetSpan.input, output: targetSpan.output };
@@ -415,7 +404,7 @@ async function attachScoreToSpan({
415
404
  updates: { links: [...existingLinks, link] }
416
405
  });
417
406
  }
418
- var scoreTracesWorkflow = chunkJRTFV63C_cjs.createWorkflow({
407
+ var scoreTracesWorkflow = chunk3CCJVNYI_cjs.createWorkflow({
419
408
  id: "__batch-scoring-traces",
420
409
  inputSchema: z__default.default.object({
421
410
  targets: z__default.default.array(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["MastraError","convertMessages","createStep","z","pMap","span","saveScorePayloadSchema","createWorkflow"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MastraError } from '../../error';\nimport type { Mastra } from '../../mastra';\n\nexport async function scoreTraces({\n scorerName,\n targets,\n mastra,\n}: {\n scorerName: string;\n targets: { traceId: string; spanId?: string }[];\n mastra: Mastra;\n}) {\n const workflow = mastra.__getInternalWorkflow('__batch-scoring-traces');\n try {\n const run = await workflow.createRunAsync();\n await run.start({ inputData: { targets, scorerName } });\n } catch (error) {\n const mastraError = new MastraError(\n {\n category: 'SYSTEM',\n domain: 'SCORER',\n id: 'MASTRA_SCORER_FAILED_TO_RUN_TRACE_SCORING',\n details: {\n scorerName,\n targets: JSON.stringify(targets),\n },\n },\n error,\n );\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n}\n","import type { ToolInvocation } from 'ai';\nimport type { UIMessageWithMetadata } from '../../agent';\nimport { convertMessages } from '../../agent/message-list/utils/convert-messages';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AISpanRecord, AITraceRecord } from '../../storage';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../types';\n\n// // Span tree structure for efficient lookups\ninterface SpanTree {\n spanMap: Map<string, AISpanRecord>;\n childrenMap: Map<string, AISpanRecord[]>;\n rootSpans: AISpanRecord[];\n}\n\n// Spans don't have ids, so we need to omit it from the UIMessageWithMetadata type\ntype TransformedUIMessage = Omit<UIMessageWithMetadata, 'id'>;\n\n/**\n * Build a hierarchical span tree with efficient lookup maps\n */\nexport function buildSpanTree(spans: AISpanRecord[]): SpanTree {\n const spanMap = new Map<string, AISpanRecord>();\n const childrenMap = new Map<string, AISpanRecord[]>();\n const rootSpans: AISpanRecord[] = [];\n\n // First pass: build span map\n for (const span of spans) {\n spanMap.set(span.spanId, span);\n }\n\n // Second pass: build parent-child relationships\n for (const span of spans) {\n if (span.parentSpanId === null) {\n rootSpans.push(span);\n } else {\n const siblings = childrenMap.get(span.parentSpanId) || [];\n siblings.push(span);\n childrenMap.set(span.parentSpanId, siblings);\n }\n }\n\n // Sort children by startedAt timestamp for temporal ordering\n for (const children of childrenMap.values()) {\n children.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n }\n\n // Sort root spans by startedAt\n rootSpans.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n\n return { spanMap, childrenMap, rootSpans };\n}\n\n/**\n * Extract children spans of a specific type\n */\nfunction getChildrenOfType<T extends AISpanRecord>(\n spanTree: SpanTree,\n parentSpanId: string,\n spanType: AISpanType,\n): T[] {\n const children = spanTree.childrenMap.get(parentSpanId) || [];\n return children.filter(span => span.spanType === spanType) as T[];\n}\n\n/**\n * Convert AI SDK v5 message content to v4 format\n */\nfunction normalizeMessageContent(content: string | Array<{ type: string; text: string }>): string {\n if (typeof content === 'string') {\n return content;\n }\n\n const tempMessage = {\n id: 'temp',\n role: 'user' as const,\n parts: content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n\n const converted = convertMessages(tempMessage).to('AIV4.UI');\n return converted[0]?.content || '';\n}\n\n/**\n * Convert v5 message to v4 UIMessage format using convertMessages\n * Ensures full consistency with AI SDK UIMessage behavior\n */\nfunction convertToUIMessage(\n message: { role: string; content: string | Array<{ type: string; text: string }> },\n createdAt: Date,\n): UIMessageWithMetadata {\n // Create proper message input for convertMessages\n let messageInput;\n if (typeof message.content === 'string') {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n content: message.content,\n };\n } else {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n parts: message.content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n }\n\n const converted = convertMessages(messageInput).to('AIV4.UI');\n const result = converted[0];\n\n if (!result) {\n throw new Error('Failed to convert message');\n }\n\n return {\n ...result,\n id: '', // Spans don't have message IDs\n createdAt: new Date(createdAt), // Use span timestamp\n };\n}\n\n/**\n * Extract input messages from agent run span\n */\nfunction extractInputMessages(agentSpan: AISpanRecord): TransformedUIMessage[] {\n const input = agentSpan.input;\n\n // Handle different input formats\n if (typeof input === 'string') {\n return [\n {\n role: 'user',\n content: input,\n createdAt: new Date(agentSpan.startedAt),\n parts: [{ type: 'text', text: input }],\n experimental_attachments: [],\n },\n ];\n }\n\n if (Array.isArray(input)) {\n return input.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n\n // @ts-ignore\n if (input && typeof input === 'object' && Array.isArray(input.messages)) {\n // @ts-ignore\n return input.messages.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n return [];\n}\n\n/**\n * Extract system messages from LLM span\n */\nfunction extractSystemMessages(llmSpan: AISpanRecord): Array<{ role: 'system'; content: string }> {\n return (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role === 'system')\n .map((msg: any) => ({\n role: 'system' as const,\n content: normalizeMessageContent(msg.content),\n }));\n}\n\n/**\n * Extract conversation history (remembered messages) from LLM span\n * Excludes system messages and the current input message\n */\nfunction extractRememberedMessages(llmSpan: AISpanRecord, currentInputContent: string): TransformedUIMessage[] {\n const messages = (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role !== 'system')\n .filter((msg: any) => normalizeMessageContent(msg.content) !== currentInputContent);\n\n return messages.map((msg: any) => convertToUIMessage(msg, llmSpan.startedAt));\n}\n\n/**\n * Reconstruct tool invocations from tool call spans\n */\nfunction reconstructToolInvocations(spanTree: SpanTree, parentSpanId: string) {\n const toolSpans = getChildrenOfType<AISpanRecord>(spanTree, parentSpanId, AISpanType.TOOL_CALL);\n\n return toolSpans.map(toolSpan => ({\n state: 'result' as const,\n toolName: toolSpan.attributes?.toolId,\n args: toolSpan.input || {},\n result: toolSpan.output || {},\n }));\n}\n\n/**\n * Create message parts array including tool invocations and text\n */\nfunction createMessageParts(toolInvocations: AISpanRecord[], textContent: string) {\n const parts: { type: 'tool-invocation' | 'text'; toolInvocation?: AISpanRecord; text?: string }[] = [];\n for (const toolInvocation of toolInvocations) {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n\n if (textContent.trim()) {\n parts.push({\n type: 'text',\n text: textContent,\n });\n }\n\n return parts;\n}\n\n/**\n * Validate trace structure and throw descriptive errors\n */\nexport function validateTrace(trace: AITraceRecord): void {\n if (!trace) {\n throw new Error('Trace is null or undefined');\n }\n\n if (!trace.spans || !Array.isArray(trace.spans)) {\n throw new Error('Trace must have a spans array');\n }\n\n if (trace.spans.length === 0) {\n throw new Error('Trace has no spans');\n }\n\n // Check for circular references in parent-child relationships\n const spanIds = new Set(trace.spans.map(span => span.spanId));\n for (const span of trace.spans) {\n if (span.parentSpanId && !spanIds.has(span.parentSpanId)) {\n throw new Error(`Span ${span.spanId} references non-existent parent ${span.parentSpanId}`);\n }\n }\n}\n\n/**\n * Find the most recent LLM span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.LLM_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one LLM generation span per agent run which is a direct child of the root agent span\n return directLLMSpans[0]!;\n }\n\n throw new Error('No LLM generation span found in trace');\n}\n\n/**\n * Transform trace to scorer input format\n */\nexport function transformTraceToScorerInput(trace: AITraceRecord): ScorerRunInputForAgent {\n try {\n validateTrace(trace);\n const spanTree = buildSpanTree(trace.spans);\n\n // Find the root agent run span\n const rootAgentSpan = spanTree.rootSpans.find(span => span.spanType === 'agent_run') as AISpanRecord | undefined;\n\n if (!rootAgentSpan) {\n throw new Error('No root agent_run span found in trace');\n }\n\n const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);\n const inputMessages = extractInputMessages(rootAgentSpan);\n const systemMessages = extractSystemMessages(primaryLLMSpan);\n\n // Extract remembered messages from LLM span (excluding current input)\n const currentInputContent = inputMessages[0]?.content || '';\n const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);\n\n return {\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n inputMessages: inputMessages as UIMessageWithMetadata[],\n rememberedMessages: rememberedMessages as UIMessageWithMetadata[],\n systemMessages,\n taggedSystemMessages: {}, // Todo: Support tagged system messages\n };\n } catch (error) {\n throw new Error(\n `Failed to transform trace to scorer input: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * Transform trace to scorer output format\n */\nexport function transformTraceToScorerOutput(trace: AITraceRecord): ScorerRunOutputForAgent {\n try {\n validateTrace(trace);\n const spanTree = buildSpanTree(trace.spans);\n\n const rootAgentSpan = spanTree.rootSpans.find(span => span.spanType === 'agent_run') as AISpanRecord | undefined;\n\n if (!rootAgentSpan) {\n throw new Error('No root agent_run span found in trace');\n }\n\n if (!rootAgentSpan.output) {\n throw new Error('Root agent span has no output');\n }\n\n const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);\n\n const responseText = rootAgentSpan.output.text || '';\n\n const responseMessage: TransformedUIMessage = {\n role: 'assistant',\n content: responseText,\n createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),\n // @ts-ignore\n parts: createMessageParts(toolInvocations, responseText),\n experimental_attachments: [],\n // Tool invocations are being deprecated however we need to support it for now\n toolInvocations: toolInvocations as unknown as ToolInvocation[],\n };\n\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n return [responseMessage as UIMessageWithMetadata];\n } catch (error) {\n throw new Error(\n `Failed to transform trace to scorer output: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n","import pMap from 'p-map';\nimport z from 'zod';\nimport { InternalSpans } from '../../ai-tracing';\nimport type { TracingContext } from '../../ai-tracing';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport type { AISpanRecord, AITraceRecord, MastraStorage } from '../../storage';\nimport { createStep, createWorkflow } from '../../workflows/evented';\nimport type { MastraScorer, ScorerRun } from '../base';\nimport type { ScoreRowData } from '../types';\nimport { saveScorePayloadSchema } from '../types';\nimport { transformTraceToScorerInput, transformTraceToScorerOutput } from './utils';\n\nconst getTraceStep = createStep({\n id: '__process-trace-scoring',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n execute: async ({ inputData, tracingContext, mastra }) => {\n const logger = mastra.getLogger();\n if (!logger) {\n console.warn(\n '[scoreTracesWorkflow] Logger not initialized: no debug or error logs will be recorded for scoring traces.',\n );\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n const mastraError = new MastraError({\n id: 'MASTRA_STORAGE_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Storage not found for trace scoring',\n details: {\n scorerName: inputData.scorerName,\n },\n });\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n let scorer: MastraScorer | undefined;\n try {\n scorer = mastra.getScorerByName(inputData.scorerName);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n text: `Scorer not found for trace scoring`,\n details: {\n scorerName: inputData.scorerName,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n await pMap(\n inputData.targets,\n async target => {\n try {\n await runScorerOnTarget({ storage, scorer, target, tracingContext });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_SCORER_ON_TRACE',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n details: {\n scorerName: scorer.name,\n spanId: target.spanId || '',\n traceId: target.traceId,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n }\n },\n { concurrency: 3 },\n );\n },\n});\n\nexport async function runScorerOnTarget({\n storage,\n scorer,\n target,\n tracingContext,\n}: {\n storage: MastraStorage;\n scorer: MastraScorer;\n target: { traceId: string; spanId?: string };\n tracingContext: TracingContext;\n}) {\n // TODO: add storage api to get a single span\n const trace = await storage.getAITrace(target.traceId);\n\n if (!trace) {\n throw new Error(`Trace not found for scoring, traceId: ${target.traceId}`);\n }\n\n let span: AISpanRecord | undefined;\n if (target.spanId) {\n span = trace.spans.find(span => span.spanId === target.spanId);\n } else {\n span = trace.spans.find(span => span.parentSpanId === null);\n }\n\n if (!span) {\n throw new Error(\n `Span not found for scoring, traceId: ${target.traceId}, spanId: ${target.spanId ?? 'Not provided'}`,\n );\n }\n\n const scorerRun = buildScorerRun({\n scorerType: scorer.type === 'agent' ? 'agent' : undefined,\n tracingContext,\n trace,\n targetSpan: span,\n });\n\n const result = await scorer.run(scorerRun);\n const traceId = `${target.traceId}${target.spanId ? `-${target.spanId}` : ''}`;\n const scorerResult = {\n ...result,\n scorer: {\n id: scorer.name,\n name: scorer.name,\n description: scorer.description,\n },\n traceId,\n entityId: span.name,\n entityType: span.spanType,\n entity: { traceId: span.traceId, spanId: span.spanId },\n source: 'TEST',\n scorerId: scorer.name,\n };\n\n const savedScoreRecord = await validateAndSaveScore({ storage, scorerResult });\n await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });\n}\n\nasync function validateAndSaveScore({ storage, scorerResult }: { storage: MastraStorage; scorerResult: ScorerRun }) {\n const payloadToSave = saveScorePayloadSchema.parse(scorerResult);\n const result = await storage.saveScore(payloadToSave);\n return result.score;\n}\n\nfunction buildScorerRun({\n scorerType,\n tracingContext,\n trace,\n targetSpan,\n}: {\n scorerType?: string;\n tracingContext: TracingContext;\n trace: AITraceRecord;\n targetSpan: AISpanRecord;\n}) {\n let runPayload: ScorerRun;\n if (scorerType === 'agent') {\n runPayload = {\n input: transformTraceToScorerInput(trace as any),\n output: transformTraceToScorerOutput(trace as any),\n };\n } else {\n runPayload = { input: targetSpan.input, output: targetSpan.output };\n }\n\n runPayload.tracingContext = tracingContext;\n return runPayload;\n}\n\nasync function attachScoreToSpan({\n storage,\n span,\n scoreRecord,\n}: {\n storage: MastraStorage;\n span: AISpanRecord;\n scoreRecord: ScoreRowData;\n}) {\n const existingLinks = span.links || [];\n const link = {\n type: 'score',\n scoreId: scoreRecord.id,\n scorerName: scoreRecord.scorer.name,\n score: scoreRecord.score,\n createdAt: scoreRecord.createdAt,\n };\n await storage.updateAISpan({\n spanId: span.spanId,\n traceId: span.traceId,\n updates: { links: [...existingLinks, link] },\n });\n}\n\nexport const scoreTracesWorkflow = createWorkflow({\n id: '__batch-scoring-traces',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n steps: [getTraceStep],\n options: {\n tracingPolicy: {\n internal: InternalSpans.ALL,\n },\n },\n});\n\nscoreTracesWorkflow.then(getTraceStep).commit();\n"]}
1
+ {"version":3,"sources":["../../../src/scores/scoreTraces/scoreTraces.ts","../../../src/scores/scoreTraces/utils.ts","../../../src/scores/scoreTraces/scoreTracesWorkflow.ts"],"names":["MastraError","convertMessages","createStep","z","pMap","span","saveScorePayloadSchema","createWorkflow"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MastraError } from '../../error';\nimport type { Mastra } from '../../mastra';\n\nexport async function scoreTraces({\n scorerName,\n targets,\n mastra,\n}: {\n scorerName: string;\n targets: { traceId: string; spanId?: string }[];\n mastra: Mastra;\n}) {\n const workflow = mastra.__getInternalWorkflow('__batch-scoring-traces');\n try {\n const run = await workflow.createRunAsync();\n await run.start({ inputData: { targets, scorerName } });\n } catch (error) {\n const mastraError = new MastraError(\n {\n category: 'SYSTEM',\n domain: 'SCORER',\n id: 'MASTRA_SCORER_FAILED_TO_RUN_TRACE_SCORING',\n details: {\n scorerName,\n targets: JSON.stringify(targets),\n },\n },\n error,\n );\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n}\n","import type { ToolInvocation } from 'ai';\nimport type { UIMessageWithMetadata } from '../../agent';\nimport { convertMessages } from '../../agent/message-list/utils/convert-messages';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AISpanRecord, AITraceRecord } from '../../storage';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../types';\n\n// // Span tree structure for efficient lookups\ninterface SpanTree {\n spanMap: Map<string, AISpanRecord>;\n childrenMap: Map<string, AISpanRecord[]>;\n rootSpans: AISpanRecord[];\n}\n\n// Spans don't have ids, so we need to omit it from the UIMessageWithMetadata type\ntype TransformedUIMessage = Omit<UIMessageWithMetadata, 'id'>;\n\n/**\n * Build a hierarchical span tree with efficient lookup maps\n */\nexport function buildSpanTree(spans: AISpanRecord[]): SpanTree {\n const spanMap = new Map<string, AISpanRecord>();\n const childrenMap = new Map<string, AISpanRecord[]>();\n const rootSpans: AISpanRecord[] = [];\n\n // First pass: build span map\n for (const span of spans) {\n spanMap.set(span.spanId, span);\n }\n\n // Second pass: build parent-child relationships\n for (const span of spans) {\n if (span.parentSpanId === null) {\n rootSpans.push(span);\n } else {\n const siblings = childrenMap.get(span.parentSpanId) || [];\n siblings.push(span);\n childrenMap.set(span.parentSpanId, siblings);\n }\n }\n\n // Sort children by startedAt timestamp for temporal ordering\n for (const children of childrenMap.values()) {\n children.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n }\n\n // Sort root spans by startedAt\n rootSpans.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n\n return { spanMap, childrenMap, rootSpans };\n}\n\n/**\n * Extract children spans of a specific type\n */\nfunction getChildrenOfType<T extends AISpanRecord>(\n spanTree: SpanTree,\n parentSpanId: string,\n spanType: AISpanType,\n): T[] {\n const children = spanTree.childrenMap.get(parentSpanId) || [];\n return children.filter(span => span.spanType === spanType) as T[];\n}\n\n/**\n * Convert AI SDK v5 message content to v4 format\n */\nfunction normalizeMessageContent(content: string | Array<{ type: string; text: string }>): string {\n if (typeof content === 'string') {\n return content;\n }\n\n const tempMessage = {\n id: 'temp',\n role: 'user' as const,\n parts: content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n\n const converted = convertMessages(tempMessage).to('AIV4.UI');\n return converted[0]?.content || '';\n}\n\n/**\n * Convert v5 message to v4 UIMessage format using convertMessages\n * Ensures full consistency with AI SDK UIMessage behavior\n */\nfunction convertToUIMessage(\n message: { role: string; content: string | Array<{ type: string; text: string }> },\n createdAt: Date,\n): UIMessageWithMetadata {\n // Create proper message input for convertMessages\n let messageInput;\n if (typeof message.content === 'string') {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n content: message.content,\n };\n } else {\n messageInput = {\n id: 'temp',\n role: message.role as 'user' | 'assistant' | 'system',\n parts: message.content.map(part => ({ type: part.type as 'text', text: part.text })),\n };\n }\n\n const converted = convertMessages(messageInput).to('AIV4.UI');\n const result = converted[0];\n\n if (!result) {\n throw new Error('Failed to convert message');\n }\n\n return {\n ...result,\n id: '', // Spans don't have message IDs\n createdAt: new Date(createdAt), // Use span timestamp\n };\n}\n\n/**\n * Extract input messages from agent run span\n */\nfunction extractInputMessages(agentSpan: AISpanRecord): TransformedUIMessage[] {\n const input = agentSpan.input;\n\n // Handle different input formats\n if (typeof input === 'string') {\n return [\n {\n role: 'user',\n content: input,\n createdAt: new Date(agentSpan.startedAt),\n parts: [{ type: 'text', text: input }],\n experimental_attachments: [],\n },\n ];\n }\n\n if (Array.isArray(input)) {\n return input.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n\n // @ts-ignore\n if (input && typeof input === 'object' && Array.isArray(input.messages)) {\n // @ts-ignore\n return input.messages.map(msg => convertToUIMessage(msg, agentSpan.startedAt));\n }\n return [];\n}\n\n/**\n * Extract system messages from LLM span\n */\nfunction extractSystemMessages(llmSpan: AISpanRecord): Array<{ role: 'system'; content: string }> {\n return (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role === 'system')\n .map((msg: any) => ({\n role: 'system' as const,\n content: normalizeMessageContent(msg.content),\n }));\n}\n\n/**\n * Extract conversation history (remembered messages) from LLM span\n * Excludes system messages and the current input message\n */\nfunction extractRememberedMessages(llmSpan: AISpanRecord, currentInputContent: string): TransformedUIMessage[] {\n const messages = (llmSpan.input?.messages || [])\n .filter((msg: any) => msg.role !== 'system')\n .filter((msg: any) => normalizeMessageContent(msg.content) !== currentInputContent);\n\n return messages.map((msg: any) => convertToUIMessage(msg, llmSpan.startedAt));\n}\n\n/**\n * Reconstruct tool invocations from tool call spans\n */\nfunction reconstructToolInvocations(spanTree: SpanTree, parentSpanId: string) {\n const toolSpans = getChildrenOfType<AISpanRecord>(spanTree, parentSpanId, AISpanType.TOOL_CALL);\n\n return toolSpans.map(toolSpan => ({\n state: 'result' as const,\n toolName: toolSpan.attributes?.toolId,\n args: toolSpan.input || {},\n result: toolSpan.output || {},\n }));\n}\n\n/**\n * Create message parts array including tool invocations and text\n */\nfunction createMessageParts(toolInvocations: AISpanRecord[], textContent: string) {\n const parts: { type: 'tool-invocation' | 'text'; toolInvocation?: AISpanRecord; text?: string }[] = [];\n for (const toolInvocation of toolInvocations) {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n\n if (textContent.trim()) {\n parts.push({\n type: 'text',\n text: textContent,\n });\n }\n\n return parts;\n}\n\n/**\n * Validate trace structure and throw descriptive errors\n */\nexport function validateTrace(trace: AITraceRecord): void {\n if (!trace) {\n throw new Error('Trace is null or undefined');\n }\n\n if (!trace.spans || !Array.isArray(trace.spans)) {\n throw new Error('Trace must have a spans array');\n }\n\n if (trace.spans.length === 0) {\n throw new Error('Trace has no spans');\n }\n\n // Check for circular references in parent-child relationships\n const spanIds = new Set(trace.spans.map(span => span.spanId));\n for (const span of trace.spans) {\n if (span.parentSpanId && !spanIds.has(span.parentSpanId)) {\n throw new Error(`Span ${span.spanId} references non-existent parent ${span.parentSpanId}`);\n }\n }\n}\n\n/**\n * Find the most recent LLM span that contains conversation history\n */\nfunction findPrimaryLLMSpan(spanTree: SpanTree, rootAgentSpan: AISpanRecord): AISpanRecord {\n const directLLMSpans = getChildrenOfType<AISpanRecord>(spanTree, rootAgentSpan.spanId, AISpanType.LLM_GENERATION);\n if (directLLMSpans.length > 0) {\n // There should only be one LLM generation span per agent run which is a direct child of the root agent span\n return directLLMSpans[0]!;\n }\n\n throw new Error('No LLM generation span found in trace');\n}\n\n/**\n * Extract common trace validation and span tree building logic\n */\nfunction prepareTraceForTransformation(trace: AITraceRecord) {\n validateTrace(trace);\n const spanTree = buildSpanTree(trace.spans);\n\n // Find the root agent run span\n const rootAgentSpan = spanTree.rootSpans.find(span => span.spanType === 'agent_run') as AISpanRecord | undefined;\n\n if (!rootAgentSpan) {\n throw new Error('No root agent_run span found in trace');\n }\n\n return { spanTree, rootAgentSpan };\n}\n\nexport function transformTraceToScorerInputAndOutput(trace: AITraceRecord): {\n input: ScorerRunInputForAgent;\n output: ScorerRunOutputForAgent;\n} {\n const { spanTree, rootAgentSpan } = prepareTraceForTransformation(trace);\n\n if (!rootAgentSpan.output) {\n throw new Error('Root agent span has no output');\n }\n\n // Build input\n const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);\n const inputMessages = extractInputMessages(rootAgentSpan);\n const systemMessages = extractSystemMessages(primaryLLMSpan);\n\n // Extract remembered messages from LLM span (excluding current input)\n const currentInputContent = inputMessages[0]?.content || '';\n const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);\n\n const input = {\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n inputMessages: inputMessages as UIMessageWithMetadata[],\n rememberedMessages: rememberedMessages as UIMessageWithMetadata[],\n systemMessages,\n taggedSystemMessages: {}, // Todo: Support tagged system messages\n };\n\n // Build output\n const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);\n const responseText = rootAgentSpan.output.text || '';\n\n const responseMessage: TransformedUIMessage = {\n role: 'assistant',\n content: responseText,\n createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),\n // @ts-ignore\n parts: createMessageParts(toolInvocations, responseText),\n experimental_attachments: [],\n // Tool invocations are being deprecated however we need to support it for now\n toolInvocations: toolInvocations as unknown as ToolInvocation[],\n };\n\n // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata\n const output = [responseMessage as UIMessageWithMetadata];\n\n return {\n input,\n output,\n };\n}\n","import pMap from 'p-map';\nimport z from 'zod';\nimport { InternalSpans } from '../../ai-tracing';\nimport type { TracingContext } from '../../ai-tracing';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../error';\nimport type { AISpanRecord, AITraceRecord, MastraStorage } from '../../storage';\nimport { createStep, createWorkflow } from '../../workflows/evented';\nimport type { MastraScorer, ScorerRun } from '../base';\nimport type { ScoreRowData } from '../types';\nimport { saveScorePayloadSchema } from '../types';\nimport { transformTraceToScorerInputAndOutput } from './utils';\n\nconst getTraceStep = createStep({\n id: '__process-trace-scoring',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n execute: async ({ inputData, tracingContext, mastra }) => {\n const logger = mastra.getLogger();\n if (!logger) {\n console.warn(\n '[scoreTracesWorkflow] Logger not initialized: no debug or error logs will be recorded for scoring traces.',\n );\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n const mastraError = new MastraError({\n id: 'MASTRA_STORAGE_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Storage not found for trace scoring',\n details: {\n scorerName: inputData.scorerName,\n },\n });\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n let scorer: MastraScorer | undefined;\n try {\n scorer = mastra.getScorerByName(inputData.scorerName);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_NOT_FOUND_FOR_TRACE_SCORING',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n text: `Scorer not found for trace scoring`,\n details: {\n scorerName: inputData.scorerName,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n return;\n }\n\n await pMap(\n inputData.targets,\n async target => {\n try {\n await runScorerOnTarget({ storage, scorer, target, tracingContext });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_SCORER_ON_TRACE',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.SYSTEM,\n details: {\n scorerName: scorer.name,\n spanId: target.spanId || '',\n traceId: target.traceId,\n },\n },\n error,\n );\n logger?.error(mastraError.toString());\n logger?.trackException(mastraError);\n }\n },\n { concurrency: 3 },\n );\n },\n});\n\nexport async function runScorerOnTarget({\n storage,\n scorer,\n target,\n tracingContext,\n}: {\n storage: MastraStorage;\n scorer: MastraScorer;\n target: { traceId: string; spanId?: string };\n tracingContext: TracingContext;\n}) {\n // TODO: add storage api to get a single span\n const trace = await storage.getAITrace(target.traceId);\n\n if (!trace) {\n throw new Error(`Trace not found for scoring, traceId: ${target.traceId}`);\n }\n\n let span: AISpanRecord | undefined;\n if (target.spanId) {\n span = trace.spans.find(span => span.spanId === target.spanId);\n } else {\n span = trace.spans.find(span => span.parentSpanId === null);\n }\n\n if (!span) {\n throw new Error(\n `Span not found for scoring, traceId: ${target.traceId}, spanId: ${target.spanId ?? 'Not provided'}`,\n );\n }\n\n const scorerRun = buildScorerRun({\n scorerType: scorer.type === 'agent' ? 'agent' : undefined,\n tracingContext,\n trace,\n targetSpan: span,\n });\n\n const result = await scorer.run(scorerRun);\n const traceId = `${target.traceId}${target.spanId ? `-${target.spanId}` : ''}`;\n const scorerResult = {\n ...result,\n scorer: {\n id: scorer.name,\n name: scorer.name,\n description: scorer.description,\n },\n traceId,\n entityId: span.name,\n entityType: span.spanType,\n entity: { traceId: span.traceId, spanId: span.spanId },\n source: 'TEST',\n scorerId: scorer.name,\n };\n\n const savedScoreRecord = await validateAndSaveScore({ storage, scorerResult });\n await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });\n}\n\nasync function validateAndSaveScore({ storage, scorerResult }: { storage: MastraStorage; scorerResult: ScorerRun }) {\n const payloadToSave = saveScorePayloadSchema.parse(scorerResult);\n const result = await storage.saveScore(payloadToSave);\n return result.score;\n}\n\nfunction buildScorerRun({\n scorerType,\n tracingContext,\n trace,\n targetSpan,\n}: {\n scorerType?: string;\n tracingContext: TracingContext;\n trace: AITraceRecord;\n targetSpan: AISpanRecord;\n}) {\n let runPayload: ScorerRun;\n if (scorerType === 'agent') {\n const { input, output } = transformTraceToScorerInputAndOutput(trace);\n runPayload = {\n input,\n output,\n };\n } else {\n runPayload = { input: targetSpan.input, output: targetSpan.output };\n }\n\n runPayload.tracingContext = tracingContext;\n return runPayload;\n}\n\nasync function attachScoreToSpan({\n storage,\n span,\n scoreRecord,\n}: {\n storage: MastraStorage;\n span: AISpanRecord;\n scoreRecord: ScoreRowData;\n}) {\n const existingLinks = span.links || [];\n const link = {\n type: 'score',\n scoreId: scoreRecord.id,\n scorerName: scoreRecord.scorer.name,\n score: scoreRecord.score,\n createdAt: scoreRecord.createdAt,\n };\n await storage.updateAISpan({\n spanId: span.spanId,\n traceId: span.traceId,\n updates: { links: [...existingLinks, link] },\n });\n}\n\nexport const scoreTracesWorkflow = createWorkflow({\n id: '__batch-scoring-traces',\n inputSchema: z.object({\n targets: z.array(\n z.object({\n traceId: z.string(),\n spanId: z.string().optional(),\n }),\n ),\n scorerName: z.string(),\n }),\n outputSchema: z.any(),\n steps: [getTraceStep],\n options: {\n tracingPolicy: {\n internal: InternalSpans.ALL,\n },\n },\n});\n\nscoreTracesWorkflow.then(getTraceStep).commit();\n"]}
@@ -1,7 +1,7 @@
1
- import { createStep, createWorkflow } from '../../chunk-6NZTZOEI.js';
2
- import { saveScorePayloadSchema } from '../../chunk-X2TVBX7O.js';
3
- import { convertMessages } from '../../chunk-SHFLPFKN.js';
4
- import { MastraError } from '../../chunk-MCOVMKIS.js';
1
+ import { createStep, createWorkflow } from '../../chunk-LT6NPN3E.js';
2
+ import { saveScorePayloadSchema } from '../../chunk-RAXBZZKS.js';
3
+ import { convertMessages } from '../../chunk-BUY5X7DT.js';
4
+ import { MastraError } from '../../chunk-WHFNGECY.js';
5
5
  import pMap from 'p-map';
6
6
  import z from 'zod';
7
7
 
@@ -180,62 +180,50 @@ function findPrimaryLLMSpan(spanTree, rootAgentSpan) {
180
180
  }
181
181
  throw new Error("No LLM generation span found in trace");
182
182
  }
183
- function transformTraceToScorerInput(trace) {
184
- try {
185
- validateTrace(trace);
186
- const spanTree = buildSpanTree(trace.spans);
187
- const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
188
- if (!rootAgentSpan) {
189
- throw new Error("No root agent_run span found in trace");
190
- }
191
- const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);
192
- const inputMessages = extractInputMessages(rootAgentSpan);
193
- const systemMessages = extractSystemMessages(primaryLLMSpan);
194
- const currentInputContent = inputMessages[0]?.content || "";
195
- const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);
196
- return {
197
- // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata
198
- inputMessages,
199
- rememberedMessages,
200
- systemMessages,
201
- taggedSystemMessages: {}
202
- // Todo: Support tagged system messages
203
- };
204
- } catch (error) {
205
- throw new Error(
206
- `Failed to transform trace to scorer input: ${error instanceof Error ? error.message : "Unknown error"}`
207
- );
183
+ function prepareTraceForTransformation(trace) {
184
+ validateTrace(trace);
185
+ const spanTree = buildSpanTree(trace.spans);
186
+ const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
187
+ if (!rootAgentSpan) {
188
+ throw new Error("No root agent_run span found in trace");
208
189
  }
190
+ return { spanTree, rootAgentSpan };
209
191
  }
210
- function transformTraceToScorerOutput(trace) {
211
- try {
212
- validateTrace(trace);
213
- const spanTree = buildSpanTree(trace.spans);
214
- const rootAgentSpan = spanTree.rootSpans.find((span) => span.spanType === "agent_run");
215
- if (!rootAgentSpan) {
216
- throw new Error("No root agent_run span found in trace");
217
- }
218
- if (!rootAgentSpan.output) {
219
- throw new Error("Root agent span has no output");
220
- }
221
- const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);
222
- const responseText = rootAgentSpan.output.text || "";
223
- const responseMessage = {
224
- role: "assistant",
225
- content: responseText,
226
- createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),
227
- // @ts-ignore
228
- parts: createMessageParts(toolInvocations, responseText),
229
- experimental_attachments: [],
230
- // Tool invocations are being deprecated however we need to support it for now
231
- toolInvocations
232
- };
233
- return [responseMessage];
234
- } catch (error) {
235
- throw new Error(
236
- `Failed to transform trace to scorer output: ${error instanceof Error ? error.message : "Unknown error"}`
237
- );
192
+ function transformTraceToScorerInputAndOutput(trace) {
193
+ const { spanTree, rootAgentSpan } = prepareTraceForTransformation(trace);
194
+ if (!rootAgentSpan.output) {
195
+ throw new Error("Root agent span has no output");
238
196
  }
197
+ const primaryLLMSpan = findPrimaryLLMSpan(spanTree, rootAgentSpan);
198
+ const inputMessages = extractInputMessages(rootAgentSpan);
199
+ const systemMessages = extractSystemMessages(primaryLLMSpan);
200
+ const currentInputContent = inputMessages[0]?.content || "";
201
+ const rememberedMessages = extractRememberedMessages(primaryLLMSpan, currentInputContent);
202
+ const input = {
203
+ // We do not keep track of the tool call ids in traces, so we need to cast to UIMessageWithMetadata
204
+ inputMessages,
205
+ rememberedMessages,
206
+ systemMessages,
207
+ taggedSystemMessages: {}
208
+ // Todo: Support tagged system messages
209
+ };
210
+ const toolInvocations = reconstructToolInvocations(spanTree, rootAgentSpan.spanId);
211
+ const responseText = rootAgentSpan.output.text || "";
212
+ const responseMessage = {
213
+ role: "assistant",
214
+ content: responseText,
215
+ createdAt: new Date(rootAgentSpan.endedAt || rootAgentSpan.startedAt),
216
+ // @ts-ignore
217
+ parts: createMessageParts(toolInvocations, responseText),
218
+ experimental_attachments: [],
219
+ // Tool invocations are being deprecated however we need to support it for now
220
+ toolInvocations
221
+ };
222
+ const output = [responseMessage];
223
+ return {
224
+ input,
225
+ output
226
+ };
239
227
  }
240
228
 
241
229
  // src/scores/scoreTraces/scoreTracesWorkflow.ts
@@ -379,9 +367,10 @@ function buildScorerRun({
379
367
  }) {
380
368
  let runPayload;
381
369
  if (scorerType === "agent") {
370
+ const { input, output } = transformTraceToScorerInputAndOutput(trace);
382
371
  runPayload = {
383
- input: transformTraceToScorerInput(trace),
384
- output: transformTraceToScorerOutput(trace)
372
+ input,
373
+ output
385
374
  };
386
375
  } else {
387
376
  runPayload = { input: targetSpan.input, output: targetSpan.output };