@assistant-ui/react-data-stream 0.12.0 → 0.12.2

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.
@@ -1,9 +1,10 @@
1
1
  import type { LanguageModelV2Message } from "@ai-sdk/provider";
2
- import { ThreadMessage } from "@assistant-ui/react";
2
+ import type { ThreadMessage } from "@assistant-ui/react";
3
3
  /**
4
- * @deprecated This is an internal API and may change without notice.
4
+ * @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.
5
+ * This function is kept for AI SDK compatibility.
5
6
  */
6
- export declare function toLanguageModelMessages(message: readonly ThreadMessage[], options?: {
7
+ export declare function toLanguageModelMessages(messages: readonly ThreadMessage[], options?: {
7
8
  unstable_includeId?: boolean | undefined;
8
9
  }): LanguageModelV2Message[];
9
10
  //# sourceMappingURL=toLanguageModelMessages.d.ts.map
@@ -1 +1 @@
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
+ {"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,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiFzD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAoC1B"}
@@ -1,166 +1,95 @@
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
- };
18
- const assistantMessageSplitter = () => {
19
- const stash = [];
20
- let assistantMessage = {
21
- role: "assistant",
22
- content: [],
23
- };
24
- let toolMessage = {
25
- role: "tool",
26
- content: [],
27
- };
28
- return {
29
- addTextMessagePart: (part) => {
30
- if (toolMessage.content.length > 0) {
31
- stash.push(assistantMessage);
32
- stash.push(toolMessage);
33
- assistantMessage = {
34
- role: "assistant",
35
- content: [],
36
- };
37
- toolMessage = {
38
- role: "tool",
39
- content: [],
40
- };
41
- }
42
- assistantMessage.content.push(part);
43
- },
44
- addToolCallPart: (part) => {
45
- assistantMessage.content.push({
46
- type: "tool-call",
47
- toolCallId: part.toolCallId,
48
- toolName: part.toolName,
49
- input: part.args,
50
- });
51
- toolMessage.content.push({
52
- type: "tool-result",
53
- toolCallId: part.toolCallId,
54
- toolName: part.toolName,
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 },
63
- });
64
- },
65
- getMessages: () => {
66
- if (toolMessage.content.length > 0) {
67
- return [...stash, assistantMessage, toolMessage];
68
- }
69
- return [...stash, assistantMessage];
70
- },
71
- };
72
- };
1
+ import { toGenericMessages, } from "assistant-stream";
2
+ function toUrl(value) {
3
+ if (value instanceof URL)
4
+ return value;
5
+ try {
6
+ return new URL(value);
7
+ }
8
+ catch {
9
+ // For relative URLs, create URL with a dummy base
10
+ return new URL(value, "file://");
11
+ }
12
+ }
13
+ function convertUserContent(content) {
14
+ return content.content.map((part) => {
15
+ if (part.type === "text") {
16
+ return part;
17
+ }
18
+ return {
19
+ type: "file",
20
+ data: toUrl(part.data),
21
+ mediaType: part.mediaType,
22
+ };
23
+ });
24
+ }
25
+ function convertAssistantContent(content) {
26
+ return content.map((part) => {
27
+ if (part.type === "text") {
28
+ return part;
29
+ }
30
+ return {
31
+ type: "tool-call",
32
+ toolCallId: part.toolCallId,
33
+ toolName: part.toolName,
34
+ input: part.args,
35
+ };
36
+ });
37
+ }
38
+ function convertToolContent(content) {
39
+ return content.map((part) => ({
40
+ type: "tool-result",
41
+ toolCallId: part.toolCallId,
42
+ toolName: part.toolName,
43
+ output: part.isError
44
+ ? { type: "error-json", value: part.result }
45
+ : { type: "json", value: part.result },
46
+ }));
47
+ }
48
+ function convertGenericToLanguageModel(generic) {
49
+ switch (generic.role) {
50
+ case "system":
51
+ return { role: "system", content: generic.content };
52
+ case "user":
53
+ return { role: "user", content: convertUserContent(generic) };
54
+ case "assistant":
55
+ return {
56
+ role: "assistant",
57
+ content: convertAssistantContent(generic.content),
58
+ };
59
+ case "tool":
60
+ return { role: "tool", content: convertToolContent(generic.content) };
61
+ }
62
+ }
73
63
  /**
74
- * @deprecated This is an internal API and may change without notice.
64
+ * @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.
65
+ * This function is kept for AI SDK compatibility.
75
66
  */
