@mastra/core 0.15.3-alpha.2 → 0.15.3-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent.types.d.ts +9 -4
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +11 -11
- package/dist/agent/index.d.ts +33 -5
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +6 -6
- package/dist/agent/input-processor/index.js +1 -1
- package/dist/agent/message-list/index.d.ts +5 -1
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/convert-file.d.ts +7 -0
- package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -0
- package/dist/agent/message-list/prompt/download-assets.d.ts +15 -0
- package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -0
- package/dist/agent/types.d.ts +11 -6
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/ai-tracing/context.d.ts.map +1 -1
- package/dist/ai-tracing/default.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +43 -31
- package/dist/ai-tracing/index.js +1 -1
- package/dist/ai-tracing/no-op.d.ts +0 -1
- package/dist/ai-tracing/no-op.d.ts.map +1 -1
- package/dist/ai-tracing/types.d.ts +0 -2
- package/dist/ai-tracing/types.d.ts.map +1 -1
- package/dist/ai-tracing/utils.d.ts +44 -8
- package/dist/ai-tracing/utils.d.ts.map +1 -1
- package/dist/{chunk-QA2TWVUS.cjs → chunk-5CJDO3UO.cjs} +292 -9
- package/dist/chunk-5CJDO3UO.cjs.map +1 -0
- package/dist/chunk-ABRPHTOG.cjs +108 -0
- package/dist/chunk-ABRPHTOG.cjs.map +1 -0
- package/dist/chunk-BJGHUKKM.js +103 -0
- package/dist/chunk-BJGHUKKM.js.map +1 -0
- package/dist/{chunk-BRNBKCHE.js → chunk-CKM2ESZF.js} +51 -26
- package/dist/chunk-CKM2ESZF.js.map +1 -0
- package/dist/{chunk-HHLPYCQG.cjs → chunk-DZADAEAF.cjs} +68 -22
- package/dist/chunk-DZADAEAF.cjs.map +1 -0
- package/dist/{chunk-VBAWR62U.cjs → chunk-F2CAC2R2.cjs} +54 -29
- package/dist/chunk-F2CAC2R2.cjs.map +1 -0
- package/dist/{chunk-C5C4PN54.js → chunk-F4SQXAXR.js} +292 -9
- package/dist/chunk-F4SQXAXR.js.map +1 -0
- package/dist/{chunk-UG3KS3XV.cjs → chunk-F6XWBVVG.cjs} +4 -4
- package/dist/{chunk-UG3KS3XV.cjs.map → chunk-F6XWBVVG.cjs.map} +1 -1
- package/dist/{chunk-WHEH32QU.cjs → chunk-FQRDHVZC.cjs} +4 -4
- package/dist/{chunk-WHEH32QU.cjs.map → chunk-FQRDHVZC.cjs.map} +1 -1
- package/dist/{chunk-4DKPMUAC.cjs → chunk-I7OAONIW.cjs} +259 -177
- package/dist/chunk-I7OAONIW.cjs.map +1 -0
- package/dist/{chunk-XOZ737RO.js → chunk-IODUKRQP.js} +3 -3
- package/dist/{chunk-XOZ737RO.js.map → chunk-IODUKRQP.js.map} +1 -1
- package/dist/{chunk-7OSUKFNG.cjs → chunk-KUNWELBC.cjs} +692 -507
- package/dist/chunk-KUNWELBC.cjs.map +1 -0
- package/dist/{chunk-WOTBMZCN.js → chunk-LOYT3WUA.js} +255 -176
- package/dist/chunk-LOYT3WUA.js.map +1 -0
- package/dist/{chunk-6VROHRAR.cjs → chunk-LVGGMWSE.cjs} +31 -8
- package/dist/chunk-LVGGMWSE.cjs.map +1 -0
- package/dist/{chunk-T64BA34G.js → chunk-OFPVAPUH.js} +4 -4
- package/dist/{chunk-T64BA34G.js.map → chunk-OFPVAPUH.js.map} +1 -1
- package/dist/{chunk-5NGEKEU7.js → chunk-P2IJ74UW.js} +661 -476
- package/dist/chunk-P2IJ74UW.js.map +1 -0
- package/dist/{chunk-QBNRMJAN.cjs → chunk-VVTB47UG.cjs} +6 -6
- package/dist/{chunk-QBNRMJAN.cjs.map → chunk-VVTB47UG.cjs.map} +1 -1
- package/dist/{chunk-HXYE4EJA.cjs → chunk-W5CF7DLB.cjs} +9 -9
- package/dist/{chunk-HXYE4EJA.cjs.map → chunk-W5CF7DLB.cjs.map} +1 -1
- package/dist/{chunk-FLXWZUIG.js → chunk-WWQ3QRPF.js} +27 -5
- package/dist/chunk-WWQ3QRPF.js.map +1 -0
- package/dist/{chunk-E3LAPNKY.js → chunk-XPFWOBV4.js} +4 -4
- package/dist/{chunk-E3LAPNKY.js.map → chunk-XPFWOBV4.js.map} +1 -1
- package/dist/{chunk-IYCG5OVT.js → chunk-YAWYQH3N.js} +3 -3
- package/dist/{chunk-IYCG5OVT.js.map → chunk-YAWYQH3N.js.map} +1 -1
- package/dist/{chunk-UT6KEZRF.js → chunk-YVIYEC6R.js} +62 -16
- package/dist/chunk-YVIYEC6R.js.map +1 -0
- package/dist/index.cjs +47 -43
- package/dist/index.js +10 -10
- package/dist/integration/index.cjs +3 -3
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.d.ts +2 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/model/base.types.d.ts +2 -2
- package/dist/llm/model/base.types.d.ts.map +1 -1
- package/dist/llm/model/model.d.ts +4 -4
- package/dist/llm/model/model.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/model.loop.types.d.ts +2 -0
- package/dist/llm/model/model.loop.types.d.ts.map +1 -1
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/loop.d.ts +1 -1
- package/dist/loop/loop.d.ts.map +1 -1
- package/dist/loop/types.d.ts +4 -0
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflow/llm-execution.d.ts +1 -1
- package/dist/loop/workflow/llm-execution.d.ts.map +1 -1
- package/dist/loop/workflow/stream.d.ts +1 -1
- package/dist/loop/workflow/stream.d.ts.map +1 -1
- package/dist/mastra/hooks.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +8 -3
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/network/index.cjs +4 -4
- package/dist/network/index.js +2 -2
- package/dist/network/vNext/index.cjs +14 -14
- package/dist/network/vNext/index.js +2 -2
- package/dist/processors/index.cjs +13 -11
- package/dist/processors/index.cjs.map +1 -1
- package/dist/processors/index.d.ts +4 -0
- package/dist/processors/index.d.ts.map +1 -1
- package/dist/processors/index.js +7 -5
- package/dist/processors/index.js.map +1 -1
- package/dist/processors/processors/moderation.d.ts +4 -0
- package/dist/processors/processors/moderation.d.ts.map +1 -1
- package/dist/processors/processors/pii-detector.d.ts +3 -0
- package/dist/processors/processors/pii-detector.d.ts.map +1 -1
- package/dist/processors/processors/prompt-injection-detector.d.ts +2 -0
- package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
- package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -0
- package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
- package/dist/processors/runner.d.ts +5 -4
- package/dist/processors/runner.d.ts.map +1 -1
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/base.d.ts +2 -0
- package/dist/scores/base.d.ts.map +1 -1
- package/dist/scores/hooks.d.ts +3 -1
- package/dist/scores/hooks.d.ts.map +1 -1
- package/dist/scores/index.cjs +27 -18
- package/dist/scores/index.cjs.map +1 -1
- package/dist/scores/index.js +23 -14
- package/dist/scores/index.js.map +1 -1
- package/dist/scores/run-experiment/index.d.ts +2 -0
- package/dist/scores/run-experiment/index.d.ts.map +1 -1
- package/dist/scores/types.d.ts +3 -0
- package/dist/scores/types.d.ts.map +1 -1
- package/dist/storage/index.cjs +3 -3
- package/dist/storage/index.js +1 -1
- package/dist/stream/aisdk/v5/compat/consume-stream.d.ts +8 -0
- package/dist/stream/aisdk/v5/compat/consume-stream.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/content.d.ts +7 -0
- package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts +23 -0
- package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/index.d.ts +8 -0
- package/dist/stream/aisdk/v5/compat/index.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/media.d.ts +91 -0
- package/dist/stream/aisdk/v5/compat/media.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +11 -0
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/ui-message.d.ts +20 -0
- package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/compat/validation.d.ts +17 -0
- package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/output.d.ts +1 -1
- package/dist/stream/base/output.d.ts +1 -1
- package/dist/stream/index.cjs +3 -3
- package/dist/stream/index.js +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tools/index.cjs +4 -4
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/tool.d.ts +3 -1
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/utils.cjs +20 -16
- package/dist/utils.d.ts +12 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/workflows/default.d.ts +13 -3
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/execution-engine.d.ts +2 -2
- package/dist/workflows/execution-engine.d.ts.map +1 -1
- package/dist/workflows/index.cjs +10 -10
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/dist/workflows/workflow.d.ts +8 -8
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-4DKPMUAC.cjs.map +0 -1
- package/dist/chunk-5NGEKEU7.js.map +0 -1
- package/dist/chunk-6VROHRAR.cjs.map +0 -1
- package/dist/chunk-7OSUKFNG.cjs.map +0 -1
- package/dist/chunk-BRNBKCHE.js.map +0 -1
- package/dist/chunk-C5C4PN54.js.map +0 -1
- package/dist/chunk-E4XQMNEI.cjs +0 -77
- package/dist/chunk-E4XQMNEI.cjs.map +0 -1
- package/dist/chunk-FLXWZUIG.js.map +0 -1
- package/dist/chunk-HHLPYCQG.cjs.map +0 -1
- package/dist/chunk-IVGAHFAJ.js +0 -72
- package/dist/chunk-IVGAHFAJ.js.map +0 -1
- package/dist/chunk-QA2TWVUS.cjs.map +0 -1
- package/dist/chunk-UT6KEZRF.js.map +0 -1
- package/dist/chunk-VBAWR62U.cjs.map +0 -1
- package/dist/chunk-WOTBMZCN.js.map +0 -1
- package/dist/stream/aisdk/v5/compat.d.ts +0 -73
- package/dist/stream/aisdk/v5/compat.d.ts.map +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/tools/validation.ts
|
|
4
|
+
function validateToolInput(schema, input, toolId) {
|
|
5
|
+
if (!schema || !("safeParse" in schema)) {
|
|
6
|
+
return { data: input };
|
|
7
|
+
}
|
|
8
|
+
const validationAttempts = [];
|
|
9
|
+
const directValidation = schema.safeParse(input);
|
|
10
|
+
validationAttempts.push({
|
|
11
|
+
result: directValidation,
|
|
12
|
+
data: input,
|
|
13
|
+
structure: "direct"
|
|
14
|
+
});
|
|
15
|
+
if (directValidation.success) {
|
|
16
|
+
return { data: input };
|
|
17
|
+
}
|
|
18
|
+
if (input && typeof input === "object" && "context" in input) {
|
|
19
|
+
const contextData = input.context;
|
|
20
|
+
const contextValidation = schema.safeParse(contextData);
|
|
21
|
+
validationAttempts.push({
|
|
22
|
+
result: contextValidation,
|
|
23
|
+
data: contextData,
|
|
24
|
+
structure: "context"
|
|
25
|
+
});
|
|
26
|
+
if (contextValidation.success) {
|
|
27
|
+
return { data: { ...input, context: contextValidation.data } };
|
|
28
|
+
}
|
|
29
|
+
if (contextData && typeof contextData === "object" && "inputData" in contextData) {
|
|
30
|
+
const inputDataValue = contextData.inputData;
|
|
31
|
+
const inputDataValidation = schema.safeParse(inputDataValue);
|
|
32
|
+
validationAttempts.push({
|
|
33
|
+
result: inputDataValidation,
|
|
34
|
+
data: inputDataValue,
|
|
35
|
+
structure: "inputData"
|
|
36
|
+
});
|
|
37
|
+
if (inputDataValidation.success) {
|
|
38
|
+
const contextKeys = Object.keys(contextData);
|
|
39
|
+
if (contextKeys.length === 1 && contextKeys[0] === "inputData") {
|
|
40
|
+
return { data: { ...input, context: { inputData: inputDataValidation.data } } };
|
|
41
|
+
} else {
|
|
42
|
+
return { data: inputDataValidation.data };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
let bestAttempt = validationAttempts[0];
|
|
48
|
+
for (const attempt of validationAttempts) {
|
|
49
|
+
if (!attempt.result.success && attempt.result.error.issues.length > 0) {
|
|
50
|
+
bestAttempt = attempt;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (bestAttempt && !bestAttempt.result.success) {
|
|
54
|
+
const errorMessages = bestAttempt.result.error.issues.map((e) => `- ${e.path?.join(".") || "root"}: ${e.message}`).join("\n");
|
|
55
|
+
const error = {
|
|
56
|
+
error: true,
|
|
57
|
+
message: `Tool validation failed${toolId ? ` for ${toolId}` : ""}. Please fix the following errors and try again:
|
|
58
|
+
${errorMessages}
|
|
59
|
+
|
|
60
|
+
Provided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,
|
|
61
|
+
validationErrors: bestAttempt.result.error.format()
|
|
62
|
+
};
|
|
63
|
+
return { data: input, error };
|
|
64
|
+
}
|
|
65
|
+
return { data: input };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/tools/tool.ts
|
|
69
|
+
var Tool = class {
|
|
70
|
+
id;
|
|
71
|
+
description;
|
|
72
|
+
inputSchema;
|
|
73
|
+
outputSchema;
|
|
74
|
+
execute;
|
|
75
|
+
mastra;
|
|
76
|
+
constructor(opts) {
|
|
77
|
+
this.id = opts.id;
|
|
78
|
+
this.description = opts.description;
|
|
79
|
+
this.inputSchema = opts.inputSchema;
|
|
80
|
+
this.outputSchema = opts.outputSchema;
|
|
81
|
+
this.mastra = opts.mastra;
|
|
82
|
+
if (opts.execute) {
|
|
83
|
+
const originalExecute = opts.execute;
|
|
84
|
+
this.execute = async (context, options) => {
|
|
85
|
+
const { data, error } = validateToolInput(this.inputSchema, context, this.id);
|
|
86
|
+
if (error) {
|
|
87
|
+
return error;
|
|
88
|
+
}
|
|
89
|
+
return originalExecute(data, options);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function createTool(opts) {
|
|
95
|
+
return new Tool(opts);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// src/tools/toolchecks.ts
|
|
99
|
+
function isVercelTool(tool) {
|
|
100
|
+
return !!(tool && !(tool instanceof Tool) && "parameters" in tool);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
exports.Tool = Tool;
|
|
104
|
+
exports.createTool = createTool;
|
|
105
|
+
exports.isVercelTool = isVercelTool;
|
|
106
|
+
exports.validateToolInput = validateToolInput;
|
|
107
|
+
//# sourceMappingURL=chunk-ABRPHTOG.cjs.map
|
|
108
|
+
//# sourceMappingURL=chunk-ABRPHTOG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-ABRPHTOG.cjs","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { ToolCallOptions } from 'ai-v5';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: ToolExecutionOptions | ToolCallOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// src/tools/validation.ts
|
|
2
|
+
function validateToolInput(schema, input, toolId) {
|
|
3
|
+
if (!schema || !("safeParse" in schema)) {
|
|
4
|
+
return { data: input };
|
|
5
|
+
}
|
|
6
|
+
const validationAttempts = [];
|
|
7
|
+
const directValidation = schema.safeParse(input);
|
|
8
|
+
validationAttempts.push({
|
|
9
|
+
result: directValidation,
|
|
10
|
+
data: input,
|
|
11
|
+
structure: "direct"
|
|
12
|
+
});
|
|
13
|
+
if (directValidation.success) {
|
|
14
|
+
return { data: input };
|
|
15
|
+
}
|
|
16
|
+
if (input && typeof input === "object" && "context" in input) {
|
|
17
|
+
const contextData = input.context;
|
|
18
|
+
const contextValidation = schema.safeParse(contextData);
|
|
19
|
+
validationAttempts.push({
|
|
20
|
+
result: contextValidation,
|
|
21
|
+
data: contextData,
|
|
22
|
+
structure: "context"
|
|
23
|
+
});
|
|
24
|
+
if (contextValidation.success) {
|
|
25
|
+
return { data: { ...input, context: contextValidation.data } };
|
|
26
|
+
}
|
|
27
|
+
if (contextData && typeof contextData === "object" && "inputData" in contextData) {
|
|
28
|
+
const inputDataValue = contextData.inputData;
|
|
29
|
+
const inputDataValidation = schema.safeParse(inputDataValue);
|
|
30
|
+
validationAttempts.push({
|
|
31
|
+
result: inputDataValidation,
|
|
32
|
+
data: inputDataValue,
|
|
33
|
+
structure: "inputData"
|
|
34
|
+
});
|
|
35
|
+
if (inputDataValidation.success) {
|
|
36
|
+
const contextKeys = Object.keys(contextData);
|
|
37
|
+
if (contextKeys.length === 1 && contextKeys[0] === "inputData") {
|
|
38
|
+
return { data: { ...input, context: { inputData: inputDataValidation.data } } };
|
|
39
|
+
} else {
|
|
40
|
+
return { data: inputDataValidation.data };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let bestAttempt = validationAttempts[0];
|
|
46
|
+
for (const attempt of validationAttempts) {
|
|
47
|
+
if (!attempt.result.success && attempt.result.error.issues.length > 0) {
|
|
48
|
+
bestAttempt = attempt;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (bestAttempt && !bestAttempt.result.success) {
|
|
52
|
+
const errorMessages = bestAttempt.result.error.issues.map((e) => `- ${e.path?.join(".") || "root"}: ${e.message}`).join("\n");
|
|
53
|
+
const error = {
|
|
54
|
+
error: true,
|
|
55
|
+
message: `Tool validation failed${toolId ? ` for ${toolId}` : ""}. Please fix the following errors and try again:
|
|
56
|
+
${errorMessages}
|
|
57
|
+
|
|
58
|
+
Provided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,
|
|
59
|
+
validationErrors: bestAttempt.result.error.format()
|
|
60
|
+
};
|
|
61
|
+
return { data: input, error };
|
|
62
|
+
}
|
|
63
|
+
return { data: input };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// src/tools/tool.ts
|
|
67
|
+
var Tool = class {
|
|
68
|
+
id;
|
|
69
|
+
description;
|
|
70
|
+
inputSchema;
|
|
71
|
+
outputSchema;
|
|
72
|
+
execute;
|
|
73
|
+
mastra;
|
|
74
|
+
constructor(opts) {
|
|
75
|
+
this.id = opts.id;
|
|
76
|
+
this.description = opts.description;
|
|
77
|
+
this.inputSchema = opts.inputSchema;
|
|
78
|
+
this.outputSchema = opts.outputSchema;
|
|
79
|
+
this.mastra = opts.mastra;
|
|
80
|
+
if (opts.execute) {
|
|
81
|
+
const originalExecute = opts.execute;
|
|
82
|
+
this.execute = async (context, options) => {
|
|
83
|
+
const { data, error } = validateToolInput(this.inputSchema, context, this.id);
|
|
84
|
+
if (error) {
|
|
85
|
+
return error;
|
|
86
|
+
}
|
|
87
|
+
return originalExecute(data, options);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
function createTool(opts) {
|
|
93
|
+
return new Tool(opts);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// src/tools/toolchecks.ts
|
|
97
|
+
function isVercelTool(tool) {
|
|
98
|
+
return !!(tool && !(tool instanceof Tool) && "parameters" in tool);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { Tool, createTool, isVercelTool, validateToolInput };
|
|
102
|
+
//# sourceMappingURL=chunk-BJGHUKKM.js.map
|
|
103
|
+
//# sourceMappingURL=chunk-BJGHUKKM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-BJGHUKKM.js","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { ToolCallOptions } from 'ai-v5';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: ToolExecutionOptions | ToolCallOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isZodType, delay } from './chunk-
|
|
1
|
+
import { isZodType, delay } from './chunk-WWQ3QRPF.js';
|
|
2
2
|
import { MastraError } from './chunk-MCOVMKIS.js';
|
|
3
3
|
import { MastraBase } from './chunk-6GF5M4GX.js';
|
|
4
4
|
import { OpenAIReasoningSchemaCompatLayer, OpenAISchemaCompatLayer, GoogleSchemaCompatLayer, AnthropicSchemaCompatLayer, DeepSeekSchemaCompatLayer, MetaSchemaCompatLayer, applyCompatLayer } from '@mastra/schema-compat';
|
|
@@ -63,8 +63,9 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
63
63
|
mode: "aiSdkSchema"
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
_startAISpan(
|
|
67
|
-
|
|
66
|
+
_startAISpan(params) {
|
|
67
|
+
const { model, tracingContext, name, streaming, options } = params;
|
|
68
|
+
return tracingContext.currentSpan?.createChildSpan({
|
|
68
69
|
name,
|
|
69
70
|
type: "llm_generation" /* LLM_GENERATION */,
|
|
70
71
|
input: options.prompt,
|
|
@@ -83,15 +84,21 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
83
84
|
}
|
|
84
85
|
});
|
|
85
86
|
}
|
|
86
|
-
_wrapModel(model,
|
|
87
|
-
if (!
|
|
87
|
+
_wrapModel(model, tracingContext) {
|
|
88
|
+
if (!tracingContext.currentSpan) {
|
|
88
89
|
return model;
|
|
89
90
|
}
|
|
90
91
|
const wrappedDoGenerate = async (options) => {
|
|
91
|
-
const llmSpan = this._startAISpan(
|
|
92
|
+
const llmSpan = this._startAISpan({
|
|
93
|
+
model,
|
|
94
|
+
tracingContext,
|
|
95
|
+
name: `llm generate: '${model.modelId}'`,
|
|
96
|
+
streaming: false,
|
|
97
|
+
options
|
|
98
|
+
});
|
|
92
99
|
try {
|
|
93
100
|
const result = await model.doGenerate(options);
|
|
94
|
-
llmSpan
|
|
101
|
+
llmSpan?.end({
|
|
95
102
|
output: result.text,
|
|
96
103
|
attributes: {
|
|
97
104
|
usage: result.usage ? {
|
|
@@ -102,12 +109,18 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
102
109
|
});
|
|
103
110
|
return result;
|
|
104
111
|
} catch (error) {
|
|
105
|
-
llmSpan
|
|
112
|
+
llmSpan?.error({ error });
|
|
106
113
|
throw error;
|
|
107
114
|
}
|
|
108
115
|
};
|
|
109
116
|
const wrappedDoStream = async (options) => {
|
|
110
|
-
const llmSpan = this._startAISpan(
|
|
117
|
+
const llmSpan = this._startAISpan({
|
|
118
|
+
model,
|
|
119
|
+
tracingContext,
|
|
120
|
+
name: `llm stream: '${model.modelId}'`,
|
|
121
|
+
streaming: true,
|
|
122
|
+
options
|
|
123
|
+
});
|
|
111
124
|
try {
|
|
112
125
|
const result = await model.doStream(options);
|
|
113
126
|
const originalStream = result.stream;
|
|
@@ -117,6 +130,16 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
117
130
|
new TransformStream({
|
|
118
131
|
// this gets called on each chunk output
|
|
119
132
|
transform(chunk, controller) {
|
|
133
|
+
if (chunk.type === "text-delta") {
|
|
134
|
+
llmSpan?.createEventSpan({
|
|
135
|
+
type: "llm_chunk" /* LLM_CHUNK */,
|
|
136
|
+
name: `llm chunk: ${chunk.type}`,
|
|
137
|
+
output: chunk.textDelta,
|
|
138
|
+
attributes: {
|
|
139
|
+
chunkType: chunk.type
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
120
143
|
if (chunk.type === "finish") {
|
|
121
144
|
finishReason = chunk.finishReason;
|
|
122
145
|
finalUsage = chunk.usage;
|
|
@@ -125,7 +148,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
125
148
|
},
|
|
126
149
|
// this gets called at the end of the stream
|
|
127
150
|
flush() {
|
|
128
|
-
llmSpan
|
|
151
|
+
llmSpan?.end({
|
|
129
152
|
attributes: {
|
|
130
153
|
usage: finalUsage ? {
|
|
131
154
|
promptTokens: finalUsage.promptTokens,
|
|
@@ -145,15 +168,17 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
145
168
|
stream: wrappedStream
|
|
146
169
|
};
|
|
147
170
|
} catch (error) {
|
|
148
|
-
llmSpan
|
|
171
|
+
llmSpan?.error({ error });
|
|
149
172
|
throw error;
|
|
150
173
|
}
|
|
151
174
|
};
|
|
152
|
-
return {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
175
|
+
return new Proxy(model, {
|
|
176
|
+
get(target, prop) {
|
|
177
|
+
if (prop === "doGenerate") return wrappedDoGenerate;
|
|
178
|
+
if (prop === "doStream") return wrappedDoStream;
|
|
179
|
+
return target[prop];
|
|
180
|
+
}
|
|
181
|
+
});
|
|
157
182
|
}
|
|
158
183
|
async __text({
|
|
159
184
|
runId,
|
|
@@ -168,7 +193,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
168
193
|
threadId,
|
|
169
194
|
resourceId,
|
|
170
195
|
runtimeContext,
|
|
171
|
-
|
|
196
|
+
tracingContext,
|
|
172
197
|
...rest
|
|
173
198
|
}) {
|
|
174
199
|
const model = this.#model;
|
|
@@ -207,7 +232,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
207
232
|
const argsForExecute = {
|
|
208
233
|
...rest,
|
|
209
234
|
messages,
|
|
210
|
-
model: this._wrapModel(model,
|
|
235
|
+
model: this._wrapModel(model, tracingContext),
|
|
211
236
|
temperature,
|
|
212
237
|
tools: {
|
|
213
238
|
...tools
|
|
@@ -293,7 +318,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
293
318
|
threadId,
|
|
294
319
|
resourceId,
|
|
295
320
|
runtimeContext,
|
|
296
|
-
|
|
321
|
+
tracingContext,
|
|
297
322
|
...rest
|
|
298
323
|
}) {
|
|
299
324
|
const model = this.#model;
|
|
@@ -308,7 +333,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
308
333
|
const argsForExecute = {
|
|
309
334
|
...rest,
|
|
310
335
|
messages,
|
|
311
|
-
model: this._wrapModel(model,
|
|
336
|
+
model: this._wrapModel(model, tracingContext),
|
|
312
337
|
// @ts-expect-error - output in our implementation can only be object or array
|
|
313
338
|
output,
|
|
314
339
|
schema: processedSchema,
|
|
@@ -373,7 +398,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
373
398
|
threadId,
|
|
374
399
|
resourceId,
|
|
375
400
|
runtimeContext,
|
|
376
|
-
|
|
401
|
+
tracingContext,
|
|
377
402
|
...rest
|
|
378
403
|
}) {
|
|
379
404
|
const model = this.#model;
|
|
@@ -400,7 +425,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
400
425
|
}
|
|
401
426
|
}
|
|
402
427
|
const argsForExecute = {
|
|
403
|
-
model: this._wrapModel(model,
|
|
428
|
+
model: this._wrapModel(model, tracingContext),
|
|
404
429
|
temperature,
|
|
405
430
|
tools: {
|
|
406
431
|
...tools
|
|
@@ -523,7 +548,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
523
548
|
onFinish,
|
|
524
549
|
structuredOutput,
|
|
525
550
|
telemetry,
|
|
526
|
-
|
|
551
|
+
tracingContext,
|
|
527
552
|
...rest
|
|
528
553
|
}) {
|
|
529
554
|
const model = this.#model;
|
|
@@ -540,7 +565,7 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
540
565
|
const processedSchema = this._applySchemaCompat(structuredOutput);
|
|
541
566
|
const argsForExecute = {
|
|
542
567
|
...rest,
|
|
543
|
-
model: this._wrapModel(model,
|
|
568
|
+
model: this._wrapModel(model, tracingContext),
|
|
544
569
|
onFinish: async (props) => {
|
|
545
570
|
try {
|
|
546
571
|
await onFinish?.({ ...props, runId });
|
|
@@ -689,5 +714,5 @@ var MastraLLMV1 = class extends MastraBase {
|
|
|
689
714
|
};
|
|
690
715
|
|
|
691
716
|
export { MastraLLMV1 };
|
|
692
|
-
//# sourceMappingURL=chunk-
|
|
693
|
-
//# sourceMappingURL=chunk-
|
|
717
|
+
//# sourceMappingURL=chunk-CKM2ESZF.js.map
|
|
718
|
+
//# sourceMappingURL=chunk-CKM2ESZF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/model.ts"],"names":[],"mappings":"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","file":"chunk-CKM2ESZF.js","sourcesContent":["import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport {\n AnthropicSchemaCompatLayer,\n applyCompatLayer,\n DeepSeekSchemaCompatLayer,\n GoogleSchemaCompatLayer,\n MetaSchemaCompatLayer,\n OpenAIReasoningSchemaCompatLayer,\n OpenAISchemaCompatLayer,\n} from '@mastra/schema-compat';\nimport type { CoreMessage, LanguageModel, Schema, StreamObjectOnFinishCallback, StreamTextOnFinishCallback } from 'ai';\nimport { generateObject, generateText, jsonSchema, Output, streamObject, streamText } from 'ai';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { ZodSchema } from 'zod';\nimport { z } from 'zod';\n\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { MastraPrimitives } from '../../action';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AnyAISpan, TracingContext } from '../../ai-tracing';\nimport { MastraBase } from '../../base';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport { delay, isZodType } from '../../utils';\n\nimport type {\n GenerateObjectWithMessagesArgs,\n GenerateTextResult,\n GenerateObjectResult,\n GenerateTextWithMessagesArgs,\n OriginalGenerateTextOptions,\n ToolSet,\n GenerateReturn,\n OriginalGenerateObjectOptions,\n StreamTextWithMessagesArgs,\n StreamTextResult,\n OriginalStreamTextOptions,\n StreamObjectWithMessagesArgs,\n OriginalStreamObjectOptions,\n StreamObjectResult,\n StreamReturn,\n} from './base.types';\nimport type { inferOutput } from './shared.types';\n\nexport class MastraLLMV1 extends MastraBase {\n #model: LanguageModel;\n #mastra?: Mastra;\n\n constructor({ model, mastra }: { model: LanguageModel; mastra?: Mastra }) {\n super({ name: 'aisdk' });\n\n this.#model = model;\n\n if (mastra) {\n this.#mastra = mastra;\n if (mastra.getLogger()) {\n this.__setLogger(this.#mastra.getLogger());\n }\n }\n }\n\n __registerPrimitives(p: MastraPrimitives) {\n if (p.telemetry) {\n this.__setTelemetry(p.telemetry);\n }\n\n if (p.logger) {\n this.__setLogger(p.logger);\n }\n }\n\n __registerMastra(p: Mastra) {\n this.#mastra = p;\n }\n\n getProvider() {\n return this.#model.provider;\n }\n\n getModelId() {\n return this.#model.modelId;\n }\n\n getModel() {\n return this.#model;\n }\n\n private _applySchemaCompat(schema: ZodSchema | JSONSchema7): Schema {\n const model = this.#model;\n\n const schemaCompatLayers = [];\n\n if (model) {\n const modelInfo = {\n modelId: model.modelId,\n supportsStructuredOutputs: model.supportsStructuredOutputs ?? false,\n provider: model.provider,\n };\n schemaCompatLayers.push(\n new OpenAIReasoningSchemaCompatLayer(modelInfo),\n new OpenAISchemaCompatLayer(modelInfo),\n new GoogleSchemaCompatLayer(modelInfo),\n new AnthropicSchemaCompatLayer(modelInfo),\n new DeepSeekSchemaCompatLayer(modelInfo),\n new MetaSchemaCompatLayer(modelInfo),\n );\n }\n\n return applyCompatLayer({\n schema: schema as any,\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n }\n\n private _startAISpan(params: {\n model: LanguageModel;\n tracingContext: TracingContext;\n name: string;\n streaming: boolean;\n options: any;\n }): AnyAISpan | undefined {\n const { model, tracingContext, name, streaming, options } = params;\n return tracingContext.currentSpan?.createChildSpan({\n name,\n type: AISpanType.LLM_GENERATION,\n input: options.prompt,\n attributes: {\n model: model.modelId,\n provider: model.provider,\n parameters: {\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n topP: options.topP,\n frequencyPenalty: options.frequencyPenalty,\n presencePenalty: options.presencePenalty,\n stop: options.stop,\n },\n streaming,\n },\n });\n }\n\n private _wrapModel(model: LanguageModel, tracingContext: TracingContext): LanguageModel {\n if (!tracingContext.currentSpan) {\n return model;\n }\n\n const wrappedDoGenerate = async (options: any) => {\n const llmSpan = this._startAISpan({\n model,\n tracingContext,\n name: `llm generate: '${model.modelId}'`,\n streaming: false,\n options,\n });\n\n try {\n const result = await model.doGenerate(options);\n\n llmSpan?.end({\n output: result.text,\n attributes: {\n usage: result.usage\n ? {\n promptTokens: result.usage.promptTokens,\n completionTokens: result.usage.completionTokens,\n }\n : undefined,\n },\n });\n return result;\n } catch (error) {\n llmSpan?.error({ error: error as Error });\n throw error;\n }\n };\n\n const wrappedDoStream = async (options: any) => {\n const llmSpan = this._startAISpan({\n model,\n tracingContext,\n name: `llm stream: '${model.modelId}'`,\n streaming: true,\n options,\n });\n\n try {\n const result = await model.doStream(options);\n\n // Create a wrapped stream that tracks the final result\n const originalStream = result.stream;\n let finishReason: LanguageModelV1FinishReason;\n let finalUsage: any = null;\n\n const wrappedStream = originalStream.pipeThrough(\n new TransformStream({\n // this gets called on each chunk output\n transform(chunk, controller) {\n // Create event spans for text chunks\n if (chunk.type === 'text-delta') {\n llmSpan?.createEventSpan({\n type: AISpanType.LLM_CHUNK,\n name: `llm chunk: ${chunk.type}`,\n output: chunk.textDelta,\n attributes: {\n chunkType: chunk.type,\n },\n });\n }\n\n //TODO: Figure out how to get the final usage\n // if (chunk.type === 'response-metadata' && chunk.usage) {\n // finalUsage = chunk.usage;\n // }\n if (chunk.type === 'finish') {\n finishReason = chunk.finishReason;\n finalUsage = chunk.usage;\n }\n controller.enqueue(chunk);\n },\n // this gets called at the end of the stream\n flush() {\n llmSpan?.end({\n attributes: {\n usage: finalUsage\n ? {\n promptTokens: finalUsage.promptTokens,\n completionTokens: finalUsage.completionTokens,\n totalTokens: finalUsage.totalTokens,\n }\n : undefined,\n },\n metadata: {\n finishReason,\n },\n });\n },\n }),\n );\n\n return {\n ...result,\n stream: wrappedStream,\n };\n } catch (error) {\n llmSpan?.error({ error: error as Error });\n throw error;\n }\n };\n\n // Create a proper proxy to preserve all model properties including getters/setters\n return new Proxy(model, {\n get(target, prop) {\n if (prop === 'doGenerate') return wrappedDoGenerate;\n if (prop === 'doStream') return wrappedDoStream;\n return target[prop as keyof typeof target];\n },\n });\n }\n\n async __text<Tools extends ToolSet, Z extends ZodSchema | JSONSchema7 | undefined>({\n runId,\n messages,\n maxSteps = 5,\n tools = {},\n temperature,\n toolChoice = 'auto',\n onStepFinish,\n experimental_output,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n tracingContext,\n ...rest\n }: GenerateTextWithMessagesArgs<Tools, Z>): Promise<GenerateTextResult<Tools, Z>> {\n const model = this.#model;\n\n this.logger.debug(`[LLM] - Generating text`, {\n runId,\n messages,\n maxSteps,\n threadId,\n resourceId,\n tools: Object.keys(tools),\n });\n\n let schema: z.ZodType<inferOutput<Z>> | Schema<inferOutput<Z>> | undefined = undefined;\n\n if (experimental_output) {\n this.logger.debug('[LLM] - Using experimental output', {\n runId,\n });\n\n if (isZodType(experimental_output)) {\n schema = experimental_output as z.ZodType<inferOutput<Z>>;\n if (schema instanceof z.ZodArray) {\n schema = schema._def.type as z.ZodType<inferOutput<Z>>;\n }\n\n let jsonSchemaToUse;\n if ('toJSONSchema' in z) {\n // Use dynamic property access to avoid import errors in Zod v3\n // @ts-ignore\n jsonSchemaToUse = (z as any)['toJSONSchema'](schema) as JSONSchema7;\n } else {\n jsonSchemaToUse = zodToJsonSchema(schema, {\n $refStrategy: 'none',\n target: 'jsonSchema7',\n }) as JSONSchema7;\n }\n\n schema = jsonSchema(jsonSchemaToUse) as Schema<inferOutput<Z>>;\n } else {\n schema = jsonSchema(experimental_output as JSONSchema7) as Schema<inferOutput<Z>>;\n }\n }\n\n const argsForExecute: OriginalGenerateTextOptions<Tools, Z> = {\n ...rest,\n messages,\n model: this._wrapModel(model, tracingContext),\n temperature,\n tools: {\n ...(tools as Tools),\n },\n toolChoice,\n maxSteps,\n onStepFinish: async props => {\n try {\n await onStepFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_TEXT_ON_STEP_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Text Step Change:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n });\n\n if (\n props?.response?.headers?.['x-ratelimit-remaining-tokens'] &&\n parseInt(props?.response?.headers?.['x-ratelimit-remaining-tokens'], 10) < 2000\n ) {\n this.logger.warn('Rate limit approaching, waiting 10 seconds', { runId });\n await delay(10 * 1000);\n }\n },\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n experimental_output: schema\n ? Output.object({\n schema,\n })\n : undefined,\n };\n\n try {\n const result: GenerateTextResult<Tools, Z> = await generateText(argsForExecute);\n\n if (schema && result.finishReason === 'stop') {\n result.object = (result as any).experimental_output;\n }\n\n return result;\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_TEXT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n async __textObject<Z extends ZodSchema | JSONSchema7>({\n messages,\n structuredOutput,\n runId,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n tracingContext,\n ...rest\n }: GenerateObjectWithMessagesArgs<Z>): Promise<GenerateObjectResult<Z>> {\n const model = this.#model;\n\n this.logger.debug(`[LLM] - Generating a text object`, { runId });\n\n try {\n let output: 'object' | 'array' = 'object';\n if (structuredOutput instanceof z.ZodArray) {\n output = 'array';\n structuredOutput = structuredOutput._def.type;\n }\n\n const processedSchema = this._applySchemaCompat(structuredOutput!);\n\n const argsForExecute: OriginalGenerateObjectOptions<Z> = {\n ...rest,\n messages,\n model: this._wrapModel(model, tracingContext),\n // @ts-expect-error - output in our implementation can only be object or array\n output,\n schema: processedSchema as Schema<Z>,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n };\n\n try {\n // @ts-expect-error - output in our implementation can only be object or array\n return await generateObject(argsForExecute);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_OBJECT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n } catch (e: unknown) {\n if (e instanceof MastraError) {\n throw e;\n }\n\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_OBJECT_AI_SDK_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n __stream<Tools extends ToolSet, Z extends ZodSchema | JSONSchema7 | undefined = undefined>({\n messages,\n onStepFinish,\n onFinish,\n maxSteps = 5,\n tools = {},\n runId,\n temperature,\n toolChoice = 'auto',\n experimental_output,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n tracingContext,\n ...rest\n }: StreamTextWithMessagesArgs<Tools, Z>): StreamTextResult<Tools, Z> {\n const model = this.#model;\n this.logger.debug(`[LLM] - Streaming text`, {\n runId,\n threadId,\n resourceId,\n messages,\n maxSteps,\n tools: Object.keys(tools || {}),\n });\n\n let schema: z.ZodType<Z> | Schema<Z> | undefined;\n if (experimental_output) {\n this.logger.debug('[LLM] - Using experimental output', {\n runId,\n });\n if (typeof (experimental_output as any).parse === 'function') {\n schema = experimental_output as z.ZodType<Z>;\n if (schema instanceof z.ZodArray) {\n schema = schema._def.type as z.ZodType<Z>;\n }\n } else {\n schema = jsonSchema(experimental_output as JSONSchema7) as Schema<Z>;\n }\n }\n\n const argsForExecute: OriginalStreamTextOptions<Tools, Z> = {\n model: this._wrapModel(model, tracingContext),\n temperature,\n tools: {\n ...(tools as Tools),\n },\n maxSteps,\n toolChoice,\n onStepFinish: async props => {\n try {\n await onStepFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_ON_STEP_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Stream Step Change:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n });\n\n if (\n props?.response?.headers?.['x-ratelimit-remaining-tokens'] &&\n parseInt(props?.response?.headers?.['x-ratelimit-remaining-tokens'], 10) < 2000\n ) {\n this.logger.warn('Rate limit approaching, waiting 10 seconds', { runId });\n await delay(10 * 1000);\n }\n },\n onFinish: async props => {\n try {\n await onFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_ON_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Stream Finished:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n threadId,\n resourceId,\n });\n },\n ...rest,\n messages,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n experimental_output: schema\n ? (Output.object({\n schema,\n }) as any)\n : undefined,\n };\n\n try {\n return streamText(argsForExecute);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_TEXT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n __streamObject<T extends ZodSchema | JSONSchema7>({\n messages,\n runId,\n runtimeContext,\n threadId,\n resourceId,\n onFinish,\n structuredOutput,\n telemetry,\n tracingContext,\n ...rest\n }: StreamObjectWithMessagesArgs<T>): StreamObjectResult<T> {\n const model = this.#model;\n this.logger.debug(`[LLM] - Streaming structured output`, {\n runId,\n messages,\n });\n\n try {\n let output: 'object' | 'array' = 'object';\n if (structuredOutput instanceof z.ZodArray) {\n output = 'array';\n structuredOutput = structuredOutput._def.type;\n }\n\n const processedSchema = this._applySchemaCompat(structuredOutput!);\n\n const argsForExecute: OriginalStreamObjectOptions<T> = {\n ...rest,\n model: this._wrapModel(model, tracingContext),\n onFinish: async props => {\n try {\n // @ts-expect-error - onFinish is not inferred correctly\n await onFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_ON_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n toolCalls: '',\n toolResults: '',\n finishReason: '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Object Stream Finished:', {\n usage: props?.usage,\n runId,\n threadId,\n resourceId,\n });\n },\n messages,\n // @ts-expect-error - output in our implementation can only be object or array\n output,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n schema: processedSchema as Schema<inferOutput<T>>,\n };\n\n try {\n return streamObject(argsForExecute as any);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n } catch (e: unknown) {\n if (e instanceof MastraError) {\n throw e;\n }\n\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_AI_SDK_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n convertToMessages(messages: string | string[] | CoreMessage[]): CoreMessage[] {\n if (Array.isArray(messages)) {\n return messages.map(m => {\n if (typeof m === 'string') {\n return {\n role: 'user',\n content: m,\n };\n }\n return m;\n });\n }\n\n return [\n {\n role: 'user',\n content: messages,\n },\n ];\n }\n\n async generate<\n Output extends ZodSchema | JSONSchema7 | undefined = undefined,\n StructuredOutput extends ZodSchema | JSONSchema7 | undefined = undefined,\n Tools extends ToolSet = ToolSet,\n >(\n messages: string | string[] | CoreMessage[],\n {\n output,\n ...rest\n }: Omit<\n Output extends undefined\n ? GenerateTextWithMessagesArgs<Tools, StructuredOutput>\n : Omit<GenerateObjectWithMessagesArgs<NonNullable<Output>>, 'structuredOutput' | 'output'>,\n 'messages'\n > & { output?: Output },\n ): Promise<GenerateReturn<Tools, Output, StructuredOutput>> {\n const msgs = this.convertToMessages(messages);\n\n if (!output) {\n const { maxSteps, onStepFinish, ...textOptions } = rest as Omit<\n GenerateTextWithMessagesArgs<Tools, StructuredOutput>,\n 'messages'\n >;\n return (await this.__text<Tools, StructuredOutput>({\n messages: msgs,\n maxSteps,\n onStepFinish,\n ...textOptions,\n })) as unknown as GenerateReturn<Tools, Output, StructuredOutput>;\n }\n\n return (await this.__textObject({\n messages: msgs,\n structuredOutput: output as NonNullable<Output>,\n ...rest,\n })) as unknown as GenerateReturn<Tools, Output, StructuredOutput>;\n }\n\n stream<\n Output extends ZodSchema | JSONSchema7 | undefined = undefined,\n StructuredOutput extends ZodSchema | JSONSchema7 | undefined = undefined,\n Tools extends ToolSet = ToolSet,\n >(\n messages: string | string[] | CoreMessage[],\n {\n maxSteps = 5,\n output,\n onFinish,\n ...rest\n }: Omit<\n Output extends undefined\n ? StreamTextWithMessagesArgs<Tools, StructuredOutput>\n : Omit<StreamObjectWithMessagesArgs<NonNullable<Output>>, 'structuredOutput' | 'output'> & { maxSteps?: never },\n 'messages'\n > & { output?: Output },\n ): StreamReturn<Tools, Output, StructuredOutput> {\n const msgs = this.convertToMessages(messages);\n\n if (!output) {\n return this.__stream({\n messages: msgs,\n maxSteps,\n onFinish: onFinish as StreamTextOnFinishCallback<Tools> | undefined,\n ...rest,\n }) as unknown as StreamReturn<Tools, Output, StructuredOutput>;\n }\n\n return this.__streamObject({\n messages: msgs,\n structuredOutput: output as NonNullable<Output>,\n onFinish: onFinish as StreamObjectOnFinishCallback<inferOutput<Output>> | undefined,\n ...rest,\n }) as unknown as StreamReturn<Tools, Output, StructuredOutput>;\n }\n}\n"]}
|