@assistant-ui/react-ai-sdk 1.1.20 → 1.2.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/README.md +1 -1
- package/dist/ui/adapters/aiSDKFormatAdapter.d.ts +2 -2
- package/dist/ui/adapters/aiSDKFormatAdapter.d.ts.map +1 -1
- package/dist/ui/adapters/aiSDKFormatAdapter.js +2 -2
- package/dist/ui/use-chat/useAISDKRuntime.js +2 -2
- package/dist/ui/utils/convertMessage.d.ts.map +1 -1
- package/dist/ui/utils/convertMessage.js +8 -51
- package/dist/ui/utils/convertMessage.js.map +1 -1
- package/dist/ui/utils/toCreateMessage.d.ts.map +1 -1
- package/dist/ui/utils/toCreateMessage.js +1 -0
- package/dist/ui/utils/toCreateMessage.js.map +1 -1
- package/package.json +10 -9
- package/src/ui/adapters/aiSDKFormatAdapter.ts +3 -3
- package/src/ui/use-chat/useAISDKRuntime.tsx +2 -2
- package/src/ui/utils/convertMessage.ts +17 -60
- package/src/ui/utils/toCreateMessage.ts +1 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Vercel AI SDK integration for `@assistant-ui/react`.
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- Seamless integration with Vercel AI SDK
|
|
7
|
+
- Seamless integration with Vercel AI SDK v6
|
|
8
8
|
- Automatic system message and frontend tools forwarding via `AssistantChatTransport`
|
|
9
9
|
- Support for custom transport configuration
|
|
10
10
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { UIMessage } from "ai";
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
2
|
import { MessageFormatAdapter } from "@assistant-ui/react";
|
|
3
3
|
export type AISDKStorageFormat = Omit<UIMessage, "id">;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const aiSDKV6FormatAdapter: MessageFormatAdapter<UIMessage, AISDKStorageFormat>;
|
|
5
5
|
//# sourceMappingURL=aiSDKFormatAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiSDKFormatAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapters/aiSDKFormatAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"aiSDKFormatAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapters/aiSDKFormatAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EACL,oBAAoB,EAGrB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAEvD,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CACrD,SAAS,EACT,kBAAkB,CA6BnB,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { toCreateMessage } from "../utils/toCreateMessage.js";
|
|
|
7
7
|
import { vercelAttachmentAdapter } from "../utils/vercelAttachmentAdapter.js";
|
|
8
8
|
import { getVercelAIMessages } from "../getVercelAIMessages.js";
|
|
9
9
|
import { AISDKMessageConverter } from "../utils/convertMessage.js";
|
|
10
|
-
import {
|
|
10
|
+
import { aiSDKV6FormatAdapter, } from "../adapters/aiSDKFormatAdapter.js";
|
|
11
11
|
import { useExternalHistory } from "./useExternalHistory.js";
|
|
12
12
|
export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: customToCreateMessage, cancelPendingToolCallsOnSend = true, } = {}) => {
|
|
13
13
|
const contextAdapters = useRuntimeAdapters();
|
|
@@ -46,7 +46,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
46
46
|
},
|
|
47
47
|
setToolStatuses,
|
|
48
48
|
});
|
|
49
|
-
const isLoading = useExternalHistory(runtimeRef, adapters?.history ?? contextAdapters?.history, AISDKMessageConverter.toThreadMessages,
|
|
49
|
+
const isLoading = useExternalHistory(runtimeRef, adapters?.history ?? contextAdapters?.history, AISDKMessageConverter.toThreadMessages, aiSDKV6FormatAdapter, (messages) => {
|
|
50
50
|
chatHelpers.setMessages(messages);
|
|
51
51
|
});
|
|
52
52
|
const completePendingToolCalls = async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/D,OAAO,EAOL,KAAK,2BAA2B,EAEjC,MAAM,qBAAqB,CAAC;AA8H7B,eAAO,MAAM,qBAAqB;;;;;;;;0HA5GJ,sDAAyB;yHAIjC,sDACF;;;CAqKnB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isToolUIPart } from "ai";
|
|
1
|
+
import { isToolUIPart, getToolName } from "ai";
|
|
2
2
|
import { unstable_createMessageConverter, } from "@assistant-ui/react";
|
|
3
3
|
function stripClosingDelimiters(json) {
|
|
4
4
|
return json.replace(/[}\]"]+$/, "");
|
|
@@ -25,9 +25,11 @@ const convertParts = (message, metadata) => {
|
|
|
25
25
|
text: part.text,
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
// Handle tool
|
|
28
|
+
// Handle tool parts (both static tool-* and dynamic-tool)
|
|
29
|
+
// In AI SDK v6, isToolUIPart returns true for both static and dynamic tools
|
|
29
30
|
if (isToolUIPart(part)) {
|
|
30
|
-
|
|
31
|
+
// Use getToolName which works for both static and dynamic tools
|
|
32
|
+
const toolName = getToolName(part);
|
|
31
33
|
const toolCallId = part.toolCallId;
|
|
32
34
|
// Extract args and result based on state
|
|
33
35
|
let args = {};
|
|
@@ -70,45 +72,6 @@ const convertParts = (message, metadata) => {
|
|
|
70
72
|
}),
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
|
-
// Handle dynamic-tool parts
|
|
74
|
-
if (type === "dynamic-tool") {
|
|
75
|
-
const toolName = part.toolName;
|
|
76
|
-
const toolCallId = part.toolCallId;
|
|
77
|
-
// Extract args and result based on state
|
|
78
|
-
let args = {};
|
|
79
|
-
let result;
|
|
80
|
-
let isError = false;
|
|
81
|
-
if (part.state === "input-streaming" ||
|
|
82
|
-
part.state === "input-available") {
|
|
83
|
-
args = part.input || {};
|
|
84
|
-
}
|
|
85
|
-
else if (part.state === "output-available") {
|
|
86
|
-
args = part.input || {};
|
|
87
|
-
result = part.output;
|
|
88
|
-
}
|
|
89
|
-
else if (part.state === "output-error") {
|
|
90
|
-
args = part.input || {};
|
|
91
|
-
isError = true;
|
|
92
|
-
result = { error: part.errorText };
|
|
93
|
-
}
|
|
94
|
-
const toolStatus = metadata.toolStatuses?.[toolCallId];
|
|
95
|
-
return {
|
|
96
|
-
type: "tool-call",
|
|
97
|
-
toolName,
|
|
98
|
-
toolCallId,
|
|
99
|
-
argsText: JSON.stringify(args),
|
|
100
|
-
args,
|
|
101
|
-
result,
|
|
102
|
-
isError,
|
|
103
|
-
...(toolStatus?.type === "interrupt" && {
|
|
104
|
-
interrupt: toolStatus.payload,
|
|
105
|
-
status: {
|
|
106
|
-
type: "requires-action",
|
|
107
|
-
reason: "interrupt",
|
|
108
|
-
},
|
|
109
|
-
}),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
75
|
// Handle source-url parts
|
|
113
76
|
if (type === "source-url") {
|
|
114
77
|
return {
|
|
@@ -174,6 +137,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter((message, m
|
|
|
174
137
|
status: { type: "complete" },
|
|
175
138
|
};
|
|
176
139
|
}),
|
|
140
|
+
metadata: message.metadata,
|
|
177
141
|
};
|
|
178
142
|
case "system":
|
|
179
143
|
return {
|
|
@@ -181,6 +145,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter((message, m
|
|
|
181
145
|
id: message.id,
|
|
182
146
|
createdAt,
|
|
183
147
|
content: convertParts(message, metadata),
|
|
148
|
+
metadata: message.metadata,
|
|
184
149
|
};
|
|
185
150
|
case "assistant":
|
|
186
151
|
return {
|
|
@@ -188,15 +153,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter((message, m
|
|
|
188
153
|
id: message.id,
|
|
189
154
|
createdAt,
|
|
190
155
|
content: convertParts(message, metadata),
|
|
191
|
-
metadata:
|
|
192
|
-
unstable_annotations: message.annotations,
|
|
193
|
-
unstable_data: Array.isArray(message.data)
|
|
194
|
-
? message.data
|
|
195
|
-
: message.data
|
|
196
|
-
? [message.data]
|
|
197
|
-
: undefined,
|
|
198
|
-
custom: {},
|
|
199
|
-
},
|
|
156
|
+
metadata: message.metadata,
|
|
200
157
|
};
|
|
201
158
|
default:
|
|
202
159
|
console.warn(`Unsupported message role: ${message.role}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"convertMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,eAAe,EAEf,SAAS,EAGV,MAAM,IAAI,CAAC;AAEZ,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,SAAS,aAAa,KACrB,eAAe,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,eAAe,EAEf,SAAS,EAGV,MAAM,IAAI,CAAC;AAEZ,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,SAAS,aAAa,KACrB,eAAe,CAAC,UAAU,CA0C5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toCreateMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAsB,EACO,EAAE;IAC/B,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,GAAG,CAAC;YACJ,QAAQ,EAAE,CAAC,CAAC,IAAI;SACjB,CAAC,CAAC,CACJ,IAAI,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAuC,EAAE;QACzE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,IAAI,CAAC,KAAK;oBACf,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACjD,SAAS,EAAE,WAAW;iBACvB,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,IAAI,CAAC,IAAI;oBACd,SAAS,EAAE,IAAI,CAAC,QAAQ;oBACxB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;iBAClD,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;
|
|
1
|
+
{"version":3,"file":"toCreateMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAsB,EACO,EAAE;IAC/B,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,GAAG,CAAC;YACJ,QAAQ,EAAE,CAAC,CAAC,IAAI;SACjB,CAAC,CAAC,CACJ,IAAI,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAuC,EAAE;QACzE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,IAAI,CAAC,KAAK;oBACf,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACjD,SAAS,EAAE,WAAW;iBACvB,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,IAAI,CAAC,IAAI;oBACd,SAAS,EAAE,IAAI,CAAC,QAAQ;oBACxB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;iBAClD,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;KACyC,CAAC;AACxE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ai-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Vercel AI SDK adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-sdk",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
],
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@ai-sdk/react": "^
|
|
35
|
-
"ai": "^
|
|
36
|
-
"zod": "^4.
|
|
34
|
+
"@ai-sdk/react": "^3.0.44",
|
|
35
|
+
"ai": "^6.0.42",
|
|
36
|
+
"zod": "^4.3.5"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@assistant-ui/react": "^0.11.
|
|
39
|
+
"@assistant-ui/react": "^0.11.58",
|
|
40
40
|
"@types/react": "*",
|
|
41
41
|
"assistant-cloud": "*",
|
|
42
42
|
"react": "^18 || ^19"
|
|
@@ -51,10 +51,11 @@
|
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/json-schema": "^7.0.15",
|
|
54
|
-
"@types/react": "^19.2.
|
|
55
|
-
"react": "19.2.3",
|
|
56
|
-
"@assistant-ui/react": "0.11.
|
|
57
|
-
"@assistant-ui/x-buildutils": "0.0.1"
|
|
54
|
+
"@types/react": "^19.2.9",
|
|
55
|
+
"react": "^19.2.3",
|
|
56
|
+
"@assistant-ui/react": "0.11.58",
|
|
57
|
+
"@assistant-ui/x-buildutils": "0.0.1",
|
|
58
|
+
"assistant-stream": "0.2.47"
|
|
58
59
|
},
|
|
59
60
|
"publishConfig": {
|
|
60
61
|
"access": "public",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UIMessage } from "ai";
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
2
|
import {
|
|
3
3
|
MessageFormatAdapter,
|
|
4
4
|
MessageFormatItem,
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
// Storage format for AI SDK messages - just the UIMessage
|
|
9
9
|
export type AISDKStorageFormat = Omit<UIMessage, "id">;
|
|
10
10
|
|
|
11
|
-
export const
|
|
11
|
+
export const aiSDKV6FormatAdapter: MessageFormatAdapter<
|
|
12
12
|
UIMessage,
|
|
13
13
|
AISDKStorageFormat
|
|
14
14
|
> = {
|
|
15
|
-
format: "ai-sdk/
|
|
15
|
+
format: "ai-sdk/v6",
|
|
16
16
|
|
|
17
17
|
encode({
|
|
18
18
|
message: { id, parts, ...message },
|
|
@@ -22,7 +22,7 @@ import { getVercelAIMessages } from "../getVercelAIMessages";
|
|
|
22
22
|
import { AISDKMessageConverter } from "../utils/convertMessage";
|
|
23
23
|
import {
|
|
24
24
|
type AISDKStorageFormat,
|
|
25
|
-
|
|
25
|
+
aiSDKV6FormatAdapter,
|
|
26
26
|
} from "../adapters/aiSDKFormatAdapter";
|
|
27
27
|
import { useExternalHistory } from "./useExternalHistory";
|
|
28
28
|
|
|
@@ -113,7 +113,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
113
113
|
AISDKMessageConverter.toThreadMessages as (
|
|
114
114
|
messages: UI_MESSAGE[],
|
|
115
115
|
) => ThreadMessage[],
|
|
116
|
-
|
|
116
|
+
aiSDKV6FormatAdapter as MessageFormatAdapter<
|
|
117
117
|
UI_MESSAGE,
|
|
118
118
|
AISDKStorageFormat
|
|
119
119
|
>,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isToolUIPart, type UIMessage } from "ai";
|
|
1
|
+
import { isToolUIPart, getToolName, type UIMessage } from "ai";
|
|
2
2
|
import {
|
|
3
3
|
unstable_createMessageConverter,
|
|
4
4
|
type ReasoningMessagePart,
|
|
@@ -7,7 +7,11 @@ import {
|
|
|
7
7
|
type DataMessagePart,
|
|
8
8
|
type SourceMessagePart,
|
|
9
9
|
type useExternalMessageConverter,
|
|
10
|
+
type ThreadMessageLike,
|
|
10
11
|
} from "@assistant-ui/react";
|
|
12
|
+
import type { ReadonlyJSONObject } from "assistant-stream/utils";
|
|
13
|
+
|
|
14
|
+
type MessageMetadata = ThreadMessageLike["metadata"];
|
|
11
15
|
|
|
12
16
|
function stripClosingDelimiters(json: string) {
|
|
13
17
|
return json.replace(/[}\]"]+$/, "");
|
|
@@ -42,26 +46,28 @@ const convertParts = (
|
|
|
42
46
|
} satisfies ReasoningMessagePart;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
|
-
// Handle tool
|
|
49
|
+
// Handle tool parts (both static tool-* and dynamic-tool)
|
|
50
|
+
// In AI SDK v6, isToolUIPart returns true for both static and dynamic tools
|
|
46
51
|
if (isToolUIPart(part)) {
|
|
47
|
-
|
|
52
|
+
// Use getToolName which works for both static and dynamic tools
|
|
53
|
+
const toolName = getToolName(part);
|
|
48
54
|
const toolCallId = part.toolCallId;
|
|
49
55
|
|
|
50
56
|
// Extract args and result based on state
|
|
51
|
-
let args:
|
|
52
|
-
let result:
|
|
57
|
+
let args: ReadonlyJSONObject = {};
|
|
58
|
+
let result: unknown;
|
|
53
59
|
let isError = false;
|
|
54
60
|
|
|
55
61
|
if (
|
|
56
62
|
part.state === "input-streaming" ||
|
|
57
63
|
part.state === "input-available"
|
|
58
64
|
) {
|
|
59
|
-
args = part.input || {};
|
|
65
|
+
args = (part.input as ReadonlyJSONObject) || {};
|
|
60
66
|
} else if (part.state === "output-available") {
|
|
61
|
-
args = part.input || {};
|
|
67
|
+
args = (part.input as ReadonlyJSONObject) || {};
|
|
62
68
|
result = part.output;
|
|
63
69
|
} else if (part.state === "output-error") {
|
|
64
|
-
args = part.input || {};
|
|
70
|
+
args = (part.input as ReadonlyJSONObject) || {};
|
|
65
71
|
isError = true;
|
|
66
72
|
result = { error: part.errorText };
|
|
67
73
|
}
|
|
@@ -92,49 +98,6 @@ const convertParts = (
|
|
|
92
98
|
} satisfies ToolCallMessagePart;
|
|
93
99
|
}
|
|
94
100
|
|
|
95
|
-
// Handle dynamic-tool parts
|
|
96
|
-
if (type === "dynamic-tool") {
|
|
97
|
-
const toolName = part.toolName;
|
|
98
|
-
const toolCallId = part.toolCallId;
|
|
99
|
-
|
|
100
|
-
// Extract args and result based on state
|
|
101
|
-
let args: any = {};
|
|
102
|
-
let result: any;
|
|
103
|
-
let isError = false;
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
part.state === "input-streaming" ||
|
|
107
|
-
part.state === "input-available"
|
|
108
|
-
) {
|
|
109
|
-
args = part.input || {};
|
|
110
|
-
} else if (part.state === "output-available") {
|
|
111
|
-
args = part.input || {};
|
|
112
|
-
result = part.output;
|
|
113
|
-
} else if (part.state === "output-error") {
|
|
114
|
-
args = part.input || {};
|
|
115
|
-
isError = true;
|
|
116
|
-
result = { error: part.errorText };
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const toolStatus = metadata.toolStatuses?.[toolCallId];
|
|
120
|
-
return {
|
|
121
|
-
type: "tool-call",
|
|
122
|
-
toolName,
|
|
123
|
-
toolCallId,
|
|
124
|
-
argsText: JSON.stringify(args),
|
|
125
|
-
args,
|
|
126
|
-
result,
|
|
127
|
-
isError,
|
|
128
|
-
...(toolStatus?.type === "interrupt" && {
|
|
129
|
-
interrupt: toolStatus.payload,
|
|
130
|
-
status: {
|
|
131
|
-
type: "requires-action" as const,
|
|
132
|
-
reason: "interrupt",
|
|
133
|
-
},
|
|
134
|
-
}),
|
|
135
|
-
} satisfies ToolCallMessagePart;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
101
|
// Handle source-url parts
|
|
139
102
|
if (type === "source-url") {
|
|
140
103
|
return {
|
|
@@ -207,6 +170,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter(
|
|
|
207
170
|
status: { type: "complete" as const },
|
|
208
171
|
};
|
|
209
172
|
}),
|
|
173
|
+
metadata: message.metadata as MessageMetadata,
|
|
210
174
|
};
|
|
211
175
|
|
|
212
176
|
case "system":
|
|
@@ -215,6 +179,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter(
|
|
|
215
179
|
id: message.id,
|
|
216
180
|
createdAt,
|
|
217
181
|
content: convertParts(message, metadata),
|
|
182
|
+
metadata: message.metadata as MessageMetadata,
|
|
218
183
|
};
|
|
219
184
|
|
|
220
185
|
case "assistant":
|
|
@@ -223,15 +188,7 @@ export const AISDKMessageConverter = unstable_createMessageConverter(
|
|
|
223
188
|
id: message.id,
|
|
224
189
|
createdAt,
|
|
225
190
|
content: convertParts(message, metadata),
|
|
226
|
-
metadata:
|
|
227
|
-
unstable_annotations: (message as any).annotations,
|
|
228
|
-
unstable_data: Array.isArray((message as any).data)
|
|
229
|
-
? (message as any).data
|
|
230
|
-
: (message as any).data
|
|
231
|
-
? [(message as any).data]
|
|
232
|
-
: undefined,
|
|
233
|
-
custom: {},
|
|
234
|
-
},
|
|
191
|
+
metadata: message.metadata as MessageMetadata,
|
|
235
192
|
};
|
|
236
193
|
|
|
237
194
|
default:
|