@assistant-ui/react-data-stream 0.11.13 → 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.
@@ -1,9 +1,9 @@
1
- import { LanguageModelV1Message } from "@ai-sdk/provider";
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
- }): LanguageModelV1Message[];
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,EAGL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAiE7B;;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,CAuG1B"}
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
- args: part.args,
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
- ...("artifact" in part ? { artifact: part.artifact } : {}),
39
- result: part.result === undefined
40
- ? "Error: tool is has no configured code to run"
41
- : part.result,
42
- isError: part.isError ?? part.result === undefined,
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: "image",
90
- image: new URL(part.image),
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
- mimeType: part.mimeType,
119
+ mediaType: part.mimeType,
98
120
  };
99
121
  }
100
122
  default: {
101
123
  const unhandledType = type;
102
- throw new Error(`Unspported message part type: ${unhandledType}`);
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":"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"}
1
+ {"version":3,"file":"toLanguageModelMessages.js","sourceRoot":"","sources":["../../src/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,24 @@
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;
8
18
  onCancel?: () => void;
9
19
  credentials?: RequestCredentials;
10
20
  headers?: HeadersValue | (() => Promise<HeadersValue>);
11
- body?: object;
21
+ body?: object | (() => Promise<object | undefined>);
12
22
  sendExtraMessageFields?: boolean;
13
23
  } & LocalRuntimeOptions;
14
24
  export declare const useDataStreamRuntime: (options: UseDataStreamRuntimeOptions) => AssistantRuntime;
@@ -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;AAY7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,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,CAAC;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,mBAAmB,CAAC;AAsHxB,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,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,10 +24,13 @@ 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;
31
+ const bodyValue = typeof this.options.body === "function"
32
+ ? await this.options.body()
33
+ : this.options.body;
31
34
  abortSignal.addEventListener("abort", () => {
32
35
  if (!abortSignal.reason?.detach)
33
36
  this.options.onCancel?.();
@@ -45,11 +48,15 @@ class DataStreamRuntimeAdapter {
45
48
  }),
46
49
  tools: toAISDKTools(getEnabledTools(context.tools ?? {})),
47
50
  ...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
51
+ ...(unstable_threadId ? { threadId: unstable_threadId } : {}),
52
+ ...(unstable_parentId !== undefined
53
+ ? { parentId: unstable_parentId }
54
+ : {}),
48
55
  runConfig,
49
56
  state: unstable_getMessage().metadata.unstable_state || undefined,
50
57
  ...context.callSettings,
51
58
  ...context.config,
52
- ...this.options.body,
59
+ ...(bodyValue ?? {}),
53
60
  }),
54
61
  signal: abortSignal,
55
62
  });
@@ -61,8 +68,12 @@ class DataStreamRuntimeAdapter {
61
68
  if (!result.body) {
62
69
  throw new Error("Response body is null");
63
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();
64
75
  const stream = result.body
65
- .pipeThrough(new DataStreamDecoder())
76
+ .pipeThrough(decoder)
66
77
  .pipeThrough(unstable_toolResultStream(context.tools, abortSignal, () => {
67
78
  throw new Error("Tool interrupt is not supported in data stream runtime");
68
79
  }))
@@ -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.11.13",
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": "^1.1.3",
33
- "assistant-stream": "^0.2.46",
34
- "zod": "^4.2.1"
32
+ "@ai-sdk/provider": "^3.0.4",
33
+ "assistant-stream": "^0.2.47",
34
+ "zod": "^4.3.5"
35
35
  },
36
36
  "peerDependencies": {
37
- "@assistant-ui/react": "^0.11.53",
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.7",
49
- "react": "19.2.3",
50
- "@assistant-ui/react": "0.11.53",
51
- "@assistant-ui/x-buildutils": "0.0.1"
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"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public",
@@ -1,10 +1,10 @@
1
- import {
2
- LanguageModelV1FilePart,
3
- LanguageModelV1ImagePart,
4
- LanguageModelV1Message,
5
- LanguageModelV1TextPart,
6
- LanguageModelV1ToolCallPart,
7
- LanguageModelV1ToolResultPart,
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: LanguageModelV1Message[] = [];
35
+ const stash: LanguageModelV2Message[] = [];
17
36
  let assistantMessage = {
18
37
  role: "assistant" as const,
19
- content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],
38
+ content: [] as (LanguageModelV2TextPart | LanguageModelV2ToolCallPart)[],
20
39
  };
21
40
  let toolMessage = {
22
41
  role: "tool" as const,
23
- content: [] as LanguageModelV1ToolResultPart[],
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
- | LanguageModelV1TextPart
36
- | LanguageModelV1ToolCallPart
54
+ | LanguageModelV2TextPart
55
+ | LanguageModelV2ToolCallPart
37
56
  )[],
38
57
  };
39
58
 
40
59
  toolMessage = {
41
60
  role: "tool" as const,
42
- content: [] as LanguageModelV1ToolResultPart[],
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
- args: part.args,
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
- ...("artifact" in part ? { artifact: part.artifact } : {}),
61
- result:
79
+ output:
62
80
  part.result === undefined
63
- ? "Error: tool is has no configured code to run"
64
- : part.result,
65
- isError: part.isError ?? 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 },
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
- ): LanguageModelV1Message[] {
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: LanguageModelV1Message = {
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: "image",
126
- image: new URL(part.image),
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
- mimeType: part.mimeType,
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
- `Unspported message part type: ${unhandledType}`,
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,15 +25,26 @@ 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;
32
44
  onCancel?: () => void;
33
45
  credentials?: RequestCredentials;
34
46
  headers?: HeadersValue | (() => Promise<HeadersValue>);
35
- body?: object;
47
+ body?: object | (() => Promise<object | undefined>);
36
48
  sendExtraMessageFields?: boolean;
37
49
  } & LocalRuntimeOptions;
38
50
 
@@ -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 =
@@ -88,6 +104,11 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
88
104
  ? await this.options.headers()
89
105
  : this.options.headers;
90
106
 
107
+ const bodyValue =
108
+ typeof this.options.body === "function"
109
+ ? await this.options.body()
110
+ : this.options.body;
111
+
91
112
  abortSignal.addEventListener(
92
113
  "abort",
93
114
  () => {
@@ -112,11 +133,15 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
112
133
  getEnabledTools(context.tools ?? {}),
113
134
  ) as unknown as DataStreamRuntimeRequestOptions["tools"],
114
135
  ...(unstable_assistantMessageId ? { unstable_assistantMessageId } : {}),
136
+ ...(unstable_threadId ? { threadId: unstable_threadId } : {}),
137
+ ...(unstable_parentId !== undefined
138
+ ? { parentId: unstable_parentId }
139
+ : {}),
115
140
  runConfig,
116
141
  state: unstable_getMessage().metadata.unstable_state || undefined,
117
142
  ...context.callSettings,
118
143
  ...context.config,
119
- ...this.options.body,
144
+ ...(bodyValue ?? {}),
120
145
  } satisfies DataStreamRuntimeRequestOptions),
121
146
  signal: abortSignal,
122
147
  });
@@ -131,8 +156,16 @@ class DataStreamRuntimeAdapter implements ChatModelAdapter {
131
156
  throw new Error("Response body is null");
132
157
  }
133
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
+
134
167
  const stream = result.body
135
- .pipeThrough(new DataStreamDecoder())
168
+ .pipeThrough(decoder)
136
169
  .pipeThrough(
137
170
  unstable_toolResultStream(context.tools, abortSignal, () => {
138
171
  throw new Error(