76
- export function toLanguageModelMessages(message, options = {}) {
67
+ export function toLanguageModelMessages(messages, options = {}) {
77
68
  const includeId = options.unstable_includeId ?? false;
78
- return message.flatMap((message) => {
79
- const role = message.role;
80
- switch (role) {
81
- case "system": {
82
- return [
83
- {
84
- ...(includeId
85
- ? { unstable_id: message.id }
86
- : {}),
87
- role: "system",
88
- content: message.content[0].text,
89
- },
90
- ];
69
+ const genericMessages = toGenericMessages(messages);
70
+ if (!includeId) {
71
+ return genericMessages.map(convertGenericToLanguageModel);
72
+ }
73
+ // When includeId is true, we need to map back to original message IDs
74
+ const result = [];
75
+ let messageIndex = 0;
76
+ for (const generic of genericMessages) {
77
+ const converted = convertGenericToLanguageModel(generic);
78
+ // Tool messages are synthesized from assistant message tool calls,
79
+ // they don't have a corresponding original message
80
+ if (generic.role !== "tool") {
81
+ // Find the corresponding original message for ID
82
+ while (messageIndex < messages.length &&
83
+ messages[messageIndex].role !== generic.role) {
84
+ messageIndex++;
91
85
  }
92
- case "user": {
93
- const attachments = "attachments" in message ? message.attachments : [];
94
- const content = [
95
- ...message.content,
96
- ...attachments.map((a) => a.content).flat(),
97
- ];
98
- const msg = {
99
- ...(includeId ? { unstable_id: message.id } : {}),
100
- role: "user",
101
- content: content.map((part) => {
102
- const type = part.type;
103
- switch (type) {
104
- case "text": {
105
- return part;
106
- }
107
- case "image": {
108
- // ImageMessagePart doesn't include media type info, so we infer from URL
109
- return {
110
- type: "file",
111
- data: new URL(part.image),
112
- mediaType: inferImageMediaType(part.image),
113
- };
114
- }
115
- case "file": {
116
- return {
117
- type: "file",
118
- data: new URL(part.data),
119
- mediaType: part.mimeType,
120
- };
121
- }
122
- default: {
123
- const unhandledType = type;
124
- throw new Error(`Unsupported message part type: ${unhandledType}`);
125
- }
126
- }
127
- }),
128
- };
129
- return [msg];
130
- }
131
- case "assistant": {
132
- const splitter = assistantMessageSplitter();
133
- for (const part of message.content) {
134
- const type = part.type;
135
- switch (type) {
136
- case "reasoning":
137
- case "source":
138
- case "file":
139
- case "data":
140
- case "image": {
141
- break; // reasoning, source, file, and image parts are omitted
142
- }
143
- case "text": {
144
- splitter.addTextMessagePart(part);
145
- break;
146
- }
147
- case "tool-call": {
148
- splitter.addToolCallPart(part);
149
- break;
150
- }
151
- default: {
152
- const unhandledType = type;
153
- throw new Error(`Unhandled message part type: ${unhandledType}`);
154
- }
155
- }
156
- }
157
- return splitter.getMessages();
158
- }
159
- default: {
160
- const unhandledRole = role;
161
- throw new Error(`Unknown message role: ${unhandledRole}`);
86
+ if (messageIndex < messages.length) {
87
+ converted.unstable_id = messages[messageIndex].id;
88
+ messageIndex++;
162
89
  }
163
90
  }
164
- });
91
+ result.push(converted);
92
+ }
93
+ return result;
165
94
  }
166
95
  //# sourceMappingURL=toLanguageModelMessages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"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"}
@@ -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;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"}
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,EAEnB,MAAM,qBAAqB,CAAC;AAY7B,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;AAqHxB,eAAO,MAAM,oBAAoB,GAC/B,SAAS,2BAA2B,KACnC,gBAQF,CAAC"}
@@ -1,24 +1,9 @@
1
1
  "use client";
2
2
  import { toLanguageModelMessages } from "./converters/index.js";
3
3
  import { INTERNAL, useLocalRuntime, } from "@assistant-ui/react";
4
- import { z } from "zod";
5
- import { AssistantMessageAccumulator, DataStreamDecoder, UIMessageStreamDecoder, unstable_toolResultStream, } from "assistant-stream";
4
+ import { AssistantMessageAccumulator, DataStreamDecoder, toToolsJSONSchema, UIMessageStreamDecoder, unstable_toolResultStream, } from "assistant-stream";
6
5
  import { asAsyncIterableStream } from "assistant-stream/utils";
7
6
  const { splitLocalRuntimeOptions } = INTERNAL;
8
- const toAISDKTools = (tools) => {
9
- return Object.fromEntries(Object.entries(tools).map(([name, tool]) => [
10
- name,
11
- {
12
- ...(tool.description ? { description: tool.description } : undefined),
13
- parameters: (tool.parameters instanceof z.ZodType
14
- ? z.toJSONSchema(tool.parameters)
15
- : tool.parameters),
16
- },
17
- ]));
18
- };
19
- const getEnabledTools = (tools) => {
20
- return Object.fromEntries(Object.entries(tools).filter(([, tool]) => !tool.disabled && tool.type !== "backend"));
21
- };
22
7
  class DataStreamRuntimeAdapter {
23
8
  options;
24
9
  constructor(options) {
@@ -46,7 +31,7 @@ class DataStreamRuntimeAdapter {
46
31
  messages: toLanguageModelMessages(messages, {
47
32
  unstable_includeId: this.options.sendExtraMessageFields,
48
33
  }),
49
- tools: toAISDKTools(getEnabledTools(context.tools ?? {})),
34
+ tools: toToolsJSONSchema(context.tools ?? {}),
50
35
  ...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
51
36
  ...(unstable_threadId ? { threadId: unstable_threadId } : {}),
52
37
  ...(unstable_parentId !== undefined
@@ -1 +1 @@
1
- {"version":3,"file":"useDataStreamRuntime.js","sourceRoot":"","sources":["../src/useDataStreamRuntime.ts"],"names":[],"mappings":"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"}
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.12.0",
3
+ "version": "0.12.2",
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": "^3.0.4",
33
- "assistant-stream": "^0.2.47",
34
- "zod": "^4.3.5"
32
+ "@ai-sdk/provider": "^3.0.5",
33
+ "assistant-stream": "^0.3.0",
34
+ "zod": "^4.3.6"
35
35
  },
36
36
  "peerDependencies": {
37
- "@assistant-ui/react": "^0.11.58",
37
+ "@assistant-ui/react": "^0.12.3",
38
38
  "@types/react": "*",
39
39
  "react": "^18 || ^19"
40
40
  },
@@ -46,9 +46,9 @@
46
46
  "devDependencies": {
47
47
  "@types/json-schema": "^7.0.15",
48
48
  "@types/react": "^19.2.9",
49
- "react": "^19.2.3",
50
- "@assistant-ui/x-buildutils": "0.0.1",
51
- "@assistant-ui/react": "0.11.58"
49
+ "react": "^19.2.4",
50
+ "@assistant-ui/react": "0.12.3",
51
+ "@assistant-ui/x-buildutils": "0.0.1"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public",
@@ -6,201 +6,128 @@ import type {
6
6
  LanguageModelV2ToolCallPart,
7
7
  LanguageModelV2ToolResultPart,
8
8
  } from "@ai-sdk/provider";
9
+ import type { ThreadMessage } from "@assistant-ui/react";
9
10
  import {
10
- TextMessagePart,
11
- ThreadMessage,
12
- ToolCallMessagePart,
13
- } from "@assistant-ui/react";
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
-
34
- const assistantMessageSplitter = () => {
35
- const stash: LanguageModelV2Message[] = [];
36
- let assistantMessage = {
37
- role: "assistant" as const,
38
- content: [] as (LanguageModelV2TextPart | LanguageModelV2ToolCallPart)[],
39
- };
40
- let toolMessage = {
41
- role: "tool" as const,
42
- content: [] as LanguageModelV2ToolResultPart[],
43
- };
44
-
45
- return {
46
- addTextMessagePart: (part: TextMessagePart) => {
47
- if (toolMessage.content.length > 0) {
48
- stash.push(assistantMessage);
49
- stash.push(toolMessage);
50
-
51
- assistantMessage = {
52
- role: "assistant" as const,
53
- content: [] as (
54
- | LanguageModelV2TextPart
55
- | LanguageModelV2ToolCallPart
56
- )[],
57
- };
11
+ toGenericMessages,
12
+ type GenericMessage,
13
+ type GenericTextPart,
14
+ type GenericToolCallPart,
15
+ type GenericToolResultPart,
16
+ } from "assistant-stream";
17
+
18
+ function toUrl(value: string | URL): URL {
19
+ if (value instanceof URL) return value;
20
+ try {
21
+ return new URL(value);
22
+ } catch {
23
+ // For relative URLs, create URL with a dummy base
24
+ return new URL(value, "file://");
25
+ }
26
+ }
58
27
 
59
- toolMessage = {
60
- role: "tool" as const,
61
- content: [] as LanguageModelV2ToolResultPart[],
62
- };
63
- }
28
+ function convertUserContent(
29
+ content: GenericMessage & { role: "user" },
30
+ ): (LanguageModelV2TextPart | LanguageModelV2FilePart)[] {
31
+ return content.content.map((part) => {
32
+ if (part.type === "text") {
33
+ return part;
34
+ }
35
+ return {
36
+ type: "file",
37
+ data: toUrl(part.data),
38
+ mediaType: part.mediaType,
39
+ };
40
+ });
41
+ }
64
42
 
65
- assistantMessage.content.push(part);
66
- },
67
- addToolCallPart: (part: ToolCallMessagePart) => {
68
- assistantMessage.content.push({
69
- type: "tool-call",
70
- toolCallId: part.toolCallId,
71
- toolName: part.toolName,
72
- input: part.args,
73
- });
43
+ function convertAssistantContent(
44
+ content: (GenericTextPart | GenericToolCallPart)[],
45
+ ): (LanguageModelV2TextPart | LanguageModelV2ToolCallPart)[] {
46
+ return content.map((part) => {
47
+ if (part.type === "text") {
48
+ return part;
49
+ }
50
+ return {
51
+ type: "tool-call",
52
+ toolCallId: part.toolCallId,
53
+ toolName: part.toolName,
54
+ input: part.args,
55
+ };
56
+ });
57
+ }
74
58
 
75
- toolMessage.content.push({
76
- type: "tool-result",
77
- toolCallId: part.toolCallId,
78
- toolName: part.toolName,
79
- output:
80
- part.result === undefined
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 },
88
- });
89
- },
90
- getMessages: () => {
91
- if (toolMessage.content.length > 0) {
92
- return [...stash, assistantMessage, toolMessage];
93
- }
59
+ function convertToolContent(
60
+ content: GenericToolResultPart[],
61
+ ): LanguageModelV2ToolResultPart[] {
62
+ return content.map((part) => ({
63
+ type: "tool-result",
64
+ toolCallId: part.toolCallId,
65
+ toolName: part.toolName,
66
+ output: part.isError
67
+ ? { type: "error-json", value: part.result as JSONValue }
68
+ : { type: "json", value: part.result as JSONValue },
69
+ }));
70
+ }
94
71
 
95
- return [...stash, assistantMessage];
96
- },
97
- };
98
- };
72
+ function convertGenericToLanguageModel(
73
+ generic: GenericMessage,
74
+ ): LanguageModelV2Message {
75
+ switch (generic.role) {
76
+ case "system":
77
+ return { role: "system", content: generic.content };
78
+ case "user":
79
+ return { role: "user", content: convertUserContent(generic) };
80
+ case "assistant":
81
+ return {
82
+ role: "assistant",
83
+ content: convertAssistantContent(generic.content),
84
+ };
85
+ case "tool":
86
+ return { role: "tool", content: convertToolContent(generic.content) };
87
+ }
88
+ }
99
89
 
100
90
  /**
101
- * @deprecated This is an internal API and may change without notice.
91
+ * @deprecated Use `toGenericMessages` from `assistant-stream` for framework-agnostic conversion.
92
+ * This function is kept for AI SDK compatibility.
102
93
  */
103
94
  export function toLanguageModelMessages(
104
- message: readonly ThreadMessage[],
95
+ messages: readonly ThreadMessage[],
105
96
  options: { unstable_includeId?: boolean | undefined } = {},
106
97
  ): LanguageModelV2Message[] {
107
98
  const includeId = options.unstable_includeId ?? false;
108
- return message.flatMap((message) => {
109
- const role = message.role;
110
- switch (role) {
111
- case "system": {
112
- return [
113
- {
114
- ...(includeId
115
- ? { unstable_id: (message as ThreadMessage).id }
116
- : {}),
117
- role: "system",
118
- content: message.content[0].text,
119
- },
120
- ];
99
+ const genericMessages = toGenericMessages(messages as any);
100
+
101
+ if (!includeId) {
102
+ return genericMessages.map(convertGenericToLanguageModel);
103
+ }
104
+
105
+ // When includeId is true, we need to map back to original message IDs
106
+ const result: LanguageModelV2Message[] = [];
107
+ let messageIndex = 0;
108
+
109
+ for (const generic of genericMessages) {
110
+ const converted = convertGenericToLanguageModel(generic);
111
+
112
+ // Tool messages are synthesized from assistant message tool calls,
113
+ // they don't have a corresponding original message
114
+ if (generic.role !== "tool") {
115
+ // Find the corresponding original message for ID
116
+ while (
117
+ messageIndex < messages.length &&
118
+ messages[messageIndex]!.role !== generic.role
119
+ ) {
120
+ messageIndex++;
121
121
  }
122
122
 
123
- case "user": {
124
- const attachments = "attachments" in message ? message.attachments : [];
125
- const content = [
126
- ...message.content,
127
- ...attachments.map((a) => a.content).flat(),
128
- ];
129
- const msg: LanguageModelV2Message = {
130
- ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),
131
- role: "user",
132
- content: content.map(
133
- (part): LanguageModelV2TextPart | LanguageModelV2FilePart => {
134
- const type = part.type;
135
- switch (type) {
136
- case "text": {
137
- return part;
138
- }
139
-
140
- case "image": {
141
- // ImageMessagePart doesn't include media type info, so we infer from URL
142
- return {
143
- type: "file",
144
- data: new URL(part.image),
145
- mediaType: inferImageMediaType(part.image),
146
- };
147
- }
148
-
149
- case "file": {
150
- return {
151
- type: "file",
152
- data: new URL(part.data),
153
- mediaType: part.mimeType,
154
- };
155
- }
156
-
157
- default: {
158
- const unhandledType: "audio" = type;
159
- throw new Error(
160
- `Unsupported message part type: ${unhandledType}`,
161
- );
162
- }
163
- }
164
- },
165
- ),
166
- };
167
- return [msg];
123
+ if (messageIndex < messages.length) {
124
+ (converted as any).unstable_id = messages[messageIndex]!.id;
125
+ messageIndex++;
168
126
  }
127
+ }
169
128
 
170
- case "assistant": {
171
- const splitter = assistantMessageSplitter();
172
- for (const part of message.content) {
173
- const type = part.type;
174
- switch (type) {
175
- case "reasoning":
176
- case "source":
177
- case "file":
178
- case "data":
179
- case "image": {
180
- break; // reasoning, source, file, and image parts are omitted
181
- }
182
-
183
- case "text": {
184
- splitter.addTextMessagePart(part);
185
- break;
186
- }
187
- case "tool-call": {
188
- splitter.addToolCallPart(part);
189
- break;
190
- }
191
- default: {
192
- const unhandledType: never = type;
193
- throw new Error(`Unhandled message part type: ${unhandledType}`);
194
- }
195
- }
196
- }
197
- return splitter.getMessages();
198
- }
129
+ result.push(converted);
130
+ }
199
131
 
200
- default: {
201
- const unhandledRole: never = role;
202
- throw new Error(`Unknown message role: ${unhandledRole}`);
203
- }
204
- }
205
- });
132
+ return result;
206
133
  }
@@ -8,14 +8,12 @@ import {
8
8
  INTERNAL,
9
9
  type LocalRuntimeOptions,
10
10
  type ThreadMessage,
11
- type Tool,
12
11
  useLocalRuntime,
13
12
  } from "@assistant-ui/react";
14
- import { z } from "zod";
15
- import type { JSONSchema7 } from "json-schema";
16
13
  import {
17
14
  AssistantMessageAccumulator,
18
15
  DataStreamDecoder,
16
+ toToolsJSONSchema,
19
17
  UIMessageStreamDecoder,
20
18
  unstable_toolResultStream,
21
19
  } from "assistant-stream";
@@ -59,28 +57,6 @@ type DataStreamRuntimeRequestOptions = {
59
57
  state?: any;
60
58
  };
61
59
 
62
- const toAISDKTools = (tools: Record<string, Tool>) => {
63
- return Object.fromEntries(
64
- Object.entries(tools).map(([name, tool]) => [
65
- name,
66
- {
67
- ...(tool.description ? { description: tool.description } : undefined),
68
- parameters: (tool.parameters instanceof z.ZodType
69
- ? z.toJSONSchema(tool.parameters)
70
- : tool.parameters) as JSONSchema7,
71
- },
72
- ]),
73
- );
74
- };
75
-
76
- const getEnabledTools = (tools: Record<string, Tool>) => {
77
- return Object.fromEntries(
78
- Object.entries(tools).filter(
79
- ([, tool]) => !tool.disabled && tool.type !== "backend",
80
- ),
81
- );
82
- };
83
-
84
60
  class DataStreamRuntimeAdapter implements ChatModelAdapter {
85
61
  constructor(
86
62
  private options: Omit<
@@ -129,8 +105,8 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
129
105
  messages: toLanguageModelMessages(messages, {
130
106
  unstable_includeId: this.options.sendExtraMessageFields,
131
107
  }) as DataStreamRuntimeRequestOptions["messages"],
132
- tools: toAISDKTools(
133
- getEnabledTools(context.tools ?? {}),
108
+ tools: toToolsJSONSchema(
109
+ context.tools ?? {},
134
110
  ) as unknown as DataStreamRuntimeRequestOptions["tools"],
135
111
  ...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
136
112
  ...(unstable_threadId ? { threadId: unstable_threadId } : {}),