@assistant-ui/react 0.7.28 → 0.7.29

Sign up to get free protection for your applications and to get access to all the features.
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 =