@lichen-ai/lichen-sdk 0.1.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 (122) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auth/error.d.ts +9 -0
  3. package/dist/auth/error.js +76 -0
  4. package/dist/auth/error.js.map +1 -0
  5. package/dist/auth/error.mjs +76 -0
  6. package/dist/auth/error.mjs.map +1 -0
  7. package/dist/auth/index.d.ts +18 -0
  8. package/dist/auth/index.js +35 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/index.mjs +35 -0
  11. package/dist/auth/index.mjs.map +1 -0
  12. package/dist/auth/types.d.ts +297 -0
  13. package/dist/auth/types.js +2 -0
  14. package/dist/auth/types.js.map +1 -0
  15. package/dist/auth/types.mjs +2 -0
  16. package/dist/auth/types.mjs.map +1 -0
  17. package/dist/client.d.ts +773 -0
  18. package/dist/client.js +1544 -0
  19. package/dist/client.js.map +1 -0
  20. package/dist/client.mjs +1544 -0
  21. package/dist/client.mjs.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.js +3 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/index.mjs +3 -0
  26. package/dist/index.mjs.map +1 -0
  27. package/dist/logging/index.d.ts +43 -0
  28. package/dist/logging/index.js +33 -0
  29. package/dist/logging/index.js.map +1 -0
  30. package/dist/logging/index.mjs +33 -0
  31. package/dist/logging/index.mjs.map +1 -0
  32. package/dist/schema.d.ts +661 -0
  33. package/dist/schema.js +30 -0
  34. package/dist/schema.js.map +1 -0
  35. package/dist/schema.mjs +30 -0
  36. package/dist/schema.mjs.map +1 -0
  37. package/dist/singletons/fetch.d.ts +7 -0
  38. package/dist/singletons/fetch.js +24 -0
  39. package/dist/singletons/fetch.js.map +1 -0
  40. package/dist/singletons/fetch.mjs +24 -0
  41. package/dist/singletons/fetch.mjs.map +1 -0
  42. package/dist/tests/fetch.test.d.ts +1 -0
  43. package/dist/tests/fetch.test.js +460 -0
  44. package/dist/tests/fetch.test.js.map +1 -0
  45. package/dist/tests/fetch.test.mjs +460 -0
  46. package/dist/tests/fetch.test.mjs.map +1 -0
  47. package/dist/tests/sse.test.d.ts +1 -0
  48. package/dist/tests/sse.test.js +132 -0
  49. package/dist/tests/sse.test.js.map +1 -0
  50. package/dist/tests/sse.test.mjs +132 -0
  51. package/dist/tests/sse.test.mjs.map +1 -0
  52. package/dist/types.d.ts +178 -0
  53. package/dist/types.js +2 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/types.messages.d.ts +86 -0
  56. package/dist/types.messages.js +2 -0
  57. package/dist/types.messages.js.map +1 -0
  58. package/dist/types.messages.mjs +2 -0
  59. package/dist/types.messages.mjs.map +1 -0
  60. package/dist/types.mjs +2 -0
  61. package/dist/types.mjs.map +1 -0
  62. package/dist/types.stream.d.ts +212 -0
  63. package/dist/types.stream.js +2 -0
  64. package/dist/types.stream.js.map +1 -0
  65. package/dist/types.stream.mjs +2 -0
  66. package/dist/types.stream.mjs.map +1 -0
  67. package/dist/ui/branching.d.ts +35 -0
  68. package/dist/ui/branching.js +143 -0
  69. package/dist/ui/branching.js.map +1 -0
  70. package/dist/ui/branching.mjs +143 -0
  71. package/dist/ui/branching.mjs.map +1 -0
  72. package/dist/ui/branching.test.d.ts +1 -0
  73. package/dist/ui/branching.test.js +369 -0
  74. package/dist/ui/branching.test.js.map +1 -0
  75. package/dist/ui/branching.test.mjs +369 -0
  76. package/dist/ui/branching.test.mjs.map +1 -0
  77. package/dist/ui/errors.d.ts +12 -0
  78. package/dist/ui/errors.js +10 -0
  79. package/dist/ui/errors.js.map +1 -0
  80. package/dist/ui/errors.mjs +10 -0
  81. package/dist/ui/errors.mjs.map +1 -0
  82. package/dist/ui/manager.d.ts +87 -0
  83. package/dist/ui/manager.js +158 -0
  84. package/dist/ui/manager.js.map +1 -0
  85. package/dist/ui/manager.mjs +158 -0
  86. package/dist/ui/manager.mjs.map +1 -0
  87. package/dist/ui/messages.d.ts +18 -0
  88. package/dist/ui/messages.js +64 -0
  89. package/dist/ui/messages.js.map +1 -0
  90. package/dist/ui/messages.mjs +64 -0
  91. package/dist/ui/messages.mjs.map +1 -0
  92. package/dist/ui/utils.d.ts +2 -0
  93. package/dist/ui/utils.js +11 -0
  94. package/dist/ui/utils.js.map +1 -0
  95. package/dist/ui/utils.mjs +11 -0
  96. package/dist/ui/utils.mjs.map +1 -0
  97. package/dist/utils/async_caller.d.ts +48 -0
  98. package/dist/utils/async_caller.js +153 -0
  99. package/dist/utils/async_caller.js.map +1 -0
  100. package/dist/utils/async_caller.mjs +153 -0
  101. package/dist/utils/async_caller.mjs.map +1 -0
  102. package/dist/utils/env.d.ts +1 -0
  103. package/dist/utils/env.js +13 -0
  104. package/dist/utils/env.js.map +1 -0
  105. package/dist/utils/env.mjs +13 -0
  106. package/dist/utils/env.mjs.map +1 -0
  107. package/dist/utils/signals.d.ts +1 -0
  108. package/dist/utils/signals.js +19 -0
  109. package/dist/utils/signals.js.map +1 -0
  110. package/dist/utils/signals.mjs +19 -0
  111. package/dist/utils/signals.mjs.map +1 -0
  112. package/dist/utils/sse.d.ts +8 -0
  113. package/dist/utils/sse.js +151 -0
  114. package/dist/utils/sse.js.map +1 -0
  115. package/dist/utils/sse.mjs +151 -0
  116. package/dist/utils/sse.mjs.map +1 -0
  117. package/dist/utils/stream.d.ts +13 -0
  118. package/dist/utils/stream.js +109 -0
  119. package/dist/utils/stream.js.map +1 -0
  120. package/dist/utils/stream.mjs +109 -0
  121. package/dist/utils/stream.mjs.map +1 -0
  122. package/package.json +63 -0
