@mastra/core 1.26.0-alpha.11 → 1.26.0-alpha.13
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.
- package/CHANGELOG.md +16 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +8 -8
- package/dist/agent/index.js +1 -1
- package/dist/agent/types.d.ts +7 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/schema.d.ts +1 -0
- package/dist/agent/workflows/prepare-stream/schema.d.ts.map +1 -1
- package/dist/browser/index.cjs +2 -2
- package/dist/browser/index.js +1 -1
- package/dist/channels/index.cjs +4 -4
- package/dist/channels/index.js +1 -1
- package/dist/{chunk-CXIQCUHL.js → chunk-24FTWXDR.js} +3 -3
- package/dist/{chunk-CXIQCUHL.js.map → chunk-24FTWXDR.js.map} +1 -1
- package/dist/{chunk-RSFZN7OV.cjs → chunk-2NQ2TF5F.cjs} +389 -316
- package/dist/chunk-2NQ2TF5F.cjs.map +1 -0
- package/dist/{chunk-ECT5553H.cjs → chunk-34M2QMAZ.cjs} +292 -292
- package/dist/{chunk-ECT5553H.cjs.map → chunk-34M2QMAZ.cjs.map} +1 -1
- package/dist/{chunk-BJCPVJJV.js → chunk-37OQ7B3U.js} +3 -3
- package/dist/{chunk-BJCPVJJV.js.map → chunk-37OQ7B3U.js.map} +1 -1
- package/dist/{chunk-TER3JXU5.cjs → chunk-4MLJKGJI.cjs} +52 -22
- package/dist/chunk-4MLJKGJI.cjs.map +1 -0
- package/dist/{chunk-WBPTY4Y7.cjs → chunk-7IMHDDED.cjs} +57 -57
- package/dist/{chunk-WBPTY4Y7.cjs.map → chunk-7IMHDDED.cjs.map} +1 -1
- package/dist/{chunk-2QPYXXQP.js → chunk-DHKEEJPE.js} +3 -3
- package/dist/{chunk-2QPYXXQP.js.map → chunk-DHKEEJPE.js.map} +1 -1
- package/dist/{chunk-72TFCXLB.js → chunk-DLDGEMBE.js} +381 -308
- package/dist/chunk-DLDGEMBE.js.map +1 -0
- package/dist/{chunk-IFMX323P.cjs → chunk-ER7WPKHP.cjs} +7 -7
- package/dist/{chunk-IFMX323P.cjs.map → chunk-ER7WPKHP.cjs.map} +1 -1
- package/dist/{chunk-5EU2N7AI.js → chunk-FE3JBPGZ.js} +9 -9
- package/dist/{chunk-5EU2N7AI.js.map → chunk-FE3JBPGZ.js.map} +1 -1
- package/dist/{chunk-TJ4FSWVQ.js → chunk-GDUBYVBH.js} +4 -4
- package/dist/{chunk-TJ4FSWVQ.js.map → chunk-GDUBYVBH.js.map} +1 -1
- package/dist/{chunk-6SZ4HY7N.cjs → chunk-GSJT6X23.cjs} +10 -9
- package/dist/chunk-GSJT6X23.cjs.map +1 -0
- package/dist/{chunk-HGZ5C3XG.cjs → chunk-KEXLOZNA.cjs} +17 -17
- package/dist/{chunk-HGZ5C3XG.cjs.map → chunk-KEXLOZNA.cjs.map} +1 -1
- package/dist/{chunk-MT2NFL3T.js → chunk-NTGYHDWA.js} +40 -10
- package/dist/chunk-NTGYHDWA.js.map +1 -0
- package/dist/{chunk-KSTYF5BD.js → chunk-SQAGQFGX.js} +3 -3
- package/dist/{chunk-KSTYF5BD.js.map → chunk-SQAGQFGX.js.map} +1 -1
- package/dist/{chunk-BQN6OA5U.js → chunk-T5WE2PEP.js} +6 -6
- package/dist/{chunk-BQN6OA5U.js.map → chunk-T5WE2PEP.js.map} +1 -1
- package/dist/{chunk-SLO7BNJL.cjs → chunk-TITDW65H.cjs} +9 -9
- package/dist/{chunk-SLO7BNJL.cjs.map → chunk-TITDW65H.cjs.map} +1 -1
- package/dist/{chunk-M7NIAKE6.cjs → chunk-WBZ5SRGR.cjs} +3 -3
- package/dist/{chunk-M7NIAKE6.cjs.map → chunk-WBZ5SRGR.cjs.map} +1 -1
- package/dist/{chunk-B3A3OLBO.cjs → chunk-WDJZB44P.cjs} +224 -224
- package/dist/{chunk-B3A3OLBO.cjs.map → chunk-WDJZB44P.cjs.map} +1 -1
- package/dist/{chunk-HTSHN5E4.js → chunk-WSVLXQT6.js} +8 -7
- package/dist/chunk-WSVLXQT6.js.map +1 -0
- package/dist/{chunk-DELWJ5NK.js → chunk-WYPOS74A.js} +3 -3
- package/dist/{chunk-DELWJ5NK.js.map → chunk-WYPOS74A.js.map} +1 -1
- package/dist/{chunk-5IIRXFH2.cjs → chunk-YQ5QJC3S.cjs} +5 -5
- package/dist/{chunk-5IIRXFH2.cjs.map → chunk-YQ5QJC3S.cjs.map} +1 -1
- package/dist/datasets/experiment/index.d.ts.map +1 -1
- package/dist/datasets/index.cjs +11 -11
- package/dist/datasets/index.js +1 -1
- package/dist/docs/SKILL.md +3 -1
- package/dist/docs/assets/SOURCE_MAP.json +191 -191
- package/dist/docs/references/docs-agents-structured-output.md +22 -0
- package/dist/docs/references/docs-memory-storage.md +1 -0
- package/dist/docs/references/reference-storage-redis.md +266 -0
- package/dist/docs/references/reference-tools-tavily.md +307 -0
- package/dist/docs/references/reference.md +2 -0
- package/dist/evals/index.cjs +5 -5
- package/dist/evals/index.js +2 -2
- package/dist/evals/scoreTraces/index.cjs +3 -3
- package/dist/evals/scoreTraces/index.js +1 -1
- package/dist/harness/index.cjs +7 -7
- package/dist/harness/index.js +5 -5
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/llm/index.cjs +20 -20
- package/dist/llm/index.js +5 -5
- package/dist/llm/model/provider-types.generated.d.ts +15 -0
- package/dist/loop/index.cjs +14 -14
- package/dist/loop/index.js +1 -1
- package/dist/loop/workflows/agentic-execution/build-messages-from-chunks.d.ts +32 -0
- package/dist/loop/workflows/agentic-execution/build-messages-from-chunks.d.ts.map +1 -0
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/run-state.d.ts +0 -9
- package/dist/loop/workflows/run-state.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/mastra-47JQIPP2.cjs +12 -0
- package/dist/{mastra-UBXRRSVL.cjs.map → mastra-47JQIPP2.cjs.map} +1 -1
- package/dist/mastra-MEZUGGZZ.js +3 -0
- package/dist/{mastra-YR56DXR7.js.map → mastra-MEZUGGZZ.js.map} +1 -1
- package/dist/memory/index.cjs +19 -19
- package/dist/memory/index.js +1 -1
- package/dist/models-dev-BUQGQZCQ.js +3 -0
- package/dist/{models-dev-B24Y4NYV.js.map → models-dev-BUQGQZCQ.js.map} +1 -1
- package/dist/models-dev-INA3VBAK.cjs +12 -0
- package/dist/{models-dev-EMLWCDMI.cjs.map → models-dev-INA3VBAK.cjs.map} +1 -1
- package/dist/netlify-BW7IYASM.cjs +12 -0
- package/dist/{netlify-BFZBVACL.cjs.map → netlify-BW7IYASM.cjs.map} +1 -1
- package/dist/netlify-EQPVEYNW.js +3 -0
- package/dist/{netlify-W7DGKAGR.js.map → netlify-EQPVEYNW.js.map} +1 -1
- package/dist/processor-provider/index.cjs +10 -10
- package/dist/processor-provider/index.js +1 -1
- package/dist/processors/index.cjs +45 -45
- package/dist/processors/index.js +1 -1
- package/dist/processors/processors/structured-output.d.ts +13 -12
- package/dist/processors/processors/structured-output.d.ts.map +1 -1
- package/dist/provider-registry-4FV6CXQI.cjs +44 -0
- package/dist/{provider-registry-OLA6QVLP.cjs.map → provider-registry-4FV6CXQI.cjs.map} +1 -1
- package/dist/provider-registry-EAKPPU44.js +3 -0
- package/dist/{provider-registry-LGHC4U7P.js.map → provider-registry-EAKPPU44.js.map} +1 -1
- package/dist/provider-registry.json +32 -2
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +8 -8
- package/dist/stream/index.js +1 -1
- package/dist/tool-loop-agent/index.cjs +4 -4
- package/dist/tool-loop-agent/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +24 -24
- package/dist/workflows/index.js +1 -1
- package/package.json +2 -2
- package/src/llm/model/provider-types.generated.d.ts +15 -0
- package/dist/chunk-6SZ4HY7N.cjs.map +0 -1
- package/dist/chunk-72TFCXLB.js.map +0 -1
- package/dist/chunk-HTSHN5E4.js.map +0 -1
- package/dist/chunk-MT2NFL3T.js.map +0 -1
- package/dist/chunk-RSFZN7OV.cjs.map +0 -1
- package/dist/chunk-TER3JXU5.cjs.map +0 -1
- package/dist/mastra-UBXRRSVL.cjs +0 -12
- package/dist/mastra-YR56DXR7.js +0 -3
- package/dist/models-dev-B24Y4NYV.js +0 -3
- package/dist/models-dev-EMLWCDMI.cjs +0 -12
- package/dist/netlify-BFZBVACL.cjs +0 -12
- package/dist/netlify-W7DGKAGR.js +0 -3
- package/dist/provider-registry-LGHC4U7P.js +0 -3
- package/dist/provider-registry-OLA6QVLP.cjs +0 -44
|
@@ -10,7 +10,7 @@ var chunkCFMZZDO2_cjs = require('./chunk-CFMZZDO2.cjs');
|
|
|
10
10
|
var chunkAZ5DDZUI_cjs = require('./chunk-AZ5DDZUI.cjs');
|
|
11
11
|
var chunkDGN2UMWP_cjs = require('./chunk-DGN2UMWP.cjs');
|
|
12
12
|
var chunkMR7ZWBL6_cjs = require('./chunk-MR7ZWBL6.cjs');
|
|
13
|
-
var
|
|
13
|
+
var chunk34M2QMAZ_cjs = require('./chunk-34M2QMAZ.cjs');
|
|
14
14
|
var chunkFM6MTRWJ_cjs = require('./chunk-FM6MTRWJ.cjs');
|
|
15
15
|
var chunk6ZYEOOKL_cjs = require('./chunk-6ZYEOOKL.cjs');
|
|
16
16
|
var chunkELRUKENZ_cjs = require('./chunk-ELRUKENZ.cjs');
|
|
@@ -774,6 +774,10 @@ var StructuredOutputProcessor = class {
|
|
|
774
774
|
name = "Structured Output";
|
|
775
775
|
schema;
|
|
776
776
|
structuringAgent;
|
|
777
|
+
structuringModel;
|
|
778
|
+
structuringInstructions;
|
|
779
|
+
agent;
|
|
780
|
+
useAgent = false;
|
|
777
781
|
errorStrategy;
|
|
778
782
|
fallbackValue;
|
|
779
783
|
isStructuringAgentStreamStarted = false;
|
|
@@ -798,49 +802,56 @@ var StructuredOutputProcessor = class {
|
|
|
798
802
|
});
|
|
799
803
|
}
|
|
800
804
|
this.schema = options.schema;
|
|
805
|
+
this.structuringModel = options.model;
|
|
806
|
+
this.useAgent = options.useAgent ?? false;
|
|
801
807
|
this.errorStrategy = options.errorStrategy ?? "strict";
|
|
802
808
|
this.fallbackValue = options.fallbackValue;
|
|
803
809
|
this.jsonPromptInjection = options.jsonPromptInjection;
|
|
804
810
|
this.providerOptions = options.providerOptions;
|
|
805
811
|
this.logger = options.logger;
|
|
812
|
+
this.structuringInstructions = options.instructions || this.generateInstructions();
|
|
806
813
|
this.structuringAgent = new Agent({
|
|
807
814
|
id: "structured-output-structurer",
|
|
808
815
|
name: "structured-output-structurer",
|
|
809
|
-
instructions:
|
|
816
|
+
instructions: this.structuringInstructions,
|
|
810
817
|
model: options.model
|
|
811
818
|
});
|
|
812
819
|
}
|
|
813
820
|
__registerMastra(mastra) {
|
|
814
821
|
this.structuringAgent.__registerMastra(mastra);
|
|
815
822
|
}
|
|
823
|
+
setAgent(agent) {
|
|
824
|
+
this.agent = agent;
|
|
825
|
+
}
|
|
816
826
|
async processOutputStream(args) {
|
|
817
|
-
const { part, state, streamParts, abort, ...rest } = args;
|
|
827
|
+
const { part, state, streamParts, abort, requestContext, messageList, ...rest } = args;
|
|
818
828
|
const observabilityContext = chunkELRUKENZ_cjs.resolveObservabilityContext(rest);
|
|
819
829
|
const controller = state.controller;
|
|
820
830
|
switch (part.type) {
|
|
821
831
|
case "finish":
|
|
822
|
-
await this.processAndEmitStructuredOutput(
|
|
832
|
+
await this.processAndEmitStructuredOutput(
|
|
833
|
+
streamParts,
|
|
834
|
+
controller,
|
|
835
|
+
abort,
|
|
836
|
+
observabilityContext,
|
|
837
|
+
requestContext,
|
|
838
|
+
messageList
|
|
839
|
+
);
|
|
823
840
|
return part;
|
|
824
841
|
default:
|
|
825
842
|
return part;
|
|
826
843
|
}
|
|
827
844
|
}
|
|
828
|
-
async processAndEmitStructuredOutput(streamParts, controller, abort, observabilityContext) {
|
|
845
|
+
async processAndEmitStructuredOutput(streamParts, controller, abort, observabilityContext, requestContext, messageList) {
|
|
829
846
|
if (this.isStructuringAgentStreamStarted) return;
|
|
830
847
|
this.isStructuringAgentStreamStarted = true;
|
|
831
848
|
try {
|
|
832
|
-
const
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
schema: this.schema,
|
|
839
|
-
jsonPromptInjection: this.jsonPromptInjection
|
|
840
|
-
},
|
|
841
|
-
providerOptions: this.providerOptions,
|
|
842
|
-
...observabilityContext
|
|
843
|
-
});
|
|
849
|
+
const structuringAgentStream = await this.getStructuringStream(
|
|
850
|
+
streamParts,
|
|
851
|
+
requestContext,
|
|
852
|
+
messageList,
|
|
853
|
+
observabilityContext
|
|
854
|
+
);
|
|
844
855
|
const excludedChunkTypes = [
|
|
845
856
|
"start",
|
|
846
857
|
"finish",
|
|
@@ -870,7 +881,7 @@ ${structuringPrompt}`;
|
|
|
870
881
|
fallback: true
|
|
871
882
|
}
|
|
872
883
|
};
|
|
873
|
-
controller
|
|
884
|
+
controller?.enqueue(fallbackChunk);
|
|
874
885
|
break;
|
|
875
886
|
}
|
|
876
887
|
}
|
|
@@ -880,12 +891,69 @@ ${structuringPrompt}`;
|
|
|
880
891
|
from: "structured-output"
|
|
881
892
|
}
|
|
882
893
|
};
|
|
883
|
-
controller
|
|
894
|
+
controller?.enqueue(newChunk);
|
|
884
895
|
}
|
|
885
896
|
} catch (error) {
|
|
886
897
|
this.handleError("Structured output processing failed", error, abort);
|
|
887
898
|
}
|
|
888
899
|
}
|
|
900
|
+
/**
|
|
901
|
+
* Get the structuring stream, using the explicit agent with model override and
|
|
902
|
+
* read-only memory when request context provides thread info, falling back to the bare internal agent.
|
|
903
|
+
*/
|
|
904
|
+
async getStructuringStream(streamParts, requestContext, messageList, observabilityContext) {
|
|
905
|
+
const requestThreadId = requestContext?.get(chunkNCM7IIBI_cjs.MASTRA_THREAD_ID_KEY);
|
|
906
|
+
const requestResourceId = requestContext?.get(chunkNCM7IIBI_cjs.MASTRA_RESOURCE_ID_KEY);
|
|
907
|
+
const serializedMemoryInfo = messageList?.serialize().memoryInfo;
|
|
908
|
+
const threadId = typeof requestThreadId === "string" ? requestThreadId : typeof serializedMemoryInfo?.threadId === "string" ? serializedMemoryInfo.threadId : void 0;
|
|
909
|
+
const resourceId = typeof requestResourceId === "string" ? requestResourceId : typeof serializedMemoryInfo?.resourceId === "string" ? serializedMemoryInfo.resourceId : void 0;
|
|
910
|
+
if (this.useAgent && this.agent && threadId) {
|
|
911
|
+
const promptMessage = {
|
|
912
|
+
role: "user",
|
|
913
|
+
content: [
|
|
914
|
+
{
|
|
915
|
+
type: "text",
|
|
916
|
+
text: `Extract and structure information from the conversation so far. keep the original meaning and details. Rely on the provided text and conversation history`
|
|
917
|
+
}
|
|
918
|
+
]
|
|
919
|
+
};
|
|
920
|
+
const messages = [
|
|
921
|
+
...messageList?.get?.input?.db() || [],
|
|
922
|
+
...messageList?.get?.response?.db() || [],
|
|
923
|
+
promptMessage
|
|
924
|
+
];
|
|
925
|
+
const structuringRequestContext = requestContext ? new chunkNCM7IIBI_cjs.RequestContext(requestContext.entries()) : void 0;
|
|
926
|
+
return this.agent.stream(messages, {
|
|
927
|
+
model: this.structuringModel,
|
|
928
|
+
requestContext: structuringRequestContext,
|
|
929
|
+
toolChoice: "none",
|
|
930
|
+
structuredOutput: {
|
|
931
|
+
schema: this.schema,
|
|
932
|
+
jsonPromptInjection: this.jsonPromptInjection
|
|
933
|
+
},
|
|
934
|
+
memory: {
|
|
935
|
+
thread: threadId,
|
|
936
|
+
...resourceId ? { resource: resourceId } : {},
|
|
937
|
+
options: { readOnly: true }
|
|
938
|
+
},
|
|
939
|
+
providerOptions: this.providerOptions,
|
|
940
|
+
...observabilityContext
|
|
941
|
+
});
|
|
942
|
+
}
|
|
943
|
+
return this.structuringAgent.stream(
|
|
944
|
+
`Extract and structure the key information from the following text according to the specified schema. Keep the original meaning and details. Rely on the provided text and conversation history.
|
|
945
|
+
|
|
946
|
+
${this.buildStructuringPrompt(streamParts)}`,
|
|
947
|
+
{
|
|
948
|
+
structuredOutput: {
|
|
949
|
+
schema: this.schema,
|
|
950
|
+
jsonPromptInjection: this.jsonPromptInjection
|
|
951
|
+
},
|
|
952
|
+
providerOptions: this.providerOptions,
|
|
953
|
+
...observabilityContext
|
|
954
|
+
}
|
|
955
|
+
);
|
|
956
|
+
}
|
|
889
957
|
/**
|
|
890
958
|
* Build a structured markdown prompt from stream parts
|
|
891
959
|
* Collects chunks by type and formats them in a consistent structure
|
|
@@ -2479,7 +2547,7 @@ var ProcessorRunner = class _ProcessorRunner {
|
|
|
2479
2547
|
}
|
|
2480
2548
|
const { model: _model, ...rest } = result;
|
|
2481
2549
|
if (result.model) {
|
|
2482
|
-
const resolvedModel = await
|
|
2550
|
+
const resolvedModel = await chunk34M2QMAZ_cjs.resolveModelConfig(result.model);
|
|
2483
2551
|
const isSupported = isSupportedLanguageModel(resolvedModel);
|
|
2484
2552
|
if (!isSupported) {
|
|
2485
2553
|
throw new chunk4U7ZLI36_cjs.MastraError({
|
|
@@ -3256,11 +3324,12 @@ var MastraModelOutput = class extends chunkFCQNDFEW_cjs.MastraBase {
|
|
|
3256
3324
|
} else {
|
|
3257
3325
|
if (!processorStates.has(STRUCTURED_OUTPUT_PROCESSOR_NAME)) {
|
|
3258
3326
|
const processorIndex = processorRunner.outputProcessors.findIndex(
|
|
3259
|
-
(p) => p.
|
|
3327
|
+
(p) => p.id === STRUCTURED_OUTPUT_PROCESSOR_NAME
|
|
3260
3328
|
);
|
|
3261
3329
|
if (processorIndex !== -1) {
|
|
3330
|
+
const structuredOutputProcessor = processorRunner.outputProcessors[processorIndex];
|
|
3262
3331
|
const structuredOutputProcessorState = new ProcessorState({
|
|
3263
|
-
processorName: STRUCTURED_OUTPUT_PROCESSOR_NAME,
|
|
3332
|
+
processorName: structuredOutputProcessor?.name ?? STRUCTURED_OUTPUT_PROCESSOR_NAME,
|
|
3264
3333
|
tracingContext: options.tracingContext,
|
|
3265
3334
|
processorIndex,
|
|
3266
3335
|
createSpan: true
|
|
@@ -13460,7 +13529,7 @@ var MastraScorer = class _MastraScorer {
|
|
|
13460
13529
|
}
|
|
13461
13530
|
});
|
|
13462
13531
|
}
|
|
13463
|
-
const resolvedModel = await
|
|
13532
|
+
const resolvedModel = await chunk34M2QMAZ_cjs.resolveModelConfig(modelConfig, void 0, this.#mastra);
|
|
13464
13533
|
const judgeModel = resolvedModel.modelId;
|
|
13465
13534
|
const judge = new Agent({
|
|
13466
13535
|
id: "judge",
|
|
@@ -14191,7 +14260,7 @@ function execute({
|
|
|
14191
14260
|
schema: responseFormat.schema
|
|
14192
14261
|
});
|
|
14193
14262
|
}
|
|
14194
|
-
if (structuredOutputMode === "processor" && responseFormat?.type === "json" && responseFormat?.schema) {
|
|
14263
|
+
if (structuredOutputMode === "processor" && responseFormat?.type === "json" && responseFormat?.schema && !structuredOutput?.useAgent) {
|
|
14195
14264
|
prompt = providerUtilsV5.injectJsonInstructionIntoMessages({
|
|
14196
14265
|
messages: inputMessages,
|
|
14197
14266
|
schema: responseFormat.schema,
|
|
@@ -14371,15 +14440,10 @@ var AgenticRunState = class {
|
|
|
14371
14440
|
modelVersion: model.specificationVersion,
|
|
14372
14441
|
modelProvider: model.provider
|
|
14373
14442
|
},
|
|
14374
|
-
isReasoning: false,
|
|
14375
|
-
isStreaming: false,
|
|
14376
14443
|
providerOptions: void 0,
|
|
14377
|
-
hasToolCallStreaming: false,
|
|
14378
14444
|
hasErrored: false,
|
|
14379
14445
|
apiError: void 0,
|
|
14380
14446
|
deferredErrorChunk: void 0,
|
|
14381
|
-
reasoningBuffers: /* @__PURE__ */ new Map(),
|
|
14382
|
-
textDeltas: [],
|
|
14383
14447
|
stepResult: void 0
|
|
14384
14448
|
};
|
|
14385
14449
|
}
|
|
@@ -14394,6 +14458,265 @@ var AgenticRunState = class {
|
|
|
14394
14458
|
}
|
|
14395
14459
|
};
|
|
14396
14460
|
|
|
14461
|
+
// src/loop/workflows/agentic-execution/build-messages-from-chunks.ts
|
|
14462
|
+
function buildMessagesFromChunks({
|
|
14463
|
+
chunks,
|
|
14464
|
+
messageId,
|
|
14465
|
+
responseModelMetadata,
|
|
14466
|
+
tools
|
|
14467
|
+
}) {
|
|
14468
|
+
const parts = [];
|
|
14469
|
+
const toolResults = /* @__PURE__ */ new Map();
|
|
14470
|
+
for (const chunk of chunks) {
|
|
14471
|
+
if (chunk.type === "tool-result" && chunk.payload.result != null) {
|
|
14472
|
+
const p = chunk.payload;
|
|
14473
|
+
toolResults.set(p.toolCallId, {
|
|
14474
|
+
result: p.result,
|
|
14475
|
+
args: p.args,
|
|
14476
|
+
providerMetadata: p.providerMetadata,
|
|
14477
|
+
providerExecuted: p.providerExecuted,
|
|
14478
|
+
toolName: p.toolName
|
|
14479
|
+
});
|
|
14480
|
+
}
|
|
14481
|
+
}
|
|
14482
|
+
const textSpans = /* @__PURE__ */ new Map();
|
|
14483
|
+
const reasoningSpans = /* @__PURE__ */ new Map();
|
|
14484
|
+
for (const chunk of chunks) {
|
|
14485
|
+
switch (chunk.type) {
|
|
14486
|
+
// ── Text span ──────────────────────────────────────────────
|
|
14487
|
+
case "text-start": {
|
|
14488
|
+
const p = chunk.payload;
|
|
14489
|
+
if (!textSpans.has(p.id)) {
|
|
14490
|
+
textSpans.set(p.id, {
|
|
14491
|
+
deltas: [],
|
|
14492
|
+
providerMetadata: p.providerMetadata
|
|
14493
|
+
});
|
|
14494
|
+
} else {
|
|
14495
|
+
const existing = textSpans.get(p.id);
|
|
14496
|
+
if (p.providerMetadata) {
|
|
14497
|
+
existing.providerMetadata = p.providerMetadata;
|
|
14498
|
+
}
|
|
14499
|
+
}
|
|
14500
|
+
break;
|
|
14501
|
+
}
|
|
14502
|
+
case "text-delta": {
|
|
14503
|
+
const p = chunk.payload;
|
|
14504
|
+
let span = textSpans.get(p.id);
|
|
14505
|
+
if (!span) {
|
|
14506
|
+
span = { deltas: [], providerMetadata: p.providerMetadata };
|
|
14507
|
+
textSpans.set(p.id, span);
|
|
14508
|
+
}
|
|
14509
|
+
span.deltas.push(p.text);
|
|
14510
|
+
if (p.providerMetadata) {
|
|
14511
|
+
span.providerMetadata = p.providerMetadata;
|
|
14512
|
+
}
|
|
14513
|
+
break;
|
|
14514
|
+
}
|
|
14515
|
+
case "text-end": {
|
|
14516
|
+
const pEnd = chunk.payload;
|
|
14517
|
+
const span = textSpans.get(pEnd.id);
|
|
14518
|
+
if (span) {
|
|
14519
|
+
if (pEnd.providerMetadata) {
|
|
14520
|
+
span.providerMetadata = pEnd.providerMetadata;
|
|
14521
|
+
}
|
|
14522
|
+
const text = span.deltas.join("");
|
|
14523
|
+
if (text.length > 0) {
|
|
14524
|
+
parts.push({
|
|
14525
|
+
type: "text",
|
|
14526
|
+
text,
|
|
14527
|
+
...span.providerMetadata ? { providerMetadata: span.providerMetadata } : {}
|
|
14528
|
+
});
|
|
14529
|
+
}
|
|
14530
|
+
textSpans.delete(pEnd.id);
|
|
14531
|
+
}
|
|
14532
|
+
break;
|
|
14533
|
+
}
|
|
14534
|
+
// ── Reasoning span ─────────────────────────────────────────
|
|
14535
|
+
case "reasoning-start": {
|
|
14536
|
+
const p = chunk.payload;
|
|
14537
|
+
const isRedacted = Object.values(p.providerMetadata || {}).some((v) => v?.redactedData);
|
|
14538
|
+
if (!reasoningSpans.has(p.id)) {
|
|
14539
|
+
reasoningSpans.set(p.id, {
|
|
14540
|
+
deltas: [],
|
|
14541
|
+
providerMetadata: p.providerMetadata,
|
|
14542
|
+
redacted: isRedacted
|
|
14543
|
+
});
|
|
14544
|
+
} else {
|
|
14545
|
+
const existing = reasoningSpans.get(p.id);
|
|
14546
|
+
if (p.providerMetadata) {
|
|
14547
|
+
existing.providerMetadata = p.providerMetadata;
|
|
14548
|
+
}
|
|
14549
|
+
if (isRedacted) {
|
|
14550
|
+
existing.redacted = true;
|
|
14551
|
+
}
|
|
14552
|
+
}
|
|
14553
|
+
break;
|
|
14554
|
+
}
|
|
14555
|
+
case "reasoning-delta": {
|
|
14556
|
+
const p = chunk.payload;
|
|
14557
|
+
let span = reasoningSpans.get(p.id);
|
|
14558
|
+
if (!span) {
|
|
14559
|
+
span = { deltas: [], providerMetadata: p.providerMetadata, redacted: false };
|
|
14560
|
+
reasoningSpans.set(p.id, span);
|
|
14561
|
+
}
|
|
14562
|
+
span.deltas.push(p.text);
|
|
14563
|
+
if (p.providerMetadata) {
|
|
14564
|
+
span.providerMetadata = p.providerMetadata;
|
|
14565
|
+
}
|
|
14566
|
+
break;
|
|
14567
|
+
}
|
|
14568
|
+
case "reasoning-end": {
|
|
14569
|
+
const p = chunk.payload;
|
|
14570
|
+
const span = reasoningSpans.get(p.id);
|
|
14571
|
+
if (span) {
|
|
14572
|
+
if (p.providerMetadata) {
|
|
14573
|
+
span.providerMetadata = p.providerMetadata;
|
|
14574
|
+
}
|
|
14575
|
+
if (span.redacted) {
|
|
14576
|
+
parts.push({
|
|
14577
|
+
type: "reasoning",
|
|
14578
|
+
reasoning: "",
|
|
14579
|
+
details: [{ type: "redacted", data: "" }],
|
|
14580
|
+
providerMetadata: span.providerMetadata
|
|
14581
|
+
});
|
|
14582
|
+
} else {
|
|
14583
|
+
parts.push({
|
|
14584
|
+
type: "reasoning",
|
|
14585
|
+
reasoning: "",
|
|
14586
|
+
details: [{ type: "text", text: span.deltas.join("") }],
|
|
14587
|
+
providerMetadata: span.providerMetadata
|
|
14588
|
+
});
|
|
14589
|
+
}
|
|
14590
|
+
reasoningSpans.delete(p.id);
|
|
14591
|
+
}
|
|
14592
|
+
break;
|
|
14593
|
+
}
|
|
14594
|
+
// Redacted reasoning can appear as a standalone chunk (not wrapped in start/end)
|
|
14595
|
+
case "redacted-reasoning": {
|
|
14596
|
+
const p = chunk.payload;
|
|
14597
|
+
parts.push({
|
|
14598
|
+
type: "reasoning",
|
|
14599
|
+
reasoning: "",
|
|
14600
|
+
details: [{ type: "redacted", data: "" }],
|
|
14601
|
+
providerMetadata: p.providerMetadata
|
|
14602
|
+
});
|
|
14603
|
+
break;
|
|
14604
|
+
}
|
|
14605
|
+
// ── Source ──────────────────────────────────────────────────
|
|
14606
|
+
case "source": {
|
|
14607
|
+
const p = chunk.payload;
|
|
14608
|
+
parts.push({
|
|
14609
|
+
type: "source",
|
|
14610
|
+
source: {
|
|
14611
|
+
sourceType: "url",
|
|
14612
|
+
id: p.id,
|
|
14613
|
+
url: p.url || "",
|
|
14614
|
+
title: p.title,
|
|
14615
|
+
providerMetadata: p.providerMetadata
|
|
14616
|
+
}
|
|
14617
|
+
});
|
|
14618
|
+
break;
|
|
14619
|
+
}
|
|
14620
|
+
// ── File ───────────────────────────────────────────────────
|
|
14621
|
+
case "file": {
|
|
14622
|
+
const p = chunk.payload;
|
|
14623
|
+
parts.push({
|
|
14624
|
+
type: "file",
|
|
14625
|
+
data: p.data,
|
|
14626
|
+
mimeType: p.mimeType,
|
|
14627
|
+
...p.providerMetadata ? { providerMetadata: p.providerMetadata } : {}
|
|
14628
|
+
});
|
|
14629
|
+
break;
|
|
14630
|
+
}
|
|
14631
|
+
// ── Tool call ──────────────────────────────────────────────
|
|
14632
|
+
case "tool-call": {
|
|
14633
|
+
const p = chunk.payload;
|
|
14634
|
+
const toolDef = tools?.[p.toolName] || findProviderToolByName(tools, p.toolName);
|
|
14635
|
+
const providerExecuted = inferProviderExecuted(p.providerExecuted, toolDef);
|
|
14636
|
+
const result = toolResults.get(p.toolCallId);
|
|
14637
|
+
if (result) {
|
|
14638
|
+
const resultProviderExecuted = inferProviderExecuted(result.providerExecuted, toolDef);
|
|
14639
|
+
parts.push({
|
|
14640
|
+
type: "tool-invocation",
|
|
14641
|
+
toolInvocation: {
|
|
14642
|
+
state: "result",
|
|
14643
|
+
toolCallId: p.toolCallId,
|
|
14644
|
+
toolName: p.toolName,
|
|
14645
|
+
args: p.args,
|
|
14646
|
+
result: result.result
|
|
14647
|
+
},
|
|
14648
|
+
providerMetadata: result.providerMetadata ?? p.providerMetadata,
|
|
14649
|
+
providerExecuted: resultProviderExecuted
|
|
14650
|
+
});
|
|
14651
|
+
} else {
|
|
14652
|
+
parts.push({
|
|
14653
|
+
type: "tool-invocation",
|
|
14654
|
+
toolInvocation: {
|
|
14655
|
+
state: "call",
|
|
14656
|
+
toolCallId: p.toolCallId,
|
|
14657
|
+
toolName: p.toolName,
|
|
14658
|
+
args: p.args
|
|
14659
|
+
},
|
|
14660
|
+
providerMetadata: p.providerMetadata,
|
|
14661
|
+
providerExecuted
|
|
14662
|
+
});
|
|
14663
|
+
}
|
|
14664
|
+
break;
|
|
14665
|
+
}
|
|
14666
|
+
}
|
|
14667
|
+
}
|
|
14668
|
+
for (const [_id, span] of reasoningSpans) {
|
|
14669
|
+
if (span.redacted) {
|
|
14670
|
+
parts.push({
|
|
14671
|
+
type: "reasoning",
|
|
14672
|
+
reasoning: "",
|
|
14673
|
+
details: [{ type: "redacted", data: "" }],
|
|
14674
|
+
providerMetadata: span.providerMetadata
|
|
14675
|
+
});
|
|
14676
|
+
} else {
|
|
14677
|
+
const text = span.deltas.join("");
|
|
14678
|
+
parts.push({
|
|
14679
|
+
type: "reasoning",
|
|
14680
|
+
reasoning: "",
|
|
14681
|
+
details: [{ type: "text", text }],
|
|
14682
|
+
providerMetadata: span.providerMetadata
|
|
14683
|
+
});
|
|
14684
|
+
}
|
|
14685
|
+
}
|
|
14686
|
+
for (const [, span] of textSpans) {
|
|
14687
|
+
const text = span.deltas.join("");
|
|
14688
|
+
if (text.length > 0) {
|
|
14689
|
+
parts.push({
|
|
14690
|
+
type: "text",
|
|
14691
|
+
text,
|
|
14692
|
+
...span.providerMetadata ? { providerMetadata: span.providerMetadata } : {}
|
|
14693
|
+
});
|
|
14694
|
+
}
|
|
14695
|
+
}
|
|
14696
|
+
const finalParts = [];
|
|
14697
|
+
for (let i = 0; i < parts.length; i++) {
|
|
14698
|
+
const part = parts[i];
|
|
14699
|
+
if (part.type === "text" && finalParts.length > 0 && finalParts[finalParts.length - 1]?.type === "tool-invocation") {
|
|
14700
|
+
finalParts.push({ type: "step-start" });
|
|
14701
|
+
}
|
|
14702
|
+
finalParts.push(part);
|
|
14703
|
+
}
|
|
14704
|
+
if (finalParts.length === 0) {
|
|
14705
|
+
return [];
|
|
14706
|
+
}
|
|
14707
|
+
const message = {
|
|
14708
|
+
id: messageId,
|
|
14709
|
+
role: "assistant",
|
|
14710
|
+
content: {
|
|
14711
|
+
format: 2,
|
|
14712
|
+
parts: finalParts,
|
|
14713
|
+
...responseModelMetadata
|
|
14714
|
+
},
|
|
14715
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
14716
|
+
};
|
|
14717
|
+
return [message];
|
|
14718
|
+
}
|
|
14719
|
+
|
|
14397
14720
|
// src/loop/workflows/agentic-execution/llm-execution-step.ts
|
|
14398
14721
|
function buildResponseModelMetadata(runState, model) {
|
|
14399
14722
|
const metadata = {};
|
|
@@ -14406,39 +14729,12 @@ function buildResponseModelMetadata(runState, model) {
|
|
|
14406
14729
|
}
|
|
14407
14730
|
return Object.keys(metadata).length > 0 ? { metadata } : void 0;
|
|
14408
14731
|
}
|
|
14409
|
-
function flushReasoningBuffer({
|
|
14410
|
-
buffer,
|
|
14411
|
-
messageId,
|
|
14412
|
-
messageList,
|
|
14413
|
-
runState,
|
|
14414
|
-
model
|
|
14415
|
-
}) {
|
|
14416
|
-
const message = {
|
|
14417
|
-
id: messageId,
|
|
14418
|
-
role: "assistant",
|
|
14419
|
-
content: {
|
|
14420
|
-
format: 2,
|
|
14421
|
-
parts: [
|
|
14422
|
-
{
|
|
14423
|
-
type: "reasoning",
|
|
14424
|
-
reasoning: "",
|
|
14425
|
-
details: [{ type: "text", text: buffer.deltas.join("") }],
|
|
14426
|
-
providerMetadata: buffer.providerMetadata
|
|
14427
|
-
}
|
|
14428
|
-
],
|
|
14429
|
-
...buildResponseModelMetadata(runState, model)
|
|
14430
|
-
},
|
|
14431
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14432
|
-
};
|
|
14433
|
-
messageList.add(message, "response");
|
|
14434
|
-
}
|
|
14435
14732
|
async function processOutputStream({
|
|
14436
14733
|
tools,
|
|
14437
14734
|
messageId,
|
|
14438
14735
|
messageList,
|
|
14439
14736
|
outputStream,
|
|
14440
14737
|
runState,
|
|
14441
|
-
model,
|
|
14442
14738
|
options,
|
|
14443
14739
|
controller,
|
|
14444
14740
|
responseFromModel,
|
|
@@ -14448,6 +14744,7 @@ async function processOutputStream({
|
|
|
14448
14744
|
transportResolver
|
|
14449
14745
|
}) {
|
|
14450
14746
|
let transportSet = false;
|
|
14747
|
+
const collectedChunks = [];
|
|
14451
14748
|
for await (const chunk of outputStream._getBaseStream()) {
|
|
14452
14749
|
if (options?.abortSignal?.aborted) {
|
|
14453
14750
|
break;
|
|
@@ -14466,60 +14763,7 @@ async function processOutputStream({
|
|
|
14466
14763
|
controller.enqueue(chunk);
|
|
14467
14764
|
continue;
|
|
14468
14765
|
}
|
|
14469
|
-
|
|
14470
|
-
// basically for some llm providers they add response-metadata after each text-delta
|
|
14471
|
-
// we then flush the chunks by calling messageList.add (a few lines down)
|
|
14472
|
-
// this results in a bunch of weird separated text chunks on the message instead of combined chunks
|
|
14473
|
-
// easiest solution here is to just not flush for response-metadata
|
|
14474
|
-
// BUT does this cause other issues?
|
|
14475
|
-
// 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
|
|
14476
|
-
// simple solution for now is to not flush text deltas on response-metadata
|
|
14477
|
-
chunk.type !== "response-metadata" && // Don't flush on source chunks - OpenAI web search interleaves source citations
|
|
14478
|
-
// with text-deltas, all sharing the same itemId. Flushing creates multiple parts
|
|
14479
|
-
// with duplicate itemIds, causing "Duplicate item found" errors on the next request.
|
|
14480
|
-
chunk.type !== "source" && runState.state.isStreaming) {
|
|
14481
|
-
if (runState.state.textDeltas.length) {
|
|
14482
|
-
const textStartPayload = chunk.payload;
|
|
14483
|
-
const providerMetadata = textStartPayload.providerMetadata ?? runState.state.providerOptions;
|
|
14484
|
-
const message = {
|
|
14485
|
-
id: messageId,
|
|
14486
|
-
role: "assistant",
|
|
14487
|
-
content: {
|
|
14488
|
-
format: 2,
|
|
14489
|
-
parts: [
|
|
14490
|
-
{
|
|
14491
|
-
type: "text",
|
|
14492
|
-
text: runState.state.textDeltas.join(""),
|
|
14493
|
-
...providerMetadata ? { providerMetadata } : {}
|
|
14494
|
-
}
|
|
14495
|
-
],
|
|
14496
|
-
...buildResponseModelMetadata(runState, model)
|
|
14497
|
-
},
|
|
14498
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14499
|
-
};
|
|
14500
|
-
messageList.add(message, "response");
|
|
14501
|
-
}
|
|
14502
|
-
runState.setState({
|
|
14503
|
-
isStreaming: false,
|
|
14504
|
-
textDeltas: []
|
|
14505
|
-
});
|
|
14506
|
-
}
|
|
14507
|
-
if (chunk.type !== "reasoning-start" && chunk.type !== "reasoning-delta" && chunk.type !== "reasoning-end" && chunk.type !== "redacted-reasoning" && chunk.type !== "reasoning-signature" && chunk.type !== "response-metadata" && chunk.type !== "text-start" && runState.state.isReasoning) {
|
|
14508
|
-
for (const buffer of runState.state.reasoningBuffers.values()) {
|
|
14509
|
-
flushReasoningBuffer({
|
|
14510
|
-
buffer,
|
|
14511
|
-
messageId,
|
|
14512
|
-
messageList,
|
|
14513
|
-
runState,
|
|
14514
|
-
model
|
|
14515
|
-
});
|
|
14516
|
-
}
|
|
14517
|
-
runState.setState({
|
|
14518
|
-
isReasoning: false,
|
|
14519
|
-
reasoningBuffers: /* @__PURE__ */ new Map(),
|
|
14520
|
-
providerOptions: void 0
|
|
14521
|
-
});
|
|
14522
|
-
}
|
|
14766
|
+
collectedChunks.push({ type: chunk.type, payload: chunk.payload });
|
|
14523
14767
|
switch (chunk.type) {
|
|
14524
14768
|
case "response-metadata":
|
|
14525
14769
|
runState.setState({
|
|
@@ -14531,32 +14775,6 @@ async function processOutputStream({
|
|
|
14531
14775
|
}
|
|
14532
14776
|
});
|
|
14533
14777
|
break;
|
|
14534
|
-
case "text-start": {
|
|
14535
|
-
if (chunk.payload.providerMetadata) {
|
|
14536
|
-
runState.setState({
|
|
14537
|
-
providerOptions: chunk.payload.providerMetadata
|
|
14538
|
-
});
|
|
14539
|
-
}
|
|
14540
|
-
safeEnqueue(controller, chunk);
|
|
14541
|
-
break;
|
|
14542
|
-
}
|
|
14543
|
-
case "text-delta": {
|
|
14544
|
-
const textDeltasFromState = runState.state.textDeltas;
|
|
14545
|
-
textDeltasFromState.push(chunk.payload.text);
|
|
14546
|
-
runState.setState({
|
|
14547
|
-
textDeltas: textDeltasFromState,
|
|
14548
|
-
isStreaming: true
|
|
14549
|
-
});
|
|
14550
|
-
safeEnqueue(controller, chunk);
|
|
14551
|
-
break;
|
|
14552
|
-
}
|
|
14553
|
-
case "text-end": {
|
|
14554
|
-
runState.setState({
|
|
14555
|
-
providerOptions: void 0
|
|
14556
|
-
});
|
|
14557
|
-
safeEnqueue(controller, chunk);
|
|
14558
|
-
break;
|
|
14559
|
-
}
|
|
14560
14778
|
case "tool-call-input-streaming-start": {
|
|
14561
14779
|
const tool2 = tools?.[chunk.payload.toolName] || Object.values(tools || {})?.find((tool3) => `id` in tool3 && tool3.id === chunk.payload.toolName);
|
|
14562
14780
|
if (tool2 && "onInputStart" in tool2) {
|
|
@@ -14590,145 +14808,6 @@ async function processOutputStream({
|
|
|
14590
14808
|
safeEnqueue(controller, chunk);
|
|
14591
14809
|
break;
|
|
14592
14810
|
}
|
|
14593
|
-
case "tool-call-input-streaming-end": {
|
|
14594
|
-
safeEnqueue(controller, chunk);
|
|
14595
|
-
break;
|
|
14596
|
-
}
|
|
14597
|
-
case "reasoning-start": {
|
|
14598
|
-
const reasoningBuffers = new Map(runState.state.reasoningBuffers);
|
|
14599
|
-
reasoningBuffers.set(chunk.payload.id, {
|
|
14600
|
-
deltas: reasoningBuffers.get(chunk.payload.id)?.deltas ?? [],
|
|
14601
|
-
providerMetadata: chunk.payload.providerMetadata ?? reasoningBuffers.get(chunk.payload.id)?.providerMetadata
|
|
14602
|
-
});
|
|
14603
|
-
runState.setState({
|
|
14604
|
-
isReasoning: true,
|
|
14605
|
-
reasoningBuffers,
|
|
14606
|
-
providerOptions: chunk.payload.providerMetadata ?? runState.state.providerOptions
|
|
14607
|
-
});
|
|
14608
|
-
if (Object.values(chunk.payload.providerMetadata || {}).find((v) => v?.redactedData)) {
|
|
14609
|
-
const message = {
|
|
14610
|
-
id: messageId,
|
|
14611
|
-
role: "assistant",
|
|
14612
|
-
content: {
|
|
14613
|
-
format: 2,
|
|
14614
|
-
parts: [
|
|
14615
|
-
{
|
|
14616
|
-
type: "reasoning",
|
|
14617
|
-
reasoning: "",
|
|
14618
|
-
details: [{ type: "redacted", data: "" }],
|
|
14619
|
-
providerMetadata: chunk.payload.providerMetadata ?? runState.state.providerOptions
|
|
14620
|
-
}
|
|
14621
|
-
],
|
|
14622
|
-
...buildResponseModelMetadata(runState, model)
|
|
14623
|
-
},
|
|
14624
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14625
|
-
};
|
|
14626
|
-
messageList.add(message, "response");
|
|
14627
|
-
safeEnqueue(controller, chunk);
|
|
14628
|
-
break;
|
|
14629
|
-
}
|
|
14630
|
-
safeEnqueue(controller, chunk);
|
|
14631
|
-
break;
|
|
14632
|
-
}
|
|
14633
|
-
case "reasoning-delta": {
|
|
14634
|
-
const reasoningBuffers = new Map(runState.state.reasoningBuffers);
|
|
14635
|
-
const existingBuffer = reasoningBuffers.get(chunk.payload.id);
|
|
14636
|
-
const buffer = {
|
|
14637
|
-
deltas: [...existingBuffer?.deltas ?? [], chunk.payload.text],
|
|
14638
|
-
providerMetadata: chunk.payload.providerMetadata ?? existingBuffer?.providerMetadata
|
|
14639
|
-
};
|
|
14640
|
-
reasoningBuffers.set(chunk.payload.id, buffer);
|
|
14641
|
-
runState.setState({
|
|
14642
|
-
isReasoning: true,
|
|
14643
|
-
reasoningBuffers,
|
|
14644
|
-
providerOptions: chunk.payload.providerMetadata ?? runState.state.providerOptions
|
|
14645
|
-
});
|
|
14646
|
-
safeEnqueue(controller, chunk);
|
|
14647
|
-
break;
|
|
14648
|
-
}
|
|
14649
|
-
case "reasoning-end": {
|
|
14650
|
-
if (!runState.state.isReasoning) {
|
|
14651
|
-
safeEnqueue(controller, chunk);
|
|
14652
|
-
break;
|
|
14653
|
-
}
|
|
14654
|
-
const reasoningBuffers = new Map(runState.state.reasoningBuffers);
|
|
14655
|
-
const buffer = reasoningBuffers.get(chunk.payload.id);
|
|
14656
|
-
if (!buffer) {
|
|
14657
|
-
safeEnqueue(controller, chunk);
|
|
14658
|
-
break;
|
|
14659
|
-
}
|
|
14660
|
-
flushReasoningBuffer({
|
|
14661
|
-
buffer: {
|
|
14662
|
-
deltas: buffer.deltas,
|
|
14663
|
-
providerMetadata: chunk.payload.providerMetadata ?? buffer.providerMetadata
|
|
14664
|
-
},
|
|
14665
|
-
messageId,
|
|
14666
|
-
messageList,
|
|
14667
|
-
runState,
|
|
14668
|
-
model
|
|
14669
|
-
});
|
|
14670
|
-
reasoningBuffers.delete(chunk.payload.id);
|
|
14671
|
-
const nextProviderOptions = Array.from(reasoningBuffers.values()).at(-1)?.providerMetadata;
|
|
14672
|
-
runState.setState({
|
|
14673
|
-
isReasoning: reasoningBuffers.size > 0,
|
|
14674
|
-
reasoningBuffers,
|
|
14675
|
-
providerOptions: nextProviderOptions
|
|
14676
|
-
});
|
|
14677
|
-
safeEnqueue(controller, chunk);
|
|
14678
|
-
break;
|
|
14679
|
-
}
|
|
14680
|
-
case "file":
|
|
14681
|
-
{
|
|
14682
|
-
const message = {
|
|
14683
|
-
id: messageId,
|
|
14684
|
-
role: "assistant",
|
|
14685
|
-
content: {
|
|
14686
|
-
format: 2,
|
|
14687
|
-
parts: [
|
|
14688
|
-
{
|
|
14689
|
-
type: "file",
|
|
14690
|
-
// @ts-expect-error - data type mismatch, see TODO
|
|
14691
|
-
data: chunk.payload.data,
|
|
14692
|
-
// TODO: incorrect string type
|
|
14693
|
-
mimeType: chunk.payload.mimeType,
|
|
14694
|
-
...chunk.payload.providerMetadata ? { providerMetadata: chunk.payload.providerMetadata } : {}
|
|
14695
|
-
}
|
|
14696
|
-
],
|
|
14697
|
-
...buildResponseModelMetadata(runState, model)
|
|
14698
|
-
},
|
|
14699
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14700
|
-
};
|
|
14701
|
-
messageList.add(message, "response");
|
|
14702
|
-
safeEnqueue(controller, chunk);
|
|
14703
|
-
}
|
|
14704
|
-
break;
|
|
14705
|
-
case "source":
|
|
14706
|
-
{
|
|
14707
|
-
const message = {
|
|
14708
|
-
id: messageId,
|
|
14709
|
-
role: "assistant",
|
|
14710
|
-
content: {
|
|
14711
|
-
format: 2,
|
|
14712
|
-
parts: [
|
|
14713
|
-
{
|
|
14714
|
-
type: "source",
|
|
14715
|
-
source: {
|
|
14716
|
-
sourceType: "url",
|
|
14717
|
-
id: chunk.payload.id,
|
|
14718
|
-
url: chunk.payload.url || "",
|
|
14719
|
-
title: chunk.payload.title,
|
|
14720
|
-
providerMetadata: chunk.payload.providerMetadata
|
|
14721
|
-
}
|
|
14722
|
-
}
|
|
14723
|
-
],
|
|
14724
|
-
...buildResponseModelMetadata(runState, model)
|
|
14725
|
-
},
|
|
14726
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14727
|
-
};
|
|
14728
|
-
messageList.add(message, "response");
|
|
14729
|
-
safeEnqueue(controller, chunk);
|
|
14730
|
-
}
|
|
14731
|
-
break;
|
|
14732
14811
|
case "finish":
|
|
14733
14812
|
runState.setState({
|
|
14734
14813
|
providerOptions: chunk.payload.metadata?.providerMetadata ?? chunk.payload.providerMetadata,
|
|
@@ -14762,8 +14841,6 @@ async function processOutputStream({
|
|
|
14762
14841
|
deferredErrorChunk: chunk
|
|
14763
14842
|
});
|
|
14764
14843
|
break;
|
|
14765
|
-
// Provider-executed tool results (e.g. web_search). Client tool results
|
|
14766
|
-
// are handled by llm-mapping-step after execution.
|
|
14767
14844
|
case "tool-result": {
|
|
14768
14845
|
if (chunk.payload.result != null) {
|
|
14769
14846
|
const resultToolDef = tools?.[chunk.payload.toolName] || findProviderToolByName(tools, chunk.payload.toolName);
|
|
@@ -14783,34 +14860,6 @@ async function processOutputStream({
|
|
|
14783
14860
|
safeEnqueue(controller, chunk);
|
|
14784
14861
|
break;
|
|
14785
14862
|
}
|
|
14786
|
-
case "tool-call": {
|
|
14787
|
-
const toolDef = tools?.[chunk.payload.toolName] || findProviderToolByName(tools, chunk.payload.toolName);
|
|
14788
|
-
const inferredProviderExecuted = inferProviderExecuted(chunk.payload.providerExecuted, toolDef);
|
|
14789
|
-
const toolCallPart = {
|
|
14790
|
-
type: "tool-invocation",
|
|
14791
|
-
toolInvocation: {
|
|
14792
|
-
state: "call",
|
|
14793
|
-
toolCallId: chunk.payload.toolCallId,
|
|
14794
|
-
toolName: chunk.payload.toolName,
|
|
14795
|
-
args: chunk.payload.args
|
|
14796
|
-
},
|
|
14797
|
-
providerMetadata: chunk.payload.providerMetadata,
|
|
14798
|
-
providerExecuted: inferredProviderExecuted
|
|
14799
|
-
};
|
|
14800
|
-
const message = {
|
|
14801
|
-
id: messageId,
|
|
14802
|
-
role: "assistant",
|
|
14803
|
-
content: {
|
|
14804
|
-
format: 2,
|
|
14805
|
-
parts: [toolCallPart],
|
|
14806
|
-
...buildResponseModelMetadata(runState, model)
|
|
14807
|
-
},
|
|
14808
|
-
createdAt: /* @__PURE__ */ new Date()
|
|
14809
|
-
};
|
|
14810
|
-
messageList.add(message, "response");
|
|
14811
|
-
safeEnqueue(controller, chunk);
|
|
14812
|
-
break;
|
|
14813
|
-
}
|
|
14814
14863
|
default:
|
|
14815
14864
|
safeEnqueue(controller, chunk);
|
|
14816
14865
|
}
|
|
@@ -14833,6 +14882,7 @@ async function processOutputStream({
|
|
|
14833
14882
|
break;
|
|
14834
14883
|
}
|
|
14835
14884
|
}
|
|
14885
|
+
return collectedChunks;
|
|
14836
14886
|
}
|
|
14837
14887
|
function executeStreamWithFallbackModels(models, logger, startIndex = 0) {
|
|
14838
14888
|
return async (callback) => {
|
|
@@ -15264,19 +15314,18 @@ ${bgPrompt}`;
|
|
|
15264
15314
|
}
|
|
15265
15315
|
});
|
|
15266
15316
|
let transportResolver;
|
|
15267
|
-
if (currentStep.model instanceof
|
|
15317
|
+
if (currentStep.model instanceof chunk34M2QMAZ_cjs.ModelRouterLanguageModel) {
|
|
15268
15318
|
const routerModel = currentStep.model;
|
|
15269
15319
|
transportResolver = () => routerModel._getStreamTransport();
|
|
15270
15320
|
}
|
|
15271
15321
|
try {
|
|
15272
|
-
await processOutputStream({
|
|
15322
|
+
const collectedChunks = await processOutputStream({
|
|
15273
15323
|
outputStream: outputStream2,
|
|
15274
15324
|
includeRawChunks,
|
|
15275
15325
|
tools: currentStep.tools,
|
|
15276
15326
|
messageId: currentStep.messageId,
|
|
15277
15327
|
messageList,
|
|
15278
15328
|
runState: runState2,
|
|
15279
|
-
model: currentStep.model,
|
|
15280
15329
|
options,
|
|
15281
15330
|
controller,
|
|
15282
15331
|
responseFromModel: {
|
|
@@ -15288,6 +15337,26 @@ ${bgPrompt}`;
|
|
|
15288
15337
|
transportRef: _internal?.transportRef,
|
|
15289
15338
|
transportResolver
|
|
15290
15339
|
});
|
|
15340
|
+
const builtMessages = buildMessagesFromChunks({
|
|
15341
|
+
chunks: collectedChunks,
|
|
15342
|
+
messageId: currentStep.messageId,
|
|
15343
|
+
responseModelMetadata: buildResponseModelMetadata(runState2, currentStep.model),
|
|
15344
|
+
tools: currentStep.tools
|
|
15345
|
+
});
|
|
15346
|
+
for (const msg of builtMessages) {
|
|
15347
|
+
messageList.add(msg, "response");
|
|
15348
|
+
}
|
|
15349
|
+
const bufferedObject = outputStream2._getImmediateObject();
|
|
15350
|
+
if (bufferedObject !== void 0) {
|
|
15351
|
+
const responseMessages = messageList.get.response.db();
|
|
15352
|
+
const lastAssistant = [...responseMessages].reverse().find((m) => m.role === "assistant");
|
|
15353
|
+
if (lastAssistant) {
|
|
15354
|
+
if (!lastAssistant.content.metadata) {
|
|
15355
|
+
lastAssistant.content.metadata = {};
|
|
15356
|
+
}
|
|
15357
|
+
lastAssistant.content.metadata.structuredOutput = bufferedObject;
|
|
15358
|
+
}
|
|
15359
|
+
}
|
|
15291
15360
|
} catch (error) {
|
|
15292
15361
|
const provider = model?.provider;
|
|
15293
15362
|
const modelIdStr = model?.modelId;
|
|
@@ -20953,6 +21022,9 @@ function createMapResultsStep({
|
|
|
20953
21022
|
if (capabilities.mastra) {
|
|
20954
21023
|
structuredProcessor.__registerMastra(capabilities.mastra);
|
|
20955
21024
|
}
|
|
21025
|
+
if (options.structuredOutput.useAgent) {
|
|
21026
|
+
structuredProcessor.setAgent(capabilities.agent);
|
|
21027
|
+
}
|
|
20956
21028
|
effectiveOutputProcessors = effectiveOutputProcessors ? [...effectiveOutputProcessors, structuredProcessor] : [structuredProcessor];
|
|
20957
21029
|
}
|
|
20958
21030
|
const effectiveInputProcessors = capabilities.inputProcessors ? typeof capabilities.inputProcessors === "function" ? await capabilities.inputProcessors({
|
|
@@ -22632,7 +22704,7 @@ ${errorMessages}`,
|
|
|
22632
22704
|
*/
|
|
22633
22705
|
async resolveModelConfig(modelConfig, requestContext) {
|
|
22634
22706
|
try {
|
|
22635
|
-
return await
|
|
22707
|
+
return await chunk34M2QMAZ_cjs.resolveModelConfig(modelConfig, requestContext, this.#mastra);
|
|
22636
22708
|
} catch (error) {
|
|
22637
22709
|
const mastraError = new chunk4U7ZLI36_cjs.MastraError({
|
|
22638
22710
|
id: "AGENT_GET_MODEL_MISSING_MODEL_INSTANCE",
|
|
@@ -25002,7 +25074,7 @@ ${effectiveInstructions}`;
|
|
|
25002
25074
|
const resolvedModel = await this.resolveModelConfig(selection, requestContext);
|
|
25003
25075
|
this.assertSupportsPreparedModels(resolvedModel);
|
|
25004
25076
|
let headers;
|
|
25005
|
-
if (resolvedModel instanceof
|
|
25077
|
+
if (resolvedModel instanceof chunk34M2QMAZ_cjs.ModelRouterLanguageModel) {
|
|
25006
25078
|
headers = resolvedModel.config?.headers;
|
|
25007
25079
|
}
|
|
25008
25080
|
return [
|
|
@@ -25034,7 +25106,7 @@ ${effectiveInstructions}`;
|
|
|
25034
25106
|
throw mastraError;
|
|
25035
25107
|
}
|
|
25036
25108
|
let routerHeaders;
|
|
25037
|
-
if (model instanceof
|
|
25109
|
+
if (model instanceof chunk34M2QMAZ_cjs.ModelRouterLanguageModel) {
|
|
25038
25110
|
routerHeaders = model.config?.headers;
|
|
25039
25111
|
}
|
|
25040
25112
|
const isEnabled = modelConfig.enabled ?? true;
|
|
@@ -25208,6 +25280,7 @@ ${effectiveInstructions}`;
|
|
|
25208
25280
|
memory
|
|
25209
25281
|
});
|
|
25210
25282
|
const capabilities = {
|
|
25283
|
+
agent: this,
|
|
25211
25284
|
agentName: this.name,
|
|
25212
25285
|
logger: this.logger,
|
|
25213
25286
|
getMemory: this.getMemory.bind(this),
|
|
@@ -29965,7 +30038,7 @@ https://mastra.ai/en/docs/memory/semantic-recall`
|
|
|
29965
30038
|
);
|
|
29966
30039
|
}
|
|
29967
30040
|
if (typeof config.embedder === "string") {
|
|
29968
|
-
this.embedder = new
|
|
30041
|
+
this.embedder = new chunk34M2QMAZ_cjs.ModelRouterEmbeddingModel(config.embedder);
|
|
29969
30042
|
} else {
|
|
29970
30043
|
this.embedder = config.embedder;
|
|
29971
30044
|
}
|
|
@@ -29978,7 +30051,7 @@ https://mastra.ai/en/docs/memory/semantic-recall`
|
|
|
29978
30051
|
}
|
|
29979
30052
|
if (config.embedder) {
|
|
29980
30053
|
if (typeof config.embedder === "string") {
|
|
29981
|
-
this.embedder = new
|
|
30054
|
+
this.embedder = new chunk34M2QMAZ_cjs.ModelRouterEmbeddingModel(config.embedder);
|
|
29982
30055
|
} else {
|
|
29983
30056
|
this.embedder = config.embedder;
|
|
29984
30057
|
}
|
|
@@ -30018,7 +30091,7 @@ https://mastra.ai/en/docs/memory/overview`
|
|
|
30018
30091
|
}
|
|
30019
30092
|
setEmbedder(embedder, embedderOptions) {
|
|
30020
30093
|
if (typeof embedder === "string") {
|
|
30021
|
-
this.embedder = new
|
|
30094
|
+
this.embedder = new chunk34M2QMAZ_cjs.ModelRouterEmbeddingModel(embedder);
|
|
30022
30095
|
} else {
|
|
30023
30096
|
this.embedder = embedder;
|
|
30024
30097
|
}
|
|
@@ -30802,5 +30875,5 @@ exports.validateStepRequestContext = validateStepRequestContext;
|
|
|
30802
30875
|
exports.validateStepResumeData = validateStepResumeData;
|
|
30803
30876
|
exports.validateStepStateData = validateStepStateData;
|
|
30804
30877
|
exports.validateStepSuspendData = validateStepSuspendData;
|
|
30805
|
-
//# sourceMappingURL=chunk-
|
|
30806
|
-
//# sourceMappingURL=chunk-
|
|
30878
|
+
//# sourceMappingURL=chunk-2NQ2TF5F.cjs.map
|
|
30879
|
+
//# sourceMappingURL=chunk-2NQ2TF5F.cjs.map
|