@assistant-ui/react 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.mts CHANGED
@@ -1,10 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import { FC, ReactNode, PropsWithChildren, ComponentType } from 'react';
3
3
  import { TextareaAutosizeProps } from 'react-textarea-autosize';
4
- import { T as TextContentPart, I as ImageContentPart, U as UIContentPart, a as ToolCallContentPart } from './ModelConfigTypes-B9UY4zxv.mjs';
5
- export { g as AppendContentPart, d as AppendMessage, e as AssistantContentPart, A as AssistantMessage, b as ThreadMessage, f as UserContentPart, c as UserMessage } from './ModelConfigTypes-B9UY4zxv.mjs';
6
- import { T as ThreadRuntime, A as AssistantRuntime } from './AssistantRuntime-CBMSAJqH.mjs';
7
- export { U as Unsubscribe } from './AssistantRuntime-CBMSAJqH.mjs';
4
+ import { T as TextContentPart, I as ImageContentPart, U as UIContentPart, a as ToolCallContentPart, M as ModelConfigProvider, b as ThreadMessage, c as ModelConfig, A as AssistantContentPart, d as AppendMessage } from './ModelConfigTypes-CzmXY3sn.mjs';
5
+ export { h as AppendContentPart, e as AssistantMessage, g as UserContentPart, f as UserMessage } from './ModelConfigTypes-CzmXY3sn.mjs';
6
+ import { T as ThreadState, U as Unsubscribe } from './Thread-UEVsUmvl.mjs';
8
7
  import 'zod';
9
8
 
