@assistant-ui/react 0.4.5 → 0.4.7
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.
- package/dist/edge.d.mts +31 -17
- package/dist/edge.d.ts +31 -17
- package/dist/edge.js +104 -26
- package/dist/edge.js.map +1 -1
- package/dist/edge.mjs +104 -26
- package/dist/edge.mjs.map +1 -1
- package/dist/index.d.mts +328 -23
- package/dist/index.d.ts +328 -23
- package/dist/index.js +547 -469
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +556 -488
- package/dist/index.mjs.map +1 -1
- package/dist/tailwindcss/index.d.mts +1 -1
- package/dist/tailwindcss/index.d.ts +1 -1
- package/dist/tailwindcss/index.js +15 -12
- package/dist/tailwindcss/index.js.map +1 -1
- package/dist/tailwindcss/index.mjs +15 -12
- package/dist/tailwindcss/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
@@ -55,9 +55,12 @@ __export(src_exports, {
|
|
55
55
|
UserMessage: () => user_message_default,
|
56
56
|
fromCoreMessages: () => fromCoreMessages,
|
57
57
|
fromLanguageModelMessages: () => fromLanguageModelMessages,
|
58
|
+
fromLanguageModelTools: () => fromLanguageModelTools,
|
58
59
|
makeAssistantTool: () => makeAssistantTool,
|
59
60
|
makeAssistantToolUI: () => makeAssistantToolUI,
|
61
|
+
toCoreMessages: () => toCoreMessages,
|
60
62
|
toLanguageModelMessages: () => toLanguageModelMessages,
|
63
|
+
toLanguageModelTools: () => toLanguageModelTools,
|
61
64
|
useActionBarCopy: () => useActionBarCopy,
|
62
65
|
useActionBarEdit: () => useActionBarEdit,
|
63
66
|
useActionBarReload: () => useActionBarReload,
|
@@ -93,10 +96,10 @@ __export(src_exports, {
|
|
93
96
|
module.exports = __toCommonJS(src_exports);
|
94
97
|
|
95
98
|
// src/context/providers/AssistantRuntimeProvider.tsx
|
96
|
-
var
|
99
|
+
var import_react6 = require("react");
|
97
100
|
|
98
101
|
// src/context/providers/AssistantProvider.tsx
|
99
|
-
var
|
102
|
+
var import_react5 = require("react");
|
100
103
|
|
101
104
|
// src/context/react/AssistantContext.ts
|
102
105
|
var import_react = require("react");
|
@@ -116,6 +119,21 @@ function useAssistantContext(options) {
|
|
116
119
|
var import_zustand = require("zustand");
|
117
120
|
|
118
121
|
// src/types/ModelConfigTypes.ts
|
122
|
+
var import_zod = require("zod");
|
123
|
+
var LanguageModelV1CallSettingsSchema = import_zod.z.object({
|
124
|
+
maxTokens: import_zod.z.number().int().positive().optional(),
|
125
|
+
temperature: import_zod.z.number().optional(),
|
126
|
+
topP: import_zod.z.number().optional(),
|
127
|
+
presencePenalty: import_zod.z.number().optional(),
|
128
|
+
frequencyPenalty: import_zod.z.number().optional(),
|
129
|
+
seed: import_zod.z.number().int().optional(),
|
130
|
+
headers: import_zod.z.record(import_zod.z.string().optional()).optional()
|
131
|
+
});
|
132
|
+
var LanguageModelConfigSchema = import_zod.z.object({
|
133
|
+
apiKey: import_zod.z.string().optional(),
|
134
|
+
baseUrl: import_zod.z.string().optional(),
|
135
|
+
modelName: import_zod.z.string().optional()
|
136
|
+
});
|
119
137
|
var mergeModelConfigs = (configSet) => {
|
120
138
|
const configs = Array.from(configSet).map((c) => c.getModelConfig()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
121
139
|
return configs.reduce((acc, config) => {
|
@@ -139,6 +157,18 @@ ${config.system}`;
|
|
139
157
|
acc.tools[name] = tool;
|
140
158
|
}
|
141
159
|
}
|
160
|
+
if (config.config) {
|
161
|
+
acc.config = {
|
162
|
+
...acc.config,
|
163
|
+
...config.config
|
164
|
+
};
|
165
|
+
}
|
166
|
+
if (config.callSettings) {
|
167
|
+
acc.callSettings = {
|
168
|
+
...acc.callSettings,
|
169
|
+
...config.callSettings
|
170
|
+
};
|
171
|
+
}
|
142
172
|
return acc;
|
143
173
|
}, {});
|
144
174
|
};
|
@@ -203,7 +233,7 @@ var makeAssistantToolUIsStore = () => (0, import_zustand2.create)((set) => {
|
|
203
233
|
});
|
204
234
|
|
205
235
|
// src/context/providers/ThreadProvider.tsx
|
206
|
-
var
|
236
|
+
var import_react4 = require("react");
|
207
237
|
|
208
238
|
// src/context/react/ThreadContext.ts
|
209
239
|
var import_react2 = require("react");
|
@@ -269,7 +299,7 @@ var makeComposerStore = (useThreadMessages, useThreadActions) => {
|
|
269
299
|
var import_zustand4 = require("zustand");
|
270
300
|
var makeThreadStore = (runtimeRef) => {
|
271
301
|
return (0, import_zustand4.create)(() => ({
|
272
|
-
isRunning: runtimeRef.
|
302
|
+
isRunning: runtimeRef.getState().isRunning
|
273
303
|
}));
|
274
304
|
};
|
275
305
|
|
@@ -295,19 +325,18 @@ var makeThreadViewportStore = () => {
|
|
295
325
|
|
296
326
|
// src/context/stores/ThreadActions.ts
|
297
327
|
var import_zustand6 = require("zustand");
|
298
|
-
var makeThreadActionStore = (
|
328
|
+
var makeThreadActionStore = (runtimeStore) => {
|
299
329
|
return (0, import_zustand6.create)(
|
300
330
|
() => Object.freeze({
|
301
331
|
get capabilities() {
|
302
|
-
return
|
332
|
+
return runtimeStore.getState().capabilities;
|
303
333
|
},
|
304
|
-
getBranches: (messageId) =>
|
305
|
-
switchToBranch: (branchId) =>
|
306
|
-
startRun: (parentId) =>
|
307
|
-
append: (message) =>
|
308
|
-
cancelRun: () =>
|
309
|
-
addToolResult: (options) =>
|
310
|
-
getRuntime: () => runtimeRef.current
|
334
|
+
getBranches: (messageId) => runtimeStore.getState().getBranches(messageId),
|
335
|
+
switchToBranch: (branchId) => runtimeStore.getState().switchToBranch(branchId),
|
336
|
+
startRun: (parentId) => runtimeStore.getState().startRun(parentId),
|
337
|
+
append: (message) => runtimeStore.getState().append(message),
|
338
|
+
cancelRun: () => runtimeStore.getState().cancelRun(),
|
339
|
+
addToolResult: (options) => runtimeStore.getState().addToolResult(options)
|
311
340
|
})
|
312
341
|
);
|
313
342
|
};
|
@@ -315,60 +344,96 @@ var makeThreadActionStore = (runtimeRef) => {
|
|
315
344
|
// src/context/stores/ThreadMessages.ts
|
316
345
|
var import_zustand7 = require("zustand");
|
317
346
|
var makeThreadMessagesStore = (runtimeRef) => {
|
318
|
-
return (0, import_zustand7.create)(() => runtimeRef.
|
347
|
+
return (0, import_zustand7.create)(() => runtimeRef.getState().messages);
|
348
|
+
};
|
349
|
+
|
350
|
+
// src/context/stores/ThreadRuntime.tsx
|
351
|
+
var import_zustand8 = require("zustand");
|
352
|
+
var makeThreadRuntimeStore = (runtime) => {
|
353
|
+
return (0, import_zustand8.create)(() => runtime);
|
354
|
+
};
|
355
|
+
|
356
|
+
// src/utils/hooks/useManagedRef.ts
|
357
|
+
var import_react3 = require("react");
|
358
|
+
var useManagedRef = (callback) => {
|
359
|
+
const cleanupRef = (0, import_react3.useRef)();
|
360
|
+
const ref = (0, import_react3.useCallback)(
|
361
|
+
(el) => {
|
362
|
+
if (cleanupRef.current) {
|
363
|
+
cleanupRef.current();
|
364
|
+
}
|
365
|
+
if (el) {
|
366
|
+
cleanupRef.current = callback(el);
|
367
|
+
}
|
368
|
+
},
|
369
|
+
[callback]
|
370
|
+
);
|
371
|
+
return ref;
|
319
372
|
};
|
320
373
|
|
321
374
|
// src/context/providers/ThreadProvider.tsx
|
322
375
|
var import_jsx_runtime = require("react/jsx-runtime");
|
323
376
|
var ThreadProvider = ({
|
324
377
|
children,
|
325
|
-
|
378
|
+
provider
|
326
379
|
}) => {
|
327
|
-
const
|
328
|
-
|
329
|
-
const useThread = makeThreadStore(
|
330
|
-
const useThreadMessages = makeThreadMessagesStore(
|
331
|
-
const useThreadActions = makeThreadActionStore(
|
380
|
+
const [context] = (0, import_react4.useState)(() => {
|
381
|
+
const useThreadRuntime = makeThreadRuntimeStore(provider.thread);
|
382
|
+
const useThread = makeThreadStore(useThreadRuntime);
|
383
|
+
const useThreadMessages = makeThreadMessagesStore(useThreadRuntime);
|
384
|
+
const useThreadActions = makeThreadActionStore(useThreadRuntime);
|
332
385
|
const useViewport = makeThreadViewportStore();
|
333
386
|
const useComposer = makeComposerStore(useThreadMessages, useThreadActions);
|
334
387
|
return {
|
335
388
|
useThread,
|
389
|
+
useThreadRuntime,
|
336
390
|
useThreadMessages,
|
337
391
|
useThreadActions,
|
338
392
|
useComposer,
|
339
393
|
useViewport
|
340
394
|
};
|
341
395
|
});
|
342
|
-
const
|
343
|
-
(0,
|
344
|
-
|
345
|
-
|
396
|
+
const threadRef = useManagedRef(
|
397
|
+
(0, import_react4.useCallback)(
|
398
|
+
(thread) => {
|
399
|
+
const onThreadUpdate = () => {
|
400
|
+
context.useThread.setState(
|
401
|
+
Object.freeze({
|
402
|
+
isRunning: context.useThreadRuntime.getState().isRunning
|
403
|
+
}),
|
404
|
+
true
|
405
|
+
);
|
406
|
+
context.useThreadMessages.setState(thread.messages, true);
|
407
|
+
};
|
408
|
+
onThreadUpdate();
|
409
|
+
return thread.subscribe(onThreadUpdate);
|
410
|
+
},
|
411
|
+
[context]
|
412
|
+
)
|
346
413
|
);
|
347
|
-
(0,
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
true
|
357
|
-
);
|
358
|
-
context.useThreadMessages.setState(Object.freeze(runtimeRef.current.messages), true);
|
414
|
+
(0, import_react4.useInsertionEffect)(() => {
|
415
|
+
const unsubscribe = provider.subscribe(() => {
|
416
|
+
context.useThreadRuntime.setState(provider.thread, true);
|
417
|
+
threadRef(provider.thread);
|
418
|
+
});
|
419
|
+
threadRef(provider.thread);
|
420
|
+
return () => {
|
421
|
+
unsubscribe();
|
422
|
+
threadRef(null);
|
359
423
|
};
|
360
|
-
|
361
|
-
|
362
|
-
|
424
|
+
}, [provider, context]);
|
425
|
+
const Synchronizer = context.useThreadRuntime(
|
426
|
+
(t) => t.unstable_synchronizer
|
427
|
+
);
|
363
428
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ThreadContext.Provider, { value: context, children: [
|
364
|
-
|
429
|
+
Synchronizer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Synchronizer, {}),
|
365
430
|
children
|
366
431
|
] });
|
367
432
|
};
|
368
433
|
|
369
434
|
// src/context/stores/AssistantActions.tsx
|
370
|
-
var
|
371
|
-
var makeAssistantActionsStore = (runtimeRef) => (0,
|
435
|
+
var import_zustand9 = require("zustand");
|
436
|
+
var makeAssistantActionsStore = (runtimeRef) => (0, import_zustand9.create)(
|
372
437
|
() => Object.freeze({
|
373
438
|
switchToThread: () => runtimeRef.current.switchToThread(null),
|
374
439
|
getRuntime: () => runtimeRef.current
|
@@ -378,21 +443,21 @@ var makeAssistantActionsStore = (runtimeRef) => (0, import_zustand8.create)(
|
|
378
443
|
// src/context/providers/AssistantProvider.tsx
|
379
444
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
380
445
|
var AssistantProvider = ({ children, runtime }) => {
|
381
|
-
const runtimeRef = (0,
|
382
|
-
(0,
|
446
|
+
const runtimeRef = (0, import_react5.useRef)(runtime);
|
447
|
+
(0, import_react5.useInsertionEffect)(() => {
|
383
448
|
runtimeRef.current = runtime;
|
384
449
|
});
|
385
|
-
const [context] = (0,
|
450
|
+
const [context] = (0, import_react5.useState)(() => {
|
386
451
|
const useModelConfig = makeAssistantModelConfigStore();
|
387
452
|
const useToolUIs = makeAssistantToolUIsStore();
|
388
453
|
const useAssistantActions = makeAssistantActionsStore(runtimeRef);
|
389
454
|
return { useModelConfig, useToolUIs, useAssistantActions };
|
390
455
|
});
|
391
456
|
const getModelConfig = context.useModelConfig();
|
392
|
-
(0,
|
457
|
+
(0, import_react5.useEffect)(() => {
|
393
458
|
return runtime.registerModelConfigProvider(getModelConfig);
|
394
459
|
}, [runtime, getModelConfig]);
|
395
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThreadProvider, { runtime, children }) });
|
460
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThreadProvider, { provider: runtime, children }) });
|
396
461
|
};
|
397
462
|
|
398
463
|
// src/context/providers/AssistantRuntimeProvider.tsx
|
@@ -400,16 +465,16 @@ var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
400
465
|
var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
|
401
466
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AssistantProvider, { runtime, children });
|
402
467
|
};
|
403
|
-
var AssistantRuntimeProvider = (0,
|
468
|
+
var AssistantRuntimeProvider = (0, import_react6.memo)(AssistantRuntimeProviderImpl);
|
404
469
|
|
405
470
|
// src/context/react/ComposerContext.ts
|
406
|
-
var
|
471
|
+
var import_react8 = require("react");
|
407
472
|
|
408
473
|
// src/context/react/MessageContext.ts
|
409
|
-
var
|
410
|
-
var MessageContext = (0,
|
474
|
+
var import_react7 = require("react");
|
475
|
+
var MessageContext = (0, import_react7.createContext)(null);
|
411
476
|
function useMessageContext(options) {
|
412
|
-
const context = (0,
|
477
|
+
const context = (0, import_react7.useContext)(MessageContext);
|
413
478
|
if (!options?.optional && !context)
|
414
479
|
throw new Error(
|
415
480
|
"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
|
@@ -421,7 +486,7 @@ function useMessageContext(options) {
|
|
421
486
|
var useComposerContext = () => {
|
422
487
|
const { useComposer } = useThreadContext();
|
423
488
|
const { useEditComposer } = useMessageContext({ optional: true }) ?? {};
|
424
|
-
return (0,
|
489
|
+
return (0, import_react8.useMemo)(
|
425
490
|
() => ({
|
426
491
|
useComposer: useEditComposer ?? useComposer,
|
427
492
|
type: useEditComposer ? "edit" : "new"
|
@@ -431,12 +496,12 @@ var useComposerContext = () => {
|
|
431
496
|
};
|
432
497
|
|
433
498
|
// src/context/react/ContentPartContext.ts
|
434
|
-
var
|
435
|
-
var ContentPartContext = (0,
|
499
|
+
var import_react9 = require("react");
|
500
|
+
var ContentPartContext = (0, import_react9.createContext)(
|
436
501
|
null
|
437
502
|
);
|
438
503
|
function useContentPartContext(options) {
|
439
|
-
const context = (0,
|
504
|
+
const context = (0, import_react9.useContext)(ContentPartContext);
|
440
505
|
if (!options?.optional && !context)
|
441
506
|
throw new Error(
|
442
507
|
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
@@ -445,7 +510,7 @@ function useContentPartContext(options) {
|
|
445
510
|
}
|
446
511
|
|
447
512
|
// src/hooks/useAppendMessage.tsx
|
448
|
-
var
|
513
|
+
var import_react10 = require("react");
|
449
514
|
var toAppendMessage = (useThreadMessages, message) => {
|
450
515
|
if (typeof message === "string") {
|
451
516
|
return {
|
@@ -462,7 +527,7 @@ var toAppendMessage = (useThreadMessages, message) => {
|
|
462
527
|
};
|
463
528
|
var useAppendMessage = () => {
|
464
529
|
const { useThreadMessages, useThreadActions, useViewport, useComposer } = useThreadContext();
|
465
|
-
const append = (0,
|
530
|
+
const append = (0, import_react10.useCallback)(
|
466
531
|
(message) => {
|
467
532
|
const appendMessage = toAppendMessage(useThreadMessages, message);
|
468
533
|
useThreadActions.getState().append(appendMessage);
|
@@ -475,11 +540,11 @@ var useAppendMessage = () => {
|
|
475
540
|
};
|
476
541
|
|
477
542
|
// src/hooks/useSwitchToNewThread.tsx
|
478
|
-
var
|
543
|
+
var import_react11 = require("react");
|
479
544
|
var useSwitchToNewThread = () => {
|
480
545
|
const { useAssistantActions } = useAssistantContext();
|
481
546
|
const { useComposer } = useThreadContext();
|
482
|
-
const switchToNewThread = (0,
|
547
|
+
const switchToNewThread = (0, import_react11.useCallback)(() => {
|
483
548
|
useAssistantActions.getState().switchToThread(null);
|
484
549
|
useComposer.getState().focus();
|
485
550
|
}, [useAssistantActions, useComposer]);
|
@@ -487,14 +552,14 @@ var useSwitchToNewThread = () => {
|
|
487
552
|
};
|
488
553
|
|
489
554
|
// src/model-config/useAssistantTool.tsx
|
490
|
-
var
|
555
|
+
var import_react12 = require("react");
|
491
556
|
var useAssistantTool = (tool) => {
|
492
557
|
const { useModelConfig, useToolUIs } = useAssistantContext();
|
493
558
|
const registerModelConfigProvider = useModelConfig(
|
494
559
|
(s) => s.registerModelConfigProvider
|
495
560
|
);
|
496
561
|
const setToolUI = useToolUIs((s) => s.setToolUI);
|
497
|
-
(0,
|
562
|
+
(0, import_react12.useEffect)(() => {
|
498
563
|
const { toolName, render, ...rest } = tool;
|
499
564
|
const config = {
|
500
565
|
tools: {
|
@@ -522,11 +587,11 @@ var makeAssistantTool = (tool) => {
|
|
522
587
|
};
|
523
588
|
|
524
589
|
// src/model-config/useAssistantToolUI.tsx
|
525
|
-
var
|
590
|
+
var import_react13 = require("react");
|
526
591
|
var useAssistantToolUI = (tool) => {
|
527
592
|
const { useToolUIs } = useAssistantContext();
|
528
593
|
const setToolUI = useToolUIs((s) => s.setToolUI);
|
529
|
-
(0,
|
594
|
+
(0, import_react13.useEffect)(() => {
|
530
595
|
if (!tool) return;
|
531
596
|
const { toolName, render } = tool;
|
532
597
|
return setToolUI(toolName, render);
|
@@ -543,13 +608,13 @@ var makeAssistantToolUI = (tool) => {
|
|
543
608
|
};
|
544
609
|
|
545
610
|
// src/model-config/useAssistantInstructions.tsx
|
546
|
-
var
|
611
|
+
var import_react14 = require("react");
|
547
612
|
var useAssistantInstructions = (instruction) => {
|
548
613
|
const { useModelConfig } = useAssistantContext();
|
549
614
|
const registerModelConfigProvider = useModelConfig(
|
550
615
|
(s) => s.registerModelConfigProvider
|
551
616
|
);
|
552
|
-
(0,
|
617
|
+
(0, import_react14.useEffect)(() => {
|
553
618
|
const config = {
|
554
619
|
system: instruction
|
555
620
|
};
|
@@ -558,13 +623,13 @@ var useAssistantInstructions = (instruction) => {
|
|
558
623
|
};
|
559
624
|
|
560
625
|
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
561
|
-
var
|
626
|
+
var import_react17 = require("react");
|
562
627
|
|
563
628
|
// src/utils/combined/useCombinedStore.ts
|
564
|
-
var
|
629
|
+
var import_react16 = require("react");
|
565
630
|
|
566
631
|
// src/utils/combined/createCombinedStore.ts
|
567
|
-
var
|
632
|
+
var import_react15 = require("react");
|
568
633
|
var createCombinedStore = (stores) => {
|
569
634
|
const subscribe = (callback) => {
|
570
635
|
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
@@ -576,13 +641,13 @@ var createCombinedStore = (stores) => {
|
|
576
641
|
};
|
577
642
|
return (selector) => {
|
578
643
|
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
579
|
-
return (0,
|
644
|
+
return (0, import_react15.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
580
645
|
};
|
581
646
|
};
|
582
647
|
|
583
648
|
// src/utils/combined/useCombinedStore.ts
|
584
649
|
var useCombinedStore = (stores, selector) => {
|
585
|
-
const useCombined = (0,
|
650
|
+
const useCombined = (0, import_react16.useMemo)(() => createCombinedStore(stores), stores);
|
586
651
|
return useCombined(selector);
|
587
652
|
};
|
588
653
|
|
@@ -605,7 +670,7 @@ var useActionBarCopy = ({
|
|
605
670
|
return !c.isEditing && m.message.content.some((c2) => c2.type === "text" && c2.text.length > 0);
|
606
671
|
}
|
607
672
|
);
|
608
|
-
const callback = (0,
|
673
|
+
const callback = (0, import_react17.useCallback)(() => {
|
609
674
|
const { message } = useMessage.getState();
|
610
675
|
const { setIsCopied } = useMessageUtils.getState();
|
611
676
|
const { isEditing, value: composerValue } = useEditComposer.getState();
|
@@ -620,14 +685,14 @@ var useActionBarCopy = ({
|
|
620
685
|
};
|
621
686
|
|
622
687
|
// src/primitive-hooks/actionBar/useActionBarEdit.tsx
|
623
|
-
var
|
688
|
+
var import_react18 = require("react");
|
624
689
|
var useActionBarEdit = () => {
|
625
690
|
const { useMessage, useEditComposer } = useMessageContext();
|
626
691
|
const disabled = useCombinedStore(
|
627
692
|
[useMessage, useEditComposer],
|
628
693
|
(m, c) => m.message.role !== "user" || c.isEditing
|
629
694
|
);
|
630
|
-
const callback = (0,
|
695
|
+
const callback = (0, import_react18.useCallback)(() => {
|
631
696
|
const { edit } = useEditComposer.getState();
|
632
697
|
edit();
|
633
698
|
}, [useEditComposer]);
|
@@ -636,7 +701,7 @@ var useActionBarEdit = () => {
|
|
636
701
|
};
|
637
702
|
|
638
703
|
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
639
|
-
var
|
704
|
+
var import_react19 = require("react");
|
640
705
|
var useActionBarReload = () => {
|
641
706
|
const { useThread, useThreadActions, useComposer, useViewport } = useThreadContext();
|
642
707
|
const { useMessage } = useMessageContext();
|
@@ -644,7 +709,7 @@ var useActionBarReload = () => {
|
|
644
709
|
[useThread, useMessage],
|
645
710
|
(t, m) => t.isRunning || m.message.role !== "assistant"
|
646
711
|
);
|
647
|
-
const callback = (0,
|
712
|
+
const callback = (0, import_react19.useCallback)(() => {
|
648
713
|
const { parentId } = useMessage.getState();
|
649
714
|
useThreadActions.getState().startRun(parentId);
|
650
715
|
useViewport.getState().scrollToBottom();
|
@@ -662,7 +727,7 @@ var useBranchPickerCount = () => {
|
|
662
727
|
};
|
663
728
|
|
664
729
|
// src/primitive-hooks/branchPicker/useBranchPickerNext.tsx
|
665
|
-
var
|
730
|
+
var import_react20 = require("react");
|
666
731
|
var useBranchPickerNext = () => {
|
667
732
|
const { useThreadActions } = useThreadContext();
|
668
733
|
const { useMessage, useEditComposer } = useMessageContext();
|
@@ -670,7 +735,7 @@ var useBranchPickerNext = () => {
|
|
670
735
|
[useMessage, useEditComposer],
|
671
736
|
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length
|
672
737
|
);
|
673
|
-
const callback = (0,
|
738
|
+
const callback = (0, import_react20.useCallback)(() => {
|
674
739
|
const { message, branches } = useMessage.getState();
|
675
740
|
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) + 1]);
|
676
741
|
}, [useThreadActions, useMessage]);
|
@@ -686,7 +751,7 @@ var useBranchPickerNumber = () => {
|
|
686
751
|
};
|
687
752
|
|
688
753
|
// src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx
|
689
|
-
var
|
754
|
+
var import_react21 = require("react");
|
690
755
|
var useBranchPickerPrevious = () => {
|
691
756
|
const { useThreadActions } = useThreadContext();
|
692
757
|
const { useMessage, useEditComposer } = useMessageContext();
|
@@ -694,7 +759,7 @@ var useBranchPickerPrevious = () => {
|
|
694
759
|
[useMessage, useEditComposer],
|
695
760
|
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0
|
696
761
|
);
|
697
|
-
const callback = (0,
|
762
|
+
const callback = (0, import_react21.useCallback)(() => {
|
698
763
|
const { message, branches } = useMessage.getState();
|
699
764
|
useThreadActions.getState().switchToBranch(branches[branches.indexOf(message.id) - 1]);
|
700
765
|
}, [useThreadActions, useMessage]);
|
@@ -703,11 +768,11 @@ var useBranchPickerPrevious = () => {
|
|
703
768
|
};
|
704
769
|
|
705
770
|
// src/primitive-hooks/composer/useComposerCancel.tsx
|
706
|
-
var
|
771
|
+
var import_react22 = require("react");
|
707
772
|
var useComposerCancel = () => {
|
708
773
|
const { useComposer } = useComposerContext();
|
709
774
|
const disabled = useComposer((c) => !c.canCancel);
|
710
|
-
const callback = (0,
|
775
|
+
const callback = (0, import_react22.useCallback)(() => {
|
711
776
|
const { cancel } = useComposer.getState();
|
712
777
|
cancel();
|
713
778
|
}, [useComposer]);
|
@@ -726,12 +791,12 @@ var useComposerIf = (props) => {
|
|
726
791
|
};
|
727
792
|
|
728
793
|
// src/primitive-hooks/composer/useComposerSend.tsx
|
729
|
-
var
|
794
|
+
var import_react23 = require("react");
|
730
795
|
var useComposerSend = () => {
|
731
796
|
const { useViewport, useComposer: useNewComposer } = useThreadContext();
|
732
797
|
const { useComposer } = useComposerContext();
|
733
798
|
const disabled = useComposer((c) => !c.isEditing || c.value.length === 0);
|
734
|
-
const callback = (0,
|
799
|
+
const callback = (0, import_react23.useCallback)(() => {
|
735
800
|
const composerState = useComposer.getState();
|
736
801
|
if (!composerState.isEditing) return;
|
737
802
|
composerState.send();
|
@@ -820,11 +885,11 @@ var useThreadEmpty = () => {
|
|
820
885
|
};
|
821
886
|
|
822
887
|
// src/primitive-hooks/thread/useThreadScrollToBottom.tsx
|
823
|
-
var
|
888
|
+
var import_react24 = require("react");
|
824
889
|
var useThreadScrollToBottom = () => {
|
825
890
|
const { useComposer, useViewport } = useThreadContext();
|
826
891
|
const isAtBottom = useViewport((s) => s.isAtBottom);
|
827
|
-
const handleScrollToBottom = (0,
|
892
|
+
const handleScrollToBottom = (0, import_react24.useCallback)(() => {
|
828
893
|
useViewport.getState().scrollToBottom();
|
829
894
|
useComposer.getState().focus();
|
830
895
|
}, [useViewport, useComposer]);
|
@@ -833,7 +898,7 @@ var useThreadScrollToBottom = () => {
|
|
833
898
|
};
|
834
899
|
|
835
900
|
// src/primitive-hooks/thread/useThreadSuggestion.tsx
|
836
|
-
var
|
901
|
+
var import_react25 = require("react");
|
837
902
|
var useThreadSuggestion = ({
|
838
903
|
prompt,
|
839
904
|
autoSend
|
@@ -841,7 +906,7 @@ var useThreadSuggestion = ({
|
|
841
906
|
const { useThread, useComposer } = useThreadContext();
|
842
907
|
const append = useAppendMessage();
|
843
908
|
const disabled = useThread((t) => t.isRunning);
|
844
|
-
const callback = (0,
|
909
|
+
const callback = (0, import_react25.useCallback)(() => {
|
845
910
|
const thread = useThread.getState();
|
846
911
|
const composer = useComposer.getState();
|
847
912
|
if (autoSend && !thread.isRunning) {
|
@@ -866,7 +931,7 @@ __export(actionBar_exports, {
|
|
866
931
|
|
867
932
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
868
933
|
var import_react_primitive = require("@radix-ui/react-primitive");
|
869
|
-
var
|
934
|
+
var import_react26 = require("react");
|
870
935
|
|
871
936
|
// src/primitives/actionBar/useActionBarFloatStatus.tsx
|
872
937
|
var useActionBarFloatStatus = ({
|
@@ -892,7 +957,7 @@ var useActionBarFloatStatus = ({
|
|
892
957
|
|
893
958
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
894
959
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
895
|
-
var ActionBarPrimitiveRoot = (0,
|
960
|
+
var ActionBarPrimitiveRoot = (0, import_react26.forwardRef)(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
896
961
|
const hideAndfloatStatus = useActionBarFloatStatus({
|
897
962
|
hideWhenRunning,
|
898
963
|
autohide,
|
@@ -911,12 +976,12 @@ var ActionBarPrimitiveRoot = (0, import_react25.forwardRef)(({ hideWhenRunning,
|
|
911
976
|
ActionBarPrimitiveRoot.displayName = "ActionBarPrimitive.Root";
|
912
977
|
|
913
978
|
// src/utils/createActionButton.tsx
|
914
|
-
var
|
979
|
+
var import_react27 = require("react");
|
915
980
|
var import_react_primitive2 = require("@radix-ui/react-primitive");
|
916
981
|
var import_primitive = require("@radix-ui/primitive");
|
917
982
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
918
983
|
var createActionButton = (displayName, useActionButton, forwardProps = []) => {
|
919
|
-
const ActionButton = (0,
|
984
|
+
const ActionButton = (0, import_react27.forwardRef)((props, forwardedRef) => {
|
920
985
|
const forwardedProps = {};
|
921
986
|
const primitiveProps = {};
|
922
987
|
Object.keys(props).forEach((key) => {
|
@@ -973,17 +1038,17 @@ __export(assistantModal_exports, {
|
|
973
1038
|
});
|
974
1039
|
|
975
1040
|
// src/primitives/assistantModal/AssistantModalRoot.tsx
|
976
|
-
var
|
1041
|
+
var import_react29 = require("react");
|
977
1042
|
var PopoverPrimitive2 = __toESM(require("@radix-ui/react-popover"));
|
978
1043
|
var import_primitive2 = require("@radix-ui/primitive");
|
979
1044
|
|
980
1045
|
// src/utils/hooks/useOnComposerFocus.tsx
|
981
1046
|
var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
|
982
|
-
var
|
1047
|
+
var import_react28 = require("react");
|
983
1048
|
var useOnComposerFocus = (callback) => {
|
984
1049
|
const callbackRef = (0, import_react_use_callback_ref.useCallbackRef)(callback);
|
985
1050
|
const { useComposer } = useThreadContext();
|
986
|
-
(0,
|
1051
|
+
(0, import_react28.useEffect)(() => {
|
987
1052
|
return useComposer.getState().onFocus(() => {
|
988
1053
|
callbackRef();
|
989
1054
|
});
|
@@ -997,7 +1062,7 @@ var usePopoverScope = PopoverPrimitive.createPopoverScope();
|
|
997
1062
|
// src/primitives/assistantModal/AssistantModalRoot.tsx
|
998
1063
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
999
1064
|
var useAssistantModalOpenState = (defaultOpen = false) => {
|
1000
|
-
const state = (0,
|
1065
|
+
const state = (0, import_react29.useState)(defaultOpen);
|
1001
1066
|
const [, setOpen] = state;
|
1002
1067
|
useOnComposerFocus(() => {
|
1003
1068
|
setOpen(true);
|
@@ -1026,10 +1091,10 @@ var AssistantModalPrimitiveRoot = ({
|
|
1026
1091
|
AssistantModalPrimitiveRoot.displayName = "AssistantModalPrimitive.Root";
|
1027
1092
|
|
1028
1093
|
// src/primitives/assistantModal/AssistantModalTrigger.tsx
|
1029
|
-
var
|
1094
|
+
var import_react30 = require("react");
|
1030
1095
|
var PopoverPrimitive3 = __toESM(require("@radix-ui/react-popover"));
|
1031
1096
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
1032
|
-
var AssistantModalPrimitiveTrigger = (0,
|
1097
|
+
var AssistantModalPrimitiveTrigger = (0, import_react30.forwardRef)(
|
1033
1098
|
({
|
1034
1099
|
__scopeAssistantModal,
|
1035
1100
|
...rest
|
@@ -1041,11 +1106,11 @@ var AssistantModalPrimitiveTrigger = (0, import_react29.forwardRef)(
|
|
1041
1106
|
AssistantModalPrimitiveTrigger.displayName = "AssistantModalPrimitive.Trigger";
|
1042
1107
|
|
1043
1108
|
// src/primitives/assistantModal/AssistantModalContent.tsx
|
1044
|
-
var
|
1109
|
+
var import_react31 = require("react");
|
1045
1110
|
var PopoverPrimitive4 = __toESM(require("@radix-ui/react-popover"));
|
1046
1111
|
var import_primitive3 = require("@radix-ui/primitive");
|
1047
1112
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
1048
|
-
var AssistantModalPrimitiveContent = (0,
|
1113
|
+
var AssistantModalPrimitiveContent = (0, import_react31.forwardRef)(
|
1049
1114
|
({
|
1050
1115
|
__scopeAssistantModal,
|
1051
1116
|
side,
|
@@ -1074,10 +1139,10 @@ var AssistantModalPrimitiveContent = (0, import_react30.forwardRef)(
|
|
1074
1139
|
AssistantModalPrimitiveContent.displayName = "AssistantModalPrimitive.Content";
|
1075
1140
|
|
1076
1141
|
// src/primitives/assistantModal/AssistantModalAnchor.tsx
|
1077
|
-
var
|
1142
|
+
var import_react32 = require("react");
|
1078
1143
|
var PopoverPrimitive5 = __toESM(require("@radix-ui/react-popover"));
|
1079
1144
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
1080
|
-
var AssistantModalPrimitiveAnchor = (0,
|
1145
|
+
var AssistantModalPrimitiveAnchor = (0, import_react32.forwardRef)(
|
1081
1146
|
({
|
1082
1147
|
__scopeAssistantModal,
|
1083
1148
|
...rest
|
@@ -1142,26 +1207,6 @@ __export(message_exports, {
|
|
1142
1207
|
// src/primitives/message/MessageRoot.tsx
|
1143
1208
|
var import_react_primitive3 = require("@radix-ui/react-primitive");
|
1144
1209
|
var import_react33 = require("react");
|
1145
|
-
|
1146
|
-
// src/utils/hooks/useManagedRef.ts
|
1147
|
-
var import_react32 = require("react");
|
1148
|
-
var useManagedRef = (callback) => {
|
1149
|
-
const cleanupRef = (0, import_react32.useRef)();
|
1150
|
-
const ref = (0, import_react32.useCallback)(
|
1151
|
-
(el) => {
|
1152
|
-
if (cleanupRef.current) {
|
1153
|
-
cleanupRef.current();
|
1154
|
-
}
|
1155
|
-
if (el) {
|
1156
|
-
cleanupRef.current = callback(el);
|
1157
|
-
}
|
1158
|
-
},
|
1159
|
-
[callback]
|
1160
|
-
);
|
1161
|
-
return ref;
|
1162
|
-
};
|
1163
|
-
|
1164
|
-
// src/primitives/message/MessageRoot.tsx
|
1165
1210
|
var import_react_compose_refs = require("@radix-ui/react-compose-refs");
|
1166
1211
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
1167
1212
|
var useIsHoveringRef = () => {
|
@@ -1209,7 +1254,7 @@ var import_react38 = require("react");
|
|
1209
1254
|
|
1210
1255
|
// src/context/providers/ContentPartProvider.tsx
|
1211
1256
|
var import_react34 = require("react");
|
1212
|
-
var
|
1257
|
+
var import_zustand10 = require("zustand");
|
1213
1258
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
1214
1259
|
var DONE_STATUS = { type: "done" };
|
1215
1260
|
var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
@@ -1229,7 +1274,7 @@ var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
|
1229
1274
|
var useContentPartContext2 = (partIndex) => {
|
1230
1275
|
const { useMessage } = useMessageContext();
|
1231
1276
|
const [context] = (0, import_react34.useState)(() => {
|
1232
|
-
const useContentPart = (0,
|
1277
|
+
const useContentPart = (0, import_zustand10.create)(
|
1233
1278
|
() => ({})
|
1234
1279
|
);
|
1235
1280
|
syncContentPart(useMessage.getState(), useContentPart, partIndex);
|
@@ -1787,14 +1832,14 @@ var import_react49 = require("react");
|
|
1787
1832
|
|
1788
1833
|
// src/context/providers/MessageProvider.tsx
|
1789
1834
|
var import_react48 = require("react");
|
1790
|
-
var
|
1835
|
+
var import_zustand13 = require("zustand");
|
1791
1836
|
|
1792
1837
|
// src/context/stores/EditComposer.ts
|
1793
|
-
var
|
1838
|
+
var import_zustand11 = require("zustand");
|
1794
1839
|
var makeEditComposerStore = ({
|
1795
1840
|
onEdit,
|
1796
1841
|
onSend
|
1797
|
-
}) => (0,
|
1842
|
+
}) => (0, import_zustand11.create)()((set, get, store) => ({
|
1798
1843
|
...makeBaseComposer(set, get, store),
|
1799
1844
|
canCancel: false,
|
1800
1845
|
isEditing: false,
|
@@ -1813,8 +1858,8 @@ var makeEditComposerStore = ({
|
|
1813
1858
|
}));
|
1814
1859
|
|
1815
1860
|
// src/context/stores/MessageUtils.ts
|
1816
|
-
var
|
1817
|
-
var makeMessageUtilsStore = () => (0,
|
1861
|
+
var import_zustand12 = require("zustand");
|
1862
|
+
var makeMessageUtilsStore = () => (0, import_zustand12.create)((set) => ({
|
1818
1863
|
isCopied: false,
|
1819
1864
|
setIsCopied: (value) => {
|
1820
1865
|
set({ isCopied: value });
|
@@ -1849,7 +1894,7 @@ var syncMessage = (messages, getBranches, useMessage, messageIndex) => {
|
|
1849
1894
|
var useMessageContext2 = (messageIndex) => {
|
1850
1895
|
const { useThreadMessages, useThreadActions } = useThreadContext();
|
1851
1896
|
const [context] = (0, import_react48.useState)(() => {
|
1852
|
-
const useMessage = (0,
|
1897
|
+
const useMessage = (0, import_zustand13.create)(() => ({}));
|
1853
1898
|
const useMessageUtils = makeMessageUtilsStore();
|
1854
1899
|
const useEditComposer = makeEditComposerStore({
|
1855
1900
|
onEdit: () => {
|
@@ -2273,85 +2318,335 @@ var TooltipIconButton = (0, import_react52.forwardRef)(({ children, tooltip, sid
|
|
2273
2318
|
});
|
2274
2319
|
TooltipIconButton.displayName = "TooltipIconButton";
|
2275
2320
|
|
2276
|
-
// src/runtimes/edge/
|
2277
|
-
var
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2286
|
-
|
2287
|
-
|
2288
|
-
|
2289
|
-
|
2290
|
-
|
2291
|
-
|
2292
|
-
|
2293
|
-
|
2294
|
-
|
2295
|
-
|
2296
|
-
|
2297
|
-
|
2298
|
-
|
2299
|
-
|
2300
|
-
|
2301
|
-
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
|
2309
|
-
|
2310
|
-
|
2311
|
-
|
2312
|
-
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
toolName: currentToolCall.name,
|
2318
|
-
args: currentToolCall.argsText
|
2321
|
+
// src/runtimes/edge/converters/toLanguageModelMessages.ts
|
2322
|
+
var assistantMessageSplitter = () => {
|
2323
|
+
const stash = [];
|
2324
|
+
let assistantMessage = {
|
2325
|
+
role: "assistant",
|
2326
|
+
content: []
|
2327
|
+
};
|
2328
|
+
let toolMessage = {
|
2329
|
+
role: "tool",
|
2330
|
+
content: []
|
2331
|
+
};
|
2332
|
+
return {
|
2333
|
+
addTextContentPart: (part) => {
|
2334
|
+
if (toolMessage.content.length > 0) {
|
2335
|
+
stash.push(assistantMessage);
|
2336
|
+
stash.push(toolMessage);
|
2337
|
+
assistantMessage = {
|
2338
|
+
role: "assistant",
|
2339
|
+
content: []
|
2340
|
+
};
|
2341
|
+
toolMessage = {
|
2342
|
+
role: "tool",
|
2343
|
+
content: []
|
2344
|
+
};
|
2345
|
+
}
|
2346
|
+
assistantMessage.content.push(part);
|
2347
|
+
},
|
2348
|
+
addToolCallPart: (part) => {
|
2349
|
+
assistantMessage.content.push({
|
2350
|
+
type: "tool-call",
|
2351
|
+
toolCallId: part.toolCallId,
|
2352
|
+
toolName: part.toolName,
|
2353
|
+
args: part.args
|
2354
|
+
});
|
2355
|
+
if (part.result) {
|
2356
|
+
toolMessage.content.push({
|
2357
|
+
type: "tool-result",
|
2358
|
+
toolCallId: part.toolCallId,
|
2359
|
+
toolName: part.toolName,
|
2360
|
+
result: part.result
|
2361
|
+
// isError
|
2319
2362
|
});
|
2320
|
-
currentToolCall = void 0;
|
2321
2363
|
}
|
2322
|
-
|
2323
|
-
|
2324
|
-
|
2325
|
-
|
2326
|
-
|
2327
|
-
|
2328
|
-
|
2329
|
-
|
2330
|
-
|
2331
|
-
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2335
|
-
|
2336
|
-
|
2337
|
-
|
2338
|
-
|
2339
|
-
|
2340
|
-
|
2341
|
-
|
2342
|
-
|
2343
|
-
|
2344
|
-
|
2345
|
-
|
2346
|
-
|
2347
|
-
|
2348
|
-
|
2349
|
-
|
2350
|
-
|
2351
|
-
|
2352
|
-
|
2353
|
-
|
2354
|
-
|
2364
|
+
},
|
2365
|
+
getMessages: () => {
|
2366
|
+
if (toolMessage.content.length > 0) {
|
2367
|
+
return [...stash, assistantMessage, toolMessage];
|
2368
|
+
}
|
2369
|
+
return [...stash, assistantMessage];
|
2370
|
+
}
|
2371
|
+
};
|
2372
|
+
};
|
2373
|
+
function toLanguageModelMessages(message) {
|
2374
|
+
return message.flatMap((message2) => {
|
2375
|
+
const role = message2.role;
|
2376
|
+
switch (role) {
|
2377
|
+
case "system": {
|
2378
|
+
return [{ role: "system", content: message2.content[0].text }];
|
2379
|
+
}
|
2380
|
+
case "user": {
|
2381
|
+
const msg = {
|
2382
|
+
role: "user",
|
2383
|
+
content: message2.content.map(
|
2384
|
+
(part) => {
|
2385
|
+
const type = part.type;
|
2386
|
+
switch (type) {
|
2387
|
+
case "text": {
|
2388
|
+
return part;
|
2389
|
+
}
|
2390
|
+
case "image": {
|
2391
|
+
return {
|
2392
|
+
type: "image",
|
2393
|
+
image: new URL(part.image)
|
2394
|
+
};
|
2395
|
+
}
|
2396
|
+
default: {
|
2397
|
+
const unhandledType = type;
|
2398
|
+
throw new Error(
|
2399
|
+
`Unspported content part type: ${unhandledType}`
|
2400
|
+
);
|
2401
|
+
}
|
2402
|
+
}
|
2403
|
+
}
|
2404
|
+
)
|
2405
|
+
};
|
2406
|
+
return [msg];
|
2407
|
+
}
|
2408
|
+
case "assistant": {
|
2409
|
+
const splitter = assistantMessageSplitter();
|
2410
|
+
for (const part of message2.content) {
|
2411
|
+
const type = part.type;
|
2412
|
+
switch (type) {
|
2413
|
+
case "text": {
|
2414
|
+
splitter.addTextContentPart(part);
|
2415
|
+
break;
|
2416
|
+
}
|
2417
|
+
case "tool-call": {
|
2418
|
+
splitter.addToolCallPart(part);
|
2419
|
+
break;
|
2420
|
+
}
|
2421
|
+
default: {
|
2422
|
+
const unhandledType = type;
|
2423
|
+
throw new Error(`Unhandled content part type: ${unhandledType}`);
|
2424
|
+
}
|
2425
|
+
}
|
2426
|
+
}
|
2427
|
+
return splitter.getMessages();
|
2428
|
+
}
|
2429
|
+
default: {
|
2430
|
+
const unhandledRole = role;
|
2431
|
+
throw new Error(`Unknown message role: ${unhandledRole}`);
|
2432
|
+
}
|
2433
|
+
}
|
2434
|
+
});
|
2435
|
+
}
|
2436
|
+
|
2437
|
+
// src/runtimes/edge/converters/fromLanguageModelMessages.ts
|
2438
|
+
var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
|
2439
|
+
const messages = [];
|
2440
|
+
for (const lmMessage of lm) {
|
2441
|
+
const role = lmMessage.role;
|
2442
|
+
switch (role) {
|
2443
|
+
case "system": {
|
2444
|
+
messages.push({
|
2445
|
+
role: "system",
|
2446
|
+
content: [
|
2447
|
+
{
|
2448
|
+
type: "text",
|
2449
|
+
text: lmMessage.content
|
2450
|
+
}
|
2451
|
+
]
|
2452
|
+
});
|
2453
|
+
break;
|
2454
|
+
}
|
2455
|
+
case "user": {
|
2456
|
+
messages.push({
|
2457
|
+
role: "user",
|
2458
|
+
content: lmMessage.content.map((part) => {
|
2459
|
+
const type = part.type;
|
2460
|
+
switch (type) {
|
2461
|
+
case "text": {
|
2462
|
+
return {
|
2463
|
+
type: "text",
|
2464
|
+
text: part.text
|
2465
|
+
};
|
2466
|
+
}
|
2467
|
+
case "image": {
|
2468
|
+
if (part.image instanceof URL) {
|
2469
|
+
return {
|
2470
|
+
type: "image",
|
2471
|
+
image: part.image.href
|
2472
|
+
};
|
2473
|
+
}
|
2474
|
+
throw new Error("Only images with URL data are supported");
|
2475
|
+
}
|
2476
|
+
default: {
|
2477
|
+
const unhandledType = type;
|
2478
|
+
throw new Error(`Unknown content part type: ${unhandledType}`);
|
2479
|
+
}
|
2480
|
+
}
|
2481
|
+
})
|
2482
|
+
});
|
2483
|
+
break;
|
2484
|
+
}
|
2485
|
+
case "assistant": {
|
2486
|
+
const newContent = lmMessage.content.map((part) => {
|
2487
|
+
if (part.type === "tool-call") {
|
2488
|
+
return {
|
2489
|
+
type: "tool-call",
|
2490
|
+
toolCallId: part.toolCallId,
|
2491
|
+
toolName: part.toolName,
|
2492
|
+
argsText: JSON.stringify(part.args),
|
2493
|
+
args: part.args
|
2494
|
+
};
|
2495
|
+
}
|
2496
|
+
return part;
|
2497
|
+
});
|
2498
|
+
if (mergeRoundtrips) {
|
2499
|
+
const previousMessage = messages[messages.length - 1];
|
2500
|
+
if (previousMessage?.role === "assistant") {
|
2501
|
+
previousMessage.content.push(...newContent);
|
2502
|
+
break;
|
2503
|
+
}
|
2504
|
+
}
|
2505
|
+
messages.push({
|
2506
|
+
role: "assistant",
|
2507
|
+
content: newContent
|
2508
|
+
});
|
2509
|
+
break;
|
2510
|
+
}
|
2511
|
+
case "tool": {
|
2512
|
+
const previousMessage = messages[messages.length - 1];
|
2513
|
+
if (previousMessage?.role !== "assistant")
|
2514
|
+
throw new Error(
|
2515
|
+
"A tool message must be preceded by an assistant message."
|
2516
|
+
);
|
2517
|
+
for (const tool of lmMessage.content) {
|
2518
|
+
const toolCall = previousMessage.content.find(
|
2519
|
+
(c) => c.type === "tool-call" && c.toolCallId === tool.toolCallId
|
2520
|
+
);
|
2521
|
+
if (!toolCall)
|
2522
|
+
throw new Error("Received tool result for an unknown tool call.");
|
2523
|
+
if (toolCall.toolName !== tool.toolName)
|
2524
|
+
throw new Error("Tool call name mismatch.");
|
2525
|
+
toolCall.result = tool.result;
|
2526
|
+
if (tool.isError) {
|
2527
|
+
toolCall.isError = true;
|
2528
|
+
}
|
2529
|
+
}
|
2530
|
+
break;
|
2531
|
+
}
|
2532
|
+
default: {
|
2533
|
+
const unhandledRole = role;
|
2534
|
+
throw new Error(`Unknown message role: ${unhandledRole}`);
|
2535
|
+
}
|
2536
|
+
}
|
2537
|
+
}
|
2538
|
+
return messages;
|
2539
|
+
};
|
2540
|
+
|
2541
|
+
// src/runtimes/edge/converters/fromCoreMessage.ts
|
2542
|
+
var fromCoreMessages = (message) => {
|
2543
|
+
return message.map((message2) => {
|
2544
|
+
return {
|
2545
|
+
id: generateId(),
|
2546
|
+
createdAt: /* @__PURE__ */ new Date(),
|
2547
|
+
...message2.role === "assistant" ? {
|
2548
|
+
status: { type: "done" }
|
2549
|
+
} : void 0,
|
2550
|
+
...message2
|
2551
|
+
};
|
2552
|
+
});
|
2553
|
+
};
|
2554
|
+
|
2555
|
+
// src/runtimes/edge/converters/toCoreMessages.ts
|
2556
|
+
var toCoreMessages = (message) => {
|
2557
|
+
return message.map((message2) => {
|
2558
|
+
return {
|
2559
|
+
role: message2.role,
|
2560
|
+
content: message2.content.map((part) => {
|
2561
|
+
if (part.type === "ui") throw new Error("UI parts are not supported");
|
2562
|
+
if (part.type === "tool-call") {
|
2563
|
+
const { argsText, ...rest } = part;
|
2564
|
+
return rest;
|
2565
|
+
}
|
2566
|
+
return part;
|
2567
|
+
})
|
2568
|
+
};
|
2569
|
+
});
|
2570
|
+
};
|
2571
|
+
|
2572
|
+
// src/runtimes/edge/converters/fromLanguageModelTools.ts
|
2573
|
+
var fromLanguageModelTools = (tools) => {
|
2574
|
+
return Object.fromEntries(
|
2575
|
+
tools.map((tool) => [
|
2576
|
+
tool.name,
|
2577
|
+
{
|
2578
|
+
description: tool.description,
|
2579
|
+
parameters: tool.parameters
|
2580
|
+
}
|
2581
|
+
])
|
2582
|
+
);
|
2583
|
+
};
|
2584
|
+
|
2585
|
+
// src/runtimes/edge/converters/toLanguageModelTools.ts
|
2586
|
+
var import_zod2 = require("zod");
|
2587
|
+
var import_zod_to_json_schema = __toESM(require("zod-to-json-schema"));
|
2588
|
+
var toLanguageModelTools = (tools) => {
|
2589
|
+
return Object.entries(tools).map(([name, tool]) => ({
|
2590
|
+
type: "function",
|
2591
|
+
name,
|
2592
|
+
...tool.description ? { description: tool.description } : void 0,
|
2593
|
+
parameters: tool.parameters instanceof import_zod2.z.ZodType ? (0, import_zod_to_json_schema.default)(tool.parameters) : tool.parameters
|
2594
|
+
}));
|
2595
|
+
};
|
2596
|
+
|
2597
|
+
// src/runtimes/edge/useEdgeRuntime.ts
|
2598
|
+
var import_react53 = require("react");
|
2599
|
+
|
2600
|
+
// src/runtimes/edge/streams/assistantDecoderStream.ts
|
2601
|
+
function assistantDecoderStream() {
|
2602
|
+
const toolCallNames = /* @__PURE__ */ new Map();
|
2603
|
+
let currentToolCall;
|
2604
|
+
return new TransformStream({
|
2605
|
+
transform(chunk, controller) {
|
2606
|
+
const [code, value] = parseStreamPart(chunk);
|
2607
|
+
if (currentToolCall && code !== "2" /* ToolCallArgsTextDelta */ && code !== "E" /* Error */) {
|
2608
|
+
controller.enqueue({
|
2609
|
+
type: "tool-call",
|
2610
|
+
toolCallType: "function",
|
2611
|
+
toolCallId: currentToolCall.id,
|
2612
|
+
toolName: currentToolCall.name,
|
2613
|
+
args: currentToolCall.argsText
|
2614
|
+
});
|
2615
|
+
currentToolCall = void 0;
|
2616
|
+
}
|
2617
|
+
switch (code) {
|
2618
|
+
case "0" /* TextDelta */: {
|
2619
|
+
controller.enqueue({
|
2620
|
+
type: "text-delta",
|
2621
|
+
textDelta: value
|
2622
|
+
});
|
2623
|
+
break;
|
2624
|
+
}
|
2625
|
+
case "1" /* ToolCallBegin */: {
|
2626
|
+
const { id, name } = value;
|
2627
|
+
toolCallNames.set(id, name);
|
2628
|
+
currentToolCall = { id, name, argsText: "" };
|
2629
|
+
break;
|
2630
|
+
}
|
2631
|
+
case "2" /* ToolCallArgsTextDelta */: {
|
2632
|
+
const delta = value;
|
2633
|
+
currentToolCall.argsText += delta;
|
2634
|
+
controller.enqueue({
|
2635
|
+
type: "tool-call-delta",
|
2636
|
+
toolCallType: "function",
|
2637
|
+
toolCallId: currentToolCall.id,
|
2638
|
+
toolName: currentToolCall.name,
|
2639
|
+
argsTextDelta: delta
|
2640
|
+
});
|
2641
|
+
break;
|
2642
|
+
}
|
2643
|
+
case "3" /* ToolCallResult */: {
|
2644
|
+
controller.enqueue({
|
2645
|
+
type: "tool-result",
|
2646
|
+
toolCallType: "function",
|
2647
|
+
toolCallId: value.id,
|
2648
|
+
toolName: toolCallNames.get(value.id),
|
2649
|
+
result: value.result
|
2355
2650
|
});
|
2356
2651
|
break;
|
2357
2652
|
}
|
@@ -2875,7 +3170,7 @@ var appendOrUpdateFinish = (message, chunk) => {
|
|
2875
3170
|
};
|
2876
3171
|
|
2877
3172
|
// src/runtimes/edge/streams/toolResultStream.ts
|
2878
|
-
var
|
3173
|
+
var import_zod3 = require("zod");
|
2879
3174
|
var import_secure_json_parse2 = __toESM(require("secure-json-parse"));
|
2880
3175
|
function toolResultStream(tools) {
|
2881
3176
|
const toolCallExecutions = /* @__PURE__ */ new Map();
|
@@ -2889,12 +3184,16 @@ function toolResultStream(tools) {
|
|
2889
3184
|
const tool = tools?.[toolName];
|
2890
3185
|
if (!tool || !tool.execute) return;
|
2891
3186
|
const args = import_secure_json_parse2.default.parse(argsText);
|
2892
|
-
if (tool.parameters instanceof
|
3187
|
+
if (tool.parameters instanceof import_zod3.z.ZodType) {
|
2893
3188
|
const result = tool.parameters.safeParse(args);
|
2894
3189
|
if (!result.success) {
|
2895
3190
|
controller.enqueue({
|
2896
|
-
type: "
|
2897
|
-
|
3191
|
+
type: "tool-result",
|
3192
|
+
toolCallType,
|
3193
|
+
toolCallId,
|
3194
|
+
toolName,
|
3195
|
+
result: "Function parameter validation failed. " + JSON.stringify(result.error.issues),
|
3196
|
+
isError: true
|
2898
3197
|
});
|
2899
3198
|
return;
|
2900
3199
|
} else {
|
@@ -2911,9 +3210,14 @@ function toolResultStream(tools) {
|
|
2911
3210
|
result: result2
|
2912
3211
|
});
|
2913
3212
|
} catch (error) {
|
3213
|
+
console.error("Error: ", error);
|
2914
3214
|
controller.enqueue({
|
2915
|
-
type: "
|
2916
|
-
|
3215
|
+
type: "tool-result",
|
3216
|
+
toolCallType,
|
3217
|
+
toolCallId,
|
3218
|
+
toolName,
|
3219
|
+
result: "Error: " + error,
|
3220
|
+
isError: true
|
2917
3221
|
});
|
2918
3222
|
} finally {
|
2919
3223
|
toolCallExecutions.delete(toolCallId);
|
@@ -2969,12 +3273,17 @@ var EdgeChatAdapter = class {
|
|
2969
3273
|
body: JSON.stringify({
|
2970
3274
|
system: config.system,
|
2971
3275
|
messages: toCoreMessages(messages),
|
2972
|
-
tools: toLanguageModelTools(
|
2973
|
-
|
2974
|
-
|
3276
|
+
tools: config.tools ? toLanguageModelTools(config.tools) : [],
|
3277
|
+
...config.callSettings,
|
3278
|
+
...config.config
|
2975
3279
|
}),
|
2976
3280
|
signal: abortSignal
|
2977
3281
|
});
|
3282
|
+
if (result.status !== 200) {
|
3283
|
+
throw new Error(
|
3284
|
+
`Edge runtime returned status ${result.status}: ${await result.text()}`
|
3285
|
+
);
|
3286
|
+
}
|
2978
3287
|
const stream = result.body.pipeThrough(new TextDecoderStream()).pipeThrough(chunkByLineStream()).pipeThrough(assistantDecoderStream()).pipeThrough(toolResultStream(config.tools)).pipeThrough(runResultStream(initialContent));
|
2979
3288
|
let message;
|
2980
3289
|
let update;
|
@@ -3027,240 +3336,6 @@ var useEdgeRuntime = ({
|
|
3027
3336
|
return useLocalRuntime(adapter, { initialMessages });
|
3028
3337
|
};
|
3029
3338
|
|
3030
|
-
// src/runtimes/edge/converters/toLanguageModelMessages.ts
|
3031
|
-
var assistantMessageSplitter = () => {
|
3032
|
-
const stash = [];
|
3033
|
-
let assistantMessage = {
|
3034
|
-
role: "assistant",
|
3035
|
-
content: []
|
3036
|
-
};
|
3037
|
-
let toolMessage = {
|
3038
|
-
role: "tool",
|
3039
|
-
content: []
|
3040
|
-
};
|
3041
|
-
return {
|
3042
|
-
addTextContentPart: (part) => {
|
3043
|
-
if (toolMessage.content.length > 0) {
|
3044
|
-
stash.push(assistantMessage);
|
3045
|
-
stash.push(toolMessage);
|
3046
|
-
assistantMessage = {
|
3047
|
-
role: "assistant",
|
3048
|
-
content: []
|
3049
|
-
};
|
3050
|
-
toolMessage = {
|
3051
|
-
role: "tool",
|
3052
|
-
content: []
|
3053
|
-
};
|
3054
|
-
}
|
3055
|
-
assistantMessage.content.push(part);
|
3056
|
-
},
|
3057
|
-
addToolCallPart: (part) => {
|
3058
|
-
assistantMessage.content.push({
|
3059
|
-
type: "tool-call",
|
3060
|
-
toolCallId: part.toolCallId,
|
3061
|
-
toolName: part.toolName,
|
3062
|
-
args: part.args
|
3063
|
-
});
|
3064
|
-
if (part.result) {
|
3065
|
-
toolMessage.content.push({
|
3066
|
-
type: "tool-result",
|
3067
|
-
toolCallId: part.toolCallId,
|
3068
|
-
toolName: part.toolName,
|
3069
|
-
result: part.result
|
3070
|
-
// isError
|
3071
|
-
});
|
3072
|
-
}
|
3073
|
-
},
|
3074
|
-
getMessages: () => {
|
3075
|
-
if (toolMessage.content.length > 0) {
|
3076
|
-
return [...stash, assistantMessage, toolMessage];
|
3077
|
-
}
|
3078
|
-
return [...stash, assistantMessage];
|
3079
|
-
}
|
3080
|
-
};
|
3081
|
-
};
|
3082
|
-
function toLanguageModelMessages(message) {
|
3083
|
-
return message.flatMap((message2) => {
|
3084
|
-
const role = message2.role;
|
3085
|
-
switch (role) {
|
3086
|
-
case "system": {
|
3087
|
-
return [{ role: "system", content: message2.content[0].text }];
|
3088
|
-
}
|
3089
|
-
case "user": {
|
3090
|
-
const msg = {
|
3091
|
-
role: "user",
|
3092
|
-
content: message2.content.map(
|
3093
|
-
(part) => {
|
3094
|
-
const type = part.type;
|
3095
|
-
switch (type) {
|
3096
|
-
case "text": {
|
3097
|
-
return part;
|
3098
|
-
}
|
3099
|
-
case "image": {
|
3100
|
-
return {
|
3101
|
-
type: "image",
|
3102
|
-
image: new URL(part.image)
|
3103
|
-
};
|
3104
|
-
}
|
3105
|
-
default: {
|
3106
|
-
const unhandledType = type;
|
3107
|
-
throw new Error(
|
3108
|
-
`Unspported content part type: ${unhandledType}`
|
3109
|
-
);
|
3110
|
-
}
|
3111
|
-
}
|
3112
|
-
}
|
3113
|
-
)
|
3114
|
-
};
|
3115
|
-
return [msg];
|
3116
|
-
}
|
3117
|
-
case "assistant": {
|
3118
|
-
const splitter = assistantMessageSplitter();
|
3119
|
-
for (const part of message2.content) {
|
3120
|
-
const type = part.type;
|
3121
|
-
switch (type) {
|
3122
|
-
case "text": {
|
3123
|
-
splitter.addTextContentPart(part);
|
3124
|
-
break;
|
3125
|
-
}
|
3126
|
-
case "tool-call": {
|
3127
|
-
splitter.addToolCallPart(part);
|
3128
|
-
break;
|
3129
|
-
}
|
3130
|
-
default: {
|
3131
|
-
const unhandledType = type;
|
3132
|
-
throw new Error(`Unhandled content part type: ${unhandledType}`);
|
3133
|
-
}
|
3134
|
-
}
|
3135
|
-
}
|
3136
|
-
return splitter.getMessages();
|
3137
|
-
}
|
3138
|
-
default: {
|
3139
|
-
const unhandledRole = role;
|
3140
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
3141
|
-
}
|
3142
|
-
}
|
3143
|
-
});
|
3144
|
-
}
|
3145
|
-
|
3146
|
-
// src/runtimes/edge/converters/fromLanguageModelMessages.ts
|
3147
|
-
var fromLanguageModelMessages = (lm, mergeRoundtrips) => {
|
3148
|
-
const messages = [];
|
3149
|
-
for (const lmMessage of lm) {
|
3150
|
-
const role = lmMessage.role;
|
3151
|
-
switch (role) {
|
3152
|
-
case "system": {
|
3153
|
-
messages.push({
|
3154
|
-
role: "system",
|
3155
|
-
content: [
|
3156
|
-
{
|
3157
|
-
type: "text",
|
3158
|
-
text: lmMessage.content
|
3159
|
-
}
|
3160
|
-
]
|
3161
|
-
});
|
3162
|
-
break;
|
3163
|
-
}
|
3164
|
-
case "user": {
|
3165
|
-
messages.push({
|
3166
|
-
role: "user",
|
3167
|
-
content: lmMessage.content.map((part) => {
|
3168
|
-
const type = part.type;
|
3169
|
-
switch (type) {
|
3170
|
-
case "text": {
|
3171
|
-
return {
|
3172
|
-
type: "text",
|
3173
|
-
text: part.text
|
3174
|
-
};
|
3175
|
-
}
|
3176
|
-
case "image": {
|
3177
|
-
if (part.image instanceof URL) {
|
3178
|
-
return {
|
3179
|
-
type: "image",
|
3180
|
-
image: part.image.href
|
3181
|
-
};
|
3182
|
-
}
|
3183
|
-
throw new Error("Only images with URL data are supported");
|
3184
|
-
}
|
3185
|
-
default: {
|
3186
|
-
const unhandledType = type;
|
3187
|
-
throw new Error(`Unknown content part type: ${unhandledType}`);
|
3188
|
-
}
|
3189
|
-
}
|
3190
|
-
})
|
3191
|
-
});
|
3192
|
-
break;
|
3193
|
-
}
|
3194
|
-
case "assistant": {
|
3195
|
-
const newContent = lmMessage.content.map((part) => {
|
3196
|
-
if (part.type === "tool-call") {
|
3197
|
-
return {
|
3198
|
-
type: "tool-call",
|
3199
|
-
toolCallId: part.toolCallId,
|
3200
|
-
toolName: part.toolName,
|
3201
|
-
argsText: JSON.stringify(part.args),
|
3202
|
-
args: typeof part.args === "string" ? part.args : part.args
|
3203
|
-
};
|
3204
|
-
}
|
3205
|
-
return part;
|
3206
|
-
});
|
3207
|
-
if (mergeRoundtrips) {
|
3208
|
-
const previousMessage = messages[messages.length - 1];
|
3209
|
-
if (previousMessage?.role === "assistant") {
|
3210
|
-
previousMessage.content.push(...newContent);
|
3211
|
-
break;
|
3212
|
-
}
|
3213
|
-
}
|
3214
|
-
messages.push({
|
3215
|
-
role: "assistant",
|
3216
|
-
content: newContent
|
3217
|
-
});
|
3218
|
-
break;
|
3219
|
-
}
|
3220
|
-
case "tool": {
|
3221
|
-
const previousMessage = messages[messages.length - 1];
|
3222
|
-
if (previousMessage?.role !== "assistant")
|
3223
|
-
throw new Error(
|
3224
|
-
"A tool message must be preceded by an assistant message."
|
3225
|
-
);
|
3226
|
-
for (const tool of lmMessage.content) {
|
3227
|
-
const toolCall = previousMessage.content.find(
|
3228
|
-
(c) => c.type === "tool-call" && c.toolCallId === tool.toolCallId
|
3229
|
-
);
|
3230
|
-
if (!toolCall)
|
3231
|
-
throw new Error("Received tool result for an unknown tool call.");
|
3232
|
-
if (toolCall.toolName !== tool.toolName)
|
3233
|
-
throw new Error("Tool call name mismatch.");
|
3234
|
-
toolCall.result = tool.result;
|
3235
|
-
if (tool.isError) {
|
3236
|
-
toolCall.isError = true;
|
3237
|
-
}
|
3238
|
-
}
|
3239
|
-
break;
|
3240
|
-
}
|
3241
|
-
default: {
|
3242
|
-
const unhandledRole = role;
|
3243
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
3244
|
-
}
|
3245
|
-
}
|
3246
|
-
}
|
3247
|
-
return messages;
|
3248
|
-
};
|
3249
|
-
|
3250
|
-
// src/runtimes/edge/converters/fromCoreMessage.ts
|
3251
|
-
var fromCoreMessages = (message) => {
|
3252
|
-
return message.map((message2) => {
|
3253
|
-
return {
|
3254
|
-
id: generateId(),
|
3255
|
-
createdAt: /* @__PURE__ */ new Date(),
|
3256
|
-
...message2.role === "assistant" ? {
|
3257
|
-
status: { type: "done" }
|
3258
|
-
} : void 0,
|
3259
|
-
...message2
|
3260
|
-
};
|
3261
|
-
});
|
3262
|
-
};
|
3263
|
-
|
3264
3339
|
// src/runtimes/local/LocalRuntime.tsx
|
3265
3340
|
var LocalRuntime = class extends BaseAssistantRuntime {
|
3266
3341
|
_proxyConfigProvider;
|
@@ -3339,47 +3414,47 @@ var LocalThreadRuntime = class {
|
|
3339
3414
|
async startRun(parentId) {
|
3340
3415
|
this.repository.resetHead(parentId);
|
3341
3416
|
const messages = this.repository.getMessages();
|
3342
|
-
|
3417
|
+
let message = {
|
3343
3418
|
id: generateId(),
|
3344
3419
|
role: "assistant",
|
3345
3420
|
status: { type: "in_progress" },
|
3346
3421
|
content: [{ type: "text", text: "" }],
|
3347
3422
|
createdAt: /* @__PURE__ */ new Date()
|
3348
3423
|
};
|
3349
|
-
this.repository.addOrUpdateMessage(parentId, { ...message });
|
3350
3424
|
this.abortController?.abort();
|
3351
3425
|
this.abortController = new AbortController();
|
3426
|
+
this.repository.addOrUpdateMessage(parentId, { ...message });
|
3352
3427
|
this.notifySubscribers();
|
3353
|
-
|
3354
|
-
|
3355
|
-
message
|
3356
|
-
|
3357
|
-
this.repository.addOrUpdateMessage(parentId, newMessage);
|
3358
|
-
this.notifySubscribers();
|
3359
|
-
return newMessage;
|
3428
|
+
const updateMessage = (m) => {
|
3429
|
+
message = {
|
3430
|
+
...message,
|
3431
|
+
...m
|
3360
3432
|
};
|
3433
|
+
this.repository.addOrUpdateMessage(parentId, message);
|
3434
|
+
this.notifySubscribers();
|
3435
|
+
return message;
|
3436
|
+
};
|
3437
|
+
try {
|
3361
3438
|
const result = await this.adapter.run({
|
3362
3439
|
messages,
|
3363
3440
|
abortSignal: this.abortController.signal,
|
3364
3441
|
config: this.configProvider.getModelConfig(),
|
3365
|
-
onUpdate:
|
3442
|
+
onUpdate: updateMessage
|
3366
3443
|
});
|
3367
|
-
if (result !== void 0) {
|
3368
|
-
updateHandler(result);
|
3369
|
-
}
|
3370
3444
|
if (result.status?.type === "in_progress")
|
3371
3445
|
throw new Error(
|
3372
3446
|
"Unexpected in_progress status returned from ChatModelAdapter"
|
3373
3447
|
);
|
3374
|
-
|
3448
|
+
this.abortController = null;
|
3449
|
+
updateMessage({ status: { type: "done" }, ...result });
|
3375
3450
|
this.repository.addOrUpdateMessage(parentId, { ...message });
|
3376
3451
|
} catch (e) {
|
3377
|
-
|
3378
|
-
this.repository.addOrUpdateMessage(parentId, { ...message });
|
3379
|
-
throw e;
|
3380
|
-
} finally {
|
3452
|
+
const isAbortError = e instanceof Error && e.name === "AbortError";
|
3381
3453
|
this.abortController = null;
|
3382
|
-
|
3454
|
+
updateMessage({
|
3455
|
+
status: isAbortError ? { type: "cancelled" } : { type: "error", error: e }
|
3456
|
+
});
|
3457
|
+
if (!isAbortError) throw e;
|
3383
3458
|
}
|
3384
3459
|
}
|
3385
3460
|
cancelRun() {
|
@@ -4137,9 +4212,12 @@ var assistant_modal_default = Object.assign(AssistantModal, exports12);
|
|
4137
4212
|
UserMessage,
|
4138
4213
|
fromCoreMessages,
|
4139
4214
|
fromLanguageModelMessages,
|
4215
|
+
fromLanguageModelTools,
|
4140
4216
|
makeAssistantTool,
|
4141
4217
|
makeAssistantToolUI,
|
4218
|
+
toCoreMessages,
|
4142
4219
|
toLanguageModelMessages,
|
4220
|
+
toLanguageModelTools,
|
4143
4221
|
useActionBarCopy,
|
4144
4222
|
useActionBarEdit,
|
4145
4223
|
useActionBarReload,
|