@mastra/core 0.16.4-alpha.1 → 0.16.4-alpha.2

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 (83) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/agent/index.cjs +8 -8
  3. package/dist/agent/index.js +1 -1
  4. package/dist/agent/input-processor/index.cjs +6 -6
  5. package/dist/agent/input-processor/index.js +1 -1
  6. package/dist/{chunk-PRTH6W72.js → chunk-4VP3M5T7.js} +3 -3
  7. package/dist/{chunk-PRTH6W72.js.map → chunk-4VP3M5T7.js.map} +1 -1
  8. package/dist/{chunk-J52TTT6T.js → chunk-CF3TI576.js} +7 -10
  9. package/dist/chunk-CF3TI576.js.map +1 -0
  10. package/dist/{chunk-WNN3LIOF.js → chunk-ES5UWPHJ.js} +3 -3
  11. package/dist/{chunk-WNN3LIOF.js.map → chunk-ES5UWPHJ.js.map} +1 -1
  12. package/dist/{chunk-BIXBJ4DU.cjs → chunk-FTDM75SW.cjs} +7 -7
  13. package/dist/{chunk-BIXBJ4DU.cjs.map → chunk-FTDM75SW.cjs.map} +1 -1
  14. package/dist/{chunk-ENZVBXRB.js → chunk-K3JIDVC4.js} +69 -3
  15. package/dist/chunk-K3JIDVC4.js.map +1 -0
  16. package/dist/{chunk-KFXKSOXF.js → chunk-LVKX346H.js} +3 -3
  17. package/dist/{chunk-KFXKSOXF.js.map → chunk-LVKX346H.js.map} +1 -1
  18. package/dist/{chunk-KICLFGCP.cjs → chunk-S5QJEY5X.cjs} +69 -3
  19. package/dist/chunk-S5QJEY5X.cjs.map +1 -0
  20. package/dist/{chunk-DORWTJUT.cjs → chunk-UIFZI5XX.cjs} +7 -7
  21. package/dist/{chunk-DORWTJUT.cjs.map → chunk-UIFZI5XX.cjs.map} +1 -1
  22. package/dist/{chunk-L34N5NMP.cjs → chunk-VVH4BOE4.cjs} +4 -4
  23. package/dist/{chunk-L34N5NMP.cjs.map → chunk-VVH4BOE4.cjs.map} +1 -1
  24. package/dist/{chunk-EE5TG5UG.cjs → chunk-W4GRW6AV.cjs} +6 -6
  25. package/dist/{chunk-EE5TG5UG.cjs.map → chunk-W4GRW6AV.cjs.map} +1 -1
  26. package/dist/{chunk-ELLP4WJF.cjs → chunk-YLR7PB3B.cjs} +7 -10
  27. package/dist/chunk-YLR7PB3B.cjs.map +1 -0
  28. package/dist/{chunk-CLEXBHVL.js → chunk-YYZT5JKX.js} +4 -4
  29. package/dist/{chunk-CLEXBHVL.js.map → chunk-YYZT5JKX.js.map} +1 -1
  30. package/dist/index.cjs +22 -22
  31. package/dist/index.js +6 -6
  32. package/dist/loop/index.cjs +2 -2
  33. package/dist/loop/index.js +1 -1
  34. package/dist/loop/loop.d.ts.map +1 -1
  35. package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
  36. package/dist/loop/test-utils/options.d.ts.map +1 -1
  37. package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
  38. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  39. package/dist/loop/types.d.ts +1 -0
  40. package/dist/loop/types.d.ts.map +1 -1
  41. package/dist/loop/workflow/llm-execution.d.ts.map +1 -1
  42. package/dist/loop/workflow/stream.d.ts +1 -1
  43. package/dist/loop/workflow/stream.d.ts.map +1 -1
  44. package/dist/mastra/index.cjs +2 -2
  45. package/dist/mastra/index.js +1 -1
  46. package/dist/network/index.cjs +2 -2
  47. package/dist/network/index.js +1 -1
  48. package/dist/network/vNext/index.cjs +27 -27
  49. package/dist/network/vNext/index.js +1 -1
  50. package/dist/processors/index.cjs +8 -8
  51. package/dist/processors/index.js +2 -2
  52. package/dist/relevance/index.cjs +4 -4
  53. package/dist/relevance/index.js +1 -1
  54. package/dist/scores/index.cjs +8 -8
  55. package/dist/scores/index.js +1 -1
  56. package/dist/storage/base.d.ts +27 -1
  57. package/dist/storage/base.d.ts.map +1 -1
  58. package/dist/storage/domains/operations/base.d.ts +26 -1
  59. package/dist/storage/domains/operations/base.d.ts.map +1 -1
  60. package/dist/storage/index.cjs +61 -7
  61. package/dist/storage/index.cjs.map +1 -1
  62. package/dist/storage/index.js +57 -3
  63. package/dist/storage/index.js.map +1 -1
  64. package/dist/storage/mock.d.ts +1 -0
  65. package/dist/storage/mock.d.ts.map +1 -1
  66. package/dist/storage/types.d.ts +27 -0
  67. package/dist/storage/types.d.ts.map +1 -1
  68. package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
  69. package/dist/stream/base/output.d.ts +3 -1
  70. package/dist/stream/base/output.d.ts.map +1 -1
  71. package/dist/stream/index.cjs +3 -3
  72. package/dist/stream/index.js +1 -1
  73. package/dist/workflows/evented/index.cjs +10 -10
  74. package/dist/workflows/evented/index.js +1 -1
  75. package/dist/workflows/index.cjs +10 -10
  76. package/dist/workflows/index.js +1 -1
  77. package/dist/workflows/legacy/index.cjs +22 -22
  78. package/dist/workflows/legacy/index.js +1 -1
  79. package/package.json +1 -1
  80. package/dist/chunk-ELLP4WJF.cjs.map +0 -1
  81. package/dist/chunk-ENZVBXRB.js.map +0 -1
  82. package/dist/chunk-J52TTT6T.js.map +0 -1
  83. package/dist/chunk-KICLFGCP.cjs.map +0 -1
@@ -84,10 +84,7 @@ case "reasoning-end":return {type:"reasoning-end",id:chunk.payload.id,providerMe
84
84
  finishReason:chunk.payload.stepResult.reason,providerMetadata};}case "text-delta":return {type:"text-delta",id:chunk.payload.id,text:chunk.payload.text,providerMetadata:chunk.payload.providerMetadata};case "text-end":return {type:"text-end",id:chunk.payload.id,providerMetadata:chunk.payload.providerMetadata};case "text-start":return {type:"text-start",id:chunk.payload.id,providerMetadata:chunk.payload.providerMetadata};case "tool-result":return {type:"tool-result",input:chunk.payload.args,toolCallId:chunk.payload.toolCallId,providerExecuted:chunk.payload.providerExecuted,toolName:chunk.payload.toolName,output:chunk.payload.result// providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?
85
85
  };case "tool-error":return {type:"tool-error",error:chunk.payload.error,input:chunk.payload.args,toolCallId:chunk.payload.toolCallId,providerExecuted:chunk.payload.providerExecuted,toolName:chunk.payload.toolName// providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?
86
86
  };case "abort":return {type:"abort"};case "error":return {type:"error",error:chunk.payload.error};case "object":return {type:"object",object:chunk.object};default:if(chunk.type&&chunk.payload){return {type:chunk.type,...(chunk.payload||{})};}return;}}// src/stream/aisdk/v5/output.ts
