@assistant-ui/react-data-stream 0.11.14 → 0.12.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/dist/converters/toLanguageModelMessages.d.ts +2 -2
- package/dist/converters/toLanguageModelMessages.d.ts.map +1 -1
- package/dist/converters/toLanguageModelMessages.js +32 -10
- package/dist/converters/toLanguageModelMessages.js.map +1 -1
- package/dist/useDataStreamRuntime.d.ts +10 -0
- package/dist/useDataStreamRuntime.d.ts.map +1 -1
- package/dist/useDataStreamRuntime.js +11 -3
- package/dist/useDataStreamRuntime.js.map +1 -1
- package/package.json +7 -7
- package/src/converters/toLanguageModelMessages.ts +50 -31
- package/src/useDataStreamRuntime.ts +29 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { LanguageModelV2Message } from "@ai-sdk/provider";
|
|
2
2
|
import { ThreadMessage } from "@assistant-ui/react";
|
|
3
3
|
/**
|
|
4
4
|
* @deprecated This is an internal API and may change without notice.
|
|
5
5
|
*/
|
|
6
6
|
export declare function toLanguageModelMessages(message: readonly ThreadMessage[], options?: {
|
|
7
7
|
unstable_includeId?: boolean | undefined;
|
|
8
|
-
}):
|
|
8
|
+
}): LanguageModelV2Message[];
|
|
9
9
|
//# sourceMappingURL=toLanguageModelMessages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAuF7B;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAoG1B"}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
const IMAGE_MEDIA_TYPES = {
|
|
2
|
+
jpg: "image/jpeg",
|
|
3
|
+
jpeg: "image/jpeg",
|
|
4
|
+
png: "image/png",
|
|
5
|
+
gif: "image/gif",
|
|
6
|
+
webp: "image/webp",
|
|
7
|
+
svg: "image/svg+xml",
|
|
8
|
+
avif: "image/avif",
|
|
9
|
+
bmp: "image/bmp",
|
|
10
|
+
ico: "image/x-icon",
|
|
11
|
+
tiff: "image/tiff",
|
|
12
|
+
tif: "image/tiff",
|
|
13
|
+
};
|
|
14
|
+
const inferImageMediaType = (url) => {
|
|
15
|
+
const ext = url.split(".").pop()?.toLowerCase().split("?")[0] ?? "";
|
|
16
|
+
return IMAGE_MEDIA_TYPES[ext] ?? "image/png";
|
|
17
|
+
};
|
|
1
18
|
const assistantMessageSplitter = () => {
|
|
2
19
|
const stash = [];
|
|
3
20
|
let assistantMessage = {
|
|
@@ -29,17 +46,20 @@ const assistantMessageSplitter = () => {
|
|
|
29
46
|
type: "tool-call",
|
|
30
47
|
toolCallId: part.toolCallId,
|
|
31
48
|
toolName: part.toolName,
|
|
32
|
-
|
|
49
|
+
input: part.args,
|
|
33
50
|
});
|
|
34
51
|
toolMessage.content.push({
|
|
35
52
|
type: "tool-result",
|
|
36
53
|
toolCallId: part.toolCallId,
|
|
37
54
|
toolName: part.toolName,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
output: part.result === undefined
|
|
56
|
+
? {
|
|
57
|
+
type: "error-text",
|
|
58
|
+
value: "Error: tool has no configured code to run",
|
|
59
|
+
}
|
|
60
|
+
: part.isError
|
|
61
|
+
? { type: "error-json", value: part.result }
|
|
62
|
+
: { type: "json", value: part.result },
|
|
43
63
|
});
|
|
44
64
|
},
|
|
45
65
|
getMessages: () => {
|
|
@@ -85,21 +105,23 @@ export function toLanguageModelMessages(message, options = {}) {
|
|
|
85
105
|
return part;
|
|
86
106
|
}
|
|
87
107
|
case "image": {
|
|
108
|
+
// ImageMessagePart doesn't include media type info, so we infer from URL
|
|
88
109
|
return {
|
|
89
|
-
type: "
|
|
90
|
-
|
|
110
|
+
type: "file",
|
|
111
|
+
data: new URL(part.image),
|
|
112
|
+
mediaType: inferImageMediaType(part.image),
|
|
91
113
|
};
|
|
92
114
|
}
|
|
93
115
|
case "file": {
|
|
94
116
|
return {
|
|
95
117
|
type: "file",
|
|
96
118
|
data: new URL(part.data),
|
|
97
|
-
|
|
119
|
+
mediaType: part.mimeType,
|
|
98
120
|
};
|
|
99
121
|
}
|
|
100
122
|
default: {
|
|
101
123
|
const unhandledType = type;
|
|
102
|
-
throw new Error(`
|
|
124
|
+
throw new Error(`Unsupported message part type: ${unhandledType}`);
|
|
103
125
|
}
|
|
104
126
|
}
|
|
105
127
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAcA,MAAM,wBAAwB,GAAG,GAAG,EAAE;IACpC,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,IAAI,gBAAgB,GAAG;QACrB,IAAI,EAAE,WAAoB;QAC1B,OAAO,EAAE,EAA+D;KACzE,CAAC;IACF,IAAI,WAAW,GAAG;QAChB,IAAI,EAAE,MAAe;QACrB,OAAO,EAAE,EAAqC;KAC/C,CAAC;IAEF,OAAO;QACL,kBAAkB,EAAE,CAAC,IAAqB,EAAE,EAAE;YAC5C,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAExB,gBAAgB,GAAG;oBACjB,IAAI,EAAE,WAAoB;oBAC1B,OAAO,EAAE,EAGN;iBACJ,CAAC;gBAEF,WAAW,GAAG;oBACZ,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE,EAAqC;iBAC/C,CAAC;YACJ,CAAC;YAED,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,eAAe,EAAE,CAAC,IAAyB,EAAE,EAAE;YAC7C,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC5B,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,
|
|
1
|
+
{"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { type AssistantRuntime, type LocalRuntimeOptions, type ThreadMessage } from "@assistant-ui/react";
|
|
2
2
|
type HeadersValue = Record<string, string> | Headers;
|
|
3
|
+
export type DataStreamProtocol = "ui-message-stream" | "data-stream";
|
|
3
4
|
export type UseDataStreamRuntimeOptions = {
|
|
4
5
|
api: string;
|
|
6
|
+
/** Defaults to "ui-message-stream". Use "data-stream" for legacy AI SDK. */
|
|
7
|
+
protocol?: DataStreamProtocol;
|
|
8
|
+
/** Callback for data-* parts (ui-message-stream only). */
|
|
9
|
+
onData?: (data: {
|
|
10
|
+
type: string;
|
|
11
|
+
name: string;
|
|
12
|
+
data: unknown;
|
|
13
|
+
transient?: boolean;
|
|
14
|
+
}) => void;
|
|
5
15
|
onResponse?: (response: Response) => void | Promise<void>;
|
|
6
16
|
onFinish?: (message: ThreadMessage) => void;
|
|
7
17
|
onError?: (error: Error) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataStreamRuntime.d.ts","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAGnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useDataStreamRuntime.d.ts","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAGnB,MAAM,qBAAqB,CAAC;AAa7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAErE,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACpD,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,mBAAmB,CAAC;AA2IxB,eAAO,MAAM,oBAAoB,GAC/B,SAAS,2BAA2B,KACnC,gBAQF,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { toLanguageModelMessages } from "./converters/index.js";
|
|
3
3
|
import { INTERNAL, useLocalRuntime, } from "@assistant-ui/react";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import { AssistantMessageAccumulator, DataStreamDecoder, unstable_toolResultStream, } from "assistant-stream";
|
|
5
|
+
import { AssistantMessageAccumulator, DataStreamDecoder, UIMessageStreamDecoder, unstable_toolResultStream, } from "assistant-stream";
|
|
6
6
|
import { asAsyncIterableStream } from "assistant-stream/utils";
|
|
7
7
|
const { splitLocalRuntimeOptions } = INTERNAL;
|
|
8
8
|
const toAISDKTools = (tools) => {
|
|
@@ -24,7 +24,7 @@ class DataStreamRuntimeAdapter {
|
|
|
24
24
|
constructor(options) {
|
|
25
25
|
this.options = options;
|
|
26
26
|
}
|
|
27
|
-
async *run({ messages, runConfig, abortSignal, context, unstable_assistantMessageId, unstable_getMessage, }) {
|
|
27
|
+
async *run({ messages, runConfig, abortSignal, context, unstable_assistantMessageId, unstable_threadId, unstable_parentId, unstable_getMessage, }) {
|
|
28
28
|
const headersValue = typeof this.options.headers === "function"
|
|
29
29
|
? await this.options.headers()
|
|
30
30
|
: this.options.headers;
|
|
@@ -48,6 +48,10 @@ class DataStreamRuntimeAdapter {
|
|
|
48
48
|
}),
|
|
49
49
|
tools: toAISDKTools(getEnabledTools(context.tools ?? {})),
|
|
50
50
|
...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
|
|
51
|
+
...(unstable_threadId ? { threadId: unstable_threadId } : {}),
|
|
52
|
+
...(unstable_parentId !== undefined
|
|
53
|
+
? { parentId: unstable_parentId }
|
|
54
|
+
: {}),
|
|
51
55
|
runConfig,
|
|
52
56
|
state: unstable_getMessage().metadata.unstable_state || undefined,
|
|
53
57
|
...context.callSettings,
|
|
@@ -64,8 +68,12 @@ class DataStreamRuntimeAdapter {
|
|
|
64
68
|
if (!result.body) {
|
|
65
69
|
throw new Error("Response body is null");
|
|
66
70
|
}
|
|
71
|
+
const protocol = this.options.protocol ?? "ui-message-stream";
|
|
72
|
+
const decoder = protocol === "ui-message-stream"
|
|
73
|
+
? new UIMessageStreamDecoder(this.options.onData ? { onData: this.options.onData } : {})
|
|
74
|
+
: new DataStreamDecoder();
|
|
67
75
|
const stream = result.body
|
|
68
|
-
.pipeThrough(
|
|
76
|
+
.pipeThrough(decoder)
|
|
69
77
|
.pipeThrough(unstable_toolResultStream(context.tools, abortSignal, () => {
|
|
70
78
|
throw new Error("Tool interrupt is not supported in data stream runtime");
|
|
71
79
|
}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataStreamRuntime.js","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,uBAAuB,EAAE,8BAAqB;AACvD,OAAO,EAIL,QAAQ,EAIR,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,EAAE,wBAAwB,EAAE,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"useDataStreamRuntime.js","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-data-stream",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Data stream adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-stream",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
],
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/provider": "^
|
|
33
|
-
"assistant-stream": "^0.2.
|
|
32
|
+
"@ai-sdk/provider": "^3.0.4",
|
|
33
|
+
"assistant-stream": "^0.2.47",
|
|
34
34
|
"zod": "^4.3.5"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@assistant-ui/react": "^0.11.
|
|
37
|
+
"@assistant-ui/react": "^0.11.58",
|
|
38
38
|
"@types/react": "*",
|
|
39
39
|
"react": "^18 || ^19"
|
|
40
40
|
},
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/json-schema": "^7.0.15",
|
|
48
|
-
"@types/react": "^19.2.
|
|
48
|
+
"@types/react": "^19.2.9",
|
|
49
49
|
"react": "^19.2.3",
|
|
50
|
-
"@assistant-ui/
|
|
51
|
-
"@assistant-ui/
|
|
50
|
+
"@assistant-ui/x-buildutils": "0.0.1",
|
|
51
|
+
"@assistant-ui/react": "0.11.58"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import type {
|
|
2
|
+
JSONValue,
|
|
3
|
+
LanguageModelV2FilePart,
|
|
4
|
+
LanguageModelV2Message,
|
|
5
|
+
LanguageModelV2TextPart,
|
|
6
|
+
LanguageModelV2ToolCallPart,
|
|
7
|
+
LanguageModelV2ToolResultPart,
|
|
8
8
|
} from "@ai-sdk/provider";
|
|
9
9
|
import {
|
|
10
10
|
TextMessagePart,
|
|
@@ -12,15 +12,34 @@ import {
|
|
|
12
12
|
ToolCallMessagePart,
|
|
13
13
|
} from "@assistant-ui/react";
|
|
14
14
|
|
|
15
|
+
const IMAGE_MEDIA_TYPES: Record<string, string> = {
|
|
16
|
+
jpg: "image/jpeg",
|
|
17
|
+
jpeg: "image/jpeg",
|
|
18
|
+
png: "image/png",
|
|
19
|
+
gif: "image/gif",
|
|
20
|
+
webp: "image/webp",
|
|
21
|
+
svg: "image/svg+xml",
|
|
22
|
+
avif: "image/avif",
|
|
23
|
+
bmp: "image/bmp",
|
|
24
|
+
ico: "image/x-icon",
|
|
25
|
+
tiff: "image/tiff",
|
|
26
|
+
tif: "image/tiff",
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const inferImageMediaType = (url: string): string => {
|
|
30
|
+
const ext = url.split(".").pop()?.toLowerCase().split("?")[0] ?? "";
|
|
31
|
+
return IMAGE_MEDIA_TYPES[ext] ?? "image/png";
|
|
32
|
+
};
|
|
33
|
+
|
|
15
34
|
const assistantMessageSplitter = () => {
|
|
16
|
-
const stash:
|
|
35
|
+
const stash: LanguageModelV2Message[] = [];
|
|
17
36
|
let assistantMessage = {
|
|
18
37
|
role: "assistant" as const,
|
|
19
|
-
content: [] as (
|
|
38
|
+
content: [] as (LanguageModelV2TextPart | LanguageModelV2ToolCallPart)[],
|
|
20
39
|
};
|
|
21
40
|
let toolMessage = {
|
|
22
41
|
role: "tool" as const,
|
|
23
|
-
content: [] as
|
|
42
|
+
content: [] as LanguageModelV2ToolResultPart[],
|
|
24
43
|
};
|
|
25
44
|
|
|
26
45
|
return {
|
|
@@ -32,14 +51,14 @@ const assistantMessageSplitter = () => {
|
|
|
32
51
|
assistantMessage = {
|
|
33
52
|
role: "assistant" as const,
|
|
34
53
|
content: [] as (
|
|
35
|
-
|
|
|
36
|
-
|
|
|
54
|
+
| LanguageModelV2TextPart
|
|
55
|
+
| LanguageModelV2ToolCallPart
|
|
37
56
|
)[],
|
|
38
57
|
};
|
|
39
58
|
|
|
40
59
|
toolMessage = {
|
|
41
60
|
role: "tool" as const,
|
|
42
|
-
content: [] as
|
|
61
|
+
content: [] as LanguageModelV2ToolResultPart[],
|
|
43
62
|
};
|
|
44
63
|
}
|
|
45
64
|
|
|
@@ -50,19 +69,22 @@ const assistantMessageSplitter = () => {
|
|
|
50
69
|
type: "tool-call",
|
|
51
70
|
toolCallId: part.toolCallId,
|
|
52
71
|
toolName: part.toolName,
|
|
53
|
-
|
|
72
|
+
input: part.args,
|
|
54
73
|
});
|
|
55
74
|
|
|
56
75
|
toolMessage.content.push({
|
|
57
76
|
type: "tool-result",
|
|
58
77
|
toolCallId: part.toolCallId,
|
|
59
78
|
toolName: part.toolName,
|
|
60
|
-
|
|
61
|
-
result:
|
|
79
|
+
output:
|
|
62
80
|
part.result === undefined
|
|
63
|
-
?
|
|
64
|
-
|
|
65
|
-
|
|
81
|
+
? {
|
|
82
|
+
type: "error-text",
|
|
83
|
+
value: "Error: tool has no configured code to run",
|
|
84
|
+
}
|
|
85
|
+
: part.isError
|
|
86
|
+
? { type: "error-json", value: part.result as JSONValue }
|
|
87
|
+
: { type: "json", value: part.result as JSONValue },
|
|
66
88
|
});
|
|
67
89
|
},
|
|
68
90
|
getMessages: () => {
|
|
@@ -81,7 +103,7 @@ const assistantMessageSplitter = () => {
|
|
|
81
103
|
export function toLanguageModelMessages(
|
|
82
104
|
message: readonly ThreadMessage[],
|
|
83
105
|
options: { unstable_includeId?: boolean | undefined } = {},
|
|
84
|
-
):
|
|
106
|
+
): LanguageModelV2Message[] {
|
|
85
107
|
const includeId = options.unstable_includeId ?? false;
|
|
86
108
|
return message.flatMap((message) => {
|
|
87
109
|
const role = message.role;
|
|
@@ -104,16 +126,11 @@ export function toLanguageModelMessages(
|
|
|
104
126
|
...message.content,
|
|
105
127
|
...attachments.map((a) => a.content).flat(),
|
|
106
128
|
];
|
|
107
|
-
const msg:
|
|
129
|
+
const msg: LanguageModelV2Message = {
|
|
108
130
|
...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),
|
|
109
131
|
role: "user",
|
|
110
132
|
content: content.map(
|
|
111
|
-
(
|
|
112
|
-
part,
|
|
113
|
-
):
|
|
114
|
-
| LanguageModelV1TextPart
|
|
115
|
-
| LanguageModelV1ImagePart
|
|
116
|
-
| LanguageModelV1FilePart => {
|
|
133
|
+
(part): LanguageModelV2TextPart | LanguageModelV2FilePart => {
|
|
117
134
|
const type = part.type;
|
|
118
135
|
switch (type) {
|
|
119
136
|
case "text": {
|
|
@@ -121,9 +138,11 @@ export function toLanguageModelMessages(
|
|
|
121
138
|
}
|
|
122
139
|
|
|
123
140
|
case "image": {
|
|
141
|
+
// ImageMessagePart doesn't include media type info, so we infer from URL
|
|
124
142
|
return {
|
|
125
|
-
type: "
|
|
126
|
-
|
|
143
|
+
type: "file",
|
|
144
|
+
data: new URL(part.image),
|
|
145
|
+
mediaType: inferImageMediaType(part.image),
|
|
127
146
|
};
|
|
128
147
|
}
|
|
129
148
|
|
|
@@ -131,14 +150,14 @@ export function toLanguageModelMessages(
|
|
|
131
150
|
return {
|
|
132
151
|
type: "file",
|
|
133
152
|
data: new URL(part.data),
|
|
134
|
-
|
|
153
|
+
mediaType: part.mimeType,
|
|
135
154
|
};
|
|
136
155
|
}
|
|
137
156
|
|
|
138
157
|
default: {
|
|
139
158
|
const unhandledType: "audio" = type;
|
|
140
159
|
throw new Error(
|
|
141
|
-
`
|
|
160
|
+
`Unsupported message part type: ${unhandledType}`,
|
|
142
161
|
);
|
|
143
162
|
}
|
|
144
163
|
}
|
|
@@ -16,6 +16,7 @@ import type { JSONSchema7 } from "json-schema";
|
|
|
16
16
|
import {
|
|
17
17
|
AssistantMessageAccumulator,
|
|
18
18
|
DataStreamDecoder,
|
|
19
|
+
UIMessageStreamDecoder,
|
|
19
20
|
unstable_toolResultStream,
|
|
20
21
|
} from "assistant-stream";
|
|
21
22
|
import { asAsyncIterableStream } from "assistant-stream/utils";
|
|
@@ -24,8 +25,19 @@ const { splitLocalRuntimeOptions } = INTERNAL;
|
|
|
24
25
|
|
|
25
26
|
type HeadersValue = Record<string, string> | Headers;
|
|
26
27
|
|
|
28
|
+
export type DataStreamProtocol = "ui-message-stream" | "data-stream";
|
|
29
|
+
|
|
27
30
|
export type UseDataStreamRuntimeOptions = {
|
|
28
31
|
api: string;
|
|
32
|
+
/** Defaults to "ui-message-stream". Use "data-stream" for legacy AI SDK. */
|
|
33
|
+
protocol?: DataStreamProtocol;
|
|
34
|
+
/** Callback for data-* parts (ui-message-stream only). */
|
|
35
|
+
onData?: (data: {
|
|
36
|
+
type: string;
|
|
37
|
+
name: string;
|
|
38
|
+
data: unknown;
|
|
39
|
+
transient?: boolean;
|
|
40
|
+
}) => void;
|
|
29
41
|
onResponse?: (response: Response) => void | Promise<void>;
|
|
30
42
|
onFinish?: (message: ThreadMessage) => void;
|
|
31
43
|
onError?: (error: Error) => void;
|
|
@@ -42,6 +54,8 @@ type DataStreamRuntimeRequestOptions = {
|
|
|
42
54
|
system?: string | undefined;
|
|
43
55
|
runConfig?: any;
|
|
44
56
|
unstable_assistantMessageId?: string;
|
|
57
|
+
threadId?: string;
|
|
58
|
+
parentId?: string | null;
|
|
45
59
|
state?: any;
|
|
46
60
|
};
|
|
47
61
|
|
|
@@ -81,6 +95,8 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
|
|
|
81
95
|
abortSignal,
|
|
82
96
|
context,
|
|
83
97
|
unstable_assistantMessageId,
|
|
98
|
+
unstable_threadId,
|
|
99
|
+
unstable_parentId,
|
|
84
100
|
unstable_getMessage,
|
|
85
101
|
}: ChatModelRunOptions) {
|
|
86
102
|
const headersValue =
|
|
@@ -117,6 +133,10 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
|
|
|
117
133
|
getEnabledTools(context.tools ?? {}),
|
|
118
134
|
) as unknown as DataStreamRuntimeRequestOptions["tools"],
|
|
119
135
|
...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
|
|
136
|
+
...(unstable_threadId ? { threadId: unstable_threadId } : {}),
|
|
137
|
+
...(unstable_parentId !== undefined
|
|
138
|
+
? { parentId: unstable_parentId }
|
|
139
|
+
: {}),
|
|
120
140
|
runConfig,
|
|
121
141
|
state: unstable_getMessage().metadata.unstable_state || undefined,
|
|
122
142
|
...context.callSettings,
|
|
@@ -136,8 +156,16 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
|
|
|
136
156
|
throw new Error("Response body is null");
|
|
137
157
|
}
|
|
138
158
|
|
|
159
|
+
const protocol = this.options.protocol ?? "ui-message-stream";
|
|
160
|
+
const decoder =
|
|
161
|
+
protocol === "ui-message-stream"
|
|
162
|
+
? new UIMessageStreamDecoder(
|
|
163
|
+
this.options.onData ? { onData: this.options.onData } : {},
|
|
164
|
+
)
|
|
165
|
+
: new DataStreamDecoder();
|
|
166
|
+
|
|
139
167
|
const stream = result.body
|
|
140
|
-
.pipeThrough(
|
|
168
|
+
.pipeThrough(decoder)
|
|
141
169
|
.pipeThrough(
|
|
142
170
|
unstable_toolResultStream(context.tools, abortSignal, () => {
|
|
143
171
|
throw new Error(
|