10
9
  declare const useCopyMessage: ({ copiedDuration }: {
@@ -236,13 +235,55 @@ declare namespace index {
236
235
  export { ContentPartInProgressIndicator as InProgressIndicator };
237
236
  }
238
237
 
238
+ type ThreadRuntime = Readonly<ThreadState & {
239
+ subscribe: (callback: () => void) => Unsubscribe;
240
+ }>;
241
+
242
+ type AssistantRuntime = ThreadRuntime & {
243
+ registerModelConfigProvider: (provider: ModelConfigProvider) => Unsubscribe;
244
+ };
245
+
239
246
  type ReactThreadRuntime = ThreadRuntime & {
240
247
  unstable_synchronizer?: ComponentType;
241
248
  };
242
249
 
250
+ type ChatModelRunResult = {
251
+ content: AssistantContentPart[];
252
+ };
253
+ type ChatModelRunOptions = {
254
+ messages: ThreadMessage[];
255
+ abortSignal: AbortSignal;
256
+ config: ModelConfig;
257
+ onUpdate: (result: ChatModelRunResult) => void;
258
+ };
259
+ type ChatModelAdapter = {
260
+ run: (options: ChatModelRunOptions) => Promise<ChatModelRunResult>;
261
+ };
262
+
263
+ declare class LocalRuntime implements AssistantRuntime {
264
+ adapter: ChatModelAdapter;
265
+ private _subscriptions;
266
+ private _configProviders;
267
+ private abortController;
268
+ private repository;
269
+ get messages(): ThreadMessage[];
270
+ get isRunning(): boolean;
271
+ constructor(adapter: ChatModelAdapter);
272
+ getBranches(messageId: string): string[];
273
+ switchToBranch(branchId: string): void;
274
+ append(message: AppendMessage): Promise<void>;
275
+ startRun(parentId: string | null): Promise<void>;
276
+ cancelRun(): void;
277
+ private notifySubscribers;
278
+ subscribe(callback: () => void): Unsubscribe;
279
+ registerModelConfigProvider(provider: ModelConfigProvider): () => boolean;
280
+ }
281
+
282
+ declare const useLocalRuntime: (adapter: ChatModelAdapter) => LocalRuntime;
283
+
243
284
  type AssistantRuntimeProviderProps = {
244
285
  runtime: AssistantRuntime;
245
286
  };
246
287
  declare const AssistantRuntimeProvider: react.NamedExoticComponent<PropsWithChildren<AssistantRuntimeProviderProps>>;
247
288
 
248
- export { index$1 as ActionBarPrimitive, AssistantRuntime, AssistantRuntimeProvider, index$2 as BranchPickerPrimitive, index$4 as ComposerPrimitive, index as ContentPartPrimitive, index$3 as MessagePrimitive, type ReactThreadRuntime, TextContentPart, index$5 as ThreadPrimitive, ThreadRuntime, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useReloadMessage };
289
+ export { index$1 as ActionBarPrimitive, AppendMessage, AssistantContentPart, type AssistantRuntime, AssistantRuntimeProvider, index$2 as BranchPickerPrimitive, type ChatModelAdapter, type ChatModelRunOptions, index$4 as ComposerPrimitive, index as ContentPartPrimitive, index$3 as MessagePrimitive, type ReactThreadRuntime, TextContentPart, ThreadMessage, index$5 as ThreadPrimitive, type ThreadRuntime, Unsubscribe, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useLocalRuntime, useReloadMessage };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import { FC, ReactNode, PropsWithChildren, ComponentType } from 'react';
3
3
  import { TextareaAutosizeProps } from 'react-textarea-autosize';
4
- import { T as TextContentPart, I as ImageContentPart, U as UIContentPart, a as ToolCallContentPart } from './ModelConfigTypes-B9UY4zxv.js';
5
- export { g as AppendContentPart, d as AppendMessage, e as AssistantContentPart, A as AssistantMessage, b as ThreadMessage, f as UserContentPart, c as UserMessage } from './ModelConfigTypes-B9UY4zxv.js';
6
- import { T as ThreadRuntime, A as AssistantRuntime } from './AssistantRuntime-C_BvM7ZT.js';
7
- export { U as Unsubscribe } from './AssistantRuntime-C_BvM7ZT.js';
4
+ import { T as TextContentPart, I as ImageContentPart, U as UIContentPart, a as ToolCallContentPart, M as ModelConfigProvider, b as ThreadMessage, c as ModelConfig, A as AssistantContentPart, d as AppendMessage } from './ModelConfigTypes-CzmXY3sn.js';
5
+ export { h as AppendContentPart, e as AssistantMessage, g as UserContentPart, f as UserMessage } from './ModelConfigTypes-CzmXY3sn.js';
6
+ import { T as ThreadState, U as Unsubscribe } from './Thread-BMASJT4a.js';
8
7
  import 'zod';
9
8
 
10
9
  declare const useCopyMessage: ({ copiedDuration }: {
@@ -236,13 +235,55 @@ declare namespace index {
236
235
  export { ContentPartInProgressIndicator as InProgressIndicator };
237
236
  }
238
237
 
238
+ type ThreadRuntime = Readonly<ThreadState & {
239
+ subscribe: (callback: () => void) => Unsubscribe;
240
+ }>;
241
+
242
+ type AssistantRuntime = ThreadRuntime & {
243
+ registerModelConfigProvider: (provider: ModelConfigProvider) => Unsubscribe;
244
+ };
245
+
239
246
  type ReactThreadRuntime = ThreadRuntime & {
240
247
  unstable_synchronizer?: ComponentType;
241
248
  };
242
249
 
250
+ type ChatModelRunResult = {
251
+ content: AssistantContentPart[];
252
+ };
253
+ type ChatModelRunOptions = {
254
+ messages: ThreadMessage[];
255
+ abortSignal: AbortSignal;
256
+ config: ModelConfig;
257
+ onUpdate: (result: ChatModelRunResult) => void;
258
+ };
259
+ type ChatModelAdapter = {
260
+ run: (options: ChatModelRunOptions) => Promise<ChatModelRunResult>;
261
+ };
262
+
263
+ declare class LocalRuntime implements AssistantRuntime {
264
+ adapter: ChatModelAdapter;
265
+ private _subscriptions;
266
+ private _configProviders;
267
+ private abortController;
268
+ private repository;
269
+ get messages(): ThreadMessage[];
270
+ get isRunning(): boolean;
271
+ constructor(adapter: ChatModelAdapter);
272
+ getBranches(messageId: string): string[];
273
+ switchToBranch(branchId: string): void;
274
+ append(message: AppendMessage): Promise<void>;
275
+ startRun(parentId: string | null): Promise<void>;
276
+ cancelRun(): void;
277
+ private notifySubscribers;
278
+ subscribe(callback: () => void): Unsubscribe;
279
+ registerModelConfigProvider(provider: ModelConfigProvider): () => boolean;
280
+ }
281
+
282
+ declare const useLocalRuntime: (adapter: ChatModelAdapter) => LocalRuntime;
283
+
243
284
  type AssistantRuntimeProviderProps = {
244
285
  runtime: AssistantRuntime;
245
286
  };
246
287
  declare const AssistantRuntimeProvider: react.NamedExoticComponent<PropsWithChildren<AssistantRuntimeProviderProps>>;
247
288
 
248
- export { index$1 as ActionBarPrimitive, AssistantRuntime, AssistantRuntimeProvider, index$2 as BranchPickerPrimitive, index$4 as ComposerPrimitive, index as ContentPartPrimitive, index$3 as MessagePrimitive, type ReactThreadRuntime, TextContentPart, index$5 as ThreadPrimitive, ThreadRuntime, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useReloadMessage };
289
+ export { index$1 as ActionBarPrimitive, AppendMessage, AssistantContentPart, type AssistantRuntime, AssistantRuntimeProvider, index$2 as BranchPickerPrimitive, type ChatModelAdapter, type ChatModelRunOptions, index$4 as ComposerPrimitive, index as ContentPartPrimitive, index$3 as MessagePrimitive, type ReactThreadRuntime, TextContentPart, ThreadMessage, index$5 as ThreadPrimitive, type ThreadRuntime, Unsubscribe, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useLocalRuntime, useReloadMessage };
package/dist/index.js CHANGED
@@ -41,6 +41,7 @@ __export(src_exports, {
41
41
  useCopyMessage: () => useCopyMessage,
42
42
  useGoToNextBranch: () => useGoToNextBranch,
43
43
  useGoToPreviousBranch: () => useGoToPreviousBranch,
44
+ useLocalRuntime: () => useLocalRuntime,
44
45
  useReloadMessage: () => useReloadMessage
45
46
  });
46
47
  module.exports = __toCommonJS(src_exports);
@@ -1028,20 +1029,8 @@ __export(contentPart_exports, {
1028
1029
  InProgressIndicator: () => ContentPartInProgressIndicator
1029
1030
  });
1030
1031
 
1031
- // src/context/providers/AssistantRuntimeProvider.tsx
1032
- var import_react32 = require("react");
1033
-
1034
- // src/context/providers/AssistantProvider.tsx
1035
- var import_react31 = require("react");
1036
-
1037
- // src/context/AssistantContext.ts
1032
+ // src/runtime/local/useLocalRuntime.tsx
1038
1033
  var import_react29 = require("react");
1039
- var AssistantContext = (0, import_react29.createContext)(
1040
- null
1041
- );
1042
-
1043
- // src/context/stores/AssistantModelConfig.ts
1044
- var import_zustand4 = require("zustand");
1045
1034
 
1046
1035
  // src/utils/ModelConfigTypes.ts
1047
1036
  var mergeModelConfigs = (configs) => {
@@ -1062,6 +1051,281 @@ ${config.system}`;
1062
1051
  }, {});
1063
1052
  };
1064
1053
 
1054
+ // src/runtime/utils/idUtils.tsx
1055
+ var import_non_secure = require("nanoid/non-secure");
1056
+ var generateId = (0, import_non_secure.customAlphabet)(
1057
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
1058
+ 7
1059
+ );
1060
+ var optimisticPrefix = "__optimistic__";
1061
+ var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
1062
+
1063
+ // src/runtime/utils/MessageRepository.tsx
1064
+ var findHead = (message) => {
1065
+ if (message.next) return findHead(message.next);
1066
+ return message;
1067
+ };
1068
+ var MessageRepository = class {
1069
+ messages = /* @__PURE__ */ new Map();
1070
+ // message_id -> item
1071
+ head = null;
1072
+ root = {
1073
+ children: []
1074
+ };
1075
+ performOp(newParent, child, operation) {
1076
+ const parentOrRoot = child.prev ?? this.root;
1077
+ const newParentOrRoot = newParent ?? this.root;
1078
+ if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
1079
+ if (operation !== "link") {
1080
+ parentOrRoot.children = parentOrRoot.children.filter(
1081
+ (m) => m !== child.current.id
1082
+ );
1083
+ if (child.prev?.next === child) {
1084
+ const fallbackId = child.prev.children.at(-1);
1085
+ const fallback = fallbackId ? this.messages.get(fallbackId) : null;
1086
+ if (fallback === void 0) {
1087
+ throw new Error(
1088
+ "MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui."
1089
+ );
1090
+ }
1091
+ child.prev.next = fallback;
1092
+ }
1093
+ }
1094
+ if (operation !== "cut") {
1095
+ newParentOrRoot.children = [
1096
+ ...newParentOrRoot.children,
1097
+ child.current.id
1098
+ ];
1099
+ if (newParent && (findHead(child) === this.head || newParent.next === null)) {
1100
+ newParent.next = child;
1101
+ }
1102
+ child.prev = newParent;
1103
+ }
1104
+ }
1105
+ getMessages() {
1106
+ const messages = new Array(this.head?.level ?? 0);
1107
+ for (let current = this.head; current; current = current.prev) {
1108
+ messages[current.level] = current.current;
1109
+ }
1110
+ return messages;
1111
+ }
1112
+ addOrUpdateMessage(parentId, message) {
1113
+ const existingItem = this.messages.get(message.id);
1114
+ const prev = parentId ? this.messages.get(parentId) : null;
1115
+ if (prev === void 0)
1116
+ throw new Error(
1117
+ "MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
1118
+ );
1119
+ if (existingItem) {
1120
+ existingItem.current = message;
1121
+ this.performOp(prev, existingItem, "relink");
1122
+ return;
1123
+ }
1124
+ const newItem = {
1125
+ prev,
1126
+ current: message,
1127
+ next: null,
1128
+ children: [],
1129
+ level: prev ? prev.level + 1 : 0
1130
+ };
1131
+ this.messages.set(message.id, newItem);
1132
+ this.performOp(prev, newItem, "link");
1133
+ if (this.head === prev) {
1134
+ this.head = newItem;
1135
+ }
1136
+ }
1137
+ appendOptimisticMessage(parentId, message) {
1138
+ let optimisticId;
1139
+ do {
1140
+ optimisticId = generateOptimisticId();
1141
+ } while (this.messages.has(optimisticId));
1142
+ this.addOrUpdateMessage(parentId, {
1143
+ ...message,
1144
+ id: optimisticId,
1145
+ createdAt: /* @__PURE__ */ new Date(),
1146
+ ...message.role === "assistant" ? { status: "in_progress" } : void 0
1147
+ });
1148
+ return optimisticId;
1149
+ }
1150
+ deleteMessage(messageId, replacementId) {
1151
+ const message = this.messages.get(messageId);
1152
+ if (!message)
1153
+ throw new Error(
1154
+ "MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
1155
+ );
1156
+ const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
1157
+ if (replacement === void 0)
1158
+ throw new Error(
1159
+ "MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
1160
+ );
1161
+ for (const child of message.children) {
1162
+ const childMessage = this.messages.get(child);
1163
+ if (!childMessage)
1164
+ throw new Error(
1165
+ "MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
1166
+ );
1167
+ this.performOp(replacement, childMessage, "relink");
1168
+ }
1169
+ this.performOp(null, message, "cut");
1170
+ this.messages.delete(messageId);
1171
+ if (this.head === message) {
1172
+ this.head = replacement ? findHead(replacement) : null;
1173
+ }
1174
+ }
1175
+ getBranches(messageId) {
1176
+ const message = this.messages.get(messageId);
1177
+ if (!message)
1178
+ throw new Error(
1179
+ "MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
1180
+ );
1181
+ const { children } = message.prev ?? this.root;
1182
+ return children;
1183
+ }
1184
+ switchToBranch(messageId) {
1185
+ const message = this.messages.get(messageId);
1186
+ if (!message)
1187
+ throw new Error(
1188
+ "MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
1189
+ );
1190
+ if (message.prev) {
1191
+ message.prev.next = message;
1192
+ }
1193
+ this.head = findHead(message);
1194
+ }
1195
+ resetHead(messageId) {
1196
+ if (messageId === null) {
1197
+ this.head = null;
1198
+ return;
1199
+ }
1200
+ const message = this.messages.get(messageId);
1201
+ if (!message)
1202
+ throw new Error(
1203
+ "MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
1204
+ );
1205
+ this.head = message;
1206
+ for (let current = message; current; current = current.prev) {
1207
+ if (current.prev) {
1208
+ current.prev.next = current;
1209
+ }
1210
+ }
1211
+ }
1212
+ };
1213
+
1214
+ // src/runtime/local/LocalRuntime.tsx
1215
+ var LocalRuntime = class {
1216
+ constructor(adapter) {
1217
+ this.adapter = adapter;
1218
+ }
1219
+ _subscriptions = /* @__PURE__ */ new Set();
1220
+ _configProviders = /* @__PURE__ */ new Set();
1221
+ abortController = null;
1222
+ repository = new MessageRepository();
1223
+ get messages() {
1224
+ return this.repository.getMessages();
1225
+ }
1226
+ get isRunning() {
1227
+ return this.abortController != null;
1228
+ }
1229
+ getBranches(messageId) {
1230
+ return this.repository.getBranches(messageId);
1231
+ }
1232
+ switchToBranch(branchId) {
1233
+ this.repository.switchToBranch(branchId);
1234
+ this.notifySubscribers();
1235
+ }
1236
+ async append(message) {
1237
+ const userMessageId = generateId();
1238
+ const userMessage = {
1239
+ id: userMessageId,
1240
+ role: "user",
1241
+ content: message.content,
1242
+ createdAt: /* @__PURE__ */ new Date()
1243
+ };
1244
+ this.repository.addOrUpdateMessage(message.parentId, userMessage);
1245
+ await this.startRun(userMessageId);
1246
+ }
1247
+ async startRun(parentId) {
1248
+ const id = generateId();
1249
+ this.repository.resetHead(parentId);
1250
+ const messages = this.repository.getMessages();
1251
+ const message = {
1252
+ id,
1253
+ role: "assistant",
1254
+ status: "in_progress",
1255
+ content: [{ type: "text", text: "" }],
1256
+ createdAt: /* @__PURE__ */ new Date()
1257
+ };
1258
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1259
+ this.abortController?.abort();
1260
+ this.abortController = new AbortController();
1261
+ this.notifySubscribers();
1262
+ try {
1263
+ const updateHandler = ({ content }) => {
1264
+ message.content = content;
1265
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1266
+ this.notifySubscribers();
1267
+ };
1268
+ const result = await this.adapter.run({
1269
+ messages,
1270
+ abortSignal: this.abortController.signal,
1271
+ config: mergeModelConfigs([...this._configProviders].map((p) => p())),
1272
+ onUpdate: updateHandler
1273
+ });
1274
+ updateHandler(result);
1275
+ message.status = "done";
1276
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1277
+ } catch (e) {
1278
+ message.status = "error";
1279
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1280
+ console.error(e);
1281
+ } finally {
1282
+ this.abortController = null;
1283
+ this.notifySubscribers();
1284
+ }
1285
+ }
1286
+ cancelRun() {
1287
+ if (!this.abortController) return;
1288
+ this.abortController.abort();
1289
+ this.abortController = null;
1290
+ this.notifySubscribers();
1291
+ }
1292
+ notifySubscribers() {
1293
+ for (const callback of this._subscriptions) callback();
1294
+ }
1295
+ subscribe(callback) {
1296
+ this._subscriptions.add(callback);
1297
+ return () => this._subscriptions.delete(callback);
1298
+ }
1299
+ registerModelConfigProvider(provider) {
1300
+ this._configProviders.add(provider);
1301
+ return () => this._configProviders.delete(provider);
1302
+ }
1303
+ };
1304
+
1305
+ // src/runtime/local/useLocalRuntime.tsx
1306
+ var useLocalRuntime = (adapter) => {
1307
+ const [runtime] = (0, import_react29.useState)(() => new LocalRuntime(adapter));
1308
+ (0, import_react29.useInsertionEffect)(() => {
1309
+ runtime.adapter = adapter;
1310
+ });
1311
+ return runtime;
1312
+ };
1313
+
1314
+ // src/context/providers/AssistantRuntimeProvider.tsx
1315
+ var import_react33 = require("react");
1316
+
1317
+ // src/context/providers/AssistantProvider.tsx
1318
+ var import_react32 = require("react");
1319
+
1320
+ // src/context/AssistantContext.ts
1321
+ var import_react30 = require("react");
1322
+ var AssistantContext = (0, import_react30.createContext)(
1323
+ null
1324
+ );
1325
+
1326
+ // src/context/stores/AssistantModelConfig.ts
1327
+ var import_zustand4 = require("zustand");
1328
+
1065
1329
  // src/utils/ProxyConfigProvider.ts
1066
1330
  var ProxyConfigProvider = class {
1067
1331
  _providers = /* @__PURE__ */ new Set();
@@ -1090,7 +1354,7 @@ var makeAssistantModelConfigStore = () => (0, import_zustand4.create)(() => {
1090
1354
  });
1091
1355
 
1092
1356
  // src/context/providers/ThreadProvider.tsx
1093
- var import_react30 = require("react");
1357
+ var import_react31 = require("react");
1094
1358
 
1095
1359
  // src/context/stores/Composer.ts
1096
1360
  var import_zustand5 = require("zustand");
@@ -1165,11 +1429,11 @@ var ThreadProvider = ({
1165
1429
  children,
1166
1430
  runtime
1167
1431
  }) => {
1168
- const runtimeRef = (0, import_react30.useRef)(runtime);
1169
- (0, import_react30.useInsertionEffect)(() => {
1432
+ const runtimeRef = (0, import_react31.useRef)(runtime);
1433
+ (0, import_react31.useInsertionEffect)(() => {
1170
1434
  runtimeRef.current = runtime;
1171
1435
  });
1172
- const [{ context, onRuntimeUpdate }] = (0, import_react30.useState)(() => {
1436
+ const [{ context, onRuntimeUpdate }] = (0, import_react31.useState)(() => {
1173
1437
  const { useThread, onRuntimeUpdate: onRuntimeUpdate2 } = makeThreadStore(runtimeRef);
1174
1438
  const useViewport = makeThreadViewportStore();
1175
1439
  const useComposer = makeComposerStore(useThread);
@@ -1182,7 +1446,7 @@ var ThreadProvider = ({
1182
1446
  onRuntimeUpdate: onRuntimeUpdate2
1183
1447
  };
1184
1448
  });
1185
- (0, import_react30.useEffect)(() => {
1449
+ (0, import_react31.useEffect)(() => {
1186
1450
  onRuntimeUpdate();
1187
1451
  return runtime.subscribe(onRuntimeUpdate);
1188
1452
  }, [onRuntimeUpdate, runtime]);
@@ -1196,16 +1460,16 @@ var ThreadProvider = ({
1196
1460
  // src/context/providers/AssistantProvider.tsx
1197
1461
  var import_jsx_runtime22 = require("react/jsx-runtime");
1198
1462
  var AssistantProvider = ({ children, runtime }) => {
1199
- const runtimeRef = (0, import_react31.useRef)(runtime);
1200
- (0, import_react31.useInsertionEffect)(() => {
1463
+ const runtimeRef = (0, import_react32.useRef)(runtime);
1464
+ (0, import_react32.useInsertionEffect)(() => {
1201
1465
  runtimeRef.current = runtime;
1202
1466
  });
1203
- const [context] = (0, import_react31.useState)(() => {
1467
+ const [context] = (0, import_react32.useState)(() => {
1204
1468
  const useModelConfig = makeAssistantModelConfigStore();
1205
1469
  return { useModelConfig };
1206
1470
  });
1207
1471
  const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);
1208
- (0, import_react31.useEffect)(() => {
1472
+ (0, import_react32.useEffect)(() => {
1209
1473
  return runtime.registerModelConfigProvider(getModelCOnfig);
1210
1474
  }, [runtime, getModelCOnfig]);
1211
1475
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ThreadProvider, { runtime, children }) });
@@ -1216,7 +1480,7 @@ var import_jsx_runtime23 = require("react/jsx-runtime");
1216
1480
  var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
1217
1481
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(AssistantProvider, { runtime, children });
1218
1482
  };
1219
- var AssistantRuntimeProvider = (0, import_react32.memo)(AssistantRuntimeProviderImpl);
1483
+ var AssistantRuntimeProvider = (0, import_react33.memo)(AssistantRuntimeProviderImpl);
1220
1484
  // Annotate the CommonJS export names for ESM import in node:
1221
1485
  0 && (module.exports = {
1222
1486
  ActionBarPrimitive,
@@ -1230,6 +1494,7 @@ var AssistantRuntimeProvider = (0, import_react32.memo)(AssistantRuntimeProvider
1230
1494
  useCopyMessage,
1231
1495
  useGoToNextBranch,
1232
1496
  useGoToPreviousBranch,
1497
+ useLocalRuntime,
1233
1498
  useReloadMessage
1234
1499
  });
1235
1500
  //# sourceMappingURL=index.js.map