@assistant-ui/react-ai-sdk 0.2.1 → 0.2.3
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/index.d.mts +48 -19
- package/dist/index.d.ts +48 -19
- package/dist/index.js +205 -66
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +199 -60
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -31,8 +31,8 @@ type VercelRSCAdapterBase<T> = {
|
|
|
31
31
|
};
|
|
32
32
|
type VercelRSCAdapter<T = VercelRSCMessage> = VercelRSCAdapterBase<T> & (T extends VercelRSCMessage ? object : RSCMessageConverter<T>);
|
|
33
33
|
|
|
34
|
-
declare const BaseAssistantRuntime$
|
|
35
|
-
declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$
|
|
34
|
+
declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
|
|
35
|
+
declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
|
|
36
36
|
private readonly _proxyConfigProvider;
|
|
37
37
|
constructor(adapter: VercelRSCAdapter<T>);
|
|
38
38
|
set adapter(adapter: VercelRSCAdapter<T>);
|
|
@@ -65,27 +65,15 @@ declare const useVercelRSCRuntime: <T extends WeakKey>(adapter: VercelRSCAdapter
|
|
|
65
65
|
|
|
66
66
|
declare const getVercelRSCMessage: <T>(message: ThreadMessage) => T | undefined;
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
|
|
71
|
-
declare class VercelAIRuntime extends BaseAssistantRuntime<VercelAIThreadRuntime> {
|
|
72
|
-
private readonly _proxyConfigProvider;
|
|
73
|
-
constructor(vercel: VercelHelpers);
|
|
74
|
-
set vercel(vercel: VercelHelpers);
|
|
75
|
-
onVercelUpdated(): void;
|
|
76
|
-
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
77
|
-
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
78
|
-
switchToThread(threadId: string | null): void;
|
|
79
|
-
}
|
|
80
|
-
declare class VercelAIThreadRuntime implements ReactThreadRuntime {
|
|
81
|
-
vercel: VercelHelpers;
|
|
68
|
+
declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
|
|
69
|
+
vercel: ReturnType<typeof useChat>;
|
|
82
70
|
private _subscriptions;
|
|
83
71
|
private repository;
|
|
84
72
|
private assistantOptimisticId;
|
|
85
73
|
private useVercel;
|
|
86
74
|
messages: ThreadMessage[];
|
|
87
75
|
isRunning: boolean;
|
|
88
|
-
constructor(vercel:
|
|
76
|
+
constructor(vercel: ReturnType<typeof useChat>);
|
|
89
77
|
getBranches(messageId: string): string[];
|
|
90
78
|
switchToBranch(branchId: string): void;
|
|
91
79
|
append(message: AppendMessage): Promise<void>;
|
|
@@ -99,9 +87,50 @@ declare class VercelAIThreadRuntime implements ReactThreadRuntime {
|
|
|
99
87
|
addToolResult(toolCallId: string, result: any): void;
|
|
100
88
|
}
|
|
101
89
|
|
|
102
|
-
declare const
|
|
90
|
+
declare const BaseAssistantRuntime$1: typeof INTERNAL.BaseAssistantRuntime;
|
|
91
|
+
declare class VercelUseChatRuntime extends BaseAssistantRuntime$1<VercelUseChatThreadRuntime> {
|
|
92
|
+
private readonly _proxyConfigProvider;
|
|
93
|
+
constructor(vercel: ReturnType<typeof useChat>);
|
|
94
|
+
set vercel(vercel: ReturnType<typeof useChat>);
|
|
95
|
+
onVercelUpdated(): void;
|
|
96
|
+
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
97
|
+
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
98
|
+
switchToThread(threadId: string | null): void;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
declare const useVercelUseChatRuntime: (chatHelpers: ReturnType<typeof useChat>) => VercelUseChatRuntime;
|
|
102
|
+
|
|
103
|
+
declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
|
|
104
|
+
vercel: UseAssistantHelpers;
|
|
105
|
+
private _subscriptions;
|
|
106
|
+
private useVercel;
|
|
107
|
+
messages: readonly ThreadMessage[];
|
|
108
|
+
isRunning: boolean;
|
|
109
|
+
constructor(vercel: UseAssistantHelpers);
|
|
110
|
+
getBranches(): readonly string[];
|
|
111
|
+
switchToBranch(): void;
|
|
112
|
+
append(message: AppendMessage): Promise<void>;
|
|
113
|
+
startRun(): Promise<void>;
|
|
114
|
+
cancelRun(): void;
|
|
115
|
+
subscribe(callback: () => void): Unsubscribe;
|
|
116
|
+
onVercelUpdated(): void;
|
|
117
|
+
private updateData;
|
|
118
|
+
unstable_synchronizer: () => null;
|
|
119
|
+
addToolResult(): void;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
|
|
123
|
+
declare class VercelUseAssistantRuntime extends BaseAssistantRuntime<VercelUseAssistantThreadRuntime> {
|
|
124
|
+
private readonly _proxyConfigProvider;
|
|
125
|
+
constructor(vercel: UseAssistantHelpers);
|
|
126
|
+
set vercel(vercel: UseAssistantHelpers);
|
|
127
|
+
onVercelUpdated(): void;
|
|
128
|
+
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
129
|
+
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
130
|
+
switchToThread(threadId: string | null): void;
|
|
131
|
+
}
|
|
103
132
|
|
|
104
|
-
declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) =>
|
|
133
|
+
declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) => VercelUseAssistantRuntime;
|
|
105
134
|
|
|
106
135
|
declare const getVercelAIMessage: (message: ThreadMessage) => Message[] | undefined;
|
|
107
136
|
|
package/dist/index.d.ts
CHANGED
|
@@ -31,8 +31,8 @@ type VercelRSCAdapterBase<T> = {
|
|
|
31
31
|
};
|
|
32
32
|
type VercelRSCAdapter<T = VercelRSCMessage> = VercelRSCAdapterBase<T> & (T extends VercelRSCMessage ? object : RSCMessageConverter<T>);
|
|
33
33
|
|
|
34
|
-
declare const BaseAssistantRuntime$
|
|
35
|
-
declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$
|
|
34
|
+
declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
|
|
35
|
+
declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
|
|
36
36
|
private readonly _proxyConfigProvider;
|
|
37
37
|
constructor(adapter: VercelRSCAdapter<T>);
|
|
38
38
|
set adapter(adapter: VercelRSCAdapter<T>);
|
|
@@ -65,27 +65,15 @@ declare const useVercelRSCRuntime: <T extends WeakKey>(adapter: VercelRSCAdapter
|
|
|
65
65
|
|
|
66
66
|
declare const getVercelRSCMessage: <T>(message: ThreadMessage) => T | undefined;
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
|
|
71
|
-
declare class VercelAIRuntime extends BaseAssistantRuntime<VercelAIThreadRuntime> {
|
|
72
|
-
private readonly _proxyConfigProvider;
|
|
73
|
-
constructor(vercel: VercelHelpers);
|
|
74
|
-
set vercel(vercel: VercelHelpers);
|
|
75
|
-
onVercelUpdated(): void;
|
|
76
|
-
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
77
|
-
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
78
|
-
switchToThread(threadId: string | null): void;
|
|
79
|
-
}
|
|
80
|
-
declare class VercelAIThreadRuntime implements ReactThreadRuntime {
|
|
81
|
-
vercel: VercelHelpers;
|
|
68
|
+
declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
|
|
69
|
+
vercel: ReturnType<typeof useChat>;
|
|
82
70
|
private _subscriptions;
|
|
83
71
|
private repository;
|
|
84
72
|
private assistantOptimisticId;
|
|
85
73
|
private useVercel;
|
|
86
74
|
messages: ThreadMessage[];
|
|
87
75
|
isRunning: boolean;
|
|
88
|
-
constructor(vercel:
|
|
76
|
+
constructor(vercel: ReturnType<typeof useChat>);
|
|
89
77
|
getBranches(messageId: string): string[];
|
|
90
78
|
switchToBranch(branchId: string): void;
|
|
91
79
|
append(message: AppendMessage): Promise<void>;
|
|
@@ -99,9 +87,50 @@ declare class VercelAIThreadRuntime implements ReactThreadRuntime {
|
|
|
99
87
|
addToolResult(toolCallId: string, result: any): void;
|
|
100
88
|
}
|
|
101
89
|
|
|
102
|
-
declare const
|
|
90
|
+
declare const BaseAssistantRuntime$1: typeof INTERNAL.BaseAssistantRuntime;
|
|
91
|
+
declare class VercelUseChatRuntime extends BaseAssistantRuntime$1<VercelUseChatThreadRuntime> {
|
|
92
|
+
private readonly _proxyConfigProvider;
|
|
93
|
+
constructor(vercel: ReturnType<typeof useChat>);
|
|
94
|
+
set vercel(vercel: ReturnType<typeof useChat>);
|
|
95
|
+
onVercelUpdated(): void;
|
|
96
|
+
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
97
|
+
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
98
|
+
switchToThread(threadId: string | null): void;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
declare const useVercelUseChatRuntime: (chatHelpers: ReturnType<typeof useChat>) => VercelUseChatRuntime;
|
|
102
|
+
|
|
103
|
+
declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
|
|
104
|
+
vercel: UseAssistantHelpers;
|
|
105
|
+
private _subscriptions;
|
|
106
|
+
private useVercel;
|
|
107
|
+
messages: readonly ThreadMessage[];
|
|
108
|
+
isRunning: boolean;
|
|
109
|
+
constructor(vercel: UseAssistantHelpers);
|
|
110
|
+
getBranches(): readonly string[];
|
|
111
|
+
switchToBranch(): void;
|
|
112
|
+
append(message: AppendMessage): Promise<void>;
|
|
113
|
+
startRun(): Promise<void>;
|
|
114
|
+
cancelRun(): void;
|
|
115
|
+
subscribe(callback: () => void): Unsubscribe;
|
|
116
|
+
onVercelUpdated(): void;
|
|
117
|
+
private updateData;
|
|
118
|
+
unstable_synchronizer: () => null;
|
|
119
|
+
addToolResult(): void;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
|
|
123
|
+
declare class VercelUseAssistantRuntime extends BaseAssistantRuntime<VercelUseAssistantThreadRuntime> {
|
|
124
|
+
private readonly _proxyConfigProvider;
|
|
125
|
+
constructor(vercel: UseAssistantHelpers);
|
|
126
|
+
set vercel(vercel: UseAssistantHelpers);
|
|
127
|
+
onVercelUpdated(): void;
|
|
128
|
+
getModelConfig(): _assistant_ui_react.ModelConfig;
|
|
129
|
+
registerModelConfigProvider(provider: ModelConfigProvider): () => void;
|
|
130
|
+
switchToThread(threadId: string | null): void;
|
|
131
|
+
}
|
|
103
132
|
|
|
104
|
-
declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) =>
|
|
133
|
+
declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) => VercelUseAssistantRuntime;
|
|
105
134
|
|
|
106
135
|
declare const getVercelAIMessage: (message: ThreadMessage) => Message[] | undefined;
|
|
107
136
|
|
package/dist/index.js
CHANGED
|
@@ -303,9 +303,12 @@ var useVercelRSCRuntime = (adapter) => {
|
|
|
303
303
|
};
|
|
304
304
|
|
|
305
305
|
// src/ui/use-chat/useVercelUseChatRuntime.tsx
|
|
306
|
-
var
|
|
306
|
+
var import_react9 = require("react");
|
|
307
|
+
|
|
308
|
+
// src/ui/use-chat/VercelUseChatRuntime.tsx
|
|
309
|
+
var import_react8 = require("@assistant-ui/react");
|
|
307
310
|
|
|
308
|
-
// src/ui/
|
|
311
|
+
// src/ui/use-chat/VercelUseChatThreadRuntime.tsx
|
|
309
312
|
var import_react7 = require("@assistant-ui/react");
|
|
310
313
|
var import_zustand2 = require("zustand");
|
|
311
314
|
|
|
@@ -368,27 +371,43 @@ var vercelToThreadMessage2 = (messages, status) => {
|
|
|
368
371
|
role: "user",
|
|
369
372
|
content: [{ type: "text", text: firstMessage.content }]
|
|
370
373
|
};
|
|
371
|
-
case "
|
|
372
|
-
|
|
374
|
+
case "data":
|
|
375
|
+
case "assistant": {
|
|
376
|
+
const res = {
|
|
373
377
|
...common,
|
|
374
378
|
role: "assistant",
|
|
375
|
-
content: messages.flatMap((message) =>
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
(
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
379
|
+
content: messages.flatMap((message) => {
|
|
380
|
+
return [
|
|
381
|
+
...message.content ? [{ type: "text", text: message.content }] : [],
|
|
382
|
+
...message.toolInvocations?.map(
|
|
383
|
+
(t) => ({
|
|
384
|
+
type: "tool-call",
|
|
385
|
+
toolName: t.toolName,
|
|
386
|
+
toolCallId: t.toolCallId,
|
|
387
|
+
args: t.args,
|
|
388
|
+
result: "result" in t ? t.result : void 0
|
|
389
|
+
})
|
|
390
|
+
) ?? [],
|
|
391
|
+
...typeof message.data === "object" && !Array.isArray(message.data) && message.data?.["type"] === "tool-call" ? [message.data] : []
|
|
392
|
+
];
|
|
393
|
+
}),
|
|
387
394
|
status
|
|
388
395
|
};
|
|
396
|
+
for (const message of messages) {
|
|
397
|
+
if (typeof message.data === "object" && !Array.isArray(message.data) && message.data?.["type"] === "tool-result") {
|
|
398
|
+
const toolCallId = message.data["toolCallId"];
|
|
399
|
+
const toolContent = res.content.find(
|
|
400
|
+
(c) => c.type === "tool-call" && c.toolCallId === toolCallId
|
|
401
|
+
);
|
|
402
|
+
if (!toolContent) throw new Error("Tool call not found");
|
|
403
|
+
toolContent.result = message.data["result"];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return res;
|
|
407
|
+
}
|
|
389
408
|
default:
|
|
390
409
|
throw new Error(
|
|
391
|
-
`You have a message with an unsupported role. The role ${firstMessage.role} is not supported.`
|
|
410
|
+
`123 You have a message with an unsupported role. The role ${firstMessage.role} is not supported.`
|
|
392
411
|
);
|
|
393
412
|
}
|
|
394
413
|
};
|
|
@@ -397,7 +416,7 @@ var chunkedMessages = (messages) => {
|
|
|
397
416
|
const chunks = [];
|
|
398
417
|
let currentChunk = [];
|
|
399
418
|
for (const message of messages) {
|
|
400
|
-
if (message.role === "assistant") {
|
|
419
|
+
if (message.role === "assistant" || message.role === "data") {
|
|
401
420
|
currentChunk.push(message);
|
|
402
421
|
} else {
|
|
403
422
|
if (hasItems(currentChunk)) {
|
|
@@ -439,40 +458,12 @@ var useVercelAIThreadSync = (vercel, updateData) => {
|
|
|
439
458
|
}, [updateData, isRunning, vercel.messages, converter]);
|
|
440
459
|
};
|
|
441
460
|
|
|
442
|
-
// src/ui/
|
|
443
|
-
var {
|
|
461
|
+
// src/ui/use-chat/VercelUseChatThreadRuntime.tsx
|
|
462
|
+
var { MessageRepository } = import_react7.INTERNAL;
|
|
444
463
|
var hasUpcomingMessage = (isRunning, messages) => {
|
|
445
464
|
return isRunning && messages[messages.length - 1]?.role !== "assistant";
|
|
446
465
|
};
|
|
447
|
-
var
|
|
448
|
-
_proxyConfigProvider = new ProxyConfigProvider2();
|
|
449
|
-
constructor(vercel) {
|
|
450
|
-
super(new VercelAIThreadRuntime(vercel));
|
|
451
|
-
}
|
|
452
|
-
set vercel(vercel) {
|
|
453
|
-
this.thread.vercel = vercel;
|
|
454
|
-
}
|
|
455
|
-
onVercelUpdated() {
|
|
456
|
-
return this.thread.onVercelUpdated();
|
|
457
|
-
}
|
|
458
|
-
getModelConfig() {
|
|
459
|
-
return this._proxyConfigProvider.getModelConfig();
|
|
460
|
-
}
|
|
461
|
-
registerModelConfigProvider(provider) {
|
|
462
|
-
return this._proxyConfigProvider.registerModelConfigProvider(provider);
|
|
463
|
-
}
|
|
464
|
-
switchToThread(threadId) {
|
|
465
|
-
if (threadId) {
|
|
466
|
-
throw new Error("VercelAIRuntime does not yet support switching threads");
|
|
467
|
-
}
|
|
468
|
-
this.thread.vercel.messages = [];
|
|
469
|
-
this.thread.vercel.input = "";
|
|
470
|
-
this.thread.vercel.setMessages([]);
|
|
471
|
-
this.thread.vercel.setInput("");
|
|
472
|
-
this.thread = new VercelAIThreadRuntime(this.thread.vercel);
|
|
473
|
-
}
|
|
474
|
-
};
|
|
475
|
-
var VercelAIThreadRuntime = class {
|
|
466
|
+
var VercelUseChatThreadRuntime = class {
|
|
476
467
|
constructor(vercel) {
|
|
477
468
|
this.vercel = vercel;
|
|
478
469
|
this.useVercel = (0, import_zustand2.create)(() => ({
|
|
@@ -494,7 +485,9 @@ var VercelAIThreadRuntime = class {
|
|
|
494
485
|
}
|
|
495
486
|
async append(message) {
|
|
496
487
|
if (message.content.length !== 1 || message.content[0]?.type !== "text")
|
|
497
|
-
throw new Error(
|
|
488
|
+
throw new Error(
|
|
489
|
+
"Only text content is supported by VercelUseChatRuntime."
|
|
490
|
+
);
|
|
498
491
|
const newMessages = sliceMessagesUntil(
|
|
499
492
|
this.vercel.messages,
|
|
500
493
|
message.parentId
|
|
@@ -506,14 +499,9 @@ var VercelAIThreadRuntime = class {
|
|
|
506
499
|
});
|
|
507
500
|
}
|
|
508
501
|
async startRun(parentId) {
|
|
509
|
-
const reloadMaybe = "reload" in this.vercel ? this.vercel.reload : void 0;
|
|
510
|
-
if (!reloadMaybe)
|
|
511
|
-
throw new Error(
|
|
512
|
-
"Reload is not supported by Vercel AI SDK's useAssistant."
|
|
513
|
-
);
|
|
514
502
|
const newMessages = sliceMessagesUntil(this.vercel.messages, parentId);
|
|
515
503
|
this.vercel.setMessages(newMessages);
|
|
516
|
-
await
|
|
504
|
+
await this.vercel.reload();
|
|
517
505
|
}
|
|
518
506
|
cancelRun() {
|
|
519
507
|
const previousMessage = this.vercel.messages.at(-1);
|
|
@@ -579,33 +567,184 @@ var VercelAIThreadRuntime = class {
|
|
|
579
567
|
return null;
|
|
580
568
|
};
|
|
581
569
|
addToolResult(toolCallId, result) {
|
|
582
|
-
if (!("addToolResult" in this.vercel)) {
|
|
583
|
-
throw new Error("VercelAIRuntime does not support adding tool results");
|
|
584
|
-
}
|
|
585
570
|
this.vercel.addToolResult({ toolCallId, result });
|
|
586
571
|
}
|
|
587
572
|
};
|
|
588
573
|
|
|
574
|
+
// src/ui/use-chat/VercelUseChatRuntime.tsx
|
|
575
|
+
var { ProxyConfigProvider: ProxyConfigProvider2, BaseAssistantRuntime: BaseAssistantRuntime2 } = import_react8.INTERNAL;
|
|
576
|
+
var VercelUseChatRuntime = class extends BaseAssistantRuntime2 {
|
|
577
|
+
_proxyConfigProvider = new ProxyConfigProvider2();
|
|
578
|
+
constructor(vercel) {
|
|
579
|
+
super(new VercelUseChatThreadRuntime(vercel));
|
|
580
|
+
}
|
|
581
|
+
set vercel(vercel) {
|
|
582
|
+
this.thread.vercel = vercel;
|
|
583
|
+
}
|
|
584
|
+
onVercelUpdated() {
|
|
585
|
+
return this.thread.onVercelUpdated();
|
|
586
|
+
}
|
|
587
|
+
getModelConfig() {
|
|
588
|
+
return this._proxyConfigProvider.getModelConfig();
|
|
589
|
+
}
|
|
590
|
+
registerModelConfigProvider(provider) {
|
|
591
|
+
return this._proxyConfigProvider.registerModelConfigProvider(provider);
|
|
592
|
+
}
|
|
593
|
+
switchToThread(threadId) {
|
|
594
|
+
if (threadId) {
|
|
595
|
+
throw new Error(
|
|
596
|
+
"VercelAIRuntime does not yet support switching threads."
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
this.thread.vercel.messages = [];
|
|
600
|
+
this.thread.vercel.input = "";
|
|
601
|
+
this.thread.vercel.setMessages([]);
|
|
602
|
+
this.thread.vercel.setInput("");
|
|
603
|
+
this.thread = new VercelUseChatThreadRuntime(this.thread.vercel);
|
|
604
|
+
}
|
|
605
|
+
};
|
|
606
|
+
|
|
589
607
|
// src/ui/use-chat/useVercelUseChatRuntime.tsx
|
|
590
608
|
var useVercelUseChatRuntime = (chatHelpers) => {
|
|
591
|
-
const [runtime] = (0,
|
|
592
|
-
(0,
|
|
609
|
+
const [runtime] = (0, import_react9.useState)(() => new VercelUseChatRuntime(chatHelpers));
|
|
610
|
+
(0, import_react9.useInsertionEffect)(() => {
|
|
593
611
|
runtime.vercel = chatHelpers;
|
|
594
612
|
});
|
|
595
|
-
(0,
|
|
613
|
+
(0, import_react9.useEffect)(() => {
|
|
596
614
|
runtime.onVercelUpdated();
|
|
597
615
|
});
|
|
598
616
|
return runtime;
|
|
599
617
|
};
|
|
600
618
|
|
|
601
619
|
// src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
|
|
602
|
-
var
|
|
620
|
+
var import_react11 = require("react");
|
|
621
|
+
|
|
622
|
+
// src/ui/use-assistant/VercelUseAssistantRuntime.tsx
|
|
623
|
+
var import_react10 = require("@assistant-ui/react");
|
|
624
|
+
|
|
625
|
+
// src/ui/use-assistant/VercelUseAssistantThreadRuntime.tsx
|
|
626
|
+
var import_zustand3 = require("zustand");
|
|
627
|
+
var EMPTY_BRANCHES2 = Object.freeze([]);
|
|
628
|
+
var VercelUseAssistantThreadRuntime = class {
|
|
629
|
+
constructor(vercel) {
|
|
630
|
+
this.vercel = vercel;
|
|
631
|
+
this.useVercel = (0, import_zustand3.create)(() => ({
|
|
632
|
+
vercel
|
|
633
|
+
}));
|
|
634
|
+
}
|
|
635
|
+
_subscriptions = /* @__PURE__ */ new Set();
|
|
636
|
+
useVercel;
|
|
637
|
+
messages = [];
|
|
638
|
+
isRunning = false;
|
|
639
|
+
getBranches() {
|
|
640
|
+
return EMPTY_BRANCHES2;
|
|
641
|
+
}
|
|
642
|
+
switchToBranch() {
|
|
643
|
+
throw new Error(
|
|
644
|
+
"VercelUseAssistantRuntime does not support switching branches."
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
async append(message) {
|
|
648
|
+
if (message.content.length !== 1 || message.content[0]?.type !== "text")
|
|
649
|
+
throw new Error("VercelUseAssistantRuntime only supports text content.");
|
|
650
|
+
if (message.parentId !== (this.messages.at(-1)?.id ?? null))
|
|
651
|
+
throw new Error(
|
|
652
|
+
"VercelUseAssistantRuntime does not support editing messages."
|
|
653
|
+
);
|
|
654
|
+
await this.vercel.append({
|
|
655
|
+
role: "user",
|
|
656
|
+
content: message.content[0].text
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
async startRun() {
|
|
660
|
+
throw new Error("VercelUseAssistantRuntime does not support reloading.");
|
|
661
|
+
}
|
|
662
|
+
cancelRun() {
|
|
663
|
+
const previousMessage = this.vercel.messages.at(-1);
|
|
664
|
+
this.vercel.stop();
|
|
665
|
+
if (previousMessage?.role === "user") {
|
|
666
|
+
this.vercel.setInput(previousMessage.content);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
subscribe(callback) {
|
|
670
|
+
this._subscriptions.add(callback);
|
|
671
|
+
return () => this._subscriptions.delete(callback);
|
|
672
|
+
}
|
|
673
|
+
onVercelUpdated() {
|
|
674
|
+
if (this.useVercel.getState().vercel !== this.vercel) {
|
|
675
|
+
this.useVercel.setState({ vercel: this.vercel });
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
updateData = (isRunning, vm) => {
|
|
679
|
+
if (hasUpcomingMessage2(isRunning, vm)) {
|
|
680
|
+
vm.push({
|
|
681
|
+
id: "__optimistic__result",
|
|
682
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
683
|
+
status: "in_progress",
|
|
684
|
+
role: "assistant",
|
|
685
|
+
content: [{ type: "text", text: "" }]
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
this.messages = vm;
|
|
689
|
+
this.isRunning = isRunning;
|
|
690
|
+
for (const callback of this._subscriptions) callback();
|
|
691
|
+
};
|
|
692
|
+
unstable_synchronizer = () => {
|
|
693
|
+
const { vercel } = this.useVercel();
|
|
694
|
+
useVercelAIThreadSync(vercel, this.updateData);
|
|
695
|
+
useVercelAIComposerSync(vercel);
|
|
696
|
+
return null;
|
|
697
|
+
};
|
|
698
|
+
addToolResult() {
|
|
699
|
+
throw new Error(
|
|
700
|
+
"VercelUseAssistantRuntime does not support adding tool results."
|
|
701
|
+
);
|
|
702
|
+
}
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
// src/ui/use-assistant/VercelUseAssistantRuntime.tsx
|
|
706
|
+
var { ProxyConfigProvider: ProxyConfigProvider3, BaseAssistantRuntime: BaseAssistantRuntime3 } = import_react10.INTERNAL;
|
|
707
|
+
var hasUpcomingMessage2 = (isRunning, messages) => {
|
|
708
|
+
return isRunning && messages[messages.length - 1]?.role !== "assistant";
|
|
709
|
+
};
|
|
710
|
+
var VercelUseAssistantRuntime = class extends BaseAssistantRuntime3 {
|
|
711
|
+
_proxyConfigProvider = new ProxyConfigProvider3();
|
|
712
|
+
constructor(vercel) {
|
|
713
|
+
super(new VercelUseAssistantThreadRuntime(vercel));
|
|
714
|
+
}
|
|
715
|
+
set vercel(vercel) {
|
|
716
|
+
this.thread.vercel = vercel;
|
|
717
|
+
}
|
|
718
|
+
onVercelUpdated() {
|
|
719
|
+
return this.thread.onVercelUpdated();
|
|
720
|
+
}
|
|
721
|
+
getModelConfig() {
|
|
722
|
+
return this._proxyConfigProvider.getModelConfig();
|
|
723
|
+
}
|
|
724
|
+
registerModelConfigProvider(provider) {
|
|
725
|
+
return this._proxyConfigProvider.registerModelConfigProvider(provider);
|
|
726
|
+
}
|
|
727
|
+
switchToThread(threadId) {
|
|
728
|
+
if (threadId) {
|
|
729
|
+
throw new Error("VercelAIRuntime does not yet support switching threads");
|
|
730
|
+
}
|
|
731
|
+
this.thread.vercel.messages = [];
|
|
732
|
+
this.thread.vercel.input = "";
|
|
733
|
+
this.thread.vercel.setMessages([]);
|
|
734
|
+
this.thread.vercel.setInput("");
|
|
735
|
+
this.thread = new VercelUseAssistantThreadRuntime(this.thread.vercel);
|
|
736
|
+
}
|
|
737
|
+
};
|
|
738
|
+
|
|
739
|
+
// src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
|
|
603
740
|
var useVercelUseAssistantRuntime = (assistantHelpers) => {
|
|
604
|
-
const [runtime] = (0,
|
|
605
|
-
|
|
741
|
+
const [runtime] = (0, import_react11.useState)(
|
|
742
|
+
() => new VercelUseAssistantRuntime(assistantHelpers)
|
|
743
|
+
);
|
|
744
|
+
(0, import_react11.useInsertionEffect)(() => {
|
|
606
745
|
runtime.vercel = assistantHelpers;
|
|
607
746
|
});
|
|
608
|
-
(0,
|
|
747
|
+
(0, import_react11.useEffect)(() => {
|
|
609
748
|
runtime.onVercelUpdated();
|
|
610
749
|
});
|
|
611
750
|
return runtime;
|