@mastra/ai-sdk 1.6.3 → 1.7.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +49 -0
- package/dist/chat-route.d.ts +12 -3
- package/dist/chat-route.d.ts.map +1 -1
- package/dist/convert-streams.d.ts +3 -0
- package/dist/convert-streams.d.ts.map +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/index.cjs +11442 -12791
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11412 -12764
- package/dist/index.js.map +1 -1
- package/dist/smooth-stream.d.ts +17 -0
- package/dist/smooth-stream.d.ts.map +1 -0
- package/dist/ui.cjs +101 -27
- package/dist/ui.cjs.map +1 -1
- package/dist/ui.js +100 -25
- package/dist/ui.js.map +1 -1
- package/package.json +15 -14
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ChunkType, MastraStreamTransform, MastraStreamTransformOptions, SmoothStreamOptions } from '@mastra/core/stream';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a fresh transform for a Mastra agent stream.
|
|
4
|
+
*
|
|
5
|
+
* Transform factories are reusable across requests, unlike `TransformStream`
|
|
6
|
+
* instances, which can only be consumed once.
|
|
7
|
+
*/
|
|
8
|
+
export type { MastraStreamTransform, MastraStreamTransformOptions };
|
|
9
|
+
/**
|
|
10
|
+
* Creates an experimental stream transform that emits text and reasoning in
|
|
11
|
+
* consistent, delayed chunks.
|
|
12
|
+
*
|
|
13
|
+
* @experimental This API may change in a future release.
|
|
14
|
+
*/
|
|
15
|
+
export declare function smoothStream<OUTPUT = undefined>(options?: SmoothStreamOptions): MastraStreamTransform<OUTPUT>;
|
|
16
|
+
export declare function applyMastraStreamTransforms<OUTPUT>(stream: ReadableStream<ChunkType<OUTPUT>>, transforms?: MastraStreamTransformOptions<OUTPUT>): ReadableStream<ChunkType<OUTPUT>>;
|
|
17
|
+
//# sourceMappingURL=smooth-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smooth-stream.d.ts","sourceRoot":"","sources":["../src/smooth-stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,YAAY,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAE7G;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAChD,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACzC,UAAU,CAAC,EAAE,4BAA4B,CAAC,MAAM,CAAC,GAChD,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAOnC"}
|
package/dist/ui.cjs
CHANGED
|
@@ -1,41 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// src/convert-messages.ts
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let _mastra_core_agent_message_list = require("@mastra/core/agent/message-list");
|
|
3
|
+
//#region src/convert-messages.ts
|
|
6
4
|
function isSystemReminderUIMessage(message) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
if (Array.isArray(message.parts)) {
|
|
14
|
-
return message.parts.some(
|
|
15
|
-
(part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder")
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
return typeof message.content === "string" && message.content.includes("<system-reminder");
|
|
5
|
+
if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) return true;
|
|
6
|
+
if (message.role !== "user") return false;
|
|
7
|
+
if (Array.isArray(message.parts)) return message.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder"));
|
|
8
|
+
return typeof message.content === "string" && message.content.includes("<system-reminder");
|
|
19
9
|
}
|
|
20
10
|
function filterSystemReminderUIMessages(messages) {
|
|
21
|
-
|
|
11
|
+
return messages.filter((message) => !isSystemReminderUIMessage(message));
|
|
22
12
|
}
|
|
23
13
|
function toAISdkMessages(messages, options = {}) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
|
|
14
|
+
const list = new _mastra_core_agent_message_list.MessageList().add(messages, `memory`);
|
|
15
|
+
if (options.version === "v6") return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
|
|
16
|
+
return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
|
|
29
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Converts messages from various input formats to AI SDK V5 UI message format.
|
|
20
|
+
*
|
|
21
|
+
* This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.
|
|
22
|
+
*
|
|
23
|
+
* @param messages - Messages to convert. Accepts:
|
|
24
|
+
* - `string` - A single text message (treated as user role)
|
|
25
|
+
* - `string[]` - Multiple text messages
|
|
26
|
+
* - `MessageInput` - A single message object in any supported format:
|
|
27
|
+
* - AI SDK V5 UIMessage or ModelMessage
|
|
28
|
+
* - AI SDK V4 UIMessage or CoreMessage
|
|
29
|
+
* - MastraDBMessage (internal storage format)
|
|
30
|
+
* - MastraMessageV1 (legacy format)
|
|
31
|
+
* - `MessageInput[]` - Array of message objects
|
|
32
|
+
*
|
|
33
|
+
* @returns An array of AI SDK V5 UIMessage objects with:
|
|
34
|
+
* - `id` - Unique message identifier
|
|
35
|
+
* - `role` - 'user' | 'assistant' | 'system'
|
|
36
|
+
* - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)
|
|
37
|
+
* - `metadata` - Optional metadata including createdAt, threadId, resourceId
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { toAISdkV5Messages } from '@mastra/ai-sdk';
|
|
42
|
+
*
|
|
43
|
+
* // Convert simple text messages
|
|
44
|
+
* const messages = toAISdkV5Messages(['Hello', 'How can I help?']);
|
|
45
|
+
*
|
|
46
|
+
* // Convert AI SDK V4 messages to V5 format
|
|
47
|
+
* const v4Messages = [
|
|
48
|
+
* { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },
|
|
49
|
+
* { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }
|
|
50
|
+
* ];
|
|
51
|
+
* const v5Messages = toAISdkV5Messages(v4Messages);
|
|
52
|
+
*
|
|
53
|
+
* // Use with useChat or similar AI SDK V5 hooks
|
|
54
|
+
* const { messages: chatMessages } = useChat({
|
|
55
|
+
* initialMessages: toAISdkV5Messages(storedMessages)
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
30
59
|
function toAISdkV5Messages(messages) {
|
|
31
|
-
|
|
60
|
+
return filterSystemReminderUIMessages(toAISdkMessages(messages));
|
|
32
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Converts messages from various input formats to AI SDK V4 UI message format.
|
|
64
|
+
*
|
|
65
|
+
* This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.
|
|
66
|
+
*
|
|
67
|
+
* @param messages - Messages to convert. Accepts:
|
|
68
|
+
* - `string` - A single text message (treated as user role)
|
|
69
|
+
* - `string[]` - Multiple text messages
|
|
70
|
+
* - `MessageInput` - A single message object in any supported format:
|
|
71
|
+
* - AI SDK V5 UIMessage or ModelMessage
|
|
72
|
+
* - AI SDK V4 UIMessage or CoreMessage
|
|
73
|
+
* - MastraDBMessage (internal storage format)
|
|
74
|
+
* - MastraMessageV1 (legacy format)
|
|
75
|
+
* - `MessageInput[]` - Array of message objects
|
|
76
|
+
*
|
|
77
|
+
* @returns An array of AI SDK V4 UIMessage objects with:
|
|
78
|
+
* - `id` - Unique message identifier
|
|
79
|
+
* - `role` - 'user' | 'assistant' | 'system'
|
|
80
|
+
* - `content` - Text content of the message
|
|
81
|
+
* - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)
|
|
82
|
+
* - `createdAt` - Message creation timestamp
|
|
83
|
+
* - `toolInvocations` - Optional array of tool invocations (for assistant messages)
|
|
84
|
+
* - `experimental_attachments` - Optional file attachments
|
|
85
|
+
* - `metadata` - Optional custom metadata
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* import { toAISdkV4Messages } from '@mastra/ai-sdk';
|
|
90
|
+
*
|
|
91
|
+
* // Convert simple text messages
|
|
92
|
+
* const messages = toAISdkV4Messages(['Hello', 'How can I help?']);
|
|
93
|
+
*
|
|
94
|
+
* // Convert AI SDK V5 messages to V4 format for legacy compatibility
|
|
95
|
+
* const v5Messages = [
|
|
96
|
+
* { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },
|
|
97
|
+
* { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }
|
|
98
|
+
* ];
|
|
99
|
+
* const v4Messages = toAISdkV4Messages(v5Messages);
|
|
100
|
+
*
|
|
101
|
+
* // Use with AI SDK V4 useChat hook
|
|
102
|
+
* const { messages: chatMessages } = useChat({
|
|
103
|
+
* initialMessages: toAISdkV4Messages(storedMessages)
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
33
107
|
function toAISdkV4Messages(messages) {
|
|
34
|
-
|
|
108
|
+
return filterSystemReminderUIMessages(new _mastra_core_agent_message_list.MessageList().add(messages, `memory`).get.all.aiV4.ui());
|
|
35
109
|
}
|
|
36
|
-
|
|
110
|
+
//#endregion
|
|
37
111
|
exports.toAISdkMessages = toAISdkMessages;
|
|
38
112
|
exports.toAISdkV4Messages = toAISdkV4Messages;
|
|
39
113
|
exports.toAISdkV5Messages = toAISdkV5Messages;
|
|
40
|
-
|
|
114
|
+
|
|
41
115
|
//# sourceMappingURL=ui.cjs.map
|
package/dist/ui.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ui.cjs","names":["MessageList"],"sources":["../src/convert-messages.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"],"mappings":";;;AAIA,SAAS,0BAA0B,SAKhC;CAED,IAAI,QAAQ,UAAU,kBAAkB,QAAQ,UAAU,yBACxD,OAAO;CAGT,IAAI,QAAQ,SAAS,QACnB,OAAO;CAIT,IAAI,MAAM,QAAQ,QAAQ,KAAK,GAC7B,OAAO,QAAQ,MAAM,MACnB,SAAQ,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,kBAAkB,CACxG;CAGF,OAAO,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SAAS,kBAAkB;AAC3F;AAEA,SAAS,+BAEP,UAAoB;CACpB,OAAO,SAAS,QAAO,YAAW,CAAC,0BAA0B,OAAO,CAAC;AACvE;AA8CA,SAAgB,gBACd,UACA,UAAoC,CAAC,GACN;CAC/B,MAAM,OAAO,IAAIA,gCAAAA,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ;CACrD,IAAI,QAAQ,YAAY,MACtB,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;CAE9D,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,gBAAgB,QAAQ,CAAC;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,IAAIA,gCAAAA,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AACnG"}
|
package/dist/ui.js
CHANGED
|
@@ -1,37 +1,112 @@
|
|
|
1
|
-
import { MessageList } from
|
|
2
|
-
|
|
3
|
-
// src/convert-messages.ts
|
|
1
|
+
import { MessageList } from "@mastra/core/agent/message-list";
|
|
2
|
+
//#region src/convert-messages.ts
|
|
4
3
|
function isSystemReminderUIMessage(message) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
if (Array.isArray(message.parts)) {
|
|
12
|
-
return message.parts.some(
|
|
13
|
-
(part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder")
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
return typeof message.content === "string" && message.content.includes("<system-reminder");
|
|
4
|
+
if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) return true;
|
|
5
|
+
if (message.role !== "user") return false;
|
|
6
|
+
if (Array.isArray(message.parts)) return message.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder"));
|
|
7
|
+
return typeof message.content === "string" && message.content.includes("<system-reminder");
|
|
17
8
|
}
|
|
18
9
|
function filterSystemReminderUIMessages(messages) {
|
|
19
|
-
|
|
10
|
+
return messages.filter((message) => !isSystemReminderUIMessage(message));
|
|
20
11
|
}
|
|
21
12
|
function toAISdkMessages(messages, options = {}) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
|
|
13
|
+
const list = new MessageList().add(messages, `memory`);
|
|
14
|
+
if (options.version === "v6") return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
|
|
15
|
+
return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
|
|
27
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Converts messages from various input formats to AI SDK V5 UI message format.
|
|
19
|
+
*
|
|
20
|
+
* This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.
|
|
21
|
+
*
|
|
22
|
+
* @param messages - Messages to convert. Accepts:
|
|
23
|
+
* - `string` - A single text message (treated as user role)
|
|
24
|
+
* - `string[]` - Multiple text messages
|
|
25
|
+
* - `MessageInput` - A single message object in any supported format:
|
|
26
|
+
* - AI SDK V5 UIMessage or ModelMessage
|
|
27
|
+
* - AI SDK V4 UIMessage or CoreMessage
|
|
28
|
+
* - MastraDBMessage (internal storage format)
|
|
29
|
+
* - MastraMessageV1 (legacy format)
|
|
30
|
+
* - `MessageInput[]` - Array of message objects
|
|
31
|
+
*
|
|
32
|
+
* @returns An array of AI SDK V5 UIMessage objects with:
|
|
33
|
+
* - `id` - Unique message identifier
|
|
34
|
+
* - `role` - 'user' | 'assistant' | 'system'
|
|
35
|
+
* - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)
|
|
36
|
+
* - `metadata` - Optional metadata including createdAt, threadId, resourceId
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { toAISdkV5Messages } from '@mastra/ai-sdk';
|
|
41
|
+
*
|
|
42
|
+
* // Convert simple text messages
|
|
43
|
+
* const messages = toAISdkV5Messages(['Hello', 'How can I help?']);
|
|
44
|
+
*
|
|
45
|
+
* // Convert AI SDK V4 messages to V5 format
|
|
46
|
+
* const v4Messages = [
|
|
47
|
+
* { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },
|
|
48
|
+
* { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }
|
|
49
|
+
* ];
|
|
50
|
+
* const v5Messages = toAISdkV5Messages(v4Messages);
|
|
51
|
+
*
|
|
52
|
+
* // Use with useChat or similar AI SDK V5 hooks
|
|
53
|
+
* const { messages: chatMessages } = useChat({
|
|
54
|
+
* initialMessages: toAISdkV5Messages(storedMessages)
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
28
58
|
function toAISdkV5Messages(messages) {
|
|
29
|
-
|
|
59
|
+
return filterSystemReminderUIMessages(toAISdkMessages(messages));
|
|
30
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Converts messages from various input formats to AI SDK V4 UI message format.
|
|
63
|
+
*
|
|
64
|
+
* This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.
|
|
65
|
+
*
|
|
66
|
+
* @param messages - Messages to convert. Accepts:
|
|
67
|
+
* - `string` - A single text message (treated as user role)
|
|
68
|
+
* - `string[]` - Multiple text messages
|
|
69
|
+
* - `MessageInput` - A single message object in any supported format:
|
|
70
|
+
* - AI SDK V5 UIMessage or ModelMessage
|
|
71
|
+
* - AI SDK V4 UIMessage or CoreMessage
|
|
72
|
+
* - MastraDBMessage (internal storage format)
|
|
73
|
+
* - MastraMessageV1 (legacy format)
|
|
74
|
+
* - `MessageInput[]` - Array of message objects
|
|
75
|
+
*
|
|
76
|
+
* @returns An array of AI SDK V4 UIMessage objects with:
|
|
77
|
+
* - `id` - Unique message identifier
|
|
78
|
+
* - `role` - 'user' | 'assistant' | 'system'
|
|
79
|
+
* - `content` - Text content of the message
|
|
80
|
+
* - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)
|
|
81
|
+
* - `createdAt` - Message creation timestamp
|
|
82
|
+
* - `toolInvocations` - Optional array of tool invocations (for assistant messages)
|
|
83
|
+
* - `experimental_attachments` - Optional file attachments
|
|
84
|
+
* - `metadata` - Optional custom metadata
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* import { toAISdkV4Messages } from '@mastra/ai-sdk';
|
|
89
|
+
*
|
|
90
|
+
* // Convert simple text messages
|
|
91
|
+
* const messages = toAISdkV4Messages(['Hello', 'How can I help?']);
|
|
92
|
+
*
|
|
93
|
+
* // Convert AI SDK V5 messages to V4 format for legacy compatibility
|
|
94
|
+
* const v5Messages = [
|
|
95
|
+
* { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },
|
|
96
|
+
* { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }
|
|
97
|
+
* ];
|
|
98
|
+
* const v4Messages = toAISdkV4Messages(v5Messages);
|
|
99
|
+
*
|
|
100
|
+
* // Use with AI SDK V4 useChat hook
|
|
101
|
+
* const { messages: chatMessages } = useChat({
|
|
102
|
+
* initialMessages: toAISdkV4Messages(storedMessages)
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
31
106
|
function toAISdkV4Messages(messages) {
|
|
32
|
-
|
|
107
|
+
return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());
|
|
33
108
|
}
|
|
34
|
-
|
|
109
|
+
//#endregion
|
|
35
110
|
export { toAISdkMessages, toAISdkV4Messages, toAISdkV5Messages };
|
|
36
|
-
|
|
111
|
+
|
|
37
112
|
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ui.js","names":[],"sources":["../src/convert-messages.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"],"mappings":";;AAIA,SAAS,0BAA0B,SAKhC;CAED,IAAI,QAAQ,UAAU,kBAAkB,QAAQ,UAAU,yBACxD,OAAO;CAGT,IAAI,QAAQ,SAAS,QACnB,OAAO;CAIT,IAAI,MAAM,QAAQ,QAAQ,KAAK,GAC7B,OAAO,QAAQ,MAAM,MACnB,SAAQ,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,kBAAkB,CACxG;CAGF,OAAO,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SAAS,kBAAkB;AAC3F;AAEA,SAAS,+BAEP,UAAoB;CACpB,OAAO,SAAS,QAAO,YAAW,CAAC,0BAA0B,OAAO,CAAC;AACvE;AA8CA,SAAgB,gBACd,UACA,UAAoC,CAAC,GACN;CAC/B,MAAM,OAAO,IAAI,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ;CACrD,IAAI,QAAQ,YAAY,MACtB,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;CAE9D,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,gBAAgB,QAAQ,CAAC;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,IAAI,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AACnG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/ai-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0-alpha.0",
|
|
4
4
|
"description": "Adds custom API routes to be compatible with the AI SDK UI parts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -42,20 +42,20 @@
|
|
|
42
42
|
"@vitest/coverage-v8": "4.1.10",
|
|
43
43
|
"@vitest/ui": "4.1.10",
|
|
44
44
|
"eslint": "^10.7.0",
|
|
45
|
-
"
|
|
45
|
+
"tsdown": "0.22.9",
|
|
46
46
|
"typescript": "^6.0.3",
|
|
47
47
|
"vitest": "4.1.10",
|
|
48
48
|
"zod": "^4.4.3",
|
|
49
|
-
"@internal/ai-sdk-
|
|
50
|
-
"@internal/ai-v6": "0.0.
|
|
51
|
-
"@internal/
|
|
52
|
-
"@internal/
|
|
53
|
-
"@internal/
|
|
54
|
-
"@internal/
|
|
55
|
-
"@
|
|
56
|
-
"@mastra/
|
|
57
|
-
"@
|
|
58
|
-
"@mastra/
|
|
49
|
+
"@internal/ai-sdk-v5": "0.0.64",
|
|
50
|
+
"@internal/ai-v6": "0.0.64",
|
|
51
|
+
"@internal/lint": "0.0.117",
|
|
52
|
+
"@internal/ai-sdk-v4": "0.0.64",
|
|
53
|
+
"@internal/test-utils": "0.0.53",
|
|
54
|
+
"@internal/types-builder": "0.0.92",
|
|
55
|
+
"@mastra/core": "1.54.0-alpha.4",
|
|
56
|
+
"@mastra/libsql": "1.18.0-alpha.1",
|
|
57
|
+
"@internal/llm-recorder": "0.0.53",
|
|
58
|
+
"@mastra/memory": "1.24.0-alpha.0"
|
|
59
59
|
},
|
|
60
60
|
"keywords": [
|
|
61
61
|
"mastra",
|
|
@@ -76,8 +76,9 @@
|
|
|
76
76
|
"node": ">=22.13.0"
|
|
77
77
|
},
|
|
78
78
|
"scripts": {
|
|
79
|
-
"lint": "eslint .",
|
|
80
|
-
"
|
|
79
|
+
"lint": "oxlint . && eslint .",
|
|
80
|
+
"lint:fix": "oxlint --fix . && eslint --fix .",
|
|
81
|
+
"build:lib": "tsdown --silent --config tsdown.config.ts",
|
|
81
82
|
"build:patch-commonjs": "node ../../scripts/commonjs-tsc-fixer.js",
|
|
82
83
|
"test": "vitest run"
|
|
83
84
|
}
|