@mastra/core 0.15.3-alpha.2 → 0.15.3-alpha.3
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/index.cjs +11 -11
- 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/{chunk-6VROHRAR.cjs → chunk-24TFSB6Z.cjs} +30 -7
- package/dist/chunk-24TFSB6Z.cjs.map +1 -0
- package/dist/{chunk-BRNBKCHE.js → chunk-5TFCIXWE.js} +10 -8
- package/dist/chunk-5TFCIXWE.js.map +1 -0
- package/dist/{chunk-UT6KEZRF.js → chunk-APVV75XG.js} +3 -3
- package/dist/{chunk-UT6KEZRF.js.map → chunk-APVV75XG.js.map} +1 -1
- package/dist/{chunk-HHLPYCQG.cjs → chunk-AYFN43FB.cjs} +4 -4
- package/dist/{chunk-HHLPYCQG.cjs.map → chunk-AYFN43FB.cjs.map} +1 -1
- package/dist/{chunk-5NGEKEU7.js → chunk-BGOXFBFK.js} +288 -275
- package/dist/chunk-BGOXFBFK.js.map +1 -0
- package/dist/{chunk-HXYE4EJA.cjs → chunk-D2GH2HAK.cjs} +9 -9
- package/dist/{chunk-HXYE4EJA.cjs.map → chunk-D2GH2HAK.cjs.map} +1 -1
- package/dist/{chunk-7OSUKFNG.cjs → chunk-DJKIK6ZB.cjs} +319 -306
- package/dist/chunk-DJKIK6ZB.cjs.map +1 -0
- package/dist/{chunk-XOZ737RO.js → chunk-EMAAAVRA.js} +3 -3
- package/dist/{chunk-XOZ737RO.js.map → chunk-EMAAAVRA.js.map} +1 -1
- package/dist/chunk-GOG77M6R.js +103 -0
- package/dist/chunk-GOG77M6R.js.map +1 -0
- package/dist/{chunk-UG3KS3XV.cjs → chunk-HXEHQLBD.cjs} +4 -4
- package/dist/{chunk-UG3KS3XV.cjs.map → chunk-HXEHQLBD.cjs.map} +1 -1
- package/dist/{chunk-IYCG5OVT.js → chunk-MEROMP3Z.js} +3 -3
- package/dist/{chunk-IYCG5OVT.js.map → chunk-MEROMP3Z.js.map} +1 -1
- package/dist/{chunk-C5C4PN54.js → chunk-O7IQL4DX.js} +288 -5
- package/dist/chunk-O7IQL4DX.js.map +1 -0
- package/dist/{chunk-VBAWR62U.cjs → chunk-QHEB6ZLO.cjs} +13 -11
- package/dist/chunk-QHEB6ZLO.cjs.map +1 -0
- package/dist/{chunk-T64BA34G.js → chunk-TQRLZH64.js} +4 -4
- package/dist/{chunk-T64BA34G.js.map → chunk-TQRLZH64.js.map} +1 -1
- package/dist/{chunk-QA2TWVUS.cjs → chunk-TWNFR6MQ.cjs} +288 -5
- package/dist/chunk-TWNFR6MQ.cjs.map +1 -0
- package/dist/{chunk-WHEH32QU.cjs → chunk-UGN2UU3K.cjs} +4 -4
- package/dist/{chunk-WHEH32QU.cjs.map → chunk-UGN2UU3K.cjs.map} +1 -1
- package/dist/{chunk-E3LAPNKY.js → chunk-WUQSFK7W.js} +4 -4
- package/dist/{chunk-E3LAPNKY.js.map → chunk-WUQSFK7W.js.map} +1 -1
- package/dist/{chunk-QBNRMJAN.cjs → chunk-YTVX52NU.cjs} +6 -6
- package/dist/{chunk-QBNRMJAN.cjs.map → chunk-YTVX52NU.cjs.map} +1 -1
- package/dist/chunk-ZAJTIZZF.cjs +108 -0
- package/dist/chunk-ZAJTIZZF.cjs.map +1 -0
- package/dist/{chunk-FLXWZUIG.js → chunk-ZC64CG7J.js} +26 -4
- package/dist/chunk-ZC64CG7J.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/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/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/types.d.ts +2 -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/mastra/index.cjs +2 -2
- 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 +8 -8
- package/dist/processors/index.js +2 -2
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +5 -5
- package/dist/scores/index.js +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/validation.d.ts.map +1 -1
- package/dist/utils.cjs +20 -16
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +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/package.json +1 -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-IVGAHFAJ.js +0 -72
- package/dist/chunk-IVGAHFAJ.js.map +0 -1
- package/dist/chunk-QA2TWVUS.cjs.map +0 -1
- package/dist/chunk-VBAWR62U.cjs.map +0 -1
- package/dist/stream/aisdk/v5/compat.d.ts +0 -73
- package/dist/stream/aisdk/v5/compat.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createTool } from './chunk-
|
|
1
|
+
import { createTool } from './chunk-GOG77M6R.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
// src/integration/integration.ts
|
|
@@ -86,5 +86,5 @@ var OpenAPIToolset = class {
|
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
export { Integration, OpenAPIToolset };
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-EMAAAVRA.js.map
|
|
90
|
+
//# sourceMappingURL=chunk-EMAAAVRA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/integration/integration.ts","../src/integration/openapi-toolset.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/integration/integration.ts","../src/integration/openapi-toolset.ts"],"names":[],"mappings":"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","file":"chunk-EMAAAVRA.js","sourcesContent":["import type { ToolAction } from '../tools';\nimport type { Workflow } from '../workflows';\n\nexport class Integration<ToolsParams = void, ApiClient = void> {\n name: string = 'Integration';\n private workflows: Record<string, Workflow>;\n\n constructor() {\n this.workflows = {};\n }\n\n /**\n * Workflows\n */\n\n registerWorkflow(name: string, fn: Workflow) {\n if (this.workflows[name]) {\n throw new Error(`Sync function \"${name}\" already registered`);\n }\n this.workflows[name] = fn;\n }\n\n public getWorkflows({ serialized }: { serialized?: boolean }): Record<string, Workflow> {\n if (serialized) {\n return Object.entries(this.workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: {\n name: v.name,\n },\n };\n }, {});\n }\n return this.workflows;\n }\n\n /**\n * TOOLS\n */\n getStaticTools(_params?: ToolsParams): Record<string, ToolAction<any, any, any>> {\n throw new Error('Method not implemented.');\n }\n\n async getTools(_params?: ToolsParams): Promise<Record<string, ToolAction<any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n\n async getApiClient(): Promise<ApiClient> {\n throw new Error('Method not implemented');\n }\n}\n","import { z } from 'zod';\n\nimport { createTool } from '../tools';\nimport type { ToolAction } from '../tools';\n\nexport abstract class OpenAPIToolset {\n abstract readonly name: string;\n abstract readonly tools: Record<string, ToolAction<any, any, any>>;\n\n authType: string = 'API_KEY';\n\n constructor() {}\n\n protected get toolSchemas(): any {\n return {};\n }\n\n protected get toolDocumentations(): Record<string, { comment: string; doc?: string }> {\n return {};\n }\n\n protected get baseClient(): any {\n return {};\n }\n\n async getApiClient(): Promise<any> {\n throw new Error('API not implemented');\n }\n\n protected _generateIntegrationTools<T>() {\n const { client: _client, ...clientMethods } = this.baseClient;\n const schemas = this.toolSchemas;\n const documentations = this.toolDocumentations;\n\n const tools = Object.keys(clientMethods).reduce((acc, key) => {\n const comment = documentations[key]?.comment;\n // const doc = documentations[key]?.doc;\n const fallbackComment = `Execute ${key}`;\n\n const tool = createTool({\n id: key,\n inputSchema: schemas[key] || z.object({}),\n description: comment || fallbackComment,\n // documentation: doc || fallbackComment,\n execute: async ({ context }) => {\n const client = await this.getApiClient();\n const value = client[key as keyof typeof client];\n return (value as any)({\n ...(context as any),\n });\n },\n });\n\n return { ...acc, [key]: tool };\n }, {});\n\n return tools as T;\n }\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-GOG77M6R.js.map
|
|
103
|
+
//# sourceMappingURL=chunk-GOG77M6R.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-GOG77M6R.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 { 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) => 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,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkZAJTIZZF_cjs = require('./chunk-ZAJTIZZF.cjs');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
6
|
// src/integration/integration.ts
|
|
@@ -68,7 +68,7 @@ var OpenAPIToolset = class {
|
|
|
68
68
|
const tools = Object.keys(clientMethods).reduce((acc, key) => {
|
|
69
69
|
const comment = documentations[key]?.comment;
|
|
70
70
|
const fallbackComment = `Execute ${key}`;
|
|
71
|
-
const tool =
|
|
71
|
+
const tool = chunkZAJTIZZF_cjs.createTool({
|
|
72
72
|
id: key,
|
|
73
73
|
inputSchema: schemas[key] || zod.z.object({}),
|
|
74
74
|
description: comment || fallbackComment,
|
|
@@ -89,5 +89,5 @@ var OpenAPIToolset = class {
|
|
|
89
89
|
|
|
90
90
|
exports.Integration = Integration;
|
|
91
91
|
exports.OpenAPIToolset = OpenAPIToolset;
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-HXEHQLBD.cjs.map
|
|
93
|
+
//# sourceMappingURL=chunk-HXEHQLBD.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/integration/integration.ts","../src/integration/openapi-toolset.ts"],"names":["createTool","z"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/integration/integration.ts","../src/integration/openapi-toolset.ts"],"names":["createTool","z"],"mappings":"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","file":"chunk-HXEHQLBD.cjs","sourcesContent":["import type { ToolAction } from '../tools';\nimport type { Workflow } from '../workflows';\n\nexport class Integration<ToolsParams = void, ApiClient = void> {\n name: string = 'Integration';\n private workflows: Record<string, Workflow>;\n\n constructor() {\n this.workflows = {};\n }\n\n /**\n * Workflows\n */\n\n registerWorkflow(name: string, fn: Workflow) {\n if (this.workflows[name]) {\n throw new Error(`Sync function \"${name}\" already registered`);\n }\n this.workflows[name] = fn;\n }\n\n public getWorkflows({ serialized }: { serialized?: boolean }): Record<string, Workflow> {\n if (serialized) {\n return Object.entries(this.workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: {\n name: v.name,\n },\n };\n }, {});\n }\n return this.workflows;\n }\n\n /**\n * TOOLS\n */\n getStaticTools(_params?: ToolsParams): Record<string, ToolAction<any, any, any>> {\n throw new Error('Method not implemented.');\n }\n\n async getTools(_params?: ToolsParams): Promise<Record<string, ToolAction<any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n\n async getApiClient(): Promise<ApiClient> {\n throw new Error('Method not implemented');\n }\n}\n","import { z } from 'zod';\n\nimport { createTool } from '../tools';\nimport type { ToolAction } from '../tools';\n\nexport abstract class OpenAPIToolset {\n abstract readonly name: string;\n abstract readonly tools: Record<string, ToolAction<any, any, any>>;\n\n authType: string = 'API_KEY';\n\n constructor() {}\n\n protected get toolSchemas(): any {\n return {};\n }\n\n protected get toolDocumentations(): Record<string, { comment: string; doc?: string }> {\n return {};\n }\n\n protected get baseClient(): any {\n return {};\n }\n\n async getApiClient(): Promise<any> {\n throw new Error('API not implemented');\n }\n\n protected _generateIntegrationTools<T>() {\n const { client: _client, ...clientMethods } = this.baseClient;\n const schemas = this.toolSchemas;\n const documentations = this.toolDocumentations;\n\n const tools = Object.keys(clientMethods).reduce((acc, key) => {\n const comment = documentations[key]?.comment;\n // const doc = documentations[key]?.doc;\n const fallbackComment = `Execute ${key}`;\n\n const tool = createTool({\n id: key,\n inputSchema: schemas[key] || z.object({}),\n description: comment || fallbackComment,\n // documentation: doc || fallbackComment,\n execute: async ({ context }) => {\n const client = await this.getApiClient();\n const value = client[key as keyof typeof client];\n return (value as any)({\n ...(context as any),\n });\n },\n });\n\n return { ...acc, [key]: tool };\n }, {});\n\n return tools as T;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Agent } from './chunk-
|
|
1
|
+
import { Agent } from './chunk-BGOXFBFK.js';
|
|
2
2
|
|
|
3
3
|
// src/relevance/cohere/index.ts
|
|
4
4
|
var CohereRelevanceScorer = class {
|
|
@@ -83,5 +83,5 @@ Always return just the number, no explanation.`,
|
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt };
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
86
|
+
//# sourceMappingURL=chunk-MEROMP3Z.js.map
|
|
87
|
+
//# sourceMappingURL=chunk-MEROMP3Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA4B;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,cAAc,MAAM,CAAA;AAC1D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/relevance/cohere/index.ts","../src/relevance/relevance-score-provider.ts","../src/relevance/mastra-agent/index.ts"],"names":[],"mappings":";;;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACR,WAAA,CAAY,OAAe,MAAA,EAAiB;AAC1C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EACA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACR;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,eAAA;AAExC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACpDO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAsB;AAC1E,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;;AAAA,MAAA,EAEN,IAAI;;AAAA,sBAAA,CAAA;AAGZ;;;ACRO,IAAM,6BAAN,MAAmE;AAAA,EAChE,KAAA;AAAA,EAER,WAAA,CAAY,MAAc,KAAA,EAA4B;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACrB,IAAA,EAAM,oBAAoB,IAAI,CAAA,CAAA;AAAA,MAC9B,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAAA,CAAA;AAAA,MAUd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB,KAAA,EAAe,IAAA,EAA+B;AACpE,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AAEjD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAExC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,CAAM,yBAAyB,IAAA,EAAM;AACvC,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,cAAc,MAAM,CAAA;AAC1D,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AACrD,MAAA,QAAA,GAAW,YAAA,CAAa,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AACF","file":"chunk-MEROMP3Z.js","sourcesContent":["import type { RelevanceScoreProvider } from '../relevance-score-provider';\n\ninterface CohereRerankingResponse {\n results: Array<{\n index: number;\n relevance_score: number;\n }>;\n id: string;\n meta: {\n api_version: {\n version: string;\n is_experimental: boolean;\n };\n billed_units: {\n search_units: number;\n };\n };\n}\n\n/** @deprecated Import from `@mastra/rag` instead */\nexport class CohereRelevanceScorer implements RelevanceScoreProvider {\n private model: string;\n private apiKey?: string;\n constructor(model: string, apiKey?: string) {\n console.warn(\n 'CohereRelevanceScorer exported from @mastra/core is deprecated. Please import from \"@mastra/rag\" instead.',\n );\n this.apiKey = apiKey;\n this.model = model;\n }\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const response = await fetch(`https://api.cohere.com/v2/rerank`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n query,\n documents: [text],\n model: this.model,\n top_n: 1,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Cohere API error: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as CohereRerankingResponse;\n const relevanceScore = data.results[0]?.relevance_score;\n\n if (!relevanceScore) {\n throw new Error('No relevance score found on Cohere response');\n }\n\n return relevanceScore;\n }\n}\n","// Provider interfaces\nexport interface RelevanceScoreProvider {\n getRelevanceScore(text1: string, text2: string): Promise<number>;\n}\n\n// Helper function used by providers\nexport function createSimilarityPrompt(query: string, text: string): string {\n return `Rate the semantic similarity between the following the query and the text on a scale from 0 to 1 (decimals allowed), where 1 means exactly the same meaning and 0 means completely different:\n\nQuery: ${query}\n\nText: ${text}\n\nRelevance score (0-1):`;\n}\n","import { Agent } from '../../agent';\nimport type { MastraLanguageModel } from '../../llm/model/shared.types';\nimport { createSimilarityPrompt } from '../relevance-score-provider';\nimport type { RelevanceScoreProvider } from '../relevance-score-provider';\n\n// Mastra Agent implementation\nexport class MastraAgentRelevanceScorer implements RelevanceScoreProvider {\n private agent: Agent;\n\n constructor(name: string, model: MastraLanguageModel) {\n this.agent = new Agent({\n name: `Relevance Scorer ${name}`,\n instructions: `You are a specialized agent for evaluating the relevance of text to queries.\nYour task is to rate how well a text passage answers a given query.\nOutput only a number between 0 and 1, where:\n1.0 = Perfectly relevant, directly answers the query\n0.0 = Completely irrelevant\nConsider:\n- Direct relevance to the question\n- Completeness of information\n- Quality and specificity\nAlways return just the number, no explanation.`,\n model,\n });\n }\n\n async getRelevanceScore(query: string, text: string): Promise<number> {\n const prompt = createSimilarityPrompt(query, text);\n\n const model = await this.agent.getModel();\n\n let response: string;\n if (model.specificationVersion === 'v2') {\n const responseText = await this.agent.generateVNext(prompt);\n response = responseText.text;\n } else {\n const responseText = await this.agent.generate(prompt);\n response = responseText.text;\n }\n return parseFloat(response);\n }\n}\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { fetchWithRetry } from './chunk-ZC64CG7J.js';
|
|
1
2
|
import { MastraError } from './chunk-MCOVMKIS.js';
|
|
2
3
|
import { randomUUID } from 'crypto';
|
|
3
4
|
import * as AIV4 from 'ai';
|
|
4
5
|
import * as AIV5 from 'ai-v5';
|
|
5
6
|
import { convertUint8ArrayToBase64, convertBase64ToUint8Array } from '@ai-sdk/provider-utils';
|
|
7
|
+
import { isUrlSupported, convertBase64ToUint8Array as convertBase64ToUint8Array$1 } from '@ai-sdk/provider-utils-v5';
|
|
6
8
|
import { z } from 'zod';
|
|
7
9
|
|
|
8
10
|
var DefaultGeneratedFile = class {
|
|
@@ -37,6 +39,178 @@ var DefaultGeneratedFileWithType = class extends DefaultGeneratedFile {
|
|
|
37
39
|
}
|
|
38
40
|
};
|
|
39
41
|
|
|
42
|
+
// src/stream/aisdk/v5/compat/content.ts
|
|
43
|
+
function splitDataUrl(dataUrl) {
|
|
44
|
+
try {
|
|
45
|
+
const [header, base64Content] = dataUrl.split(",");
|
|
46
|
+
return {
|
|
47
|
+
mediaType: header?.split(";")[0]?.split(":")[1],
|
|
48
|
+
base64Content
|
|
49
|
+
};
|
|
50
|
+
} catch {
|
|
51
|
+
return {
|
|
52
|
+
mediaType: void 0,
|
|
53
|
+
base64Content: void 0
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function convertToDataContent(content) {
|
|
58
|
+
if (content instanceof Uint8Array) {
|
|
59
|
+
return { data: content, mediaType: void 0 };
|
|
60
|
+
}
|
|
61
|
+
if (content instanceof ArrayBuffer) {
|
|
62
|
+
return { data: new Uint8Array(content), mediaType: void 0 };
|
|
63
|
+
}
|
|
64
|
+
if (typeof content === "string") {
|
|
65
|
+
try {
|
|
66
|
+
content = new URL(content);
|
|
67
|
+
} catch {
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (content instanceof URL && content.protocol === "data:") {
|
|
71
|
+
const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(content.toString());
|
|
72
|
+
if (dataUrlMediaType == null || base64Content == null) {
|
|
73
|
+
throw new MastraError({
|
|
74
|
+
id: "INVALID_DATA_URL_FORMAT",
|
|
75
|
+
text: `Invalid data URL format in content ${content.toString()}`,
|
|
76
|
+
domain: "LLM" /* LLM */,
|
|
77
|
+
category: "USER" /* USER */
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return { data: base64Content, mediaType: dataUrlMediaType };
|
|
81
|
+
}
|
|
82
|
+
return { data: content, mediaType: void 0 };
|
|
83
|
+
}
|
|
84
|
+
var imageMediaTypeSignatures = [
|
|
85
|
+
{
|
|
86
|
+
mediaType: "image/gif",
|
|
87
|
+
bytesPrefix: [71, 73, 70],
|
|
88
|
+
base64Prefix: "R0lG"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
mediaType: "image/png",
|
|
92
|
+
bytesPrefix: [137, 80, 78, 71],
|
|
93
|
+
base64Prefix: "iVBORw"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
mediaType: "image/jpeg",
|
|
97
|
+
bytesPrefix: [255, 216],
|
|
98
|
+
base64Prefix: "/9j/"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
mediaType: "image/webp",
|
|
102
|
+
bytesPrefix: [82, 73, 70, 70],
|
|
103
|
+
base64Prefix: "UklGRg"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
mediaType: "image/bmp",
|
|
107
|
+
bytesPrefix: [66, 77],
|
|
108
|
+
base64Prefix: "Qk"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
mediaType: "image/tiff",
|
|
112
|
+
bytesPrefix: [73, 73, 42, 0],
|
|
113
|
+
base64Prefix: "SUkqAA"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
mediaType: "image/tiff",
|
|
117
|
+
bytesPrefix: [77, 77, 0, 42],
|
|
118
|
+
base64Prefix: "TU0AKg"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
mediaType: "image/avif",
|
|
122
|
+
bytesPrefix: [0, 0, 0, 32, 102, 116, 121, 112, 97, 118, 105, 102],
|
|
123
|
+
base64Prefix: "AAAAIGZ0eXBhdmlm"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
mediaType: "image/heic",
|
|
127
|
+
bytesPrefix: [0, 0, 0, 32, 102, 116, 121, 112, 104, 101, 105, 99],
|
|
128
|
+
base64Prefix: "AAAAIGZ0eXBoZWlj"
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
var stripID3 = (data) => {
|
|
132
|
+
const bytes = typeof data === "string" ? convertBase64ToUint8Array$1(data) : data;
|
|
133
|
+
const id3Size = (
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
(bytes[6] & 127) << 21 | // @ts-ignore
|
|
136
|
+
(bytes[7] & 127) << 14 | // @ts-ignore
|
|
137
|
+
(bytes[8] & 127) << 7 | // @ts-ignore
|
|
138
|
+
bytes[9] & 127
|
|
139
|
+
);
|
|
140
|
+
return bytes.slice(id3Size + 10);
|
|
141
|
+
};
|
|
142
|
+
function stripID3TagsIfPresent(data) {
|
|
143
|
+
const hasId3 = typeof data === "string" && data.startsWith("SUQz") || typeof data !== "string" && data.length > 10 && data[0] === 73 && // 'I'
|
|
144
|
+
data[1] === 68 && // 'D'
|
|
145
|
+
data[2] === 51;
|
|
146
|
+
return hasId3 ? stripID3(data) : data;
|
|
147
|
+
}
|
|
148
|
+
function detectMediaType({
|
|
149
|
+
data,
|
|
150
|
+
signatures
|
|
151
|
+
}) {
|
|
152
|
+
const processedData = stripID3TagsIfPresent(data);
|
|
153
|
+
for (const signature of signatures) {
|
|
154
|
+
if (typeof processedData === "string" ? processedData.startsWith(signature.base64Prefix) : processedData.length >= signature.bytesPrefix.length && signature.bytesPrefix.every((byte, index) => processedData[index] === byte)) {
|
|
155
|
+
return signature.mediaType;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return void 0;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// src/agent/message-list/prompt/convert-file.ts
|
|
162
|
+
function convertImageFilePart(part, downloadedAssets) {
|
|
163
|
+
let originalData;
|
|
164
|
+
const type = part.type;
|
|
165
|
+
switch (type) {
|
|
166
|
+
case "image":
|
|
167
|
+
originalData = part.image;
|
|
168
|
+
break;
|
|
169
|
+
case "file":
|
|
170
|
+
originalData = part.data;
|
|
171
|
+
break;
|
|
172
|
+
default:
|
|
173
|
+
throw new Error(`Unsupported part type: ${type}`);
|
|
174
|
+
}
|
|
175
|
+
const { data: convertedData, mediaType: convertedMediaType } = convertToDataContent(originalData);
|
|
176
|
+
let mediaType = convertedMediaType ?? part.mediaType;
|
|
177
|
+
let data = convertedData;
|
|
178
|
+
if (data instanceof URL) {
|
|
179
|
+
const downloadedFile = downloadedAssets[data.toString()];
|
|
180
|
+
if (downloadedFile) {
|
|
181
|
+
data = downloadedFile.data;
|
|
182
|
+
mediaType ??= downloadedFile.mediaType;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
switch (type) {
|
|
186
|
+
case "image": {
|
|
187
|
+
if (data instanceof Uint8Array || typeof data === "string") {
|
|
188
|
+
mediaType = detectMediaType({ data, signatures: imageMediaTypeSignatures }) ?? mediaType;
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
type: "file",
|
|
192
|
+
mediaType: mediaType ?? "image/*",
|
|
193
|
+
// any image
|
|
194
|
+
filename: void 0,
|
|
195
|
+
data,
|
|
196
|
+
providerOptions: part.providerOptions
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
case "file": {
|
|
200
|
+
if (mediaType == null) {
|
|
201
|
+
throw new Error(`Media type is missing for file part`);
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
type: "file",
|
|
205
|
+
mediaType,
|
|
206
|
+
filename: part.filename,
|
|
207
|
+
data,
|
|
208
|
+
providerOptions: part.providerOptions
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
40
214
|
// src/agent/message-list/prompt/attachments-to-parts.ts
|
|
41
215
|
function attachmentsToParts(attachments) {
|
|
42
216
|
const parts = [];
|
|
@@ -414,6 +588,79 @@ function convertDataContentToBase64String(content) {
|
|
|
414
588
|
}
|
|
415
589
|
return convertUint8ArrayToBase64(content);
|
|
416
590
|
}
|
|
591
|
+
var downloadFromUrl = async ({ url, downloadRetries }) => {
|
|
592
|
+
const urlText = url.toString();
|
|
593
|
+
try {
|
|
594
|
+
const response = await fetchWithRetry(
|
|
595
|
+
urlText,
|
|
596
|
+
{
|
|
597
|
+
method: "GET"
|
|
598
|
+
},
|
|
599
|
+
downloadRetries
|
|
600
|
+
);
|
|
601
|
+
if (!response.ok) {
|
|
602
|
+
throw new MastraError({
|
|
603
|
+
id: "DOWNLOAD_ASSETS_FAILED",
|
|
604
|
+
text: "Failed to download asset",
|
|
605
|
+
domain: "LLM" /* LLM */,
|
|
606
|
+
category: "USER" /* USER */
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
return {
|
|
610
|
+
data: new Uint8Array(await response.arrayBuffer()),
|
|
611
|
+
mediaType: response.headers.get("content-type") ?? void 0
|
|
612
|
+
};
|
|
613
|
+
} catch (error) {
|
|
614
|
+
throw new MastraError(
|
|
615
|
+
{
|
|
616
|
+
id: "DOWNLOAD_ASSETS_FAILED",
|
|
617
|
+
text: "Failed to download asset",
|
|
618
|
+
domain: "LLM" /* LLM */,
|
|
619
|
+
category: "USER" /* USER */
|
|
620
|
+
},
|
|
621
|
+
error
|
|
622
|
+
);
|
|
623
|
+
}
|
|
624
|
+
};
|
|
625
|
+
async function downloadAssetsFromMessages({
|
|
626
|
+
messages,
|
|
627
|
+
downloadConcurrency = 10,
|
|
628
|
+
downloadRetries = 3,
|
|
629
|
+
supportedUrls
|
|
630
|
+
}) {
|
|
631
|
+
const pMap = (await import('p-map')).default;
|
|
632
|
+
const filesToDownload = messages.filter((message) => message.role === "user").map((message) => message.content).filter((content) => Array.isArray(content)).flat().filter((part) => part.type === "image" || part.type === "file").map((part) => {
|
|
633
|
+
const mediaType = part.mediaType ?? (part.type === "image" ? "image/*" : void 0);
|
|
634
|
+
let data = part.type === "image" ? part.image : part.data;
|
|
635
|
+
if (typeof data === "string") {
|
|
636
|
+
try {
|
|
637
|
+
data = new URL(data);
|
|
638
|
+
} catch {
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
return { mediaType, data };
|
|
642
|
+
}).filter((part) => part.data instanceof URL).map((part) => ({
|
|
643
|
+
url: part.data,
|
|
644
|
+
isUrlSupportedByModel: part.mediaType != null && isUrlSupported({
|
|
645
|
+
url: part.data.toString(),
|
|
646
|
+
mediaType: part.mediaType,
|
|
647
|
+
supportedUrls: supportedUrls ?? {}
|
|
648
|
+
})
|
|
649
|
+
}));
|
|
650
|
+
const downloadedFiles = await pMap(
|
|
651
|
+
filesToDownload,
|
|
652
|
+
async (fileItem) => {
|
|
653
|
+
return downloadFromUrl({ url: fileItem.url, downloadRetries });
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
concurrency: downloadConcurrency
|
|
657
|
+
}
|
|
658
|
+
);
|
|
659
|
+
const downloadFileList = downloadedFiles.filter(
|
|
660
|
+
(downloadedFile) => downloadedFile?.data != null
|
|
661
|
+
).map(({ data, mediaType }, index) => [filesToDownload?.[index]?.url.toString(), { data, mediaType }]);
|
|
662
|
+
return Object.fromEntries(downloadFileList);
|
|
663
|
+
}
|
|
417
664
|
|
|
418
665
|
// src/agent/message-list/utils/ai-v5/tool.ts
|
|
419
666
|
function getToolName(type) {
|
|
@@ -547,13 +794,47 @@ var MessageList = class _MessageList {
|
|
|
547
794
|
return messages;
|
|
548
795
|
},
|
|
549
796
|
// Used for creating LLM prompt messages without AI SDK streamText/generateText
|
|
550
|
-
llmPrompt: (
|
|
797
|
+
llmPrompt: async (options = {
|
|
798
|
+
downloadConcurrency: 10,
|
|
799
|
+
downloadRetries: 3
|
|
800
|
+
}) => {
|
|
551
801
|
const modelMessages = this.all.aiV5.model();
|
|
552
802
|
const systemMessages = this.aiV4CoreMessagesToAIV5ModelMessages(
|
|
553
803
|
[...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()],
|
|
554
804
|
`system`
|
|
555
805
|
);
|
|
556
|
-
const
|
|
806
|
+
const downloadedAssets = await downloadAssetsFromMessages({
|
|
807
|
+
messages: modelMessages,
|
|
808
|
+
downloadConcurrency: options?.downloadConcurrency,
|
|
809
|
+
downloadRetries: options?.downloadRetries,
|
|
810
|
+
supportedUrls: options?.supportedUrls
|
|
811
|
+
});
|
|
812
|
+
let messages = [...systemMessages, ...modelMessages];
|
|
813
|
+
if (Object.keys(downloadedAssets || {}).length > 0) {
|
|
814
|
+
messages = messages.map((message) => {
|
|
815
|
+
if (message.role === "user") {
|
|
816
|
+
if (typeof message.content === "string") {
|
|
817
|
+
return {
|
|
818
|
+
role: "user",
|
|
819
|
+
content: [{ type: "text", text: message.content }],
|
|
820
|
+
providerOptions: message.providerOptions
|
|
821
|
+
};
|
|
822
|
+
}
|
|
823
|
+
const convertedContent = message.content.map((part) => {
|
|
824
|
+
if (part.type === "image" || part.type === "file") {
|
|
825
|
+
return convertImageFilePart(part, downloadedAssets);
|
|
826
|
+
}
|
|
827
|
+
return part;
|
|
828
|
+
}).filter((part) => part.type !== "text" || part.text !== "");
|
|
829
|
+
return {
|
|
830
|
+
role: "user",
|
|
831
|
+
content: convertedContent,
|
|
832
|
+
providerOptions: message.providerOptions
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
return message;
|
|
836
|
+
});
|
|
837
|
+
}
|
|
557
838
|
const needsDefaultUserMessage = !messages.length || messages[0]?.role === "assistant";
|
|
558
839
|
if (needsDefaultUserMessage) {
|
|
559
840
|
const defaultMessage = {
|
|
@@ -1991,7 +2272,9 @@ var MessageList = class _MessageList {
|
|
|
1991
2272
|
return v3Msg;
|
|
1992
2273
|
}
|
|
1993
2274
|
aiV5UIMessagesToAIV5ModelMessages(messages) {
|
|
1994
|
-
|
|
2275
|
+
const preprocessed = this.addStartStepPartsForAIV5(this.sanitizeV5UIMessages(messages));
|
|
2276
|
+
const result = AIV5.convertToModelMessages(preprocessed);
|
|
2277
|
+
return result;
|
|
1995
2278
|
}
|
|
1996
2279
|
addStartStepPartsForAIV5(messages) {
|
|
1997
2280
|
for (const message of messages) {
|
|
@@ -2304,5 +2587,5 @@ function convertMessages(messages) {
|
|
|
2304
2587
|
}
|
|
2305
2588
|
|
|
2306
2589
|
export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
|
|
2307
|
-
//# sourceMappingURL=chunk-
|
|
2308
|
-
//# sourceMappingURL=chunk-
|
|
2590
|
+
//# sourceMappingURL=chunk-O7IQL4DX.js.map
|
|
2591
|
+
//# sourceMappingURL=chunk-O7IQL4DX.js.map
|