87
- var AISDKV5OutputStream=class{#modelOutput;#options;#messageList;constructor({modelOutput,options,messageList}){this.#modelOutput=modelOutput;this.#options=options;this.#messageList=messageList;}toTextStreamResponse(init){return aiV5.createTextStreamResponse({textStream:this.#modelOutput.textStream,...init});}toUIMessageStreamResponse({// @ts-ignore
88
- generateMessageId,originalMessages,sendFinish,sendReasoning,sendSources,onError,sendStart,messageMetadata,onFinish,...init}={}){return aiV5.createUIMessageStreamResponse({stream:this.toUIMessageStream({// @ts-ignore
89
- generateMessageId,originalMessages,sendFinish,sendReasoning,sendSources,onError,sendStart,messageMetadata,onFinish}),...init});}toUIMessageStream({// @ts-ignore
90
- generateMessageId,originalMessages,sendFinish=true,sendReasoning=true,sendSources=false,onError=providerV5.getErrorMessage,sendStart=true,messageMetadata,onFinish}={}){const responseMessageId=generateMessageId!=null?getResponseUIMessageId({originalMessages,responseMessageId:generateMessageId}):void 0;return aiV5.createUIMessageStream({onError,onFinish,generateId:()=>responseMessageId??generateMessageId?.(),execute:async({writer})=>{for await(const part of this.fullStream){const messageMetadataValue=messageMetadata?.({part});const partType=part.type;const transformedChunk=convertFullStreamChunkToUIMessageStream({part,sendReasoning,messageMetadataValue,sendSources,sendStart,sendFinish,responseMessageId,onError});if(transformedChunk){writer.write(transformedChunk);}if(messageMetadataValue!=null&&partType!=="start"&&partType!=="finish"){writer.write({type:"message-metadata",messageMetadata:messageMetadataValue});}}}});}async consumeStream(options){try{await aiV5.consumeStream({stream:this.fullStream.pipeThrough(new web.TransformStream({transform(chunk,controller){controller.enqueue(chunk);}})),onError:options?.onError});}catch(error){console.log("consumeStream error",error);options?.onError?.(error);}}get sources(){return this.#modelOutput.sources.then(sources=>sources.map(source=>{return convertMastraChunkToAISDKv5({chunk:source});}));}get files(){return this.#modelOutput.files.then(files=>files.map(file=>{if(file.type==="file"){return convertMastraChunkToAISDKv5({chunk:file})?.file;}return;}).filter(Boolean));}get text(){return this.#modelOutput.text;}/**
87
+ var AISDKV5OutputStream=class{#modelOutput;#options;#messageList;constructor({modelOutput,options,messageList}){this.#modelOutput=modelOutput;this.#options=options;this.#messageList=messageList;}toTextStreamResponse(init){return aiV5.createTextStreamResponse({textStream:this.#modelOutput.textStream,...init});}toUIMessageStreamResponse({generateMessageId,originalMessages,sendFinish,sendReasoning,sendSources,onError,sendStart,messageMetadata,onFinish,...init}={}){return aiV5.createUIMessageStreamResponse({stream:this.toUIMessageStream({generateMessageId,originalMessages,sendFinish,sendReasoning,sendSources,onError,sendStart,messageMetadata,onFinish}),...init});}toUIMessageStream({generateMessageId,originalMessages,sendFinish=true,sendReasoning=true,sendSources=false,onError=providerV5.getErrorMessage,sendStart=true,messageMetadata,onFinish}={}){let responseMessageId=generateMessageId!=null?getResponseUIMessageId({originalMessages,responseMessageId:generateMessageId}):void 0;return aiV5.createUIMessageStream({onError,onFinish,generateId:()=>responseMessageId??generateMessageId?.(),execute:async({writer})=>{for await(const part of this.fullStream){const messageMetadataValue=messageMetadata?.({part});const partType=part.type;responseMessageId=this.#modelOutput.messageId;const transformedChunk=convertFullStreamChunkToUIMessageStream({part,sendReasoning,messageMetadataValue,sendSources,sendStart,sendFinish,responseMessageId,onError});if(transformedChunk){writer.write(transformedChunk);}if(messageMetadataValue!=null&&partType!=="start"&&partType!=="finish"){writer.write({type:"message-metadata",messageMetadata:messageMetadataValue});}}}});}async consumeStream(options){try{await aiV5.consumeStream({stream:this.fullStream.pipeThrough(new web.TransformStream({transform(chunk,controller){controller.enqueue(chunk);}})),onError:options?.onError});}catch(error){console.log("consumeStream error",error);options?.onError?.(error);}}get sources(){return this.#modelOutput.sources.then(sources=>sources.map(source=>{return convertMastraChunkToAISDKv5({chunk:source});}));}get files(){return this.#modelOutput.files.then(files=>files.map(file=>{if(file.type==="file"){return convertMastraChunkToAISDKv5({chunk:file})?.file;}return;}).filter(Boolean));}get text(){return this.#modelOutput.text;}/**
91
88
  * Stream of valid JSON chunks. The final JSON result is validated against the output schema when the stream ends.
92
89
  */get objectStream(){return this.#modelOutput.objectStream;}get generateTextFiles(){return this.#modelOutput.files.then(files=>files.map(file=>{if(file.type==="file"){return convertMastraChunkToAISDKv5({chunk:file,mode:"generate"})?.file;}return;}).filter(Boolean));}get toolCalls(){return this.#modelOutput.toolCalls.then(toolCalls=>toolCalls.map(toolCall=>{return convertMastraChunkToAISDKv5({chunk:toolCall});}));}get toolResults(){return this.#modelOutput.toolResults.then(toolResults=>toolResults.map(toolResult=>{return convertMastraChunkToAISDKv5({chunk:toolResult});}));}get reasoningText(){return this.#modelOutput.reasoningText;}get reasoning(){return this.#modelOutput.reasoningDetails;}get response(){return this.#modelOutput.response.then(response=>({...response}));}get steps(){return this.#modelOutput.steps.then(steps=>transformSteps({steps}));}get generateTextSteps(){return this.#modelOutput.steps.then(steps=>transformSteps({steps}));}get content(){return this.#messageList.get.response.aiV5.modelContent();}/**
93
90
  * Stream of only text content, compatible with streaming text responses.
@@ -125,7 +122,7 @@ steps:new DelayedPromise(),totalUsage:new DelayedPromise(),content:new DelayedPr
125
122
  * The message list for this stream.
126
123
  */messageList;/**
127
124
  * Trace ID used on the execution (if the execution was traced).
128
- */traceId;constructor({model:_model,stream,messageList,options}){super({component:"LLM",name:"MastraModelOutput"});this.#options=options;this.#returnScorerData=!!options.returnScorerData;this.runId=options.runId;this.traceId=chunkERRIEUC2_cjs.getValidTraceId(options.tracingContext?.currentSpan);if(options.outputProcessors?.length){this.processorRunner=new ProcessorRunner({inputProcessors:[],outputProcessors:options.outputProcessors,logger:this.logger,agentName:"MastraModelOutput"});}if(options.outputProcessorRunnerMode){this.outputProcessorRunnerMode=options.outputProcessorRunnerMode;}this.messageList=messageList;const self=this;let processedStream=stream;const processorRunner=this.processorRunner;if(processorRunner&&options.outputProcessorRunnerMode===`stream`){const processorStates=/* @__PURE__ */new Map();processedStream=stream.pipeThrough(new web.TransformStream({async transform(chunk,controller){const{part:processed,blocked,reason}=await processorRunner.processPart(chunk,processorStates);if(blocked){controller.enqueue({type:"tripwire",payload:{tripwireReason:reason||"Output processor blocked content"}});return;}if(processed){controller.enqueue(processed);}}}));}this.#baseStream=processedStream.pipeThrough(new web.TransformStream({transform:async(chunk,controller)=>{switch(chunk.type){case "source":self.#bufferedSources.push(chunk);self.#bufferedByStep.sources.push(chunk);break;case "text-delta":self.#bufferedText.push(chunk.payload.text);self.#bufferedByStep.text+=chunk.payload.text;if(chunk.payload.id){const ary=self.#bufferedTextChunks[chunk.payload.id]??[];ary.push(chunk.payload.text);self.#bufferedTextChunks[chunk.payload.id]=ary;}break;case "tool-call-input-streaming-start":self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId]=chunk.payload.toolName;break;case "tool-call-delta":if(!self.#toolCallArgsDeltas[chunk.payload.toolCallId]){self.#toolCallArgsDeltas[chunk.payload.toolCallId]=[];}self.#toolCallArgsDeltas?.[chunk.payload.toolCallId]?.push(chunk.payload.argsTextDelta);chunk.payload.toolName||=self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId];break;case "file":self.#bufferedFiles.push(chunk);self.#bufferedByStep.files.push(chunk);break;case "reasoning-start":self.#bufferedReasoningDetails[chunk.payload.id]={type:"reasoning",text:"",providerMetadata:chunk.payload.providerMetadata||{}};break;case "reasoning-delta":{self.#bufferedReasoning.push(chunk.payload.text);self.#bufferedByStep.reasoning+=chunk.payload.text;const bufferedReasoning=self.#bufferedReasoningDetails[chunk.payload.id];if(bufferedReasoning){bufferedReasoning.text+=chunk.payload.text;if(chunk.payload.providerMetadata){bufferedReasoning.providerMetadata=chunk.payload.providerMetadata;}}break;}case "reasoning-end":{const bufferedReasoning=self.#bufferedReasoningDetails[chunk.payload.id];if(chunk.payload.providerMetadata&&bufferedReasoning){bufferedReasoning.providerMetadata=chunk.payload.providerMetadata;}break;}case "tool-call":self.#toolCalls.push(chunk);self.#bufferedByStep.toolCalls.push(chunk);if(chunk.payload?.output?.from==="AGENT"&&chunk.payload?.output?.type==="finish"){const finishPayload=chunk.payload?.output.payload;self.updateUsageCount(finishPayload.usage);}break;case "tool-result":self.#toolResults.push(chunk);self.#bufferedByStep.toolResults.push(chunk);break;case "step-finish":{self.updateUsageCount(chunk.payload.output.usage);self.#warnings=chunk.payload.stepResult.warnings||[];if(chunk.payload.metadata.request){self.#request=chunk.payload.metadata.request;}const reasoningDetails=reasoningDetailsFromMessages(chunk.payload.messages.all.slice(self.#bufferedByStep.msgCount));const{providerMetadata,request,...otherMetadata}=chunk.payload.metadata;const stepResult={stepType:self.#bufferedSteps.length===0?"initial":"tool-result",text:self.#bufferedByStep.text,reasoning:self.#bufferedByStep.reasoning||void 0,sources:self.#bufferedByStep.sources,files:self.#bufferedByStep.files,toolCalls:self.#bufferedByStep.toolCalls,toolResults:self.#bufferedByStep.toolResults,warnings:self.#warnings,reasoningDetails,providerMetadata,experimental_providerMetadata:providerMetadata,isContinued:chunk.payload.stepResult.isContinued,logprobs:chunk.payload.stepResult.logprobs,finishReason:chunk.payload.stepResult.reason,response:{...otherMetadata,messages:chunk.payload.messages.nonUser},request,usage:chunk.payload.output.usage,// TODO: need to be able to pass a step id into this fn to get the content for a specific step id
125
+ */traceId;messageId;constructor({model:_model,stream,messageList,options,messageId}){super({component:"LLM",name:"MastraModelOutput"});this.#options=options;this.#returnScorerData=!!options.returnScorerData;this.runId=options.runId;this.traceId=chunkERRIEUC2_cjs.getValidTraceId(options.tracingContext?.currentSpan);this.messageId=messageId;if(options.outputProcessors?.length){this.processorRunner=new ProcessorRunner({inputProcessors:[],outputProcessors:options.outputProcessors,logger:this.logger,agentName:"MastraModelOutput"});}if(options.outputProcessorRunnerMode){this.outputProcessorRunnerMode=options.outputProcessorRunnerMode;}this.messageList=messageList;const self=this;let processedStream=stream;const processorRunner=this.processorRunner;if(processorRunner&&options.outputProcessorRunnerMode===`stream`){const processorStates=/* @__PURE__ */new Map();processedStream=stream.pipeThrough(new web.TransformStream({async transform(chunk,controller){const{part:processed,blocked,reason}=await processorRunner.processPart(chunk,processorStates);if(blocked){controller.enqueue({type:"tripwire",payload:{tripwireReason:reason||"Output processor blocked content"}});return;}if(processed){controller.enqueue(processed);}}}));}this.#baseStream=processedStream.pipeThrough(new web.TransformStream({transform:async(chunk,controller)=>{switch(chunk.type){case "source":self.#bufferedSources.push(chunk);self.#bufferedByStep.sources.push(chunk);break;case "text-delta":self.#bufferedText.push(chunk.payload.text);self.#bufferedByStep.text+=chunk.payload.text;if(chunk.payload.id){const ary=self.#bufferedTextChunks[chunk.payload.id]??[];ary.push(chunk.payload.text);self.#bufferedTextChunks[chunk.payload.id]=ary;}break;case "tool-call-input-streaming-start":self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId]=chunk.payload.toolName;break;case "tool-call-delta":if(!self.#toolCallArgsDeltas[chunk.payload.toolCallId]){self.#toolCallArgsDeltas[chunk.payload.toolCallId]=[];}self.#toolCallArgsDeltas?.[chunk.payload.toolCallId]?.push(chunk.payload.argsTextDelta);chunk.payload.toolName||=self.#toolCallDeltaIdNameMap[chunk.payload.toolCallId];break;case "file":self.#bufferedFiles.push(chunk);self.#bufferedByStep.files.push(chunk);break;case "reasoning-start":self.#bufferedReasoningDetails[chunk.payload.id]={type:"reasoning",text:"",providerMetadata:chunk.payload.providerMetadata||{}};break;case "reasoning-delta":{self.#bufferedReasoning.push(chunk.payload.text);self.#bufferedByStep.reasoning+=chunk.payload.text;const bufferedReasoning=self.#bufferedReasoningDetails[chunk.payload.id];if(bufferedReasoning){bufferedReasoning.text+=chunk.payload.text;if(chunk.payload.providerMetadata){bufferedReasoning.providerMetadata=chunk.payload.providerMetadata;}}break;}case "reasoning-end":{const bufferedReasoning=self.#bufferedReasoningDetails[chunk.payload.id];if(chunk.payload.providerMetadata&&bufferedReasoning){bufferedReasoning.providerMetadata=chunk.payload.providerMetadata;}break;}case "tool-call":self.#toolCalls.push(chunk);self.#bufferedByStep.toolCalls.push(chunk);if(chunk.payload?.output?.from==="AGENT"&&chunk.payload?.output?.type==="finish"){const finishPayload=chunk.payload?.output.payload;self.updateUsageCount(finishPayload.usage);}break;case "tool-result":self.#toolResults.push(chunk);self.#bufferedByStep.toolResults.push(chunk);break;case "step-finish":{self.updateUsageCount(chunk.payload.output.usage);self.#warnings=chunk.payload.stepResult.warnings||[];if(chunk.payload.metadata.request){self.#request=chunk.payload.metadata.request;}const reasoningDetails=reasoningDetailsFromMessages(chunk.payload.messages.all.slice(self.#bufferedByStep.msgCount));const{providerMetadata,request,...otherMetadata}=chunk.payload.metadata;const stepResult={stepType:self.#bufferedSteps.length===0?"initial":"tool-result",text:self.#bufferedByStep.text,reasoning:self.#bufferedByStep.reasoning||void 0,sources:self.#bufferedByStep.sources,files:self.#bufferedByStep.files,toolCalls:self.#bufferedByStep.toolCalls,toolResults:self.#bufferedByStep.toolResults,warnings:self.#warnings,reasoningDetails,providerMetadata,experimental_providerMetadata:providerMetadata,isContinued:chunk.payload.stepResult.isContinued,logprobs:chunk.payload.stepResult.logprobs,finishReason:chunk.payload.stepResult.reason,response:{...otherMetadata,messages:chunk.payload.messages.nonUser},request,usage:chunk.payload.output.usage,// TODO: need to be able to pass a step id into this fn to get the content for a specific step id
129
126
  content:messageList.get.response.aiV5.stepContent()};await options?.onStepFinish?.(stepResult);self.#bufferedSteps.push(stepResult);self.#bufferedByStep={text:"",reasoning:"",sources:[],files:[],toolCalls:[],toolResults:[],msgCount:chunk.payload.messages.all.length};break;}case "tripwire":self.#tripwire=true;self.#tripwireReason=chunk.payload?.tripwireReason||"Content blocked";self.#finishReason="other";self.#delayedPromises.text.resolve(self.#bufferedText.join(""));self.#delayedPromises.finishReason.resolve("other");self.#delayedPromises.object.resolve(void 0);self.#delayedPromises.usage.resolve(self.#usageCount);self.#delayedPromises.warnings.resolve(self.#warnings);self.#delayedPromises.providerMetadata.resolve(void 0);self.#delayedPromises.response.resolve({});self.#delayedPromises.request.resolve({});self.#delayedPromises.reasoning.resolve("");self.#delayedPromises.reasoningText.resolve(void 0);self.#delayedPromises.sources.resolve([]);self.#delayedPromises.files.resolve([]);self.#delayedPromises.toolCalls.resolve([]);self.#delayedPromises.toolResults.resolve([]);self.#delayedPromises.steps.resolve(self.#bufferedSteps);self.#delayedPromises.totalUsage.resolve(self.#usageCount);self.#delayedPromises.content.resolve([]);self.#delayedPromises.reasoningDetails.resolve([]);controller.enqueue(chunk);controller.terminate();return;case "finish":if(chunk.payload.stepResult.reason){self.#finishReason=chunk.payload.stepResult.reason;}let response={};if(chunk.payload.metadata){const{providerMetadata,request,...otherMetadata}=chunk.payload.metadata;response={...otherMetadata,messages:messageList.get.response.aiV5.model(),uiMessages:messageList.get.response.aiV5.ui()};}this.populateUsageCount(chunk.payload.output.usage);chunk.payload.output.usage=self.#usageCount;try{if(self.processorRunner&&self.outputProcessorRunnerMode===`result`){self.messageList=await self.processorRunner.runOutputProcessors(self.messageList);const outputText=self.messageList.get.response.aiV4.core().map(m=>chunkDUUXEPE5_cjs.MessageList.coreContentToString(m.content)).join("\n");const messages=self.messageList.get.response.v2();const messagesWithStructuredData=messages.filter(msg=>msg.content.metadata&&msg.content.metadata.structuredOutput);if(messagesWithStructuredData[0]&&messagesWithStructuredData[0].content.metadata?.structuredOutput){const structuredOutput=messagesWithStructuredData[0].content.metadata.structuredOutput;self.#delayedPromises.object.resolve(structuredOutput);}else if(!self.#options.output){self.#delayedPromises.object.resolve(void 0);}self.#delayedPromises.text.resolve(outputText);self.#delayedPromises.finishReason.resolve(self.#finishReason);if(chunk.payload.metadata){const{providerMetadata,request,...otherMetadata}=chunk.payload.metadata;response={...otherMetadata,messages:messageList.get.response.aiV5.model(),uiMessages:messageList.get.response.aiV5.ui()};}}else {const textContent=self.#bufferedText.join("");self.#delayedPromises.text.resolve(textContent);self.#delayedPromises.finishReason.resolve(self.#finishReason);const messages=self.messageList.get.response.v2();const messagesWithStructuredData=messages.filter(msg=>msg.content.metadata&&msg.content.metadata.structuredOutput);if(messagesWithStructuredData[0]&&// this is to make typescript happy
130
127
  messagesWithStructuredData[0].content.metadata?.structuredOutput){const structuredOutput=messagesWithStructuredData[0].content.metadata.structuredOutput;self.#delayedPromises.object.resolve(structuredOutput);}else if(!self.#options.output&&self.#delayedPromises.object.status.type!=="resolved"){self.#delayedPromises.object.resolve(void 0);}}}catch(error2){if(error2 instanceof TripWire){self.#tripwire=true;self.#tripwireReason=error2.message;self.#delayedPromises.finishReason.resolve("other");self.#delayedPromises.text.resolve("");}else {self.#error=error2 instanceof Error?error2.message:String(error2);self.#delayedPromises.finishReason.resolve("error");self.#delayedPromises.text.resolve("");}self.#delayedPromises.object.resolve(void 0);}self.#delayedPromises.usage.resolve(self.#usageCount);self.#delayedPromises.warnings.resolve(self.#warnings);self.#delayedPromises.providerMetadata.resolve(chunk.payload.metadata?.providerMetadata);self.#delayedPromises.response.resolve(response);self.#delayedPromises.request.resolve(self.#request||{});self.#delayedPromises.text.resolve(self.#bufferedText.join(""));self.#delayedPromises.reasoning.resolve(self.#bufferedReasoning.join(""));const reasoningText=self.#bufferedReasoning.length>0?self.#bufferedReasoning.join(""):void 0;self.#delayedPromises.reasoningText.resolve(reasoningText);self.#delayedPromises.sources.resolve(self.#bufferedSources);self.#delayedPromises.files.resolve(self.#bufferedFiles);self.#delayedPromises.toolCalls.resolve(self.#toolCalls);self.#delayedPromises.toolResults.resolve(self.#toolResults);self.#delayedPromises.steps.resolve(self.#bufferedSteps);self.#delayedPromises.totalUsage.resolve(self.#getTotalUsage());self.#delayedPromises.content.resolve(messageList.get.response.aiV5.stepContent());self.#delayedPromises.reasoningDetails.resolve(Object.values(self.#bufferedReasoningDetails||{}));const baseFinishStep=self.#bufferedSteps[self.#bufferedSteps.length-1];if(baseFinishStep){const onFinishPayload={text:baseFinishStep.text,warnings:baseFinishStep.warnings??[],finishReason:chunk.payload.stepResult.reason,// TODO: we should add handling for step IDs in message list so you can retrieve step content by step id. And on finish should the content here be from all steps?
131
128
  content:messageList.get.response.aiV5.stepContent(),request:await self.request,error:self.error,reasoning:await self.aisdk.v5.reasoning,reasoningText:await self.aisdk.v5.reasoningText,sources:await self.aisdk.v5.sources,files:await self.aisdk.v5.files,steps:transformSteps({steps:self.#bufferedSteps}),response:{...(await self.response),messages:messageList.get.response.aiV5.model()},usage:chunk.payload.output.usage,totalUsage:self.#getTotalUsage(),toolCalls:await self.aisdk.v5.toolCalls,toolResults:await self.aisdk.v5.toolResults,staticToolCalls:(await self.aisdk.v5.toolCalls).filter(toolCall=>toolCall.dynamic===false),staticToolResults:(await self.aisdk.v5.toolResults).filter(toolResult=>toolResult.dynamic===false),dynamicToolCalls:(await self.aisdk.v5.toolCalls).filter(toolCall=>toolCall.dynamic===true),dynamicToolResults:(await self.aisdk.v5.toolResults).filter(toolResult=>toolResult.dynamic===true),object:self.#delayedPromises.object.status.type==="resolved"?self.#delayedPromises.object.status.value:self.#options.output&&baseFinishStep.text?(()=>{try{return JSON.parse(baseFinishStep.text);}catch{return void 0;}})():void 0};await options?.onFinish?.(onFinishPayload);}if(options?.rootSpan){options.rootSpan.setAttributes({...(baseFinishStep?.usage?.reasoningTokens?{"stream.usage.reasoningTokens":baseFinishStep.usage.reasoningTokens}:{}),...(baseFinishStep?.usage?.totalTokens?{"stream.usage.totalTokens":baseFinishStep.usage.totalTokens}:{}),...(baseFinishStep?.usage?.inputTokens?{"stream.usage.inputTokens":baseFinishStep.usage.inputTokens}:{}),...(baseFinishStep?.usage?.outputTokens?{"stream.usage.outputTokens":baseFinishStep.usage.outputTokens}:{}),...(baseFinishStep?.usage?.cachedInputTokens?{"stream.usage.cachedInputTokens":baseFinishStep.usage.cachedInputTokens}:{}),...(baseFinishStep?.providerMetadata?{"stream.response.providerMetadata":JSON.stringify(baseFinishStep?.providerMetadata)}:{}),...(baseFinishStep?.finishReason?{"stream.response.finishReason":baseFinishStep?.finishReason}:{}),...(options?.telemetry_settings?.recordOutputs!==false?{"stream.response.text":baseFinishStep?.text}:{}),...(baseFinishStep?.toolCalls&&options?.telemetry_settings?.recordOutputs!==false?{"stream.response.toolCalls":JSON.stringify(baseFinishStep?.toolCalls?.map(chunk2=>{return {type:"tool-call",toolCallId:chunk2.payload.toolCallId,args:chunk2.payload.args,toolName:chunk2.payload.toolName};}))}:{})});options.rootSpan.end();}break;case "error":self.#error=chunk.payload.error;const error=typeof self.#error==="object"?new Error(self.#error.message):new Error(String(self.#error));Object.values(self.#delayedPromises).forEach(promise=>promise.reject(error));break;}controller.enqueue(chunk);}}));this.#aisdkv5=new AISDKV5OutputStream({modelOutput:this,messageList,options:{toolCallStreaming:options?.toolCallStreaming,output:options?.output}});}#getDelayedPromise(promise){if(!this.#streamConsumed){void this.consumeStream();}return promise.promise;}/**
@@ -337,12 +334,12 @@ async function processOutputStream({tools,messageId,messageList,outputStream,run
337
334
  // BUT does this cause other issues?
338
335
  // Alternative solution: in message list allow combining text deltas together when the message source is "response" and the text parts are directly next to each other
339
336
  // simple solution for now is to not flush text deltas on response-metadata
340
- chunk.type!=="response-metadata"&&runState.state.isStreaming){if(runState.state.textDeltas.length){const textStartPayload=chunk.payload;const providerMetadata=textStartPayload.providerMetadata??runState.state.providerOptions;messageList.add({id:messageId,role:"assistant",content:[providerMetadata?{type:"text",text:runState.state.textDeltas.join(""),providerOptions:providerMetadata}:{type:"text",text:runState.state.textDeltas.join("")}]},"response");}runState.setState({isStreaming:false,textDeltas:[]});}switch(chunk.type){case "response-metadata":runState.setState({responseMetadata:{id:chunk.payload.id,timestamp:chunk.payload.timestamp,modelId:chunk.payload.modelId,headers:chunk.payload.headers}});break;case "text-delta":{const textDeltasFromState=runState.state.textDeltas;textDeltasFromState.push(chunk.payload.text);runState.setState({textDeltas:textDeltasFromState,isStreaming:true});controller.enqueue(chunk);break;}case "tool-call-input-streaming-start":{const tool=tools?.[chunk.payload.toolName]||Object.values(tools||{})?.find(tool2=>`id`in tool2&&tool2.id===chunk.payload.toolName);if(tool&&"onInputStart"in tool){try{await tool?.onInputStart?.({toolCallId:chunk.payload.toolCallId,messages:messageList.get.input.aiV5.model(),abortSignal:options?.abortSignal});}catch(error){console.error("Error calling onInputStart",error);}}controller.enqueue(chunk);break;}case "tool-call-delta":{const tool=tools?.[chunk.payload.toolName||""]||Object.values(tools||{})?.find(tool2=>`id`in tool2&&tool2.id===chunk.payload.toolName);if(tool&&"onInputDelta"in tool){try{await tool?.onInputDelta?.({inputTextDelta:chunk.payload.argsTextDelta,toolCallId:chunk.payload.toolCallId,messages:messageList.get.input.aiV5.model(),abortSignal:options?.abortSignal});}catch(error){console.error("Error calling onInputDelta",error);}}controller.enqueue(chunk);break;}case "reasoning-start":{runState.setState({providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions});if(Object.values(chunk.payload.providerMetadata||{}).find(v=>v?.redactedData)){messageList.add({id:messageId,role:"assistant",content:[{type:"reasoning",text:"",providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions}]},"response");controller.enqueue(chunk);break;}controller.enqueue(chunk);break;}case "reasoning-delta":{const reasoningDeltasFromState=runState.state.reasoningDeltas;reasoningDeltasFromState.push(chunk.payload.text);runState.setState({isReasoning:true,reasoningDeltas:reasoningDeltasFromState,providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions});controller.enqueue(chunk);break;}case "file":messageList.add({id:messageId,role:"assistant",content:[{type:"file",data:chunk.payload.data,mimeType:chunk.payload.mimeType}]},"response");controller.enqueue(chunk);break;case "source":messageList.add({id:messageId,role:"assistant",content:{format:2,parts:[{type:"source",source:{sourceType:"url",id:chunk.payload.id,url:chunk.payload.url||"",title:chunk.payload.title,providerMetadata:chunk.payload.providerMetadata}}]},createdAt:/* @__PURE__ */new Date()},"response");controller.enqueue(chunk);break;case "finish":runState.setState({providerOptions:chunk.payload.metadata.providerMetadata,stepResult:{reason:chunk.payload.reason,logprobs:chunk.payload.logprobs,warnings:responseFromModel.warnings,totalUsage:chunk.payload.totalUsage,headers:responseFromModel.rawResponse?.headers,messageId,isContinued:!["stop","error"].includes(chunk.payload.reason),request:responseFromModel.request}});break;case "error":if(providerUtilsV5.isAbortError(chunk.payload.error)&&options?.abortSignal?.aborted){break;}runState.setState({hasErrored:true});runState.setState({stepResult:{isContinued:false,reason:"error"}});let e=chunk.payload.error;if(typeof e==="object"){e=new Error(e?.message||"Unknown error");Object.assign(e,chunk.payload.error);}controller.enqueue({...chunk,payload:{...chunk.payload,error:e}});await options?.onError?.({error:e});break;default:controller.enqueue(chunk);}if(["text-delta","reasoning-delta","source","tool-call","tool-call-input-streaming-start","tool-call-delta","raw"].includes(chunk.type)){const transformedChunk=convertMastraChunkToAISDKv5({chunk});if(chunk.type==="raw"&&!includeRawChunks){return;}await options?.onChunk?.({chunk:transformedChunk});}if(runState.state.hasErrored){break;}}}function createLLMExecutionStep({model,_internal,messageId,runId,modelStreamSpan,telemetry_settings,tools,toolChoice,messageList,includeRawChunks,modelSettings,providerOptions,options,toolCallStreaming,controller,output,outputProcessors,headers,downloadRetries,downloadConcurrency}){return createStep({id:"llm-execution",inputSchema:llmIterationOutputSchema,outputSchema:llmIterationOutputSchema,execute:async({inputData,bail,tracingContext})=>{const runState=new AgenticRunState({_internal,model});let modelResult;let warnings;let request;let rawResponse;switch(model.specificationVersion){case "v2":{const messageListPromptArgs={downloadRetries,downloadConcurrency,supportedUrls:model?.supportedUrls};let inputMessages=await messageList.get.all.aiV5.llmPrompt(messageListPromptArgs);let stepModel=model;let stepToolChoice=toolChoice;let stepTools=tools;if(options?.prepareStep){try{const prepareStepResult=await options.prepareStep({stepNumber:inputData.output?.steps?.length||0,steps:inputData.output?.steps||[],model,messages:messageList.get.all.aiV5.model()});if(prepareStepResult){if(prepareStepResult.model){stepModel=prepareStepResult.model;}if(prepareStepResult.toolChoice){stepToolChoice=prepareStepResult.toolChoice;}if(prepareStepResult.activeTools&&stepTools){const activeToolsSet=new Set(prepareStepResult.activeTools);stepTools=Object.fromEntries(Object.entries(stepTools).filter(([toolName])=>activeToolsSet.has(toolName)));}if(prepareStepResult.messages){const newMessages=prepareStepResult.messages;const newMessageList=new chunkDUUXEPE5_cjs.MessageList();for(const message of newMessages){if(message.role==="system"){newMessageList.addSystem(message);}else if(message.role==="user"){newMessageList.add(message,"input");}else if(message.role==="assistant"||message.role==="tool"){newMessageList.add(message,"response");}}inputMessages=await newMessageList.get.all.aiV5.llmPrompt(messageListPromptArgs);}}}catch(error){console.error("Error in prepareStep callback:",error);}}modelResult=execute({runId,model:stepModel,providerOptions,inputMessages,tools:stepTools,toolChoice:stepToolChoice,options,modelSettings,telemetry_settings,includeRawChunks,output,headers,onResult:({warnings:warningsFromStream,request:requestFromStream,rawResponse:rawResponseFromStream})=>{warnings=warningsFromStream;request=requestFromStream||{};rawResponse=rawResponseFromStream;controller.enqueue({runId,from:"AGENT"/* AGENT */,type:"step-start",payload:{request:request||{},warnings:[],messageId}});},modelStreamSpan});break;}default:{throw new Error(`Unsupported model version: ${model.specificationVersion}`);}}const outputStream=new MastraModelOutput({model:{modelId:model.modelId,provider:model.provider,version:model.specificationVersion},stream:modelResult,messageList,options:{runId,rootSpan:modelStreamSpan,toolCallStreaming,telemetry_settings,includeRawChunks,output,outputProcessors,outputProcessorRunnerMode:"stream",tracingContext}});try{await processOutputStream({outputStream,includeRawChunks,tools,messageId,messageList,runState,options,controller,responseFromModel:{warnings,request,rawResponse}});}catch(error){console.log("Error in LLM Execution Step",error);if(providerUtilsV5.isAbortError(error)&&options?.abortSignal?.aborted){await options?.onAbort?.({steps:inputData?.output?.steps??[]});controller.enqueue({type:"abort",runId,from:"AGENT"/* AGENT */,payload:{}});const usage2=outputStream._getImmediateUsage();const responseMetadata2=runState.state.responseMetadata;const text2=outputStream._getImmediateText();return bail({messageId,stepResult:{reason:"abort",warnings,isContinued:false},metadata:{providerMetadata:providerOptions,...responseMetadata2,headers:rawResponse?.headers,request},output:{text:text2,toolCalls:[],usage:usage2??inputData.output?.usage,steps:[]},messages:{all:messageList.get.all.aiV5.model(),user:messageList.get.input.aiV5.model(),nonUser:messageList.get.response.aiV5.model()}});}controller.enqueue({type:"error",runId,from:"AGENT"/* AGENT */,payload:{error}});runState.setState({hasErrored:true,stepResult:{isContinued:false,reason:"error"}});}if(outputStream.tripwire){controller.enqueue({type:"tripwire",runId,from:"AGENT"/* AGENT */,payload:{tripwireReason:outputStream.tripwireReason||"Content blocked by output processor"}});runState.setState({stepResult:{isContinued:false,reason:"abort"}});}const toolCalls=outputStream._getImmediateToolCalls()?.map(chunk=>{return chunk.payload;});if(toolCalls.length>0){const assistantContent=[...toolCalls.map(toolCall=>{return {type:"tool-call",toolCallId:toolCall.toolCallId,toolName:toolCall.toolName,args:toolCall.args};})];messageList.add({id:messageId,role:"assistant",content:assistantContent},"response");}const finishReason=runState?.state?.stepResult?.reason??outputStream._getImmediateFinishReason();const hasErrored=runState.state.hasErrored;const usage=outputStream._getImmediateUsage();const responseMetadata=runState.state.responseMetadata;const text=outputStream._getImmediateText();const tripwireTriggered=outputStream.tripwire;const steps=inputData.output?.steps||[];steps.push(new DefaultStepResult({warnings:outputStream._getImmediateWarnings(),providerMetadata:providerOptions,finishReason:runState.state.stepResult?.reason,content:messageList.get.response.aiV5.modelContent(),// @ts-ignore this is how it worked internally for transformResponse which was removed TODO: how should this actually work?
337
+ chunk.type!=="response-metadata"&&runState.state.isStreaming){if(runState.state.textDeltas.length){const textStartPayload=chunk.payload;const providerMetadata=textStartPayload.providerMetadata??runState.state.providerOptions;messageList.add({id:messageId,role:"assistant",content:[providerMetadata?{type:"text",text:runState.state.textDeltas.join(""),providerOptions:providerMetadata}:{type:"text",text:runState.state.textDeltas.join("")}]},"response");}runState.setState({isStreaming:false,textDeltas:[]});}switch(chunk.type){case "response-metadata":runState.setState({responseMetadata:{id:chunk.payload.id,timestamp:chunk.payload.timestamp,modelId:chunk.payload.modelId,headers:chunk.payload.headers}});break;case "text-delta":{const textDeltasFromState=runState.state.textDeltas;textDeltasFromState.push(chunk.payload.text);runState.setState({textDeltas:textDeltasFromState,isStreaming:true});controller.enqueue(chunk);break;}case "tool-call-input-streaming-start":{const tool=tools?.[chunk.payload.toolName]||Object.values(tools||{})?.find(tool2=>`id`in tool2&&tool2.id===chunk.payload.toolName);if(tool&&"onInputStart"in tool){try{await tool?.onInputStart?.({toolCallId:chunk.payload.toolCallId,messages:messageList.get.input.aiV5.model(),abortSignal:options?.abortSignal});}catch(error){console.error("Error calling onInputStart",error);}}controller.enqueue(chunk);break;}case "tool-call-delta":{const tool=tools?.[chunk.payload.toolName||""]||Object.values(tools||{})?.find(tool2=>`id`in tool2&&tool2.id===chunk.payload.toolName);if(tool&&"onInputDelta"in tool){try{await tool?.onInputDelta?.({inputTextDelta:chunk.payload.argsTextDelta,toolCallId:chunk.payload.toolCallId,messages:messageList.get.input.aiV5.model(),abortSignal:options?.abortSignal});}catch(error){console.error("Error calling onInputDelta",error);}}controller.enqueue(chunk);break;}case "reasoning-start":{runState.setState({providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions});if(Object.values(chunk.payload.providerMetadata||{}).find(v=>v?.redactedData)){messageList.add({id:messageId,role:"assistant",content:[{type:"reasoning",text:"",providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions}]},"response");controller.enqueue(chunk);break;}controller.enqueue(chunk);break;}case "reasoning-delta":{const reasoningDeltasFromState=runState.state.reasoningDeltas;reasoningDeltasFromState.push(chunk.payload.text);runState.setState({isReasoning:true,reasoningDeltas:reasoningDeltasFromState,providerOptions:chunk.payload.providerMetadata??runState.state.providerOptions});controller.enqueue(chunk);break;}case "file":messageList.add({id:messageId,role:"assistant",content:[{type:"file",data:chunk.payload.data,mimeType:chunk.payload.mimeType}]},"response");controller.enqueue(chunk);break;case "source":messageList.add({id:messageId,role:"assistant",content:{format:2,parts:[{type:"source",source:{sourceType:"url",id:chunk.payload.id,url:chunk.payload.url||"",title:chunk.payload.title,providerMetadata:chunk.payload.providerMetadata}}]},createdAt:/* @__PURE__ */new Date()},"response");controller.enqueue(chunk);break;case "finish":runState.setState({providerOptions:chunk.payload.metadata.providerMetadata,stepResult:{reason:chunk.payload.reason,logprobs:chunk.payload.logprobs,warnings:responseFromModel.warnings,totalUsage:chunk.payload.totalUsage,headers:responseFromModel.rawResponse?.headers,messageId,isContinued:!["stop","error"].includes(chunk.payload.reason),request:responseFromModel.request}});break;case "error":if(providerUtilsV5.isAbortError(chunk.payload.error)&&options?.abortSignal?.aborted){break;}runState.setState({hasErrored:true});runState.setState({stepResult:{isContinued:false,reason:"error"}});let e=chunk.payload.error;if(typeof e==="object"){e=new Error(e?.message||"Unknown error");Object.assign(e,chunk.payload.error);}controller.enqueue({...chunk,payload:{...chunk.payload,error:e}});await options?.onError?.({error:e});break;default:controller.enqueue(chunk);}if(["text-delta","reasoning-delta","source","tool-call","tool-call-input-streaming-start","tool-call-delta","raw"].includes(chunk.type)){const transformedChunk=convertMastraChunkToAISDKv5({chunk});if(chunk.type==="raw"&&!includeRawChunks){return;}await options?.onChunk?.({chunk:transformedChunk});}if(runState.state.hasErrored){break;}}}function createLLMExecutionStep({model,_internal,messageId,runId,modelStreamSpan,telemetry_settings,tools,toolChoice,messageList,includeRawChunks,modelSettings,providerOptions,options,toolCallStreaming,controller,output,outputProcessors,headers,downloadRetries,downloadConcurrency}){return createStep({id:"llm-execution",inputSchema:llmIterationOutputSchema,outputSchema:llmIterationOutputSchema,execute:async({inputData,bail,tracingContext})=>{const runState=new AgenticRunState({_internal,model});let modelResult;let warnings;let request;let rawResponse;switch(model.specificationVersion){case "v2":{const messageListPromptArgs={downloadRetries,downloadConcurrency,supportedUrls:model?.supportedUrls};let inputMessages=await messageList.get.all.aiV5.llmPrompt(messageListPromptArgs);let stepModel=model;let stepToolChoice=toolChoice;let stepTools=tools;if(options?.prepareStep){try{const prepareStepResult=await options.prepareStep({stepNumber:inputData.output?.steps?.length||0,steps:inputData.output?.steps||[],model,messages:messageList.get.all.aiV5.model()});if(prepareStepResult){if(prepareStepResult.model){stepModel=prepareStepResult.model;}if(prepareStepResult.toolChoice){stepToolChoice=prepareStepResult.toolChoice;}if(prepareStepResult.activeTools&&stepTools){const activeToolsSet=new Set(prepareStepResult.activeTools);stepTools=Object.fromEntries(Object.entries(stepTools).filter(([toolName])=>activeToolsSet.has(toolName)));}if(prepareStepResult.messages){const newMessages=prepareStepResult.messages;const newMessageList=new chunkDUUXEPE5_cjs.MessageList();for(const message of newMessages){if(message.role==="system"){newMessageList.addSystem(message);}else if(message.role==="user"){newMessageList.add(message,"input");}else if(message.role==="assistant"||message.role==="tool"){newMessageList.add(message,"response");}}inputMessages=await newMessageList.get.all.aiV5.llmPrompt(messageListPromptArgs);}}}catch(error){console.error("Error in prepareStep callback:",error);}}modelResult=execute({runId,model:stepModel,providerOptions,inputMessages,tools:stepTools,toolChoice:stepToolChoice,options,modelSettings,telemetry_settings,includeRawChunks,output,headers,onResult:({warnings:warningsFromStream,request:requestFromStream,rawResponse:rawResponseFromStream})=>{warnings=warningsFromStream;request=requestFromStream||{};rawResponse=rawResponseFromStream;controller.enqueue({runId,from:"AGENT"/* AGENT */,type:"step-start",payload:{request:request||{},warnings:[],messageId}});},modelStreamSpan});break;}default:{throw new Error(`Unsupported model version: ${model.specificationVersion}`);}}const outputStream=new MastraModelOutput({model:{modelId:model.modelId,provider:model.provider,version:model.specificationVersion},stream:modelResult,messageList,messageId,options:{runId,rootSpan:modelStreamSpan,toolCallStreaming,telemetry_settings,includeRawChunks,output,outputProcessors,outputProcessorRunnerMode:"stream",tracingContext}});try{await processOutputStream({outputStream,includeRawChunks,tools,messageId,messageList,runState,options,controller,responseFromModel:{warnings,request,rawResponse}});}catch(error){console.log("Error in LLM Execution Step",error);if(providerUtilsV5.isAbortError(error)&&options?.abortSignal?.aborted){await options?.onAbort?.({steps:inputData?.output?.steps??[]});controller.enqueue({type:"abort",runId,from:"AGENT"/* AGENT */,payload:{}});const usage2=outputStream._getImmediateUsage();const responseMetadata2=runState.state.responseMetadata;const text2=outputStream._getImmediateText();return bail({messageId,stepResult:{reason:"abort",warnings,isContinued:false},metadata:{providerMetadata:providerOptions,...responseMetadata2,headers:rawResponse?.headers,request},output:{text:text2,toolCalls:[],usage:usage2??inputData.output?.usage,steps:[]},messages:{all:messageList.get.all.aiV5.model(),user:messageList.get.input.aiV5.model(),nonUser:messageList.get.response.aiV5.model()}});}controller.enqueue({type:"error",runId,from:"AGENT"/* AGENT */,payload:{error}});runState.setState({hasErrored:true,stepResult:{isContinued:false,reason:"error"}});}if(outputStream.tripwire){controller.enqueue({type:"tripwire",runId,from:"AGENT"/* AGENT */,payload:{tripwireReason:outputStream.tripwireReason||"Content blocked by output processor"}});runState.setState({stepResult:{isContinued:false,reason:"abort"}});}const toolCalls=outputStream._getImmediateToolCalls()?.map(chunk=>{return chunk.payload;});if(toolCalls.length>0){const assistantContent=[...toolCalls.map(toolCall=>{return {type:"tool-call",toolCallId:toolCall.toolCallId,toolName:toolCall.toolName,args:toolCall.args};})];messageList.add({id:messageId,role:"assistant",content:assistantContent},"response");}const finishReason=runState?.state?.stepResult?.reason??outputStream._getImmediateFinishReason();const hasErrored=runState.state.hasErrored;const usage=outputStream._getImmediateUsage();const responseMetadata=runState.state.responseMetadata;const text=outputStream._getImmediateText();const tripwireTriggered=outputStream.tripwire;const steps=inputData.output?.steps||[];steps.push(new DefaultStepResult({warnings:outputStream._getImmediateWarnings(),providerMetadata:providerOptions,finishReason:runState.state.stepResult?.reason,content:messageList.get.response.aiV5.modelContent(),// @ts-ignore this is how it worked internally for transformResponse which was removed TODO: how should this actually work?
341
338
  response:{...responseMetadata,...rawResponse,messages:messageList.get.response.aiV5.model()},request,usage:outputStream._getImmediateUsage()}));const messages={all:messageList.get.all.aiV5.model(),user:messageList.get.input.aiV5.model(),nonUser:messageList.get.response.aiV5.model()};return {messageId,stepResult:{reason:tripwireTriggered?"abort":hasErrored?"error":finishReason,warnings,isContinued:tripwireTriggered?false:!["stop","error"].includes(finishReason)},metadata:{providerMetadata:runState.state.providerOptions,...responseMetadata,...rawResponse,headers:rawResponse?.headers,request},output:{text,toolCalls,usage:usage??inputData.output?.usage,steps},messages};}});}// src/loop/workflow/tool-call-step.ts
342
339
  function createToolCallStep({tools,messageList,options,telemetry_settings,writer}){return createStep({id:"toolCallStep",inputSchema:toolCallInputSchema,outputSchema:toolCallOutputSchema,execute:async({inputData})=>{if(inputData.providerExecuted){const tracer2=getTracer({isEnabled:telemetry_settings?.isEnabled,tracer:telemetry_settings?.tracer});const span2=tracer2.startSpan("mastra.stream.toolCall").setAttributes({...assembleOperationName({operationId:"mastra.stream.toolCall",telemetry:telemetry_settings}),"stream.toolCall.toolName":inputData.toolName,"stream.toolCall.toolCallId":inputData.toolCallId,"stream.toolCall.args":JSON.stringify(inputData.args),"stream.toolCall.providerExecuted":true});if(inputData.output){span2.setAttributes({"stream.toolCall.result":JSON.stringify(inputData.output)});}span2.end();return {...inputData,result:inputData.output};}const tool=tools?.[inputData.toolName]||Object.values(tools||{})?.find(tool2=>`id`in tool2&&tool2.id===inputData.toolName);if(!tool){throw new Error(`Tool ${inputData.toolName} not found`);}if(tool&&"onInputAvailable"in tool){try{await tool?.onInputAvailable?.({toolCallId:inputData.toolCallId,input:inputData.args,messages:messageList.get.input.aiV5.model(),abortSignal:options?.abortSignal});}catch(error){console.error("Error calling onInputAvailable",error);}}if(!tool.execute){return inputData;}const tracer=getTracer({isEnabled:telemetry_settings?.isEnabled,tracer:telemetry_settings?.tracer});const span=tracer.startSpan("mastra.stream.toolCall").setAttributes({...assembleOperationName({operationId:"mastra.stream.toolCall",telemetry:telemetry_settings}),"stream.toolCall.toolName":inputData.toolName,"stream.toolCall.toolCallId":inputData.toolCallId,"stream.toolCall.args":JSON.stringify(inputData.args)});try{const result=await tool.execute(inputData.args,{abortSignal:options?.abortSignal,toolCallId:inputData.toolCallId,messages:messageList.get.input.aiV5.model(),writableStream:writer});span.setAttributes({"stream.toolCall.result":JSON.stringify(result)});span.end();return {result,...inputData};}catch(error){span.setStatus({code:2,message:error?.message??error});span.recordException(error);return {error,...inputData};}}});}// src/loop/workflow/outer-llm-step.ts
343
340
  function createOuterLLMWorkflow({model,telemetry_settings,_internal,modelStreamSpan,...rest}){const llmExecutionStep=createLLMExecutionStep({model,_internal,modelStreamSpan,telemetry_settings,...rest});const toolCallStep=createToolCallStep({telemetry_settings,...rest});const messageList=rest.messageList;const llmMappingStep=createStep({id:"llmExecutionMappingStep",inputSchema:z6__default.default.array(toolCallOutputSchema),outputSchema:llmIterationOutputSchema,execute:async({inputData,getStepResult:getStepResult2,bail})=>{const initialResult=getStepResult2(llmExecutionStep);if(inputData?.every(toolCall=>toolCall?.result===void 0)){const errorResults=inputData.filter(toolCall=>toolCall?.error);const toolResultMessageId=rest.experimental_generateMessageId?.()||_internal?.generateId?.();if(errorResults?.length){errorResults.forEach(toolCall=>{const chunk={type:"tool-error",runId:rest.runId,from:"AGENT"/* AGENT */,payload:{error:toolCall.error,args:toolCall.args,toolCallId:toolCall.toolCallId,toolName:toolCall.toolName,providerMetadata:toolCall.providerMetadata}};rest.controller.enqueue(chunk);});rest.messageList.add({id:toolResultMessageId,role:"tool",content:errorResults.map(toolCall=>{return {type:"tool-result",args:toolCall.args,toolCallId:toolCall.toolCallId,toolName:toolCall.toolName,result:{tool_execution_error:toolCall.error?.message??toolCall.error}};})},"response");}initialResult.stepResult.isContinued=false;return bail(initialResult);}if(inputData?.length){for(const toolCall of inputData){const chunk={type:"tool-result",runId:rest.runId,from:"AGENT"/* AGENT */,payload:{args:toolCall.args,toolCallId:toolCall.toolCallId,toolName:toolCall.toolName,result:toolCall.result,providerMetadata:toolCall.providerMetadata,providerExecuted:toolCall.providerExecuted}};rest.controller.enqueue(chunk);if(model.specificationVersion==="v2"){await rest.options?.onChunk?.({chunk:convertMastraChunkToAISDKv5({chunk})});}const toolResultMessageId=rest.experimental_generateMessageId?.()||_internal?.generateId?.();messageList.add({id:toolResultMessageId,role:"tool",content:inputData.map(toolCall2=>{return {type:"tool-result",args:toolCall2.args,toolCallId:toolCall2.toolCallId,toolName:toolCall2.toolName,result:toolCall2.result};})},"response");}return {...initialResult,messages:{all:messageList.get.all.aiV5.model(),user:messageList.get.input.aiV5.model(),nonUser:messageList.get.response.aiV5.model()}};}}});return createWorkflow({id:"executionWorkflow",inputSchema:llmIterationOutputSchema,outputSchema:z6__default.default.any()}).then(llmExecutionStep).map(({inputData})=>{if(modelStreamSpan&&telemetry_settings?.recordOutputs!==false&&inputData.output.toolCalls?.length){modelStreamSpan.setAttribute("stream.response.toolCalls",JSON.stringify(inputData.output.toolCalls?.map(toolCall=>{return {toolCallId:toolCall.toolCallId,args:toolCall.args,toolName:toolCall.toolName};})));}return inputData.output.toolCalls||[];}).foreach(toolCallStep,{concurrency:10}).then(llmMappingStep).commit();}// src/loop/workflow/stream.ts
344
- function workflowLoopStream({telemetry_settings,model,toolChoice,modelSettings,_internal,modelStreamSpan,llmAISpan,...rest}){return new web.ReadableStream({start:async controller=>{const writer=new WritableStream({write:chunk=>{controller.enqueue(chunk);}});const messageId=rest.experimental_generateMessageId?.()||_internal?.generateId?.();modelStreamSpan.setAttributes({...(telemetry_settings?.recordInputs!==false?{"stream.prompt.toolChoice":toolChoice?JSON.stringify(toolChoice):"auto"}:{})});const outerLLMWorkflow=createOuterLLMWorkflow({messageId,model,telemetry_settings,_internal,modelSettings,toolChoice,modelStreamSpan,controller,writer,...rest});const mainWorkflow=createWorkflow({id:"agentic-loop",inputSchema:llmIterationOutputSchema,outputSchema:z6__default.default.any()}).dowhile(outerLLMWorkflow,async({inputData})=>{let hasFinishedSteps=false;if(rest.stopWhen){const conditions=await Promise.all((Array.isArray(rest.stopWhen)?rest.stopWhen:[rest.stopWhen]).map(condition=>{return condition({steps:inputData.output.steps});}));const hasStopped=conditions.some(condition=>condition);hasFinishedSteps=hasStopped;}inputData.stepResult.isContinued=hasFinishedSteps?false:inputData.stepResult.isContinued;if(inputData.stepResult.reason!=="abort"){controller.enqueue({type:"step-finish",runId:rest.runId,from:"AGENT"/* AGENT */,payload:inputData});}modelStreamSpan.setAttributes({"stream.response.id":inputData.metadata.id,"stream.response.model":model.modelId,...(inputData.metadata.providerMetadata?{"stream.response.providerMetadata":JSON.stringify(inputData.metadata.providerMetadata)}:{}),"stream.response.finishReason":inputData.stepResult.reason,"stream.usage.inputTokens":inputData.output.usage?.inputTokens,"stream.usage.outputTokens":inputData.output.usage?.outputTokens,"stream.usage.totalTokens":inputData.output.usage?.totalTokens,...(telemetry_settings?.recordOutputs!==false?{"stream.response.text":inputData.output.text,"stream.prompt.messages":JSON.stringify(rest.messageList.get.input.aiV5.model())}:{})});modelStreamSpan.end();const reason=inputData.stepResult.reason;if(reason===void 0){return false;}return inputData.stepResult.isContinued;}).map(({inputData})=>{const toolCalls=rest.messageList.get.response.aiV5.model().filter(message=>message.role==="tool");inputData.output.toolCalls=toolCalls;return inputData;}).commit();const msToFirstChunk=_internal?.now?.()-rest.startTimestamp;modelStreamSpan.addEvent("ai.stream.firstChunk",{"ai.response.msToFirstChunk":msToFirstChunk});modelStreamSpan.setAttributes({"stream.response.timestamp":new Date(rest.startTimestamp).toISOString(),"stream.response.msToFirstChunk":msToFirstChunk});controller.enqueue({type:"start",runId:rest.runId,from:"AGENT"/* AGENT */,payload:{}});const run=await mainWorkflow.createRunAsync({runId:rest.runId});const executionResult=await run.start({inputData:{messageId,messages:{all:rest.messageList.get.all.aiV5.model(),user:rest.messageList.get.input.aiV5.model(),nonUser:[]}},tracingContext:{currentSpan:llmAISpan,isInternal:true}});if(executionResult.status!=="success"){controller.close();return;}if(executionResult.result.stepResult.reason==="abort"){controller.close();return;}controller.enqueue({type:"finish",runId:rest.runId,from:"AGENT"/* AGENT */,payload:executionResult.result});const msToFinish=(_internal?.now?.()??Date.now())-rest.startTimestamp;modelStreamSpan.addEvent("ai.stream.finish");modelStreamSpan.setAttributes({"stream.response.msToFinish":msToFinish,"stream.response.avgOutputTokensPerSecond":1e3*(executionResult?.result?.output?.usage?.outputTokens??0)/msToFinish});controller.close();}});}// src/loop/loop.ts
345
- function loop({model,logger,runId,idGenerator,telemetry_settings,messageList,includeRawChunks,modelSettings,tools,_internal,mode="stream",outputProcessors,returnScorerData,llmAISpan,...rest}){let loggerToUse=logger||new chunkV5WKCX3G_cjs.ConsoleLogger({level:"debug"});let runIdToUse=runId;if(!runIdToUse){runIdToUse=idGenerator?.()||crypto.randomUUID();}const internalToUse={now:_internal?.now||(()=>Date.now()),generateId:_internal?.generateId||(()=>aiV5.generateId()),currentDate:_internal?.currentDate||(()=>/* @__PURE__ */new Date())};let startTimestamp=internalToUse.now?.();const{rootSpan}=getRootSpan({operationId:mode==="stream"?`mastra.stream`:`mastra.generate`,model:{modelId:model.modelId,provider:model.provider},modelSettings,headers:modelSettings?.headers??rest.headers,telemetry_settings});rootSpan.setAttributes({...(telemetry_settings?.recordOutputs!==false?{"stream.prompt.messages":JSON.stringify(messageList.get.input.aiV5.model())}:{})});const{rootSpan:modelStreamSpan}=getRootSpan({operationId:`mastra.${mode}.aisdk.doStream`,model:{modelId:model.modelId,provider:model.provider},modelSettings,headers:modelSettings?.headers??rest.headers,telemetry_settings});const workflowLoopProps={model,runId:runIdToUse,logger:loggerToUse,startTimestamp,messageList,includeRawChunks:!!includeRawChunks,_internal:internalToUse,tools,modelStreamSpan,telemetry_settings,modelSettings,outputProcessors,llmAISpan,...rest};const streamFn=workflowLoopStream(workflowLoopProps);return new MastraModelOutput({model:{modelId:model.modelId,provider:model.provider,version:model.specificationVersion},stream:streamFn,messageList,options:{runId:runIdToUse,telemetry_settings,rootSpan,toolCallStreaming:rest.toolCallStreaming,onFinish:rest.options?.onFinish,onStepFinish:rest.options?.onStepFinish,includeRawChunks:!!includeRawChunks,output:rest.output,outputProcessors,outputProcessorRunnerMode:"result",returnScorerData,tracingContext:{currentSpan:llmAISpan}}});}// src/llm/model/model.loop.ts
341
+ function workflowLoopStream({telemetry_settings,model,toolChoice,modelSettings,_internal,modelStreamSpan,llmAISpan,messageId,...rest}){return new web.ReadableStream({start:async controller=>{const writer=new WritableStream({write:chunk=>{controller.enqueue(chunk);}});modelStreamSpan.setAttributes({...(telemetry_settings?.recordInputs!==false?{"stream.prompt.toolChoice":toolChoice?JSON.stringify(toolChoice):"auto"}:{})});const outerLLMWorkflow=createOuterLLMWorkflow({messageId,model,telemetry_settings,_internal,modelSettings,toolChoice,modelStreamSpan,controller,writer,...rest});const mainWorkflow=createWorkflow({id:"agentic-loop",inputSchema:llmIterationOutputSchema,outputSchema:z6__default.default.any()}).dowhile(outerLLMWorkflow,async({inputData})=>{let hasFinishedSteps=false;if(rest.stopWhen){const conditions=await Promise.all((Array.isArray(rest.stopWhen)?rest.stopWhen:[rest.stopWhen]).map(condition=>{return condition({steps:inputData.output.steps});}));const hasStopped=conditions.some(condition=>condition);hasFinishedSteps=hasStopped;}inputData.stepResult.isContinued=hasFinishedSteps?false:inputData.stepResult.isContinued;if(inputData.stepResult.reason!=="abort"){controller.enqueue({type:"step-finish",runId:rest.runId,from:"AGENT"/* AGENT */,payload:inputData});}modelStreamSpan.setAttributes({"stream.response.id":inputData.metadata.id,"stream.response.model":model.modelId,...(inputData.metadata.providerMetadata?{"stream.response.providerMetadata":JSON.stringify(inputData.metadata.providerMetadata)}:{}),"stream.response.finishReason":inputData.stepResult.reason,"stream.usage.inputTokens":inputData.output.usage?.inputTokens,"stream.usage.outputTokens":inputData.output.usage?.outputTokens,"stream.usage.totalTokens":inputData.output.usage?.totalTokens,...(telemetry_settings?.recordOutputs!==false?{"stream.response.text":inputData.output.text,"stream.prompt.messages":JSON.stringify(rest.messageList.get.input.aiV5.model())}:{})});modelStreamSpan.end();const reason=inputData.stepResult.reason;if(reason===void 0){return false;}return inputData.stepResult.isContinued;}).map(({inputData})=>{const toolCalls=rest.messageList.get.response.aiV5.model().filter(message=>message.role==="tool");inputData.output.toolCalls=toolCalls;return inputData;}).commit();const msToFirstChunk=_internal?.now?.()-rest.startTimestamp;modelStreamSpan.addEvent("ai.stream.firstChunk",{"ai.response.msToFirstChunk":msToFirstChunk});modelStreamSpan.setAttributes({"stream.response.timestamp":new Date(rest.startTimestamp).toISOString(),"stream.response.msToFirstChunk":msToFirstChunk});controller.enqueue({type:"start",runId:rest.runId,from:"AGENT"/* AGENT */,payload:{}});const run=await mainWorkflow.createRunAsync({runId:rest.runId});const executionResult=await run.start({inputData:{messageId,messages:{all:rest.messageList.get.all.aiV5.model(),user:rest.messageList.get.input.aiV5.model(),nonUser:[]}},tracingContext:{currentSpan:llmAISpan,isInternal:true}});if(executionResult.status!=="success"){controller.close();return;}if(executionResult.result.stepResult.reason==="abort"){controller.close();return;}controller.enqueue({type:"finish",runId:rest.runId,from:"AGENT"/* AGENT */,payload:executionResult.result});const msToFinish=(_internal?.now?.()??Date.now())-rest.startTimestamp;modelStreamSpan.addEvent("ai.stream.finish");modelStreamSpan.setAttributes({"stream.response.msToFinish":msToFinish,"stream.response.avgOutputTokensPerSecond":1e3*(executionResult?.result?.output?.usage?.outputTokens??0)/msToFinish});controller.close();}});}// src/loop/loop.ts
342
+ function loop({model,logger,runId,idGenerator,telemetry_settings,messageList,includeRawChunks,modelSettings,tools,_internal,mode="stream",outputProcessors,returnScorerData,llmAISpan,...rest}){let loggerToUse=logger||new chunkV5WKCX3G_cjs.ConsoleLogger({level:"debug"});let runIdToUse=runId;if(!runIdToUse){runIdToUse=idGenerator?.()||crypto.randomUUID();}const internalToUse={now:_internal?.now||(()=>Date.now()),generateId:_internal?.generateId||(()=>aiV5.generateId()),currentDate:_internal?.currentDate||(()=>/* @__PURE__ */new Date())};let startTimestamp=internalToUse.now?.();const{rootSpan}=getRootSpan({operationId:mode==="stream"?`mastra.stream`:`mastra.generate`,model:{modelId:model.modelId,provider:model.provider},modelSettings,headers:modelSettings?.headers??rest.headers,telemetry_settings});rootSpan.setAttributes({...(telemetry_settings?.recordOutputs!==false?{"stream.prompt.messages":JSON.stringify(messageList.get.input.aiV5.model())}:{})});const{rootSpan:modelStreamSpan}=getRootSpan({operationId:`mastra.${mode}.aisdk.doStream`,model:{modelId:model.modelId,provider:model.provider},modelSettings,headers:modelSettings?.headers??rest.headers,telemetry_settings});const messageId=rest.experimental_generateMessageId?.()||internalToUse.generateId?.();const workflowLoopProps={model,runId:runIdToUse,logger:loggerToUse,startTimestamp,messageList,includeRawChunks:!!includeRawChunks,_internal:internalToUse,tools,modelStreamSpan,telemetry_settings,modelSettings,outputProcessors,llmAISpan,messageId,...rest};const streamFn=workflowLoopStream(workflowLoopProps);return new MastraModelOutput({model:{modelId:model.modelId,provider:model.provider,version:model.specificationVersion},stream:streamFn,messageList,messageId,options:{runId:runIdToUse,telemetry_settings,rootSpan,toolCallStreaming:rest.toolCallStreaming,onFinish:rest.options?.onFinish,onStepFinish:rest.options?.onStepFinish,includeRawChunks:!!includeRawChunks,output:rest.output,outputProcessors,outputProcessorRunnerMode:"result",returnScorerData,tracingContext:{currentSpan:llmAISpan}}});}// src/llm/model/model.loop.ts
346
343
  var MastraLLMVNext=class extends chunkKXCUCBEI_cjs.MastraBase{#model;#mastra;constructor({model,mastra}){super({name:"aisdk"});this.#model=model;if(mastra){this.#mastra=mastra;if(mastra.getLogger()){this.__setLogger(this.#mastra.getLogger());}}}__registerPrimitives(p){if(p.telemetry){this.__setTelemetry(p.telemetry);}if(p.logger){this.__setLogger(p.logger);}}__registerMastra(p){this.#mastra=p;}getProvider(){return this.#model.provider;}getModelId(){return this.#model.modelId;}getModel(){return this.#model;}_applySchemaCompat(schema){const model=this.#model;const schemaCompatLayers=[];if(model){const modelInfo={modelId:model.modelId,supportsStructuredOutputs:true,provider:model.provider};schemaCompatLayers.push(new schemaCompat.OpenAIReasoningSchemaCompatLayer(modelInfo),new schemaCompat.OpenAISchemaCompatLayer(modelInfo),new schemaCompat.GoogleSchemaCompatLayer(modelInfo),new schemaCompat.AnthropicSchemaCompatLayer(modelInfo),new schemaCompat.DeepSeekSchemaCompatLayer(modelInfo),new schemaCompat.MetaSchemaCompatLayer(modelInfo));}return schemaCompat.applyCompatLayer({schema,compatLayers:schemaCompatLayers,mode:"aiSdkSchema"});}convertToMessages(messages){if(Array.isArray(messages)){return messages.map(m=>{if(typeof m==="string"){return {role:"user",content:m};}return m;});}return [{role:"user",content:messages}];}stream({stopWhen=aiV5.stepCountIs(5),maxSteps,tools={},runId,modelSettings,toolChoice="auto",telemetry_settings,threadId,resourceId,output,options,outputProcessors,returnScorerData,providerOptions,tracingContext,messageList,_internal// ...rest
347
344
  }){let stopWhenToUse;if(maxSteps&&typeof maxSteps==="number"){stopWhenToUse=aiV5.stepCountIs(maxSteps);}else {stopWhenToUse=stopWhen;}const messages=messageList.get.all.aiV5.model();const model=this.#model;this.logger.debug(`[LLM] - Streaming text`,{runId,threadId,resourceId,messages,tools:Object.keys(tools||{})});const llmAISpan=tracingContext?.currentSpan?.createChildSpan({name:`llm: '${model.modelId}'`,type:"llm_generation"/* LLM_GENERATION */,input:{messages:[...messageList.getSystemMessages(),...messages]},attributes:{model:model.modelId,provider:model.provider,streaming:true,parameters:modelSettings},metadata:{runId,threadId,resourceId},isInternal:false});try{const loopOptions={messageList,model:this.#model,tools,stopWhen:stopWhenToUse,toolChoice,modelSettings,providerOptions,telemetry_settings:{...this.experimental_telemetry,...telemetry_settings},_internal,output,outputProcessors,returnScorerData,llmAISpan,options:{...options,onStepFinish:async props=>{try{await options?.onStepFinish?.({...props,runId});}catch(e){const mastraError=new chunkC73WLCY3_cjs.MastraError({id:"LLM_STREAM_ON_STEP_FINISH_CALLBACK_EXECUTION_FAILED",domain:"LLM"/* LLM */,category:"USER"/* USER */,details:{modelId:model.modelId,modelProvider:model.provider,runId:runId??"unknown",threadId:threadId??"unknown",resourceId:resourceId??"unknown",finishReason:props?.finishReason,toolCalls:props?.toolCalls?JSON.stringify(props.toolCalls):"",toolResults:props?.toolResults?JSON.stringify(props.toolResults):"",usage:props?.usage?JSON.stringify(props.usage):""}},e);llmAISpan?.error({error:mastraError});this.logger.trackException(mastraError);throw mastraError;}this.logger.debug("[LLM] - Stream Step Change:",{text:props?.text,toolCalls:props?.toolCalls,toolResults:props?.toolResults,finishReason:props?.finishReason,usage:props?.usage,runId});if(props?.response?.headers?.["x-ratelimit-remaining-tokens"]&&parseInt(props?.response?.headers?.["x-ratelimit-remaining-tokens"],10)<2e3){this.logger.warn("Rate limit approaching, waiting 10 seconds",{runId});await chunkERRIEUC2_cjs.delay(10*1e3);}},onFinish:async props=>{try{await options?.onFinish?.({...props,runId});}catch(e){const mastraError=new chunkC73WLCY3_cjs.MastraError({id:"LLM_STREAM_ON_FINISH_CALLBACK_EXECUTION_FAILED",domain:"LLM"/* LLM */,category:"USER"/* USER */,details:{modelId:model.modelId,modelProvider:model.provider,runId:runId??"unknown",threadId:threadId??"unknown",resourceId:resourceId??"unknown",finishReason:props?.finishReason,toolCalls:props?.toolCalls?JSON.stringify(props.toolCalls):"",toolResults:props?.toolResults?JSON.stringify(props.toolResults):"",usage:props?.usage?JSON.stringify(props.usage):""}},e);llmAISpan?.error({error:mastraError});this.logger.trackException(mastraError);throw mastraError;}llmAISpan?.end({output:{text:props?.text,reasoning:props?.reasoning,reasoningText:props?.reasoningText,files:props?.files,sources:props?.sources,warnings:props?.warnings},attributes:{finishReason:props?.finishReason,usage:{promptTokens:props?.totalUsage?.inputTokens,completionTokens:props?.totalUsage?.outputTokens,totalTokens:props?.totalUsage?.totalTokens}}});this.logger.debug("[LLM] - Stream Finished:",{text:props?.text,toolCalls:props?.toolCalls,toolResults:props?.toolResults,finishReason:props?.finishReason,usage:props?.usage,runId,threadId,resourceId});}}};return loop(loopOptions);}catch(e){const mastraError=new chunkC73WLCY3_cjs.MastraError({id:"LLM_STREAM_TEXT_AI_SDK_EXECUTION_FAILED",domain:"LLM"/* LLM */,category:"THIRD_PARTY"/* THIRD_PARTY */,details:{modelId:model.modelId,modelProvider:model.provider,runId:runId??"unknown",threadId:threadId??"unknown",resourceId:resourceId??"unknown"}},e);llmAISpan?.error({error:mastraError});throw mastraError;}}};// src/loop/network/index.ts
348
345
  var MastraAgentNetworkStream=class extends web.ReadableStream{#usageCount={promptTokens:0,completionTokens:0,totalTokens:0};#streamPromise;#run;constructor({createStream,run}){const deferredPromise={promise:null,resolve:null,reject:null};deferredPromise.promise=new Promise((resolve,reject)=>{deferredPromise.resolve=resolve;deferredPromise.reject=reject;});const updateUsageCount=usage=>{this.#usageCount.promptTokens+=parseInt(usage?.promptTokens?.toString()??"0",10);this.#usageCount.completionTokens+=parseInt(usage?.completionTokens?.toString()??"0",10);this.#usageCount.totalTokens+=parseInt(usage?.totalTokens?.toString()??"0",10);};super({start:async controller=>{const writer=new WritableStream({write:chunk=>{if(chunk.type==="step-output"&&chunk.payload?.output?.from==="AGENT"&&chunk.payload?.output?.type==="finish"||chunk.type==="step-output"&&chunk.payload?.output?.from==="WORKFLOW"&&chunk.payload?.output?.type==="finish"){const finishPayload=chunk.payload?.output.payload;if(finishPayload){updateUsageCount(finishPayload.usage);}}controller.enqueue(chunk);}});const stream=await createStream(writer);for await(const chunk of stream){if(chunk.type==="workflow-step-output"){const innerChunk=chunk.payload.output;const innerChunkType=innerChunk.payload.output;controller.enqueue(innerChunkType);}}controller.close();deferredPromise.resolve();}});this.#run=run;this.#streamPromise=deferredPromise;}get status(){return this.#streamPromise.promise.then(()=>this.#run._getExecutionResults()).then(res=>res.status);}get result(){return this.#streamPromise.promise.then(()=>this.#run._getExecutionResults());}get usage(){return this.#streamPromise.promise.then(()=>this.#usageCount);}};// src/loop/types.ts
@@ -815,5 +812,5 @@ exports.recursivelyCheckForFinalState = recursivelyCheckForFinalState;
815
812
  exports.resolveVariables = resolveVariables;
816
813
  exports.updateStepInHierarchy = updateStepInHierarchy;
817
814
  exports.workflowToStep = workflowToStep;
818
- //# sourceMappingURL=chunk-ELLP4WJF.cjs.map
819
- //# sourceMappingURL=chunk-ELLP4WJF.cjs.map
815
+ //# sourceMappingURL=chunk-YLR7PB3B.cjs.map
816
+ //# sourceMappingURL=chunk-YLR7PB3B.cjs.map