@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.
Files changed (231) hide show
  1. package/dist/api/AssistantRuntime.d.ts +1 -1
  2. package/dist/api/AssistantRuntime.d.ts.map +1 -1
  3. package/dist/api/AssistantRuntime.js +1 -1
  4. package/dist/api/AssistantRuntime.js.map +1 -1
  5. package/dist/api/AssistantRuntime.mjs +1 -1
  6. package/dist/api/AssistantRuntime.mjs.map +1 -1
  7. package/dist/api/ComposerRuntime.d.ts +4 -2
  8. package/dist/api/ComposerRuntime.d.ts.map +1 -1
  9. package/dist/api/ComposerRuntime.js +6 -1
  10. package/dist/api/ComposerRuntime.js.map +1 -1
  11. package/dist/api/ComposerRuntime.mjs +6 -1
  12. package/dist/api/ComposerRuntime.mjs.map +1 -1
  13. package/dist/api/ThreadListItemRuntime.d.ts +3 -1
  14. package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
  15. package/dist/api/ThreadListItemRuntime.js.map +1 -1
  16. package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
  17. package/dist/api/ThreadListRuntime.d.ts +8 -8
  18. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  19. package/dist/api/ThreadListRuntime.js +7 -5
  20. package/dist/api/ThreadListRuntime.js.map +1 -1
  21. package/dist/api/ThreadListRuntime.mjs +7 -5
  22. package/dist/api/ThreadListRuntime.mjs.map +1 -1
  23. package/dist/api/ThreadRuntime.d.ts +59 -32
  24. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  25. package/dist/api/ThreadRuntime.js +2 -2
  26. package/dist/api/ThreadRuntime.js.map +1 -1
  27. package/dist/api/ThreadRuntime.mjs +2 -2
  28. package/dist/api/ThreadRuntime.mjs.map +1 -1
  29. package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
  30. package/dist/context/providers/AssistantRuntimeProvider.js +8 -3
  31. package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
  32. package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -3
  33. package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
  34. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  35. package/dist/primitives/threadList/ThreadListItems.js +2 -4
  36. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  37. package/dist/primitives/threadList/ThreadListItems.mjs +2 -4
  38. package/dist/primitives/threadList/ThreadListItems.mjs.map +1 -1
  39. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +6 -6
  40. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  41. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +29 -20
  42. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  43. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +29 -20
  44. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
  45. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -1
  46. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js +2 -3
  47. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js.map +1 -1
  48. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs +2 -3
  49. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs.map +1 -1
  50. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js +1 -1
  51. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js.map +1 -1
  52. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs +1 -1
  53. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs.map +1 -1
  54. package/dist/runtimes/core/AssistantRuntimeCore.d.ts +2 -0
  55. package/dist/runtimes/core/AssistantRuntimeCore.d.ts.map +1 -1
  56. package/dist/runtimes/core/AssistantRuntimeCore.js.map +1 -1
  57. package/dist/runtimes/core/ComposerRuntimeCore.d.ts +2 -1
  58. package/dist/runtimes/core/ComposerRuntimeCore.d.ts.map +1 -1
  59. package/dist/runtimes/core/ComposerRuntimeCore.js.map +1 -1
  60. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +4 -1
  61. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  62. package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
  63. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +1 -1
  64. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  65. package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
  66. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
  67. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  68. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +5 -1
  69. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  70. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +5 -1
  71. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
  72. package/dist/runtimes/index.d.ts +5 -4
  73. package/dist/runtimes/index.d.ts.map +1 -1
  74. package/dist/runtimes/index.js +11 -9
  75. package/dist/runtimes/index.js.map +1 -1
  76. package/dist/runtimes/index.mjs +5 -4
  77. package/dist/runtimes/index.mjs.map +1 -1
  78. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +2 -1
  79. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  80. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +12 -8
  81. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  82. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +12 -8
  83. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
  84. package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts +8 -0
  85. package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
  86. package/dist/runtimes/remote-thread-list/BaseSubscribable.js +62 -0
  87. package/dist/runtimes/remote-thread-list/BaseSubscribable.js.map +1 -0
  88. package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs +37 -0
  89. package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs.map +1 -0
  90. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts +3 -0
  91. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
  92. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +150 -0
  93. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -0
  94. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs +125 -0
  95. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs.map +1 -0
  96. package/dist/runtimes/remote-thread-list/OptimisticState.d.ts +23 -0
  97. package/dist/runtimes/remote-thread-list/OptimisticState.d.ts.map +1 -0
  98. package/dist/runtimes/remote-thread-list/OptimisticState.js +83 -0
  99. package/dist/runtimes/remote-thread-list/OptimisticState.js.map +1 -0
  100. package/dist/runtimes/remote-thread-list/OptimisticState.mjs +58 -0
  101. package/dist/runtimes/remote-thread-list/OptimisticState.mjs.map +1 -0
  102. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +75 -0
  103. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
  104. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js +127 -0
  105. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js.map +1 -0
  106. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs +102 -0
  107. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs.map +1 -0
  108. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +76 -0
  109. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
  110. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +396 -0
  111. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -0
  112. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +371 -0
  113. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -0
  114. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts +7 -0
  115. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts.map +1 -0
  116. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js +39 -0
  117. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js.map +1 -0
  118. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs +14 -0
  119. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs.map +1 -0
  120. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts +19 -0
  121. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts.map +1 -0
  122. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js +79 -0
  123. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js.map +1 -0
  124. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs +57 -0
  125. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs.map +1 -0
  126. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts +20 -0
  127. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts.map +1 -0
  128. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js +95 -0
  129. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js.map +1 -0
  130. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs +69 -0
  131. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs.map +1 -0
  132. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts +46 -0
  133. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts.map +1 -0
  134. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js +50 -0
  135. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js.map +1 -0
  136. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs +25 -0
  137. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs.map +1 -0
  138. package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts +10 -0
  139. package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts.map +1 -0
  140. package/dist/runtimes/remote-thread-list/cloud/CloudContext.js +32 -0
  141. package/dist/runtimes/remote-thread-list/cloud/CloudContext.js.map +1 -0
  142. package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs +7 -0
  143. package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs.map +1 -0
  144. package/dist/runtimes/remote-thread-list/cloud/index.d.ts +4 -0
  145. package/dist/runtimes/remote-thread-list/cloud/index.d.ts.map +1 -0
  146. package/dist/runtimes/remote-thread-list/cloud/index.js +37 -0
  147. package/dist/runtimes/remote-thread-list/cloud/index.js.map +1 -0
  148. package/dist/runtimes/remote-thread-list/cloud/index.mjs +10 -0
  149. package/dist/runtimes/remote-thread-list/cloud/index.mjs.map +1 -0
  150. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts +4 -0
  151. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts.map +1 -0
  152. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js +46 -0
  153. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js.map +1 -0
  154. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs +22 -0
  155. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs.map +1 -0
  156. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts +14 -0
  157. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
  158. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js +103 -0
  159. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js.map +1 -0
  160. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs +79 -0
  161. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs.map +1 -0
  162. package/dist/runtimes/remote-thread-list/index.d.ts +2 -0
  163. package/dist/runtimes/remote-thread-list/index.d.ts.map +1 -0
  164. package/dist/runtimes/remote-thread-list/index.js +25 -0
  165. package/dist/runtimes/remote-thread-list/index.js.map +1 -0
  166. package/dist/runtimes/remote-thread-list/index.mjs +3 -0
  167. package/dist/runtimes/remote-thread-list/index.mjs.map +1 -0
  168. package/dist/runtimes/remote-thread-list/types.d.ts +25 -0
  169. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -0
  170. package/dist/runtimes/remote-thread-list/types.js +19 -0
  171. package/dist/runtimes/remote-thread-list/types.js.map +1 -0
  172. package/dist/runtimes/remote-thread-list/types.mjs +1 -0
  173. package/dist/runtimes/remote-thread-list/types.mjs.map +1 -0
  174. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts +3 -0
  175. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
  176. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js +51 -0
  177. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js.map +1 -0
  178. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs +26 -0
  179. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs.map +1 -0
  180. package/dist/styles/index.css +2 -0
  181. package/dist/styles/index.css.map +1 -1
  182. package/dist/styles/tailwindcss/thread.css +5 -1
  183. package/dist/styles/tailwindcss/thread.css.json +4 -1
  184. package/dist/ui/attachment-ui.d.ts.map +1 -1
  185. package/dist/ui/attachment-ui.js +12 -7
  186. package/dist/ui/attachment-ui.js.map +1 -1
  187. package/dist/ui/attachment-ui.mjs +12 -7
  188. package/dist/ui/attachment-ui.mjs.map +1 -1
  189. package/dist/utils/createActionButton.d.ts +2 -2
  190. package/dist/utils/createActionButton.d.ts.map +1 -1
  191. package/dist/utils/createActionButton.js +2 -4
  192. package/dist/utils/createActionButton.js.map +1 -1
  193. package/dist/utils/createActionButton.mjs +5 -5
  194. package/dist/utils/createActionButton.mjs.map +1 -1
  195. package/package.json +3 -3
  196. package/src/api/AssistantRuntime.ts +2 -6
  197. package/src/api/ComposerRuntime.ts +10 -2
  198. package/src/api/ThreadListItemRuntime.ts +3 -1
  199. package/src/api/ThreadListRuntime.ts +11 -9
  200. package/src/api/ThreadRuntime.ts +3 -3
  201. package/src/context/providers/AssistantRuntimeProvider.tsx +21 -6
  202. package/src/primitives/threadList/ThreadListItems.tsx +3 -5
  203. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +43 -25
  204. package/src/runtimes/composer/DefaultEditComposerRuntimeCore.tsx +2 -3
  205. package/src/runtimes/composer/DefaultThreadComposerRuntimeCore.tsx +1 -1
  206. package/src/runtimes/core/AssistantRuntimeCore.tsx +3 -0
  207. package/src/runtimes/core/ComposerRuntimeCore.tsx +2 -1
  208. package/src/runtimes/core/ThreadListRuntimeCore.tsx +5 -2
  209. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +1 -1
  210. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +6 -1
  211. package/src/runtimes/index.ts +5 -4
  212. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +14 -9
  213. package/src/runtimes/remote-thread-list/BaseSubscribable.tsx +38 -0
  214. package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +158 -0
  215. package/src/runtimes/remote-thread-list/OptimisticState.ts +82 -0
  216. package/src/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.tsx +132 -0
  217. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +486 -0
  218. package/src/runtimes/remote-thread-list/cloud/AssistantCloud.tsx +11 -0
  219. package/src/runtimes/remote-thread-list/cloud/AssistantCloudAPI.tsx +81 -0
  220. package/src/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.tsx +95 -0
  221. package/src/runtimes/remote-thread-list/cloud/AssistantCloudThreads.tsx +72 -0
  222. package/src/runtimes/remote-thread-list/cloud/CloudContext.tsx +12 -0
  223. package/src/runtimes/remote-thread-list/cloud/index.ts +3 -0
  224. package/src/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.tsx +19 -0
  225. package/src/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.tsx +100 -0
  226. package/src/runtimes/remote-thread-list/index.ts +2 -0
  227. package/src/runtimes/remote-thread-list/types.tsx +34 -0
  228. package/src/runtimes/remote-thread-list/useRemoteThreadListRuntime.tsx +28 -0
  229. package/src/styles/tailwindcss/thread.css +5 -1
  230. package/src/ui/attachment-ui.tsx +20 -14
  231. 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
+ }