@assistant-ui/react 0.7.28 → 0.7.29

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.
Files changed (130) hide show
  1. package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
  2. package/dist/context/providers/AssistantRuntimeProvider.js +12 -9
  3. package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
  4. package/dist/context/providers/AssistantRuntimeProvider.mjs +14 -11
  5. package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
  6. package/dist/runtimes/core/AssistantRuntimeCore.d.ts +4 -5
  7. package/dist/runtimes/core/AssistantRuntimeCore.d.ts.map +1 -1
  8. package/dist/runtimes/core/AssistantRuntimeCore.js.map +1 -1
  9. package/dist/runtimes/core/BaseAssistantRuntimeCore.d.ts +0 -2
  10. package/dist/runtimes/core/BaseAssistantRuntimeCore.d.ts.map +1 -1
  11. package/dist/runtimes/core/BaseAssistantRuntimeCore.js.map +1 -1
  12. package/dist/runtimes/core/BaseAssistantRuntimeCore.mjs.map +1 -1
  13. package/dist/runtimes/core/ThreadRuntimeCore.d.ts +0 -4
  14. package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
  15. package/dist/runtimes/core/ThreadRuntimeCore.js.map +1 -1
  16. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +1 -1
  17. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts +26 -26
  18. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts.map +1 -1
  19. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +5 -5
  20. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js.map +1 -1
  21. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs +5 -5
  22. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs.map +1 -1
  23. package/dist/runtimes/edge/converters/fromCoreMessage.js +1 -1
  24. package/dist/runtimes/edge/converters/fromCoreMessage.js.map +1 -1
  25. package/dist/runtimes/edge/converters/fromCoreMessage.mjs +1 -1
  26. package/dist/runtimes/edge/converters/fromCoreMessage.mjs.map +1 -1
  27. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +1 -1
  28. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +4 -1
  29. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +1 -1
  30. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +4 -1
  31. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +1 -1
  32. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +1 -1
  33. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +3 -4
  34. package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +1 -1
  35. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +3 -4
  36. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +1 -1
  37. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts +4 -2
  38. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts.map +1 -1
  39. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js +1 -0
  40. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js.map +1 -1
  41. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs +1 -0
  42. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs.map +1 -1
  43. package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts.map +1 -1
  44. package/dist/runtimes/edge/streams/assistantDecoderStream.js +7 -1
  45. package/dist/runtimes/edge/streams/assistantDecoderStream.js.map +1 -1
  46. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs +7 -1
  47. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs.map +1 -1
  48. package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts.map +1 -1
  49. package/dist/runtimes/edge/streams/assistantEncoderStream.js +7 -0
  50. package/dist/runtimes/edge/streams/assistantEncoderStream.js.map +1 -1
  51. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs +7 -0
  52. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs.map +1 -1
  53. package/dist/runtimes/edge/streams/runResultStream.d.ts +2 -2
  54. package/dist/runtimes/edge/streams/runResultStream.d.ts.map +1 -1
  55. package/dist/runtimes/edge/streams/runResultStream.js +17 -2
  56. package/dist/runtimes/edge/streams/runResultStream.js.map +1 -1
  57. package/dist/runtimes/edge/streams/runResultStream.mjs +17 -2
  58. package/dist/runtimes/edge/streams/runResultStream.mjs.map +1 -1
  59. package/dist/runtimes/edge/streams/toolResultStream.d.ts +4 -1
  60. package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
  61. package/dist/runtimes/edge/streams/toolResultStream.js +1 -0
  62. package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
  63. package/dist/runtimes/edge/streams/toolResultStream.mjs +1 -0
  64. package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
  65. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +0 -6
  66. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  67. package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
  68. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts +0 -3
  69. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -1
  70. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js +0 -15
  71. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js.map +1 -1
  72. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs +0 -15
  73. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs.map +1 -1
  74. package/dist/runtimes/external-store/ThreadMessageLike.d.ts +4 -3
  75. package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
  76. package/dist/runtimes/external-store/ThreadMessageLike.js +1 -0
  77. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  78. package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -0
  79. package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
  80. package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
  81. package/dist/runtimes/external-store/external-message-converter.mjs.map +1 -1
  82. package/dist/runtimes/local/ChatModelAdapter.d.ts +5 -1
  83. package/dist/runtimes/local/ChatModelAdapter.d.ts.map +1 -1
  84. package/dist/runtimes/local/ChatModelAdapter.js.map +1 -1
  85. package/dist/runtimes/local/LocalThreadRuntimeCore.js +1 -1
  86. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  87. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +1 -1
  88. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  89. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +3 -3
  90. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  91. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +13 -14
  92. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  93. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +11 -14
  94. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -1
  95. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts +2 -2
  96. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  97. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js.map +1 -1
  98. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs.map +1 -1
  99. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -1
  100. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js +2 -2
  101. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js.map +1 -1
  102. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs +2 -2
  103. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs.map +1 -1
  104. package/dist/types/AssistantTypes.d.ts +10 -8
  105. package/dist/types/AssistantTypes.d.ts.map +1 -1
  106. package/dist/types/AssistantTypes.js.map +1 -1
  107. package/package.json +3 -3
  108. package/src/context/providers/AssistantRuntimeProvider.tsx +9 -12
  109. package/src/runtimes/core/AssistantRuntimeCore.tsx +4 -5
  110. package/src/runtimes/core/BaseAssistantRuntimeCore.tsx +0 -4
  111. package/src/runtimes/core/ThreadRuntimeCore.tsx +5 -4
  112. package/src/runtimes/edge/EdgeRuntimeRequestOptions.ts +7 -5
  113. package/src/runtimes/edge/converters/fromCoreMessage.ts +1 -1
  114. package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +4 -1
  115. package/src/runtimes/edge/createEdgeRuntimeAPI.ts +6 -11
  116. package/src/runtimes/edge/streams/AssistantStreamChunkType.ts +4 -3
  117. package/src/runtimes/edge/streams/assistantDecoderStream.ts +8 -1
  118. package/src/runtimes/edge/streams/assistantEncoderStream.ts +8 -0
  119. package/src/runtimes/edge/streams/runResultStream.ts +38 -15
  120. package/src/runtimes/edge/streams/toolResultStream.ts +6 -1
  121. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +0 -8
  122. package/src/runtimes/external-store/ExternalStoreRuntimeCore.tsx +0 -20
  123. package/src/runtimes/external-store/ThreadMessageLike.tsx +5 -3
  124. package/src/runtimes/external-store/external-message-converter.tsx +1 -1
  125. package/src/runtimes/local/ChatModelAdapter.tsx +7 -0
  126. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +1 -1
  127. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +11 -15
  128. package/src/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.tsx +1 -1
  129. package/src/runtimes/remote-thread-list/useRemoteThreadListRuntime.tsx +7 -3
  130. package/src/types/AssistantTypes.ts +10 -8