@@ -0,0 +1,369 @@
1
+ import { it, expect } from 'vitest';
2
+ import { getBranchSequence } from "./branching.mjs";
3
+ const history = [
4
+ {
5
+ values: {
6
+ messages: [
7
+ {
8
+ content: 'Fork: Hello',
9
+ additional_kwargs: {},
10
+ response_metadata: {},
11
+ id: '33357aea-9c2d-4718-92f4-20038d5a2d29',
12
+ type: 'human'
13
+ },
14
+ {
15
+ content: 'Hey',
16
+ additional_kwargs: {},
17
+ response_metadata: {},
18
+ tool_call_chunks: [],
19
+ id: 'run-782a2f90-2e39-4c21-9ee6-0f38585a0ae6',
20
+ tool_calls: [],
21
+ invalid_tool_calls: [],
22
+ type: 'ai'
23
+ }
24
+ ]
25
+ },
26
+ next: [],
27
+ tasks: [],
28
+ metadata: {
29
+ source: 'loop',
30
+ step: 2,
31
+ parents: {},
32
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
33
+ },
34
+ created_at: '2025-08-21T12:47:12.640Z',
35
+ checkpoint: {
36
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
37
+ checkpoint_id: '1f07e8cf-56a7-6000-8002-5e272b1d5285',
38
+ checkpoint_ns: '',
39
+ checkpoint_map: null
40
+ },
41
+ parent_checkpoint: {
42
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
43
+ checkpoint_id: '1f07e8cf-53aa-6d70-8001-2096b0bbf835',
44
+ checkpoint_ns: '',
45
+ checkpoint_map: null
46
+ }
47
+ },
48
+ {
49
+ values: {
50
+ messages: [
51
+ {
52
+ content: 'Fork: Hello',
53
+ additional_kwargs: {},
54
+ response_metadata: {},
55
+ id: '33357aea-9c2d-4718-92f4-20038d5a2d29',
56
+ type: 'human'
57
+ }
58
+ ]
59
+ },
60
+ next: ['agent'],
61
+ tasks: [
62
+ {
63
+ id: '680ee831-4d10-50f9-956f-e0d937321614',
64
+ name: 'agent',
65
+ error: null,
66
+ interrupts: [],
67
+ path: ['__pregel_pull', 'agent'],
68
+ checkpoint: null,
69
+ state: null,
70
+ result: {
71
+ messages: [
72
+ {
73
+ content: 'Hey',
74
+ additional_kwargs: {},
75
+ response_metadata: {},
76
+ tool_call_chunks: [],
77
+ id: 'run-782a2f90-2e39-4c21-9ee6-0f38585a0ae6',
78
+ tool_calls: [],
79
+ invalid_tool_calls: [],
80
+ type: 'ai'
81
+ }
82
+ ]
83
+ }
84
+ }
85
+ ],
86
+ metadata: {
87
+ source: 'loop',
88
+ step: 1,
89
+ parents: {},
90
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
91
+ },
92
+ created_at: '2025-08-21T12:47:12.327Z',
93
+ checkpoint: {
94
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
95
+ checkpoint_id: '1f07e8cf-53aa-6d70-8001-2096b0bbf835',
96
+ checkpoint_ns: '',
97
+ checkpoint_map: null
98
+ },
99
+ parent_checkpoint: {
100
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
101
+ checkpoint_id: '1f07e8cf-53a8-6660-8000-f157c9cf7d66',
102
+ checkpoint_ns: '',
103
+ checkpoint_map: null
104
+ }
105
+ },
106
+ {
107
+ values: { messages: [] },
108
+ next: ['__start__'],
109
+ tasks: [
110
+ {
111
+ id: '4233f4c0-5ea2-5117-9153-95e5fe59eee3',
112
+ name: '__start__',
113
+ error: null,
114
+ interrupts: [],
115
+ path: ['__pregel_pull', '__start__'],
116
+ checkpoint: null,
117
+ state: null,
118
+ result: { messages: [{ type: 'human', content: 'Fork: Hello' }] }
119
+ }
120
+ ],
121
+ metadata: {
122
+ source: 'input',
123
+ step: 0,
124
+ parents: {},
125
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
126
+ },
127
+ created_at: '2025-08-21T12:47:12.326Z',
128
+ checkpoint: {
129
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
130
+ checkpoint_id: '1f07e8cf-53a8-6660-8000-f157c9cf7d66',
131
+ checkpoint_ns: '',
132
+ checkpoint_map: null
133
+ },
134
+ parent_checkpoint: {
135
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
136
+ checkpoint_id: '1f07e8cf-4cea-6530-ffff-0995a53299c5',
137
+ checkpoint_ns: '',
138
+ checkpoint_map: null
139
+ }
140
+ },
141
+ {
142
+ values: {
143
+ messages: [
144
+ {
145
+ content: 'Hello',
146
+ additional_kwargs: {},
147
+ response_metadata: {},
148
+ id: 'ec300e63-1494-4ef6-936c-60d02d7bdce1',
149
+ type: 'human'
150
+ },
151
+ {
152
+ content: 'Hey',
153
+ additional_kwargs: {},
154
+ response_metadata: {},
155
+ tool_call_chunks: [],
156
+ id: 'run-593064bd-dd07-4ed3-99c0-a918625f4884',
157
+ tool_calls: [],
158
+ invalid_tool_calls: [],
159
+ type: 'ai'
160
+ }
161
+ ]
162
+ },
163
+ next: [],
164
+ tasks: [],
165
+ metadata: {
166
+ source: 'loop',
167
+ step: 1,
168
+ parents: {},
169
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
170
+ },
171
+ created_at: '2025-08-21T12:47:12.285Z',
172
+ checkpoint: {
173
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
174
+ checkpoint_id: '1f07e8cf-5344-64d0-8001-8a176e91d12f',
175
+ checkpoint_ns: '',
176
+ checkpoint_map: null
177
+ },
178
+ parent_checkpoint: {
179
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
180
+ checkpoint_id: '1f07e8cf-4cf8-6f90-8000-7707fd155a8a',
181
+ checkpoint_ns: '',
182
+ checkpoint_map: null
183
+ }
184
+ },
185
+ {
186
+ values: {
187
+ messages: [
188
+ {
189
+ content: 'Hello',
190
+ additional_kwargs: {},
191
+ response_metadata: {},
192
+ id: 'ec300e63-1494-4ef6-936c-60d02d7bdce1',
193
+ type: 'human'
194
+ },
195
+ {
196
+ content: 'Hey',
197
+ additional_kwargs: {},
198
+ response_metadata: {},
199
+ tool_call_chunks: [],
200
+ id: 'run-b86ef558-eaff-4838-bc03-218f20554a9f',
201
+ tool_calls: [],
202
+ invalid_tool_calls: [],
203
+ type: 'ai'
204
+ }
205
+ ]
206
+ },
207
+ next: [],
208
+ tasks: [],
209
+ metadata: {
210
+ source: 'loop',
211
+ step: 1,
212
+ parents: {},
213
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
214
+ },
215
+ created_at: '2025-08-21T12:47:11.936Z',
216
+ checkpoint: {
217
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
218
+ checkpoint_id: '1f07e8cf-4ff0-6400-8001-a54aedf52a76',
219
+ checkpoint_ns: '',
220
+ checkpoint_map: null
221
+ },
222
+ parent_checkpoint: {
223
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
224
+ checkpoint_id: '1f07e8cf-4cf8-6f90-8000-7707fd155a8a',
225
+ checkpoint_ns: '',
226
+ checkpoint_map: null
227
+ }
228
+ },
229
+ {
230
+ values: {
231
+ messages: [
232
+ {
233
+ content: 'Hello',
234
+ additional_kwargs: {},
235
+ response_metadata: {},
236
+ id: 'ec300e63-1494-4ef6-936c-60d02d7bdce1',
237
+ type: 'human'
238
+ }
239
+ ]
240
+ },
241
+ next: ['agent'],
242
+ tasks: [
243
+ {
244
+ id: 'e3f503f1-73bc-5db1-8b4d-13f660ad1b51',
245
+ name: 'agent',
246
+ error: null,
247
+ interrupts: [],
248
+ path: ['__pregel_pull', 'agent'],
249
+ checkpoint: null,
250
+ state: null,
251
+ result: {
252
+ messages: [
253
+ {
254
+ content: 'Hey',
255
+ additional_kwargs: {},
256
+ response_metadata: {},
257
+ tool_call_chunks: [],
258
+ id: 'run-b86ef558-eaff-4838-bc03-218f20554a9f',
259
+ tool_calls: [],
260
+ invalid_tool_calls: [],
261
+ type: 'ai'
262
+ }
263
+ ]
264
+ }
265
+ }
266
+ ],
267
+ metadata: {
268
+ source: 'loop',
269
+ step: 0,
270
+ parents: {},
271
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
272
+ },
273
+ created_at: '2025-08-21T12:47:11.625Z',
274
+ checkpoint: {
275
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
276
+ checkpoint_id: '1f07e8cf-4cf8-6f90-8000-7707fd155a8a',
277
+ checkpoint_ns: '',
278
+ checkpoint_map: null
279
+ },
280
+ parent_checkpoint: {
281
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
282
+ checkpoint_id: '1f07e8cf-4cea-6530-ffff-0995a53299c5',
283
+ checkpoint_ns: '',
284
+ checkpoint_map: null
285
+ }
286
+ },
287
+ {
288
+ values: { messages: [] },
289
+ next: ['__start__'],
290
+ tasks: [
291
+ {
292
+ id: 'cddede95-d276-59f1-bc08-8051d6448734',
293
+ name: '__start__',
294
+ error: null,
295
+ interrupts: [],
296
+ path: ['__pregel_pull', '__start__'],
297
+ checkpoint: null,
298
+ state: null,
299
+ result: { messages: [{ type: 'human', content: 'Hello' }] }
300
+ }
301
+ ],
302
+ metadata: {
303
+ source: 'input',
304
+ step: -1,
305
+ parents: {},
306
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc'
307
+ },
308
+ created_at: '2025-08-21T12:47:11.619Z',
309
+ checkpoint: {
310
+ thread_id: 'efa80f4d-725f-4903-b19f-216309f060bc',
311
+ checkpoint_id: '1f07e8cf-4cea-6530-ffff-0995a53299c5',
312
+ checkpoint_ns: '',
313
+ checkpoint_map: null
314
+ },
315
+ parent_checkpoint: null
316
+ }
317
+ ];
318
+ const node = (value, paths = []) => ({
319
+ type: 'node',
320
+ value: typeof value === 'number' ? history.at(value) : value,
321
+ path: paths.map((v) => {
322
+ if (typeof v === 'number') {
323
+ return history.at(v)?.checkpoint?.checkpoint_id;
324
+ }
325
+ return v?.checkpoint?.checkpoint_id;
326
+ })
327
+ });
328
+ const fork = (...items) => ({ type: 'fork', items });
329
+ const sequence = (...items) => ({ type: 'sequence', items });
330
+ it('full tree', async () => {
331
+ const { rootSequence, paths } = getBranchSequence(history);
332
+ expect
333
+ .soft(paths)
334
+ .toMatchObject(expect.arrayContaining([[5], [5, 4], [5, 3], [2]].map((p) => p.map((i) => history.at(i)?.checkpoint?.checkpoint_id))));
335
+ expect
336
+ .soft(rootSequence)
337
+ .toMatchObject(sequence(node(6), fork(sequence(node(5, [5]), fork(sequence(node(4, [5, 4])), sequence(node(3, [5, 3])))), sequence(node(2, [2]), node(1, [2]), node(0, [2])))));
338
+ });
339
+ it('partial tree', async () => {
340
+ expect(getBranchSequence(history.slice(0, 1))).toMatchObject({
341
+ paths: [],
342
+ rootSequence: sequence(node(0))
343
+ });
344
+ expect(getBranchSequence(history.slice(0, 2))).toMatchObject({
345
+ paths: [],
346
+ rootSequence: sequence(node(1), node(0))
347
+ });
348
+ expect(getBranchSequence(history.slice(0, 3))).toMatchObject({
349
+ paths: [],
350
+ rootSequence: sequence(node(2), node(1), node(0))
351
+ });
352
+ expect(getBranchSequence(history.slice(0, 4))).toMatchObject({
353
+ paths: [],
354
+ rootSequence: sequence(node(2), node(1), node(0))
355
+ });
356
+ expect(getBranchSequence(history.slice(0, 5))).toMatchObject({
357
+ paths: [],
358
+ rootSequence: sequence(node(2), node(1), node(0))
359
+ });
360
+ expect(getBranchSequence(history.slice(0, 6))).toMatchObject({
361
+ paths: expect.arrayContaining([[5], [5, 4], [5, 3], [2]].map((p) => p.map((i) => history.at(i)?.checkpoint?.checkpoint_id))),
362
+ rootSequence: sequence(fork(sequence(node(5, [5]), fork(sequence(node(4, [5, 4])), sequence(node(3, [5, 3])))), sequence(node(2, [2]), node(1, [2]), node(0, [2]))))
363
+ });
364
+ expect(getBranchSequence(history.slice(0, 7))).toMatchObject({
365
+ paths: expect.arrayContaining([[5], [5, 4], [5, 3], [2]].map((p) => p.map((i) => history.at(i)?.checkpoint?.checkpoint_id))),
366
+ rootSequence: sequence(node(6), fork(sequence(node(5, [5]), fork(sequence(node(4, [5, 4])), sequence(node(3, [5, 3])))), sequence(node(2, [2]), node(1, [2]), node(0, [2]))))
367
+ });
368
+ });
369
+ //# sourceMappingURL=branching.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branching.test.mjs","sourceRoot":"","sources":["../../src/ui/branching.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class StreamError extends Error {
2
+ constructor(data: {
3
+ error?: string;
4
+ name?: string;
5
+ message: string;
6
+ });
7
+ static isStructuredError(error: unknown): error is {
8
+ error?: string;
9
+ name?: string;
10
+ message: string;
11
+ };
12
+ }
@@ -0,0 +1,10 @@
1
+ export class StreamError extends Error {
2
+ constructor(data) {
3
+ super(data.message);
4
+ this.name = data.name ?? data.error ?? 'StreamError';
5
+ }
6
+ static isStructuredError(error) {
7
+ return typeof error === 'object' && error != null && 'message' in error;
8
+ }
9
+ }
10
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/ui/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,IAAwD;QAClE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,KAAc;QAKrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,CAAA;IACzE,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export class StreamError extends Error {
2
+ constructor(data) {
3
+ super(data.message);
4
+ this.name = data.name ?? data.error ?? 'StreamError';
5
+ }
6
+ static isStructuredError(error) {
7
+ return typeof error === 'object' && error != null && 'message' in error;
8
+ }
9
+ }
10
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../src/ui/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,IAAwD;QAClE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,KAAc;QAKrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,CAAA;IACzE,CAAC;CACF"}
@@ -0,0 +1,87 @@
1
+ import type { CheckpointsStreamEvent, CustomStreamEvent, DebugStreamEvent, ErrorStreamEvent, EventsStreamEvent, FeedbackStreamEvent, MessagesTupleStreamEvent, MetadataStreamEvent, TasksStreamEvent, UpdatesStreamEvent, ValuesStreamEvent } from '../types.stream.js';
2
+ import { MessageTupleManager } from './messages.js';
3
+ import type { Message } from '../types.messages.js';
4
+ type BagTemplate = {
5
+ ConfigurableType?: Record<string, unknown>;
6
+ InterruptType?: unknown;
7
+ CustomEventType?: unknown;
8
+ UpdateType?: unknown;
9
+ };
10
+ type GetUpdateType<Bag extends BagTemplate, StateType extends Record<string, unknown>> = Bag extends {
11
+ UpdateType: unknown;
12
+ } ? Bag['UpdateType'] : Partial<StateType>;
13
+ type GetCustomEventType<Bag extends BagTemplate> = Bag extends {
14
+ CustomEventType: unknown;
15
+ } ? Bag['CustomEventType'] : unknown;
16
+ type EventStreamMap<StateType, UpdateType, CustomType> = {
17
+ values: ValuesStreamEvent<StateType>;
18
+ updates: UpdatesStreamEvent<UpdateType>;
19
+ custom: CustomStreamEvent<CustomType>;
20
+ debug: DebugStreamEvent;
21
+ messages: MessagesTupleStreamEvent;
22
+ events: EventsStreamEvent;
23
+ metadata: MetadataStreamEvent;
24
+ checkpoints: CheckpointsStreamEvent<StateType>;
25
+ tasks: TasksStreamEvent<StateType, UpdateType>;
26
+ error: ErrorStreamEvent;
27
+ feedback: FeedbackStreamEvent;
28
+ };
29
+ export type EventStreamEvent<StateType, UpdateType, CustomType> = EventStreamMap<StateType, UpdateType, CustomType>[keyof EventStreamMap<StateType, UpdateType, CustomType>];
30
+ interface StreamManagerEventCallbacks<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
31
+ onUpdateEvent?: (data: UpdatesStreamEvent<GetUpdateType<Bag, StateType>>['data'], options: {
32
+ namespace: string[] | undefined;
33
+ mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
34
+ }) => void;
35
+ onCustomEvent?: (data: GetCustomEventType<Bag>, options: {
36
+ namespace: string[] | undefined;
37
+ mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
38
+ }) => void;
39
+ onMetadataEvent?: (data: MetadataStreamEvent['data']) => void;
40
+ onLangChainEvent?: (data: EventsStreamEvent['data']) => void;
41
+ onDebugEvent?: (data: DebugStreamEvent['data'], options: {
42
+ namespace: string[] | undefined;
43
+ }) => void;
44
+ onCheckpointEvent?: (data: CheckpointsStreamEvent<StateType>['data'], options: {
45
+ namespace: string[] | undefined;
46
+ }) => void;
47
+ onTaskEvent?: (data: TasksStreamEvent<StateType, GetUpdateType<Bag, StateType>>['data'], options: {
48
+ namespace: string[] | undefined;
49
+ }) => void;
50
+ }
51
+ export declare class StreamManager<StateType extends Record<string, unknown>, Bag extends BagTemplate = BagTemplate> {
52
+ private abortRef;
53
+ private messages;
54
+ private listeners;
55
+ private state;
56
+ constructor(messages: MessageTupleManager);
57
+ private setState;
58
+ private notifyListeners;
59
+ subscribe: (listener: () => void) => (() => void);
60
+ getSnapshot: () => {
61
+ isLoading: boolean;
62
+ values: [values: StateType, kind: "stream" | "stop"] | null;
63
+ error: unknown;
64
+ };
65
+ get isLoading(): boolean;
66
+ get values(): StateType | null;
67
+ get error(): unknown;
68
+ setStreamValues: (values: (StateType | null) | ((prev: StateType | null, kind: "stream" | "stop") => StateType | null), kind?: "stream" | "stop") => void;
69
+ private getMutateFn;
70
+ private matchEventType;
71
+ start: (action: (signal: AbortSignal) => Promise<AsyncGenerator<EventStreamEvent<StateType, GetUpdateType<Bag, StateType>, GetCustomEventType<Bag>>>>, options: {
72
+ getMessages: (values: StateType) => Message[];
73
+ setMessages: (current: StateType, messages: Message[]) => StateType;
74
+ initialValues: StateType;
75
+ callbacks: StreamManagerEventCallbacks<StateType, Bag>;
76
+ onSuccess: () => StateType | null | undefined | void | Promise<StateType | null | undefined | void>;
77
+ onError: (error: unknown) => void | Promise<void>;
78
+ onFinish?: () => void;
79
+ }) => Promise<void>;
80
+ stop: (historyValues: StateType, options: {
81
+ onStop?: (options: {
82
+ mutate: (update: Partial<StateType> | ((prev: StateType) => Partial<StateType>)) => void;
83
+ }) => void;
84
+ }) => Promise<void>;
85
+ clear: () => void;
86
+ }
87
+ export {};
@@ -0,0 +1,158 @@
1
+ import { toMessageDict } from "./messages.js";
2
+ import { StreamError } from "./errors.js";
3
+ export class StreamManager {
4
+ abortRef = new AbortController();
5
+ messages;
6
+ listeners = new Set();
7
+ state;
8
+ constructor(messages) {
9
+ this.messages = messages;
10
+ this.state = { isLoading: false, values: null, error: undefined };
11
+ }
12
+ setState = (newState) => {
13
+ this.state = { ...this.state, ...newState };
14
+ this.notifyListeners();
15
+ };
16
+ notifyListeners = () => {
17
+ this.listeners.forEach((listener) => listener());
18
+ };
19
+ subscribe = (listener) => {
20
+ this.listeners.add(listener);
21
+ return () => this.listeners.delete(listener);
22
+ };
23
+ getSnapshot = () => this.state;
24
+ get isLoading() {
25
+ return this.state.isLoading;
26
+ }
27
+ get values() {
28
+ return this.state.values?.[0] ?? null;
29
+ }
30
+ get error() {
31
+ return this.state.error;
32
+ }
33
+ setStreamValues = (values, kind = 'stream') => {
34
+ if (typeof values === 'function') {
35
+ const [prevValues, prevKind] = this.state.values ?? [null, 'stream'];
36
+ const nextValues = values(prevValues, prevKind);
37
+ this.setState({ values: nextValues != null ? [nextValues, kind] : null });
38
+ }
39
+ else {
40
+ const nextValues = values != null ? [values, kind] : null;
41
+ this.setState({ values: nextValues });
42
+ }
43
+ };
44
+ getMutateFn = (kind, historyValues) => {
45
+ return (update) => {
46
+ const prev = {
47
+ ...historyValues,
48
+ ...(this.state.values ?? [null, 'stream'])[0]
49
+ };
50
+ const next = typeof update === 'function' ? update(prev) : update;
51
+ this.setStreamValues({ ...prev, ...next }, kind);
52
+ };
53
+ };
54
+ matchEventType = (expected, actual, _data) => {
55
+ return expected === actual || actual.startsWith(`${expected}|`);
56
+ };
57
+ start = async (action, options) => {
58
+ if (this.state.isLoading)
59
+ return;
60
+ try {
61
+ this.setState({ isLoading: true, error: undefined });
62
+ this.abortRef = new AbortController();
63
+ const run = await action(this.abortRef.signal);
64
+ let streamError;
65
+ for await (const { event, data } of run) {
66
+ if (event === 'error') {
67
+ streamError = new StreamError(data);
68
+ break;
69
+ }
70
+ const namespace = event.includes('|') ? event.split('|').slice(1) : undefined;
71
+ const mutate = this.getMutateFn('stream', options.initialValues);
72
+ if (event === 'metadata')
73
+ options.callbacks.onMetadataEvent?.(data);
74
+ if (event === 'events')
75
+ options.callbacks.onLangChainEvent?.(data);
76
+ if (this.matchEventType('updates', event, data)) {
77
+ options.callbacks.onUpdateEvent?.(data, { namespace, mutate });
78
+ }
79
+ if (this.matchEventType('custom', event, data)) {
80
+ options.callbacks.onCustomEvent?.(data, { namespace, mutate });
81
+ }
82
+ if (this.matchEventType('checkpoints', event, data)) {
83
+ options.callbacks.onCheckpointEvent?.(data, { namespace });
84
+ }
85
+ if (this.matchEventType('tasks', event, data)) {
86
+ options.callbacks.onTaskEvent?.(data, { namespace });
87
+ }
88
+ if (this.matchEventType('debug', event, data)) {
89
+ options.callbacks.onDebugEvent?.(data, { namespace });
90
+ }
91
+ if (event === 'values') {
92
+ if ('__interrupt__' in data) {
93
+ this.setStreamValues((prev) => ({ ...prev, ...data }));
94
+ }
95
+ else {
96
+ this.setStreamValues(data);
97
+ }
98
+ }
99
+ if (this.matchEventType('messages', event, data)) {
100
+ const [serialized, metadata] = data;
101
+ const messageId = this.messages.add(serialized, metadata);
102
+ if (!messageId) {
103
+ console.warn('Failed to add message to manager, no message ID found');
104
+ continue;
105
+ }
106
+ this.setStreamValues((streamValues) => {
107
+ const values = { ...options.initialValues, ...streamValues };
108
+ // Assumption: we're concatenating the message
109
+ const messages = options.getMessages(values).slice();
110
+ const { chunk, index } = this.messages.get(messageId, messages.length) ?? {};
111
+ if (!chunk || index == null)
112
+ return values;
113
+ if (chunk.getType() === 'remove') {
114
+ messages.splice(index, 1);
115
+ }
116
+ else {
117
+ messages[index] = toMessageDict(chunk);
118
+ }
119
+ return options.setMessages(values, messages);
120
+ });
121
+ }
122
+ }
123
+ if (streamError != null)
124
+ throw streamError;
125
+ const values = await options.onSuccess?.();
126
+ if (typeof values !== 'undefined')
127
+ this.setStreamValues(values);
128
+ }
129
+ catch (error) {
130
+ if (!(error instanceof Error && // eslint-disable-line no-instanceof/no-instanceof
131
+ (error.name === 'AbortError' || error.name === 'TimeoutError'))) {
132
+ console.error(error);
133
+ this.setState({ error });
134
+ await options.onError?.(error);
135
+ }
136
+ }
137
+ finally {
138
+ this.setState({ isLoading: false });
139
+ this.abortRef = new AbortController();
140
+ options.onFinish?.();
141
+ }
142
+ };
143
+ stop = async (historyValues, options) => {
144
+ this.abortRef.abort();
145
+ this.abortRef = new AbortController();
146
+ options.onStop?.({ mutate: this.getMutateFn('stop', historyValues) });
147
+ };
148
+ clear = () => {
149
+ // Cancel any running streams
150
+ this.abortRef.abort();
151
+ this.abortRef = new AbortController();
152
+ // Set the stream state to null
153
+ this.setState({ error: undefined, values: null });
154
+ // Clear any pending messages
155
+ this.messages.clear();
156
+ };
157
+ }
158
+ //# sourceMappingURL=manager.js.map