@langchain/langgraph-sdk 0.1.10 → 1.0.0

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.
Files changed (234) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/auth/error.cjs +76 -86
  4. package/dist/auth/error.cjs.map +1 -0
  5. package/dist/auth/error.d.cts +13 -0
  6. package/dist/auth/error.d.cts.map +1 -0
  7. package/dist/auth/error.d.ts +12 -8
  8. package/dist/auth/error.d.ts.map +1 -0
  9. package/dist/auth/error.js +76 -83
  10. package/dist/auth/error.js.map +1 -0
  11. package/dist/auth/index.cjs +36 -44
  12. package/dist/auth/index.cjs.map +1 -0
  13. package/dist/auth/index.d.cts +31 -0
  14. package/dist/auth/index.d.cts.map +1 -0
  15. package/dist/auth/index.d.ts +20 -15
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +35 -39
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/types.d.cts +294 -0
  20. package/dist/auth/types.d.cts.map +1 -0
  21. package/dist/auth/types.d.ts +162 -165
  22. package/dist/auth/types.d.ts.map +1 -0
  23. package/dist/client.cjs +1108 -1294
  24. package/dist/client.cjs.map +1 -0
  25. package/dist/client.d.cts +688 -0
  26. package/dist/client.d.cts.map +1 -0
  27. package/dist/client.d.ts +647 -639
  28. package/dist/client.d.ts.map +1 -0
  29. package/dist/client.js +1099 -1281
  30. package/dist/client.js.map +1 -0
  31. package/dist/index.cjs +6 -8
  32. package/dist/index.d.cts +7 -0
  33. package/dist/index.d.ts +7 -7
  34. package/dist/index.js +4 -2
  35. package/dist/logging/index.cjs +30 -31
  36. package/dist/logging/index.cjs.map +1 -0
  37. package/dist/logging/index.d.cts +47 -0
  38. package/dist/logging/index.d.cts.map +1 -0
  39. package/dist/logging/index.d.ts +20 -16
  40. package/dist/logging/index.d.ts.map +1 -0
  41. package/dist/logging/index.js +31 -29
  42. package/dist/logging/index.js.map +1 -0
  43. package/dist/react/index.cjs +5 -7
  44. package/dist/react/index.d.cts +4 -0
  45. package/dist/react/index.d.ts +4 -3
  46. package/dist/react/index.js +4 -2
  47. package/dist/react/stream.cjs +14 -15
  48. package/dist/react/stream.cjs.map +1 -0
  49. package/dist/react/stream.custom.cjs +126 -145
  50. package/dist/react/stream.custom.cjs.map +1 -0
  51. package/dist/react/stream.custom.d.cts +39 -0
  52. package/dist/react/stream.custom.d.cts.map +1 -0
  53. package/dist/react/stream.custom.d.ts +35 -37
  54. package/dist/react/stream.custom.d.ts.map +1 -0
  55. package/dist/react/stream.custom.js +122 -137
  56. package/dist/react/stream.custom.js.map +1 -0
  57. package/dist/react/stream.d.cts +73 -0
  58. package/dist/react/stream.d.cts.map +1 -0
  59. package/dist/react/stream.d.ts +21 -15
  60. package/dist/react/stream.d.ts.map +1 -0
  61. package/dist/react/stream.js +12 -11
  62. package/dist/react/stream.js.map +1 -0
  63. package/dist/react/stream.lgp.cjs +438 -498
  64. package/dist/react/stream.lgp.cjs.map +1 -0
  65. package/dist/react/stream.lgp.js +433 -490
  66. package/dist/react/stream.lgp.js.map +1 -0
  67. package/dist/react/thread.cjs +18 -15
  68. package/dist/react/thread.cjs.map +1 -0
  69. package/dist/react/thread.js +19 -13
  70. package/dist/react/thread.js.map +1 -0
  71. package/dist/react/types.d.cts +355 -0
  72. package/dist/react/types.d.cts.map +1 -0
  73. package/dist/react/types.d.ts +333 -329
  74. package/dist/react/types.d.ts.map +1 -0
  75. package/dist/react-ui/client.cjs +123 -184
  76. package/dist/react-ui/client.cjs.map +1 -0
  77. package/dist/react-ui/client.d.cts +90 -0
  78. package/dist/react-ui/client.d.cts.map +1 -0
  79. package/dist/react-ui/client.d.ts +67 -51
  80. package/dist/react-ui/client.d.ts.map +1 -0
  81. package/dist/react-ui/client.js +118 -143
  82. package/dist/react-ui/client.js.map +1 -0
  83. package/dist/react-ui/index.cjs +14 -13
  84. package/dist/react-ui/index.cjs.map +1 -0
  85. package/dist/react-ui/index.d.cts +3 -0
  86. package/dist/react-ui/index.d.ts +3 -2
  87. package/dist/react-ui/index.js +8 -3
  88. package/dist/react-ui/index.js.map +1 -0
  89. package/dist/react-ui/server/index.cjs +5 -7
  90. package/dist/react-ui/server/index.d.cts +3 -0
  91. package/dist/react-ui/server/index.d.ts +3 -2
  92. package/dist/react-ui/server/index.js +4 -2
  93. package/dist/react-ui/server/server.cjs +53 -44
  94. package/dist/react-ui/server/server.cjs.map +1 -0
  95. package/dist/react-ui/server/server.d.cts +55 -0
  96. package/dist/react-ui/server/server.d.cts.map +1 -0
  97. package/dist/react-ui/server/server.d.ts +43 -39
  98. package/dist/react-ui/server/server.d.ts.map +1 -0
  99. package/dist/react-ui/server/server.js +54 -42
  100. package/dist/react-ui/server/server.js.map +1 -0
  101. package/dist/react-ui/types.cjs +32 -36
  102. package/dist/react-ui/types.cjs.map +1 -0
  103. package/dist/react-ui/types.d.cts +25 -0
  104. package/dist/react-ui/types.d.cts.map +1 -0
  105. package/dist/react-ui/types.d.ts +23 -19
  106. package/dist/react-ui/types.d.ts.map +1 -0
  107. package/dist/react-ui/types.js +32 -34
  108. package/dist/react-ui/types.js.map +1 -0
  109. package/dist/schema.d.cts +277 -0
  110. package/dist/schema.d.cts.map +1 -0
  111. package/dist/schema.d.ts +249 -242
  112. package/dist/schema.d.ts.map +1 -0
  113. package/dist/singletons/fetch.cjs +16 -20
  114. package/dist/singletons/fetch.cjs.map +1 -0
  115. package/dist/singletons/fetch.d.cts +14 -0
  116. package/dist/singletons/fetch.d.cts.map +1 -0
  117. package/dist/singletons/fetch.d.ts +5 -2
  118. package/dist/singletons/fetch.d.ts.map +1 -0
  119. package/dist/singletons/fetch.js +16 -17
  120. package/dist/singletons/fetch.js.map +1 -0
  121. package/dist/types.d.cts +187 -0
  122. package/dist/types.d.cts.map +1 -0
  123. package/dist/types.d.ts +178 -173
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.messages.d.cts +91 -0
  126. package/dist/types.messages.d.cts.map +1 -0
  127. package/dist/types.messages.d.ts +71 -66
  128. package/dist/types.messages.d.ts.map +1 -0
  129. package/dist/types.stream.d.cts +235 -0
  130. package/dist/types.stream.d.cts.map +1 -0
  131. package/dist/types.stream.d.ts +149 -142
  132. package/dist/types.stream.d.ts.map +1 -0
  133. package/dist/ui/branching.cjs +145 -141
  134. package/dist/ui/branching.cjs.map +1 -0
  135. package/dist/ui/branching.d.cts +22 -0
  136. package/dist/ui/branching.d.cts.map +1 -0
  137. package/dist/ui/branching.d.ts +17 -30
  138. package/dist/ui/branching.d.ts.map +1 -0
  139. package/dist/ui/branching.js +147 -139
  140. package/dist/ui/branching.js.map +1 -0
  141. package/dist/ui/errors.cjs +14 -12
  142. package/dist/ui/errors.cjs.map +1 -0
  143. package/dist/ui/errors.js +14 -9
  144. package/dist/ui/errors.js.map +1 -0
  145. package/dist/ui/manager.cjs +156 -232
  146. package/dist/ui/manager.cjs.map +1 -0
  147. package/dist/ui/manager.js +156 -228
  148. package/dist/ui/manager.js.map +1 -0
  149. package/dist/ui/messages.cjs +55 -69
  150. package/dist/ui/messages.cjs.map +1 -0
  151. package/dist/ui/messages.js +55 -66
  152. package/dist/ui/messages.js.map +1 -0
  153. package/dist/ui/utils.cjs +10 -10
  154. package/dist/ui/utils.cjs.map +1 -0
  155. package/dist/ui/utils.js +10 -8
  156. package/dist/ui/utils.js.map +1 -0
  157. package/dist/utils/async_caller.cjs +103 -185
  158. package/dist/utils/async_caller.cjs.map +1 -0
  159. package/dist/utils/async_caller.d.cts +53 -0
  160. package/dist/utils/async_caller.d.cts.map +1 -0
  161. package/dist/utils/async_caller.d.ts +36 -31
  162. package/dist/utils/async_caller.d.ts.map +1 -0
  163. package/dist/utils/async_caller.js +101 -177
  164. package/dist/utils/async_caller.js.map +1 -0
  165. package/dist/utils/env.cjs +11 -13
  166. package/dist/utils/env.cjs.map +1 -0
  167. package/dist/utils/env.js +11 -11
  168. package/dist/utils/env.js.map +1 -0
  169. package/dist/utils/signals.cjs +18 -19
  170. package/dist/utils/signals.cjs.map +1 -0
  171. package/dist/utils/signals.js +18 -17
  172. package/dist/utils/signals.js.map +1 -0
  173. package/dist/utils/sse.cjs +110 -140
  174. package/dist/utils/sse.cjs.map +1 -0
  175. package/dist/utils/sse.js +110 -138
  176. package/dist/utils/sse.js.map +1 -0
  177. package/dist/utils/stream.cjs +90 -114
  178. package/dist/utils/stream.cjs.map +1 -0
  179. package/dist/utils/stream.js +90 -111
  180. package/dist/utils/stream.js.map +1 -0
  181. package/package.json +72 -80
  182. package/auth.cjs +0 -1
  183. package/auth.d.cts +0 -1
  184. package/auth.d.ts +0 -1
  185. package/auth.js +0 -1
  186. package/client.cjs +0 -1
  187. package/client.d.cts +0 -1
  188. package/client.d.ts +0 -1
  189. package/client.js +0 -1
  190. package/dist/auth/types.cjs +0 -2
  191. package/dist/auth/types.js +0 -1
  192. package/dist/react/stream.lgp.d.ts +0 -7
  193. package/dist/react/thread.d.ts +0 -4
  194. package/dist/react/types.cjs +0 -2
  195. package/dist/react/types.js +0 -1
  196. package/dist/schema.cjs +0 -2
  197. package/dist/schema.js +0 -1
  198. package/dist/types.cjs +0 -2
  199. package/dist/types.js +0 -1
  200. package/dist/types.messages.cjs +0 -2
  201. package/dist/types.messages.js +0 -1
  202. package/dist/types.stream.cjs +0 -2
  203. package/dist/types.stream.js +0 -1
  204. package/dist/ui/branching.test.cjs +0 -370
  205. package/dist/ui/branching.test.d.ts +0 -1
  206. package/dist/ui/branching.test.js +0 -368
  207. package/dist/ui/errors.d.ts +0 -12
  208. package/dist/ui/manager.d.ts +0 -87
  209. package/dist/ui/messages.d.ts +0 -18
  210. package/dist/ui/utils.d.ts +0 -2
  211. package/dist/utils/env.d.ts +0 -1
  212. package/dist/utils/signals.d.ts +0 -1
  213. package/dist/utils/sse.d.ts +0 -8
  214. package/dist/utils/stream.d.ts +0 -13
  215. package/index.cjs +0 -1
  216. package/index.d.cts +0 -1
  217. package/index.d.ts +0 -1
  218. package/index.js +0 -1
  219. package/logging.cjs +0 -1
  220. package/logging.d.cts +0 -1
  221. package/logging.d.ts +0 -1
  222. package/logging.js +0 -1
  223. package/react-ui/server.cjs +0 -1
  224. package/react-ui/server.d.cts +0 -1
  225. package/react-ui/server.d.ts +0 -1
  226. package/react-ui/server.js +0 -1
  227. package/react-ui.cjs +0 -1
  228. package/react-ui.d.cts +0 -1
  229. package/react-ui.d.ts +0 -1
  230. package/react-ui.js +0 -1
  231. package/react.cjs +0 -1
  232. package/react.d.cts +0 -1
  233. package/react.d.ts +0 -1
  234. package/react.js +0 -1