@@ -131,8 +131,15 @@ export function assistantDecoderStream() {
131
131
  break;
132
132
  }
133
133
 
134
- // TODO
135
134
  case AssistantStreamChunkType.Data:
135
+ controller.enqueue({
136
+ type: "data",
137
+ data: value,
138
+ });
139
+ break;
140
+
141
+ // TODO
142
+ case AssistantStreamChunkType.Annotation:
136
143
  break;
137
144
 
138
145
  default: {
@@ -44,6 +44,14 @@ export function assistantEncoderStream() {
44
44
  break;
45
45
  }
46
46
 
47
+ case "data": {
48
+ controller.enqueue({
49
+ type: AssistantStreamChunkType.Data,
50
+ value: chunk.data,
51
+ });
52
+ break;
53
+ }
54
+
47
55
  // ignore
48
56
  case "tool-call":
49
57
  case "response-metadata":
@@ -1,16 +1,16 @@
1
- import { ChatModelRunResult } from "../../local/ChatModelAdapter";
1
+ import { CoreChatModelRunResult } from "../../local/ChatModelAdapter";
2
2
  import { parsePartialJson } from "../partial-json/parse-partial-json";
3
3
  import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
4
4
  import { ToolResultStreamPart } from "./toolResultStream";
5
5
  import { MessageStatus, ToolCallContentPart } from "../../../types";
6
6
 
7
7
  export function runResultStream() {
8
- let message: ChatModelRunResult = {
8
+ let message: CoreChatModelRunResult = {
9
9
  content: [],
10
10
  status: { type: "running" },
11
11
  };
12
12
 
13
- return new TransformStream<ToolResultStreamPart, ChatModelRunResult>({
13
+ return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({
14
14
  transform(chunk, controller) {
15
15
  const chunkType = chunk.type;
16
16
  switch (chunkType) {
@@ -34,9 +34,16 @@ export function runResultStream() {
34
34
  }
35
35
 
36
36
  case "tool-call":
37
+ // ignoring tool call events because they are converted to tool-call-delta as well
37
38
  case "response-metadata":
38
39
  break;
39
40
 
41
+ case "data": {
42
+ message = appendData(message, chunk);
43
+ controller.enqueue(message);
44
+ break;
45
+ }
46
+
40
47
  case "tool-result": {
41
48
  message = appendOrUpdateToolResult(
42
49
  message,
@@ -48,7 +55,7 @@ export function runResultStream() {
48
55
  break;
49
56
  }
50
57
  case "step-finish": {
51
- message = appendOrUpdateStepFinish(message, chunk);
58
+ message = appendStepFinish(message, chunk);
52
59
  controller.enqueue(message);
53
60
  break;
54
61
  }
@@ -92,7 +99,10 @@ export function runResultStream() {
92
99
  });
93
100
  }
94
101
 
95
- const appendOrUpdateText = (message: ChatModelRunResult, textDelta: string) => {
102
+ const appendOrUpdateText = (
103
+ message: CoreChatModelRunResult,
104
+ textDelta: string,
105
+ ) => {
96
106
  let contentParts = message.content ?? [];
97
107
  let contentPart = message.content?.at(-1);
98
108
  if (contentPart?.type !== "text") {
@@ -108,11 +118,11 @@ const appendOrUpdateText = (message: ChatModelRunResult, textDelta: string) => {
108
118
  };
109
119
 
110
120
  const appendOrUpdateToolCall = (
111
- message: ChatModelRunResult,
121
+ message: CoreChatModelRunResult,
112
122
  toolCallId: string,
113
123
  toolName: string,
114
124
  argsTextDelta: string,
115
- ): ChatModelRunResult => {
125
+ ): CoreChatModelRunResult => {
116
126
  let contentParts = message.content ?? [];
117
127
  const contentPartIdx = contentParts.findIndex(
118
128
  (c) => c.type === "tool-call" && c.toolCallId === toolCallId,
@@ -152,7 +162,7 @@ const appendOrUpdateToolCall = (
152
162
  };
153
163
 
154
164
  const appendOrUpdateToolResult = (
155
- message: ChatModelRunResult,
165
+ message: CoreChatModelRunResult,
156
166
  toolCallId: string,
157
167
  toolName: string,
158
168
  result: any,
@@ -184,10 +194,23 @@ const appendOrUpdateToolResult = (
184
194
  };
185
195
  };
186
196
 
187
- const appendOrUpdateStepFinish = (
188
- message: ChatModelRunResult,
197
+ const appendData = (
198
+ message: CoreChatModelRunResult,
199
+ chunk: ToolResultStreamPart & { type: "data" },
200
+ ): CoreChatModelRunResult => {
201
+ return {
202
+ ...message,
203
+ metadata: {
204
+ ...message.metadata,
205
+ unstable_data: [...(message.metadata?.unstable_data ?? []), chunk.data],
206
+ },
207
+ };
208
+ };
209
+
210
+ const appendStepFinish = (
211
+ message: CoreChatModelRunResult,
189
212
  chunk: ToolResultStreamPart & { type: "step-finish" },
190
- ): ChatModelRunResult => {
213
+ ): CoreChatModelRunResult => {
191
214
  const { type, ...rest } = chunk;
192
215
  const steps = [
193
216
  ...(message.metadata?.steps ?? []),
@@ -205,9 +228,9 @@ const appendOrUpdateStepFinish = (
205
228
  };
206
229
 
207
230
  const appendOrUpdateFinish = (
208
- message: ChatModelRunResult,
231
+ message: CoreChatModelRunResult,
209
232
  chunk: LanguageModelV1StreamPart & { type: "finish" },
210
- ): ChatModelRunResult => {
233
+ ): CoreChatModelRunResult => {
211
234
  const { type, ...rest } = chunk;
212
235
 
213
236
  const steps = [
@@ -254,8 +277,8 @@ const getStatus = (
254
277
  };
255
278
 
256
279
  const appendOrUpdateCancel = (
257
- message: ChatModelRunResult,
258
- ): ChatModelRunResult => {
280
+ message: CoreChatModelRunResult,
281
+ ): CoreChatModelRunResult => {
259
282
  return {
260
283
  ...message,
261
284
  status: {
@@ -1,10 +1,14 @@
1
1
  import { Tool } from "../../../types/ModelConfigTypes";
2
- import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
2
+ import { JSONValue, LanguageModelV1StreamPart } from "@ai-sdk/provider";
3
3
  import { z } from "zod";
4
4
  import sjson from "secure-json-parse";
5
5
 
6
6
  export type ToolResultStreamPart =
7
7
  | LanguageModelV1StreamPart
8
+ | {
9
+ type: "data";
10
+ data: JSONValue[];
11
+ }
8
12
  | {
9
13
  type: "tool-result";
10
14
  toolCallType: "function";
@@ -107,6 +111,7 @@ export function toolResultStream(
107
111
  case "finish":
108
112
  case "error":
109
113
  case "response-metadata":
114
+ case "data":
110
115
  break;
111
116
 
112
117
  default: {
@@ -1,4 +1,3 @@
1
- import { PropsWithChildren } from "react";
2
1
  import { AppendMessage, ThreadMessage } from "../../types";
3
2
  import { AttachmentAdapter } from "../attachment";
4
3
  import {
@@ -54,11 +53,6 @@ type ExternalStoreAdapterBase<T> = {
54
53
  isRunning?: boolean | undefined;
55
54
  messages: T[];
56
55
  suggestions?: readonly ThreadSuggestion[] | undefined;
57
-
58
- /**
59
- * @deprecated This field is deprecated and will be removed in 0.8.0.
60
- * Please migrate to `Provider` and a custom react context provider component instead.
61
- */
62
56
  extras?: unknown;
63
57
 
64
58
  setMessages?: ((messages: T[]) => void) | undefined;
@@ -88,8 +82,6 @@ type ExternalStoreAdapterBase<T> = {
88
82
  copy?: boolean | undefined;
89
83
  }
90
84
  | undefined;
91
-
92
- unstable_Provider?: React.ComponentType<PropsWithChildren> | undefined;
93
85
  };
94
86
 
95
87
  export type ExternalStoreAdapter<T = ThreadMessage> =
@@ -2,9 +2,6 @@ import { BaseAssistantRuntimeCore } from "../../internal";
2
2
  import { ExternalStoreThreadListRuntimeCore } from "./ExternalStoreThreadListRuntimeCore";
3
3
  import { ExternalStoreAdapter } from "./ExternalStoreAdapter";
4
4
  import { ExternalStoreThreadRuntimeCore } from "./ExternalStoreThreadRuntimeCore";
5
- import { Fragment } from "react/jsx-runtime";
6
- import { PropsWithChildren } from "react";
7
- import { create } from "zustand";
8
5
 
9
6
  const getThreadListAdapter = (store: ExternalStoreAdapter<any>) => {
10
7
  return {
@@ -15,13 +12,8 @@ const getThreadListAdapter = (store: ExternalStoreAdapter<any>) => {
15
12
  export class ExternalStoreRuntimeCore extends BaseAssistantRuntimeCore {
16
13
  public readonly threadList;
17
14
 
18
- private useRenderComponent;
19
-
20
15
  constructor(adapter: ExternalStoreAdapter<any>) {
21
16
  super();
22
- this.useRenderComponent = create(() => ({
23
- RenderComponent: adapter.unstable_Provider ?? Fragment,
24
- }));
25
17
  this.threadList = new ExternalStoreThreadListRuntimeCore(
26
18
  getThreadListAdapter(adapter),
27
19
  () =>
@@ -33,17 +25,5 @@ export class ExternalStoreRuntimeCore extends BaseAssistantRuntimeCore {
33
25
  // Update the thread list adapter and propagate store changes to the main thread
34
26
  this.threadList.__internal_setAdapter(getThreadListAdapter(adapter));
35
27
  this.threadList.getMainThreadRuntimeCore().__internal_setAdapter(adapter);
36
-
37
- const RenderComponent = adapter.unstable_Provider ?? Fragment;
38
- if (
39
- RenderComponent !== this.useRenderComponent.getState().RenderComponent
40
- ) {
41
- this.useRenderComponent.setState({ RenderComponent }, true);
42
- }
43
28
  }
44
-
45
- public readonly Provider = ({ children }: PropsWithChildren) => {
46
- const RenderComponent = this.useRenderComponent.getState().RenderComponent;
47
- return <RenderComponent>{children}</RenderComponent>;
48
- };
49
29
  }
@@ -22,7 +22,7 @@ export type ThreadMessageLike = {
22
22
  role: "assistant" | "user" | "system";
23
23
  content:
24
24
  | string
25
- | (
25
+ | readonly (
26
26
  | TextContentPart
27
27
  | ImageContentPart
28
28
  | Unstable_AudioContentPart
@@ -33,9 +33,10 @@ export type ThreadMessageLike = {
33
33
  id?: string | undefined;
34
34
  createdAt?: Date | undefined;
35
35
  status?: MessageStatus | undefined;
36
- attachments?: CompleteAttachment[] | undefined;
36
+ attachments?: readonly CompleteAttachment[] | undefined;
37
37
  metadata?: {
38
- steps?: ThreadStep[] | undefined;
38
+ unstable_data?: readonly Record<string, unknown>[] | undefined;
39
+ steps?: readonly ThreadStep[] | undefined;
39
40
  custom?: Record<string, unknown> | undefined;
40
41
  };
41
42
  };
@@ -98,6 +99,7 @@ export const fromThreadMessageLike = (
98
99
  .filter((c) => !!c),
99
100
  status: status ?? fallbackStatus,
100
101
  metadata: {
102
+ unstable_data: metadata?.unstable_data ?? [],
101
103
  custom: metadata?.custom ?? {},
102
104
  steps: metadata?.steps ?? [],
103
105
  },
@@ -32,7 +32,7 @@ type ChunkResult<T> = {
32
32
  };
33
33
 
34
34
  const joinExternalMessages = (
35
- messages: useExternalMessageConverter.Message[],
35
+ messages: readonly useExternalMessageConverter.Message[],
36
36
  ): ThreadMessageLike => {
37
37
  const assistantMessage: ThreadMessageLike & { content: any[] } = {
38
38
  role: "assistant",
@@ -3,9 +3,11 @@
3
3
  import type {
4
4
  MessageStatus,
5
5
  RunConfig,
6
+ TextContentPart,
6
7
  ThreadAssistantContentPart,
7
8
  ThreadMessage,
8
9
  ThreadStep,
10
+ ToolCallContentPart,
9
11
  } from "../../types/AssistantTypes";
10
12
  import type { ModelConfig } from "../../types/ModelConfigTypes";
11
13
 
@@ -18,11 +20,16 @@ export type ChatModelRunResult = {
18
20
  content?: ThreadAssistantContentPart[] | undefined;
19
21
  status?: MessageStatus | undefined;
20
22
  metadata?: {
23
+ unstable_data?: unknown[] | undefined;
21
24
  steps?: ThreadStep[] | undefined;
22
25
  custom?: Record<string, unknown> | undefined;
23
26
  };
24
27
  };
25
28
 
29
+ export type CoreChatModelRunResult = Omit<ChatModelRunResult, "content"> & {
30
+ content: (TextContentPart | ToolCallContentPart)[];
31
+ };
32
+
26
33
  export type ChatModelRunOptions = {
27
34
  messages: ThreadMessage[];
28
35
  runConfig: RunConfig;
@@ -120,7 +120,7 @@ export class LocalThreadRuntimeCore
120
120
  role: "assistant",
121
121
  status: { type: "running" },
122
122
  content: [],
123
- metadata: { steps: [], custom: {} },
123
+ metadata: { unstable_data: [], steps: [], custom: {} },
124
124
  createdAt: new Date(),
125
125
  };
126
126
 
@@ -5,7 +5,7 @@ import { RemoteThreadListHookInstanceManager } from "./RemoteThreadListHookInsta
5
5
  import { BaseSubscribable } from "./BaseSubscribable";
6
6
  import { EMPTY_THREAD_CORE } from "./EMPTY_THREAD_CORE";
7
7
  import { OptimisticState } from "./OptimisticState";
8
- import { FC, Fragment, PropsWithChildren, useEffect, useId } from "react";
8
+ import { FC, Fragment, useEffect, useId } from "react";
9
9
  import { create } from "zustand";
10
10
  import { CloudInitializeResponse } from "./cloud/CloudContext";
11
11
 
@@ -152,8 +152,8 @@ export class RemoteThreadListThreadListRuntimeCore
152
152
  this._hookManager = new RemoteThreadListHookInstanceManager(
153
153
  adapter.runtimeHook,
154
154
  );
155
- this.useRenderComponent = create(() => ({
156
- RenderComponent: adapter.unstable_Provider ?? Fragment,
155
+ this.useProvider = create(() => ({
156
+ Provider: adapter.unstable_Provider ?? Fragment,
157
157
  }));
158
158
  this.__internal_setAdapter(adapter);
159
159
 
@@ -220,7 +220,7 @@ export class RemoteThreadListThreadListRuntimeCore
220
220
  this.switchToNewThread();
221
221
  }
222
222
 
223
- private useRenderComponent;
223
+ private useProvider;
224
224
 
225
225
  public __internal_setAdapter(adapter: RemoteThreadListAdapter) {
226
226
  if (this._adapter === adapter) return;
@@ -229,11 +229,9 @@ export class RemoteThreadListThreadListRuntimeCore
229
229
  this._disposeOldAdapter?.();
230
230
  this._disposeOldAdapter = this._adapter.onInitialize(this._onInitialize);
231
231
 
232
- const RenderComponent = adapter.unstable_Provider ?? Fragment;
233
- if (
234
- RenderComponent !== this.useRenderComponent.getState().RenderComponent
235
- ) {
236
- this.useRenderComponent.setState({ RenderComponent }, true);
232
+ const Provider = adapter.unstable_Provider ?? Fragment;
233
+ if (Provider !== this.useProvider.getState().Provider) {
234
+ this.useProvider.setState({ Provider }, true);
237
235
  }
238
236
 
239
237
  this._hookManager.setRuntimeHook(adapter.runtimeHook);
@@ -454,7 +452,7 @@ export class RemoteThreadListThreadListRuntimeCore
454
452
 
455
453
  private useBoundIds = create<string[]>(() => []);
456
454
 
457
- public __internal_Provider: FC<PropsWithChildren> = ({ children }) => {
455
+ public __internal_RenderComponent: FC = () => {
458
456
  const id = useId();
459
457
  useEffect(() => {
460
458
  this.useBoundIds.setState((s) => [...s, id], true);
@@ -464,17 +462,15 @@ export class RemoteThreadListThreadListRuntimeCore
464
462
  }, []);
465
463
 
466
464
  const boundIds = this.useBoundIds();
467
- const { RenderComponent } = this.useRenderComponent();
465
+ const { Provider } = this.useProvider();
468
466
 
469
467
  return (
470
- <RenderComponent>
468
+ <Provider>
471
469
  {(boundIds.length === 0 || boundIds[0] === id) && (
472
470
  // only render if the component is the first one mounted
473
471
  <this._hookManager.__internal_RenderThreadRuntimes />
474
472
  )}
475
-
476
- {children}
477
- </RenderComponent>
473
+ </Provider>
478
474
  );
479
475
  };
480
476
  }
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
 
3
- import { AssistantRuntime } from "@assistant-ui/react";
4
3
  import { PropsWithChildren, useEffect, useMemo, useRef } from "react";
5
4
  import { useRemoteThreadListRuntime } from "../useRemoteThreadListRuntime";
6
5
  import { AssistantCloud } from "./AssistantCloud";
7
6
  import { CloudContext, CloudInitializeResponse } from "./CloudContext";
7
+ import { AssistantRuntime } from "../../../api";
8
8
 
9
9
  type ThreadData = {
10
10
  externalId: string;
@@ -3,8 +3,12 @@ import { BaseAssistantRuntimeCore } from "../core/BaseAssistantRuntimeCore";
3
3
  import { RemoteThreadListThreadListRuntimeCore } from "./RemoteThreadListThreadListRuntimeCore";
4
4
  import { RemoteThreadListAdapter } from "./types";
5
5
  import { AssistantRuntimeImpl } from "../../internal";
6
+ import { AssistantRuntimeCore } from "../core/AssistantRuntimeCore";
6
7
 
7
- class RemoteThreadListRuntimeCore extends BaseAssistantRuntimeCore {
8
+ class RemoteThreadListRuntimeCore
9
+ extends BaseAssistantRuntimeCore
10
+ implements AssistantRuntimeCore
11
+ {
8
12
  public readonly threadList;
9
13
 
10
14
  constructor(adapter: RemoteThreadListAdapter) {
@@ -12,8 +16,8 @@ class RemoteThreadListRuntimeCore extends BaseAssistantRuntimeCore {
12
16
  this.threadList = new RemoteThreadListThreadListRuntimeCore(adapter);
13
17
  }
14
18
 
15
- public get Provider() {
16
- return this.threadList.__internal_Provider;
19
+ public get RenderComponent() {
20
+ return this.threadList.__internal_RenderComponent;
17
21
  }
18
22
  }
19
23
 
@@ -121,7 +121,7 @@ export type MessageStatus =
121
121
 
122
122
  export type ThreadSystemMessage = MessageCommonProps & {
123
123
  readonly role: "system";
124
- readonly content: [TextContentPart];
124
+ readonly content: readonly [TextContentPart];
125
125
  readonly metadata: {
126
126
  readonly custom: Record<string, unknown>;
127
127
  };
@@ -129,7 +129,7 @@ export type ThreadSystemMessage = MessageCommonProps & {
129
129
 
130
130
  export type ThreadUserMessage = MessageCommonProps & {
131
131
  readonly role: "user";
132
- readonly content: ThreadUserContentPart[];
132
+ readonly content: readonly ThreadUserContentPart[];
133
133
  readonly attachments: readonly CompleteAttachment[];
134
134
  readonly metadata: {
135
135
  readonly custom: Record<string, unknown>;
@@ -138,10 +138,11 @@ export type ThreadUserMessage = MessageCommonProps & {
138
138
 
139
139
  export type ThreadAssistantMessage = MessageCommonProps & {
140
140
  readonly role: "assistant";
141
- readonly content: ThreadAssistantContentPart[];
141
+ readonly content: readonly ThreadAssistantContentPart[];
142
142
  readonly status: MessageStatus;
143
143
  readonly metadata: {
144
- readonly steps: ThreadStep[];
144
+ readonly unstable_data: readonly unknown[];
145
+ readonly steps: readonly ThreadStep[];
145
146
  readonly custom: Record<string, unknown>;
146
147
  };
147
148
  };
@@ -162,7 +163,8 @@ export type AppendMessage = CoreMessage & {
162
163
  type BaseThreadMessage = {
163
164
  readonly status?: ThreadAssistantMessage["status"];
164
165
  readonly metadata: {
165
- readonly steps?: ThreadStep[];
166
+ readonly unstable_data?: readonly unknown[];
167
+ readonly steps?: readonly ThreadStep[];
166
168
  readonly custom: Record<string, unknown>;
167
169
  };
168
170
  readonly attachments?: ThreadUserMessage["attachments"];
@@ -183,17 +185,17 @@ export type CoreAssistantContentPart =
183
185
 
184
186
  export type CoreSystemMessage = {
185
187
  role: "system";
186
- content: [TextContentPart];
188
+ content: readonly [TextContentPart];
187
189
  };
188
190
 
189
191
  export type CoreUserMessage = {
190
192
  role: "user";
191
- content: CoreUserContentPart[];
193
+ content: readonly CoreUserContentPart[];
192
194
  };
193
195
 
194
196
  export type CoreAssistantMessage = {
195
197
  role: "assistant";
196
- content: CoreAssistantContentPart[];
198
+ content: readonly CoreAssistantContentPart[];
197
199
  };
198
200
 
199
201
  export type CoreMessage =