@assistant-ui/react 0.7.23 → 0.7.25
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/api/AssistantRuntime.d.ts +1 -1
- package/dist/api/AssistantRuntime.d.ts.map +1 -1
- package/dist/api/AssistantRuntime.js +1 -1
- package/dist/api/AssistantRuntime.js.map +1 -1
- package/dist/api/AssistantRuntime.mjs +1 -1
- package/dist/api/AssistantRuntime.mjs.map +1 -1
- package/dist/api/ComposerRuntime.d.ts +4 -2
- package/dist/api/ComposerRuntime.d.ts.map +1 -1
- package/dist/api/ComposerRuntime.js +6 -1
- package/dist/api/ComposerRuntime.js.map +1 -1
- package/dist/api/ComposerRuntime.mjs +6 -1
- package/dist/api/ComposerRuntime.mjs.map +1 -1
- package/dist/api/ThreadListItemRuntime.d.ts +3 -1
- package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListItemRuntime.js.map +1 -1
- package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
- package/dist/api/ThreadListRuntime.d.ts +8 -8
- package/dist/api/ThreadListRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListRuntime.js +7 -5
- package/dist/api/ThreadListRuntime.js.map +1 -1
- package/dist/api/ThreadListRuntime.mjs +7 -5
- package/dist/api/ThreadListRuntime.mjs.map +1 -1
- package/dist/api/ThreadRuntime.d.ts +59 -32
- package/dist/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +2 -2
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.mjs +2 -2
- package/dist/api/ThreadRuntime.mjs.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.js +8 -3
- package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -3
- package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
- package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListItems.js +2 -4
- package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/primitives/threadList/ThreadListItems.mjs +2 -4
- package/dist/primitives/threadList/ThreadListItems.mjs.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +6 -6
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js +29 -20
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +29 -20
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js +2 -3
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs +2 -3
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js +1 -1
- package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs +1 -1
- package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/core/AssistantRuntimeCore.d.ts +2 -0
- package/dist/runtimes/core/AssistantRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/AssistantRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/ComposerRuntimeCore.d.ts +2 -1
- package/dist/runtimes/core/ComposerRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +4 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +5 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +5 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/index.d.ts +5 -4
- package/dist/runtimes/index.d.ts.map +1 -1
- package/dist/runtimes/index.js +11 -9
- package/dist/runtimes/index.js.map +1 -1
- package/dist/runtimes/index.mjs +5 -4
- package/dist/runtimes/index.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +2 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js +12 -8
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +12 -8
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts +8 -0
- package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/BaseSubscribable.js +62 -0
- package/dist/runtimes/remote-thread-list/BaseSubscribable.js.map +1 -0
- package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs +37 -0
- package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts +3 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +150 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs +125 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.d.ts +23 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.js +83 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.js.map +1 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.mjs +58 -0
- package/dist/runtimes/remote-thread-list/OptimisticState.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +75 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js +127 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs +102 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +76 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +396 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +371 -0
- package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts +7 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js +39 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs +14 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts +19 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js +79 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs +57 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts +20 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js +95 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs +69 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts +46 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js +50 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs +25 -0
- package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts +10 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.js +32 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs +7 -0
- package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/index.d.ts +4 -0
- package/dist/runtimes/remote-thread-list/cloud/index.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/index.js +37 -0
- package/dist/runtimes/remote-thread-list/cloud/index.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/index.mjs +10 -0
- package/dist/runtimes/remote-thread-list/cloud/index.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts +4 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js +46 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs +22 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts +14 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js +103 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js.map +1 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs +79 -0
- package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/index.d.ts +2 -0
- package/dist/runtimes/remote-thread-list/index.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/index.js +25 -0
- package/dist/runtimes/remote-thread-list/index.js.map +1 -0
- package/dist/runtimes/remote-thread-list/index.mjs +3 -0
- package/dist/runtimes/remote-thread-list/index.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +25 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/types.js +19 -0
- package/dist/runtimes/remote-thread-list/types.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.mjs +1 -0
- package/dist/runtimes/remote-thread-list/types.mjs.map +1 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts +3 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js +51 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js.map +1 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs +26 -0
- package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs.map +1 -0
- package/dist/styles/index.css +2 -0
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/thread.css +5 -1
- package/dist/styles/tailwindcss/thread.css.json +4 -1
- package/dist/ui/attachment-ui.d.ts.map +1 -1
- package/dist/ui/attachment-ui.js +12 -7
- package/dist/ui/attachment-ui.js.map +1 -1
- package/dist/ui/attachment-ui.mjs +12 -7
- package/dist/ui/attachment-ui.mjs.map +1 -1
- package/dist/utils/createActionButton.d.ts +2 -2
- package/dist/utils/createActionButton.d.ts.map +1 -1
- package/dist/utils/createActionButton.js +2 -4
- package/dist/utils/createActionButton.js.map +1 -1
- package/dist/utils/createActionButton.mjs +5 -5
- package/dist/utils/createActionButton.mjs.map +1 -1
- package/package.json +3 -3
- package/src/api/AssistantRuntime.ts +2 -6
- package/src/api/ComposerRuntime.ts +10 -2
- package/src/api/ThreadListItemRuntime.ts +3 -1
- package/src/api/ThreadListRuntime.ts +11 -9
- package/src/api/ThreadRuntime.ts +3 -3
- package/src/context/providers/AssistantRuntimeProvider.tsx +21 -6
- package/src/primitives/threadList/ThreadListItems.tsx +3 -5
- package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +43 -25
- package/src/runtimes/composer/DefaultEditComposerRuntimeCore.tsx +2 -3
- package/src/runtimes/composer/DefaultThreadComposerRuntimeCore.tsx +1 -1
- package/src/runtimes/core/AssistantRuntimeCore.tsx +3 -0
- package/src/runtimes/core/ComposerRuntimeCore.tsx +2 -1
- package/src/runtimes/core/ThreadListRuntimeCore.tsx +5 -2
- package/src/runtimes/external-store/ExternalStoreAdapter.tsx +1 -1
- package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +6 -1
- package/src/runtimes/index.ts +5 -4
- package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +14 -9
- package/src/runtimes/remote-thread-list/BaseSubscribable.tsx +38 -0
- package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +158 -0
- package/src/runtimes/remote-thread-list/OptimisticState.ts +82 -0
- package/src/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.tsx +132 -0
- package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +486 -0
- package/src/runtimes/remote-thread-list/cloud/AssistantCloud.tsx +11 -0
- package/src/runtimes/remote-thread-list/cloud/AssistantCloudAPI.tsx +81 -0
- package/src/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.tsx +95 -0
- package/src/runtimes/remote-thread-list/cloud/AssistantCloudThreads.tsx +72 -0
- package/src/runtimes/remote-thread-list/cloud/CloudContext.tsx +12 -0
- package/src/runtimes/remote-thread-list/cloud/index.ts +3 -0
- package/src/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.tsx +19 -0
- package/src/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.tsx +100 -0
- package/src/runtimes/remote-thread-list/index.ts +2 -0
- package/src/runtimes/remote-thread-list/types.tsx +34 -0
- package/src/runtimes/remote-thread-list/useRemoteThreadListRuntime.tsx +28 -0
- package/src/styles/tailwindcss/thread.css +5 -1
- package/src/ui/attachment-ui.tsx +20 -14
- package/src/utils/createActionButton.tsx +11 -6
@@ -0,0 +1,158 @@
|
|
1
|
+
import { ThreadRuntimeCore } from "../../internal";
|
2
|
+
|
3
|
+
const EMPTY_THREAD_ERROR = new Error(
|
4
|
+
"This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.",
|
5
|
+
);
|
6
|
+
export const EMPTY_THREAD_CORE: ThreadRuntimeCore = {
|
7
|
+
getMessageById() {
|
8
|
+
return undefined;
|
9
|
+
},
|
10
|
+
|
11
|
+
getBranches() {
|
12
|
+
return [];
|
13
|
+
},
|
14
|
+
|
15
|
+
switchToBranch() {
|
16
|
+
throw EMPTY_THREAD_ERROR;
|
17
|
+
},
|
18
|
+
|
19
|
+
append() {
|
20
|
+
throw EMPTY_THREAD_ERROR;
|
21
|
+
},
|
22
|
+
|
23
|
+
startRun() {
|
24
|
+
throw EMPTY_THREAD_ERROR;
|
25
|
+
},
|
26
|
+
|
27
|
+
cancelRun() {
|
28
|
+
throw EMPTY_THREAD_ERROR;
|
29
|
+
},
|
30
|
+
|
31
|
+
addToolResult() {
|
32
|
+
throw EMPTY_THREAD_ERROR;
|
33
|
+
},
|
34
|
+
|
35
|
+
speak() {
|
36
|
+
throw EMPTY_THREAD_ERROR;
|
37
|
+
},
|
38
|
+
|
39
|
+
stopSpeaking() {
|
40
|
+
throw EMPTY_THREAD_ERROR;
|
41
|
+
},
|
42
|
+
|
43
|
+
getSubmittedFeedback() {
|
44
|
+
return undefined;
|
45
|
+
},
|
46
|
+
|
47
|
+
submitFeedback() {
|
48
|
+
throw EMPTY_THREAD_ERROR;
|
49
|
+
},
|
50
|
+
|
51
|
+
getModelConfig() {
|
52
|
+
return {};
|
53
|
+
},
|
54
|
+
|
55
|
+
composer: {
|
56
|
+
attachments: [],
|
57
|
+
|
58
|
+
getAttachmentAccept() {
|
59
|
+
return "*";
|
60
|
+
},
|
61
|
+
|
62
|
+
async addAttachment() {
|
63
|
+
throw EMPTY_THREAD_ERROR;
|
64
|
+
},
|
65
|
+
|
66
|
+
async removeAttachment() {
|
67
|
+
throw EMPTY_THREAD_ERROR;
|
68
|
+
},
|
69
|
+
|
70
|
+
isEditing: false,
|
71
|
+
|
72
|
+
canCancel: false,
|
73
|
+
isEmpty: true,
|
74
|
+
|
75
|
+
text: "",
|
76
|
+
|
77
|
+
setText() {
|
78
|
+
throw EMPTY_THREAD_ERROR;
|
79
|
+
},
|
80
|
+
|
81
|
+
role: "user",
|
82
|
+
|
83
|
+
setRole() {
|
84
|
+
throw EMPTY_THREAD_ERROR;
|
85
|
+
},
|
86
|
+
|
87
|
+
runConfig: {},
|
88
|
+
|
89
|
+
setRunConfig() {
|
90
|
+
throw EMPTY_THREAD_ERROR;
|
91
|
+
},
|
92
|
+
|
93
|
+
reset() {
|
94
|
+
throw EMPTY_THREAD_ERROR;
|
95
|
+
},
|
96
|
+
|
97
|
+
send() {
|
98
|
+
throw EMPTY_THREAD_ERROR;
|
99
|
+
},
|
100
|
+
|
101
|
+
cancel() {
|
102
|
+
throw EMPTY_THREAD_ERROR;
|
103
|
+
},
|
104
|
+
|
105
|
+
subscribe() {
|
106
|
+
return () => {};
|
107
|
+
},
|
108
|
+
|
109
|
+
unstable_on() {
|
110
|
+
return () => {};
|
111
|
+
},
|
112
|
+
},
|
113
|
+
|
114
|
+
getEditComposer() {
|
115
|
+
return undefined;
|
116
|
+
},
|
117
|
+
|
118
|
+
beginEdit() {
|
119
|
+
throw EMPTY_THREAD_ERROR;
|
120
|
+
},
|
121
|
+
|
122
|
+
speech: undefined,
|
123
|
+
|
124
|
+
capabilities: {
|
125
|
+
switchToBranch: false,
|
126
|
+
edit: false,
|
127
|
+
reload: false,
|
128
|
+
cancel: false,
|
129
|
+
unstable_copy: false,
|
130
|
+
speech: false,
|
131
|
+
attachments: false,
|
132
|
+
feedback: false,
|
133
|
+
},
|
134
|
+
|
135
|
+
isDisabled: true,
|
136
|
+
|
137
|
+
messages: [],
|
138
|
+
|
139
|
+
suggestions: [],
|
140
|
+
|
141
|
+
extras: undefined,
|
142
|
+
|
143
|
+
subscribe() {
|
144
|
+
return () => {};
|
145
|
+
},
|
146
|
+
|
147
|
+
import() {
|
148
|
+
throw EMPTY_THREAD_ERROR;
|
149
|
+
},
|
150
|
+
|
151
|
+
export() {
|
152
|
+
return { messages: [] };
|
153
|
+
},
|
154
|
+
|
155
|
+
unstable_on() {
|
156
|
+
return () => {};
|
157
|
+
},
|
158
|
+
};
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { BaseSubscribable } from "./BaseSubscribable";
|
2
|
+
|
3
|
+
type Transform<TState, TResult> = {
|
4
|
+
execute: () => Promise<TResult>;
|
5
|
+
|
6
|
+
/** transform the state after the promise resolves */
|
7
|
+
then?: (state: TState, result: TResult) => TState;
|
8
|
+
|
9
|
+
/** transform the state during resolution and afterwards */
|
10
|
+
optimistic?: (state: TState) => TState;
|
11
|
+
|
12
|
+
/** transform the state only while loading */
|
13
|
+
loading?: (state: TState) => TState;
|
14
|
+
};
|
15
|
+
|
16
|
+
const pipeTransforms = <TState, TExtra>(
|
17
|
+
initialState: TState,
|
18
|
+
extraParam: TExtra,
|
19
|
+
transforms: (((state: TState, extra: TExtra) => TState) | undefined)[],
|
20
|
+
): TState => {
|
21
|
+
return transforms.reduce((state, transform) => {
|
22
|
+
return transform?.(state, extraParam) ?? state;
|
23
|
+
}, initialState);
|
24
|
+
};
|
25
|
+
|
26
|
+
export class OptimisticState<TState> extends BaseSubscribable {
|
27
|
+
private readonly _pendingTransforms: Array<Transform<TState, any>> = [];
|
28
|
+
private _baseValue: TState;
|
29
|
+
private _cachedValue: TState;
|
30
|
+
|
31
|
+
public constructor(initialState: TState) {
|
32
|
+
super();
|
33
|
+
this._baseValue = initialState;
|
34
|
+
this._cachedValue = initialState;
|
35
|
+
}
|
36
|
+
|
37
|
+
private _updateState(): void {
|
38
|
+
this._cachedValue = this._pendingTransforms.reduce((state, transform) => {
|
39
|
+
return pipeTransforms(state, undefined, [
|
40
|
+
transform.loading,
|
41
|
+
transform.optimistic,
|
42
|
+
]);
|
43
|
+
}, this._baseValue);
|
44
|
+
|
45
|
+
this._notifySubscribers();
|
46
|
+
}
|
47
|
+
|
48
|
+
public get baseValue(): TState {
|
49
|
+
return this._baseValue;
|
50
|
+
}
|
51
|
+
|
52
|
+
public get value(): TState {
|
53
|
+
return this._cachedValue;
|
54
|
+
}
|
55
|
+
|
56
|
+
public update(state: TState): void {
|
57
|
+
this._baseValue = state;
|
58
|
+
this._updateState();
|
59
|
+
}
|
60
|
+
|
61
|
+
public async optimisticUpdate<TResult>(
|
62
|
+
transform: Transform<TState, TResult>,
|
63
|
+
): Promise<TResult> {
|
64
|
+
this._pendingTransforms.push(transform);
|
65
|
+
this._updateState();
|
66
|
+
|
67
|
+
try {
|
68
|
+
const result = await transform.execute();
|
69
|
+
this._baseValue = pipeTransforms(this._baseValue, result, [
|
70
|
+
transform.optimistic,
|
71
|
+
transform.then,
|
72
|
+
]);
|
73
|
+
return result;
|
74
|
+
} finally {
|
75
|
+
const index = this._pendingTransforms.indexOf(transform);
|
76
|
+
if (index > -1) {
|
77
|
+
this._pendingTransforms.splice(index, 1);
|
78
|
+
}
|
79
|
+
this._updateState();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
@@ -0,0 +1,132 @@
|
|
1
|
+
import { FC, useCallback, useRef, useEffect, memo, useMemo } from "react";
|
2
|
+
import { UseBoundStore, StoreApi, create } from "zustand";
|
3
|
+
import { useAssistantRuntime } from "../../context";
|
4
|
+
import { ThreadListItemRuntimeProvider } from "../../context/providers/ThreadListItemRuntimeProvider";
|
5
|
+
import { useThreadListItem } from "../../context/react/ThreadListItemContext";
|
6
|
+
import { ThreadRuntimeCore, ThreadRuntimeImpl } from "../../internal";
|
7
|
+
import { BaseSubscribable } from "./BaseSubscribable";
|
8
|
+
import { RemoteThreadListHook } from "./types";
|
9
|
+
|
10
|
+
type RemoteThreadListHookInstance = {
|
11
|
+
runtime?: ThreadRuntimeCore;
|
12
|
+
};
|
13
|
+
export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
14
|
+
private useRuntimeHook: UseBoundStore<
|
15
|
+
StoreApi<{ useRuntime: RemoteThreadListHook }>
|
16
|
+
>;
|
17
|
+
private instances = new Map<string, RemoteThreadListHookInstance>();
|
18
|
+
private useAliveThreadsKeysChanged = create(() => ({}));
|
19
|
+
|
20
|
+
constructor(runtimeHook: RemoteThreadListHook) {
|
21
|
+
super();
|
22
|
+
this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));
|
23
|
+
}
|
24
|
+
|
25
|
+
public startThreadRuntime(threadId: string) {
|
26
|
+
if (!this.instances.has(threadId)) {
|
27
|
+
this.instances.set(threadId, {});
|
28
|
+
this.useAliveThreadsKeysChanged.setState({}, true);
|
29
|
+
}
|
30
|
+
|
31
|
+
return new Promise<ThreadRuntimeCore>((resolve, reject) => {
|
32
|
+
const callback = () => {
|
33
|
+
const instance = this.instances.get(threadId);
|
34
|
+
if (!instance) {
|
35
|
+
dispose();
|
36
|
+
reject(new Error("Thread was deleted before runtime was started"));
|
37
|
+
} else if (!instance.runtime) {
|
38
|
+
return; // misc update
|
39
|
+
} else {
|
40
|
+
dispose();
|
41
|
+
resolve(instance.runtime);
|
42
|
+
}
|
43
|
+
};
|
44
|
+
const dispose = this.subscribe(callback);
|
45
|
+
callback();
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
public getThreadRuntimeCore(threadId: string) {
|
50
|
+
const instance = this.instances.get(threadId);
|
51
|
+
if (!instance)
|
52
|
+
throw new Error(
|
53
|
+
"getThreadRuntimeCore not found. This is a bug in assistant-ui.",
|
54
|
+
);
|
55
|
+
return instance.runtime;
|
56
|
+
}
|
57
|
+
|
58
|
+
public stopThreadRuntime(threadId: string) {
|
59
|
+
this.instances.delete(threadId);
|
60
|
+
this.useAliveThreadsKeysChanged.setState({}, true);
|
61
|
+
}
|
62
|
+
|
63
|
+
public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {
|
64
|
+
const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;
|
65
|
+
if (prevRuntimeHook !== newRuntimeHook) {
|
66
|
+
this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
private _InnerActiveThreadProvider: FC = () => {
|
71
|
+
const { id } = useThreadListItem();
|
72
|
+
|
73
|
+
const { useRuntime } = this.useRuntimeHook();
|
74
|
+
const runtime = useRuntime();
|
75
|
+
|
76
|
+
const threadBinding = (runtime.thread as ThreadRuntimeImpl)
|
77
|
+
.__internal_threadBinding;
|
78
|
+
|
79
|
+
const updateRuntime = useCallback(() => {
|
80
|
+
const aliveThread = this.instances.get(id);
|
81
|
+
if (!aliveThread)
|
82
|
+
throw new Error("Thread not found. This is a bug in assistant-ui.");
|
83
|
+
|
84
|
+
aliveThread.runtime = threadBinding.getState();
|
85
|
+
|
86
|
+
if (isMounted) {
|
87
|
+
this._notifySubscribers();
|
88
|
+
}
|
89
|
+
}, [id, threadBinding]);
|
90
|
+
|
91
|
+
const isMounted = useRef(false);
|
92
|
+
if (!isMounted.current) {
|
93
|
+
updateRuntime();
|
94
|
+
}
|
95
|
+
|
96
|
+
useEffect(() => {
|
97
|
+
isMounted.current = true;
|
98
|
+
updateRuntime();
|
99
|
+
return threadBinding.outerSubscribe(updateRuntime);
|
100
|
+
}, [threadBinding]);
|
101
|
+
|
102
|
+
return null;
|
103
|
+
};
|
104
|
+
|
105
|
+
private _OuterActiveThreadProvider: FC<{ threadId: string }> = memo(
|
106
|
+
({ threadId }) => {
|
107
|
+
const assistantRuntime = useAssistantRuntime();
|
108
|
+
const threadListItemRuntime = useMemo(
|
109
|
+
() => assistantRuntime.threadList.getItemById(threadId),
|
110
|
+
[assistantRuntime, threadId],
|
111
|
+
);
|
112
|
+
|
113
|
+
return (
|
114
|
+
<ThreadListItemRuntimeProvider runtime={threadListItemRuntime}>
|
115
|
+
<this._InnerActiveThreadProvider />
|
116
|
+
</ThreadListItemRuntimeProvider>
|
117
|
+
);
|
118
|
+
},
|
119
|
+
);
|
120
|
+
|
121
|
+
public __internal_RenderThreadRuntimes: FC = () => {
|
122
|
+
this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change
|
123
|
+
|
124
|
+
return [
|
125
|
+
...this.instances
|
126
|
+
.keys()
|
127
|
+
.map((threadId) => (
|
128
|
+
<this._OuterActiveThreadProvider key={threadId} threadId={threadId} />
|
129
|
+
)),
|
130
|
+
];
|
131
|
+
};
|
132
|
+
}
|