@@ -1,233 +1,157 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamManager = void 0;
4
- const messages_js_1 = require("./messages.cjs");
5
- const errors_js_1 = require("./errors.cjs");
6
- class StreamManager {
7
- constructor(messages) {
8
- Object.defineProperty(this, "abortRef", {
9
- enumerable: true,
10
- configurable: true,
11
- writable: true,
12
- value: new AbortController()
13
- });
14
- Object.defineProperty(this, "messages", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: void 0
19
- });
20
- Object.defineProperty(this, "listeners", {
21
- enumerable: true,
22
- configurable: true,
23
- writable: true,
24
- value: new Set()
25
- });
26
- Object.defineProperty(this, "state", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: void 0
31
- });
32
- Object.defineProperty(this, "setState", {
33
- enumerable: true,
34
- configurable: true,
35
- writable: true,
36
- value: (newState) => {
37
- this.state = { ...this.state, ...newState };
38
- this.notifyListeners();
39
- }
40
- });
41
- Object.defineProperty(this, "notifyListeners", {
42
- enumerable: true,
43
- configurable: true,
44
- writable: true,
45
- value: () => {
46
- this.listeners.forEach((listener) => listener());
47
- }
48
- });
49
- Object.defineProperty(this, "subscribe", {
50
- enumerable: true,
51
- configurable: true,
52
- writable: true,
53
- value: (listener) => {
54
- this.listeners.add(listener);
55
- return () => this.listeners.delete(listener);
56
- }
57
- });
58
- Object.defineProperty(this, "getSnapshot", {
59
- enumerable: true,
60
- configurable: true,
61
- writable: true,
62
- value: () => this.state
63
- });
64
- Object.defineProperty(this, "setStreamValues", {
65
- enumerable: true,
66
- configurable: true,
67
- writable: true,
68
- value: (values, kind = "stream") => {
69
- if (typeof values === "function") {
70
- const [prevValues, prevKind] = this.state.values ?? [null, "stream"];
71
- const nextValues = values(prevValues, prevKind);
72
- this.setState({ values: nextValues != null ? [nextValues, kind] : null });
73
- }
74
- else {
75
- const nextValues = values != null ? [values, kind] : null;
76
- this.setState({ values: nextValues });
77
- }
78
- }
79
- });
80
- Object.defineProperty(this, "getMutateFn", {
81
- enumerable: true,
82
- configurable: true,
83
- writable: true,
84
- value: (kind, historyValues) => {
85
- return (update) => {
86
- const prev = {
87
- ...historyValues,
88
- ...(this.state.values ?? [null, "stream"])[0],
89
- };
90
- const next = typeof update === "function" ? update(prev) : update;
91
- this.setStreamValues({ ...prev, ...next }, kind);
92
- };
93
- }
94
- });
95
- Object.defineProperty(this, "matchEventType", {
96
- enumerable: true,
97
- configurable: true,
98
- writable: true,
99
- value: (expected, actual, _data) => {
100
- return expected === actual || actual.startsWith(`${expected}|`);
101
- }
102
- });
103
- Object.defineProperty(this, "start", {
104
- enumerable: true,
105
- configurable: true,
106
- writable: true,
107
- value: async (action, options) => {
108
- if (this.state.isLoading)
109
- return;
110
- try {
111
- this.setState({ isLoading: true, error: undefined });
112
- this.abortRef = new AbortController();
113
- const run = await action(this.abortRef.signal);
114
- let streamError;
115
- for await (const { event, data } of run) {
116
- if (event === "error") {
117
- streamError = new errors_js_1.StreamError(data);
118
- break;
119
- }
120
- const namespace = event.includes("|")
121
- ? event.split("|").slice(1)
122
- : undefined;
123
- const mutate = this.getMutateFn("stream", options.initialValues);
124
- if (event === "metadata")
125
- options.callbacks.onMetadataEvent?.(data);
126
- if (event === "events")
127
- options.callbacks.onLangChainEvent?.(data);
128
- if (this.matchEventType("updates", event, data)) {
129
- options.callbacks.onUpdateEvent?.(data, { namespace, mutate });
130
- }
131
- if (this.matchEventType("custom", event, data)) {
132
- options.callbacks.onCustomEvent?.(data, { namespace, mutate });
133
- }
134
- if (this.matchEventType("checkpoints", event, data)) {
135
- options.callbacks.onCheckpointEvent?.(data, { namespace });
136
- }
137
- if (this.matchEventType("tasks", event, data)) {
138
- options.callbacks.onTaskEvent?.(data, { namespace });
139
- }
140
- if (this.matchEventType("debug", event, data)) {
141
- options.callbacks.onDebugEvent?.(data, { namespace });
142
- }
143
- if (event === "values") {
144
- if ("__interrupt__" in data) {
145
- this.setStreamValues((prev) => ({ ...prev, ...data }));
146
- }
147
- else {
148
- this.setStreamValues(data);
149
- }
150
- }
151
- if (this.matchEventType("messages", event, data)) {
152
- const [serialized, metadata] = data;
153
- const messageId = this.messages.add(serialized, metadata);
154
- if (!messageId) {
155
- console.warn("Failed to add message to manager, no message ID found");
156
- continue;
157
- }
158
- this.setStreamValues((streamValues) => {
159
- const values = { ...options.initialValues, ...streamValues };
160
- // Assumption: we're concatenating the message
161
- const messages = options.getMessages(values).slice();
162
- const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
163
- if (!chunk || index == null)
164
- return values;
165
- if (chunk.getType() === "remove") {
166
- messages.splice(index, 1);
167
- }
168
- else {
169
- messages[index] = (0, messages_js_1.toMessageDict)(chunk);
170
- }
171
- return options.setMessages(values, messages);
172
- });
173
- }
174
- }
175
- if (streamError != null)
176
- throw streamError;
177
- const values = await options.onSuccess?.();
178
- if (typeof values !== "undefined")
179
- this.setStreamValues(values);
180
- }
181
- catch (error) {
182
- if (!(error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof
183
- (error.name === "AbortError" || error.name === "TimeoutError"))) {
184
- console.error(error);
185
- this.setState({ error });
186
- await options.onError?.(error);
187
- }
188
- }
189
- finally {
190
- this.setState({ isLoading: false });
191
- this.abortRef = new AbortController();
192
- options.onFinish?.();
193
- }
194
- }
195
- });
196
- Object.defineProperty(this, "stop", {
197
- enumerable: true,
198
- configurable: true,
199
- writable: true,
200
- value: async (historyValues, options) => {
201
- this.abortRef.abort();
202
- this.abortRef = new AbortController();
203
- options.onStop?.({ mutate: this.getMutateFn("stop", historyValues) });
204
- }
205
- });
206
- Object.defineProperty(this, "clear", {
207
- enumerable: true,
208
- configurable: true,
209
- writable: true,
210
- value: () => {
211
- // Cancel any running streams
212
- this.abortRef.abort();
213
- this.abortRef = new AbortController();
214
- // Set the stream state to null
215
- this.setState({ error: undefined, values: null });
216
- // Clear any pending messages
217
- this.messages.clear();
218
- }
219
- });
220
- this.messages = messages;
221
- this.state = { isLoading: false, values: null, error: undefined };
222
- }
223
- get isLoading() {
224
- return this.state.isLoading;
225
- }
226
- get values() {
227
- return this.state.values?.[0] ?? null;
228
- }
229
- get error() {
230
- return this.state.error;
231
- }
232
- }
1
+ const require_errors = require('./errors.cjs');
2
+ const require_messages = require('./messages.cjs');
3
+
4
+ //#region src/ui/manager.ts
5
+ var StreamManager = class {
6
+ abortRef = new AbortController();
7
+ messages;
8
+ listeners = /* @__PURE__ */ new Set();
9
+ state;
10
+ constructor(messages) {
11
+ this.messages = messages;
12
+ this.state = {
13
+ isLoading: false,
14
+ values: null,
15
+ error: void 0
16
+ };
17
+ }
18
+ setState = (newState) => {
19
+ this.state = {
20
+ ...this.state,
21
+ ...newState
22
+ };
23
+ this.notifyListeners();
24
+ };
25
+ notifyListeners = () => {
26
+ this.listeners.forEach((listener) => listener());
27
+ };
28
+ subscribe = (listener) => {
29
+ this.listeners.add(listener);
30
+ return () => this.listeners.delete(listener);
31
+ };
32
+ getSnapshot = () => this.state;
33
+ get isLoading() {
34
+ return this.state.isLoading;
35
+ }
36
+ get values() {
37
+ return this.state.values?.[0] ?? null;
38
+ }
39
+ get error() {
40
+ return this.state.error;
41
+ }
42
+ setStreamValues = (values, kind = "stream") => {
43
+ if (typeof values === "function") {
44
+ const [prevValues, prevKind] = this.state.values ?? [null, "stream"];
45
+ const nextValues = values(prevValues, prevKind);
46
+ this.setState({ values: nextValues != null ? [nextValues, kind] : null });
47
+ } else {
48
+ const nextValues = values != null ? [values, kind] : null;
49
+ this.setState({ values: nextValues });
50
+ }
51
+ };
52
+ getMutateFn = (kind, historyValues) => {
53
+ return (update) => {
54
+ const prev = {
55
+ ...historyValues,
56
+ ...(this.state.values ?? [null, "stream"])[0]
57
+ };
58
+ const next = typeof update === "function" ? update(prev) : update;
59
+ this.setStreamValues({
60
+ ...prev,
61
+ ...next
62
+ }, kind);
63
+ };
64
+ };
65
+ matchEventType = (expected, actual, _data) => {
66
+ return expected === actual || actual.startsWith(`${expected}|`);
67
+ };
68
+ start = async (action, options) => {
69
+ if (this.state.isLoading) return;
70
+ try {
71
+ this.setState({
72
+ isLoading: true,
73
+ error: void 0
74
+ });
75
+ this.abortRef = new AbortController();
76
+ const run = await action(this.abortRef.signal);
77
+ let streamError;
78
+ for await (const { event, data } of run) {
79
+ if (event === "error") {
80
+ streamError = new require_errors.StreamError(data);
81
+ break;
82
+ }
83
+ const namespace = event.includes("|") ? event.split("|").slice(1) : void 0;
84
+ const mutate = this.getMutateFn("stream", options.initialValues);
85
+ if (event === "metadata") options.callbacks.onMetadataEvent?.(data);
86
+ if (event === "events") options.callbacks.onLangChainEvent?.(data);
87
+ if (this.matchEventType("updates", event, data)) options.callbacks.onUpdateEvent?.(data, {
88
+ namespace,
89
+ mutate
90
+ });
91
+ if (this.matchEventType("custom", event, data)) options.callbacks.onCustomEvent?.(data, {
92
+ namespace,
93
+ mutate
94
+ });
95
+ if (this.matchEventType("checkpoints", event, data)) options.callbacks.onCheckpointEvent?.(data, { namespace });
96
+ if (this.matchEventType("tasks", event, data)) options.callbacks.onTaskEvent?.(data, { namespace });
97
+ if (this.matchEventType("debug", event, data)) options.callbacks.onDebugEvent?.(data, { namespace });
98
+ if (event === "values") if ("__interrupt__" in data) this.setStreamValues((prev) => ({
99
+ ...prev,
100
+ ...data
101
+ }));
102
+ else this.setStreamValues(data);
103
+ if (this.matchEventType("messages", event, data)) {
104
+ const [serialized, metadata] = data;
105
+ const messageId = this.messages.add(serialized, metadata);
106
+ if (!messageId) {
107
+ console.warn("Failed to add message to manager, no message ID found");
108
+ continue;
109
+ }
110
+ this.setStreamValues((streamValues) => {
111
+ const values$1 = {
112
+ ...options.initialValues,
113
+ ...streamValues
114
+ };
115
+ const messages = options.getMessages(values$1).slice();
116
+ const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
117
+ if (!chunk || index == null) return values$1;
118
+ if (chunk.getType() === "remove") messages.splice(index, 1);
119
+ else messages[index] = require_messages.toMessageDict(chunk);
120
+ return options.setMessages(values$1, messages);
121
+ });
122
+ }
123
+ }
124
+ if (streamError != null) throw streamError;
125
+ const values = await options.onSuccess?.();
126
+ if (typeof values !== "undefined") this.setStreamValues(values);
127
+ } catch (error) {
128
+ if (!(error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError"))) {
129
+ console.error(error);
130
+ this.setState({ error });
131
+ await options.onError?.(error);
132
+ }
133
+ } finally {
134
+ this.setState({ isLoading: false });
135
+ this.abortRef = new AbortController();
136
+ options.onFinish?.();
137
+ }
138
+ };
139
+ stop = async (historyValues, options) => {
140
+ this.abortRef.abort();
141
+ this.abortRef = new AbortController();
142
+ options.onStop?.({ mutate: this.getMutateFn("stop", historyValues) });
143
+ };
144
+ clear = () => {
145
+ this.abortRef.abort();
146
+ this.abortRef = new AbortController();
147
+ this.setState({
148
+ error: void 0,
149
+ values: null
150
+ });
151
+ this.messages.clear();
152
+ };
153
+ };
154
+
155
+ //#endregion
233
156
  exports.StreamManager = StreamManager;
157
+ //# sourceMappingURL=manager.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.cjs","names":["streamError: StreamError | undefined","StreamError","values","toMessageDict"],"sources":["../../src/ui/manager.ts"],"sourcesContent":["import type {\n CheckpointsStreamEvent,\n CustomStreamEvent,\n DebugStreamEvent,\n ErrorStreamEvent,\n EventsStreamEvent,\n FeedbackStreamEvent,\n MessagesTupleStreamEvent,\n MetadataStreamEvent,\n TasksStreamEvent,\n UpdatesStreamEvent,\n ValuesStreamEvent,\n} from \"../types.stream.js\";\nimport { MessageTupleManager, toMessageDict } from \"./messages.js\";\nimport { StreamError } from \"./errors.js\";\nimport type { Message } from \"../types.messages.js\";\n\ntype BagTemplate = {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n};\n\ntype GetUpdateType<\n Bag extends BagTemplate,\n StateType extends Record<string, unknown>\n> = Bag extends { UpdateType: unknown }\n ? Bag[\"UpdateType\"]\n : Partial<StateType>;\n\ntype GetCustomEventType<Bag extends BagTemplate> = Bag extends {\n CustomEventType: unknown;\n}\n ? Bag[\"CustomEventType\"]\n : unknown;\n\ntype EventStreamMap<StateType, UpdateType, CustomType> = {\n values: ValuesStreamEvent<StateType>;\n updates: UpdatesStreamEvent<UpdateType>;\n custom: CustomStreamEvent<CustomType>;\n debug: DebugStreamEvent;\n messages: MessagesTupleStreamEvent;\n events: EventsStreamEvent;\n metadata: MetadataStreamEvent;\n checkpoints: CheckpointsStreamEvent<StateType>;\n tasks: TasksStreamEvent<StateType, UpdateType>;\n error: ErrorStreamEvent;\n feedback: FeedbackStreamEvent;\n};\n\nexport type EventStreamEvent<StateType, UpdateType, CustomType> =\n EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<\n StateType,\n UpdateType,\n CustomType\n >];\n\ninterface StreamManagerEventCallbacks<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n onUpdateEvent?: (\n data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>[\"data\"],\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onCustomEvent?: (\n data: GetCustomEventType<Bag>,\n options: {\n namespace: string[] | undefined;\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }\n ) => void;\n onMetadataEvent?: (data: MetadataStreamEvent[\"data\"]) => void;\n onLangChainEvent?: (data: EventsStreamEvent[\"data\"]) => void;\n onDebugEvent?: (\n data: DebugStreamEvent[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onCheckpointEvent?: (\n data: CheckpointsStreamEvent<StateType>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n onTaskEvent?: (\n data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>[\"data\"],\n options: { namespace: string[] | undefined }\n ) => void;\n}\n\nexport class StreamManager<\n StateType extends Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> {\n private abortRef = new AbortController();\n\n private messages: MessageTupleManager;\n\n private listeners = new Set<() => void>();\n\n private state: {\n isLoading: boolean;\n values: [values: StateType, kind: \"stream\" | \"stop\"] | null;\n error: unknown;\n };\n\n constructor(messages: MessageTupleManager) {\n this.messages = messages;\n this.state = { isLoading: false, values: null, error: undefined };\n }\n\n private setState = (newState: Partial<typeof this.state>) => {\n this.state = { ...this.state, ...newState };\n this.notifyListeners();\n };\n\n private notifyListeners = () => {\n this.listeners.forEach((listener) => listener());\n };\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n getSnapshot = () => this.state;\n\n get isLoading() {\n return this.state.isLoading;\n }\n\n get values() {\n return this.state.values?.[0] ?? null;\n }\n\n get error() {\n return this.state.error;\n }\n\n setStreamValues = (\n values:\n | (StateType | null)\n | ((prev: StateType | null, kind: \"stream\" | \"stop\") => StateType | null),\n kind: \"stream\" | \"stop\" = \"stream\"\n ) => {\n if (typeof values === \"function\") {\n const [prevValues, prevKind] = this.state.values ?? [null, \"stream\"];\n const nextValues = values(prevValues, prevKind);\n this.setState({ values: nextValues != null ? [nextValues, kind] : null });\n } else {\n const nextValues = values != null ? [values, kind] : null;\n this.setState({ values: nextValues as [StateType, \"stream\" | \"stop\"] });\n }\n };\n\n private getMutateFn = (kind: \"stream\" | \"stop\", historyValues: StateType) => {\n return (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => {\n const prev = {\n ...historyValues,\n ...(this.state.values ?? [null, \"stream\"])[0],\n };\n const next = typeof update === \"function\" ? update(prev) : update;\n this.setStreamValues({ ...prev, ...next }, kind);\n };\n };\n\n private matchEventType = <\n T extends keyof EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >(\n expected: T,\n actual: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"event\"],\n _data: EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[\"data\"]\n ): _data is EventStreamMap<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >[T][\"data\"] => {\n return expected === actual || actual.startsWith(`${expected}|`);\n };\n\n start = async (\n action: (\n signal: AbortSignal\n ) => Promise<\n AsyncGenerator<\n EventStreamEvent<\n StateType,\n GetUpdateType<Bag, StateType>,\n GetCustomEventType<Bag>\n >\n >\n >,\n options: {\n getMessages: (values: StateType) => Message[];\n\n setMessages: (current: StateType, messages: Message[]) => StateType;\n\n initialValues: StateType;\n\n callbacks: StreamManagerEventCallbacks<StateType, Bag>;\n\n onSuccess: () =>\n | StateType\n | null\n | undefined\n | void\n | Promise<StateType | null | undefined | void>;\n\n onError: (error: unknown) => void | Promise<void>;\n\n onFinish?: () => void;\n }\n ): Promise<void> => {\n if (this.state.isLoading) return;\n\n try {\n this.setState({ isLoading: true, error: undefined });\n this.abortRef = new AbortController();\n\n const run = await action(this.abortRef.signal);\n\n let streamError: StreamError | undefined;\n for await (const { event, data } of run) {\n if (event === \"error\") {\n streamError = new StreamError(data);\n break;\n }\n\n const namespace = event.includes(\"|\")\n ? event.split(\"|\").slice(1)\n : undefined;\n\n const mutate = this.getMutateFn(\"stream\", options.initialValues);\n\n if (event === \"metadata\") options.callbacks.onMetadataEvent?.(data);\n if (event === \"events\") options.callbacks.onLangChainEvent?.(data);\n\n if (this.matchEventType(\"updates\", event, data)) {\n options.callbacks.onUpdateEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"custom\", event, data)) {\n options.callbacks.onCustomEvent?.(data, { namespace, mutate });\n }\n\n if (this.matchEventType(\"checkpoints\", event, data)) {\n options.callbacks.onCheckpointEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"tasks\", event, data)) {\n options.callbacks.onTaskEvent?.(data, { namespace });\n }\n\n if (this.matchEventType(\"debug\", event, data)) {\n options.callbacks.onDebugEvent?.(data, { namespace });\n }\n\n if (event === \"values\") {\n if (\"__interrupt__\" in data) {\n this.setStreamValues((prev) => ({ ...prev, ...data }));\n } else {\n this.setStreamValues(data);\n }\n }\n\n if (this.matchEventType(\"messages\", event, data)) {\n const [serialized, metadata] = data;\n\n const messageId = this.messages.add(serialized, metadata);\n if (!messageId) {\n console.warn(\n \"Failed to add message to manager, no message ID found\"\n );\n continue;\n }\n\n this.setStreamValues((streamValues) => {\n const values = { ...options.initialValues, ...streamValues };\n\n // Assumption: we're concatenating the message\n const messages = options.getMessages(values).slice();\n const { chunk, index } =\n this.messages.get(messageId, messages.length) ?? {};\n\n if (!chunk || index == null) return values;\n if (chunk.getType() === \"remove\") {\n messages.splice(index, 1);\n } else {\n messages[index] = toMessageDict(chunk);\n }\n\n return options.setMessages(values, messages);\n });\n }\n }\n\n if (streamError != null) throw streamError;\n\n const values = await options.onSuccess?.();\n if (typeof values !== \"undefined\") this.setStreamValues(values);\n } catch (error) {\n if (\n !(\n error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n )\n ) {\n console.error(error);\n this.setState({ error });\n await options.onError?.(error);\n }\n } finally {\n this.setState({ isLoading: false });\n this.abortRef = new AbortController();\n options.onFinish?.();\n }\n };\n\n stop = async (\n historyValues: StateType,\n options: {\n onStop?: (options: {\n mutate: (\n update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)\n ) => void;\n }) => void;\n }\n ): Promise<void> => {\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n options.onStop?.({ mutate: this.getMutateFn(\"stop\", historyValues) });\n };\n\n clear = () => {\n // Cancel any running streams\n this.abortRef.abort();\n this.abortRef = new AbortController();\n\n // Set the stream state to null\n this.setState({ error: undefined, values: null });\n\n // Clear any pending messages\n this.messages.clear();\n };\n}\n"],"mappings":"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"}