@langchain/langgraph-checkpoint 0.1.1 → 1.0.1

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 (120) hide show
  1. package/dist/base.cjs +73 -88
  2. package/dist/base.cjs.map +1 -0
  3. package/dist/base.d.cts +94 -0
  4. package/dist/base.d.cts.map +1 -0
  5. package/dist/base.d.ts +78 -73
  6. package/dist/base.d.ts.map +1 -0
  7. package/dist/base.js +68 -80
  8. package/dist/base.js.map +1 -1
  9. package/dist/cache/base.cjs +16 -21
  10. package/dist/cache/base.cjs.map +1 -0
  11. package/dist/cache/base.d.cts +43 -0
  12. package/dist/cache/base.d.cts.map +1 -0
  13. package/dist/cache/base.d.ts +41 -36
  14. package/dist/cache/base.d.ts.map +1 -0
  15. package/dist/cache/base.js +15 -16
  16. package/dist/cache/base.js.map +1 -1
  17. package/dist/cache/index.cjs +2 -19
  18. package/dist/cache/index.js +3 -3
  19. package/dist/cache/memory.cjs +50 -58
  20. package/dist/cache/memory.cjs.map +1 -0
  21. package/dist/cache/memory.d.cts +19 -0
  22. package/dist/cache/memory.d.cts.map +1 -0
  23. package/dist/cache/memory.d.ts +18 -13
  24. package/dist/cache/memory.d.ts.map +1 -0
  25. package/dist/cache/memory.js +49 -53
  26. package/dist/cache/memory.js.map +1 -1
  27. package/dist/id.cjs +10 -16
  28. package/dist/id.cjs.map +1 -0
  29. package/dist/id.d.cts +6 -0
  30. package/dist/id.d.cts.map +1 -0
  31. package/dist/id.d.ts +6 -2
  32. package/dist/id.d.ts.map +1 -0
  33. package/dist/id.js +9 -12
  34. package/dist/id.js.map +1 -1
  35. package/dist/index.cjs +36 -27
  36. package/dist/index.d.cts +12 -0
  37. package/dist/index.d.ts +12 -8
  38. package/dist/index.js +11 -9
  39. package/dist/memory.cjs +191 -268
  40. package/dist/memory.cjs.map +1 -0
  41. package/dist/memory.d.cts +21 -0
  42. package/dist/memory.d.cts.map +1 -0
  43. package/dist/memory.d.ts +18 -12
  44. package/dist/memory.d.ts.map +1 -0
  45. package/dist/memory.js +190 -263
  46. package/dist/memory.js.map +1 -1
  47. package/dist/serde/base.d.cts +8 -0
  48. package/dist/serde/base.d.cts.map +1 -0
  49. package/dist/serde/base.d.ts +7 -3
  50. package/dist/serde/base.d.ts.map +1 -0
  51. package/dist/serde/jsonplus.cjs +90 -141
  52. package/dist/serde/jsonplus.cjs.map +1 -0
  53. package/dist/serde/jsonplus.js +89 -136
  54. package/dist/serde/jsonplus.js.map +1 -1
  55. package/dist/serde/types.cjs +14 -9
  56. package/dist/serde/types.cjs.map +1 -0
  57. package/dist/serde/types.d.cts +52 -0
  58. package/dist/serde/types.d.cts.map +1 -0
  59. package/dist/serde/types.d.ts +50 -47
  60. package/dist/serde/types.d.ts.map +1 -0
  61. package/dist/serde/types.js +9 -5
  62. package/dist/serde/types.js.map +1 -1
  63. package/dist/serde/utils/fast-safe-stringify/index.cjs +87 -208
  64. package/dist/serde/utils/fast-safe-stringify/index.cjs.map +1 -0
  65. package/dist/serde/utils/fast-safe-stringify/index.js +87 -205
  66. package/dist/serde/utils/fast-safe-stringify/index.js.map +1 -1
  67. package/dist/store/base.cjs +199 -209
  68. package/dist/store/base.cjs.map +1 -0
  69. package/dist/store/base.d.cts +391 -0
  70. package/dist/store/base.d.cts.map +1 -0
  71. package/dist/store/base.d.ts +335 -332
  72. package/dist/store/base.d.ts.map +1 -0
  73. package/dist/store/base.js +198 -204
  74. package/dist/store/base.js.map +1 -1
  75. package/dist/store/batch.cjs +114 -147
  76. package/dist/store/batch.cjs.map +1 -0
  77. package/dist/store/batch.d.cts +46 -0
  78. package/dist/store/batch.d.cts.map +1 -0
  79. package/dist/store/batch.d.ts +45 -40
  80. package/dist/store/batch.d.ts.map +1 -0
  81. package/dist/store/batch.js +114 -143
  82. package/dist/store/batch.js.map +1 -1
  83. package/dist/store/memory.cjs +256 -363
  84. package/dist/store/memory.cjs.map +1 -0
  85. package/dist/store/memory.d.cts +62 -0
  86. package/dist/store/memory.d.cts.map +1 -0
  87. package/dist/store/memory.d.ts +28 -24
  88. package/dist/store/memory.d.ts.map +1 -0
  89. package/dist/store/memory.js +255 -358
  90. package/dist/store/memory.js.map +1 -1
  91. package/dist/store/utils.cjs +137 -249
  92. package/dist/store/utils.cjs.map +1 -0
  93. package/dist/store/utils.js +137 -245
  94. package/dist/store/utils.js.map +1 -1
  95. package/dist/types.d.cts +35 -0
  96. package/dist/types.d.cts.map +1 -0
  97. package/dist/types.d.ts +29 -28
  98. package/dist/types.d.ts.map +1 -0
  99. package/package.json +33 -34
  100. package/CHANGELOG.md +0 -19
  101. package/dist/cache/index.d.ts +0 -2
  102. package/dist/cache/index.js.map +0 -1
  103. package/dist/index.js.map +0 -1
  104. package/dist/serde/base.cjs +0 -3
  105. package/dist/serde/base.js +0 -2
  106. package/dist/serde/base.js.map +0 -1
  107. package/dist/serde/jsonplus.d.ts +0 -7
  108. package/dist/serde/utils/fast-safe-stringify/index.d.ts +0 -1
  109. package/dist/store/index.cjs +0 -20
  110. package/dist/store/index.d.ts +0 -3
  111. package/dist/store/index.js +0 -4
  112. package/dist/store/index.js.map +0 -1
  113. package/dist/store/utils.d.ts +0 -26
  114. package/dist/types.cjs +0 -3
  115. package/dist/types.js +0 -2
  116. package/dist/types.js.map +0 -1
  117. package/index.cjs +0 -1
  118. package/index.d.cts +0 -1
  119. package/index.d.ts +0 -1
  120. package/index.js +0 -1
package/dist/memory.js CHANGED
@@ -1,269 +1,196 @@
1
- import { BaseCheckpointSaver, copyCheckpoint, getCheckpointId, maxChannelVersion, WRITES_IDX_MAP, } from "./base.js";
2
1
  import { TASKS } from "./serde/types.js";
2
+ import { BaseCheckpointSaver, WRITES_IDX_MAP, copyCheckpoint, getCheckpointId, maxChannelVersion } from "./base.js";
3
+ //#region src/memory.ts
3
4
  function _generateKey(threadId, checkpointNamespace, checkpointId) {
4
- return JSON.stringify([threadId, checkpointNamespace, checkpointId]);
5
+ return JSON.stringify([
6
+ threadId,
7
+ checkpointNamespace,
8
+ checkpointId
9
+ ]);
5
10
  }
6
11
  function _parseKey(key) {
7
- const [threadId, checkpointNamespace, checkpointId] = JSON.parse(key);
8
- return { threadId, checkpointNamespace, checkpointId };
9
- }
10
- export class MemorySaver extends BaseCheckpointSaver {
11
- constructor(serde) {
12
- super(serde);
13
- // thread ID -> checkpoint namespace -> checkpoint ID -> checkpoint mapping
14
- Object.defineProperty(this, "storage", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: {}
19
- });
20
- Object.defineProperty(this, "writes", {
21
- enumerable: true,
22
- configurable: true,
23
- writable: true,
24
- value: {}
25
- });
26
- }
27
- async _migratePendingSends(mutableCheckpoint, threadId, checkpointNs, parentCheckpointId) {
28
- const deseriablizableCheckpoint = mutableCheckpoint;
29
- const parentKey = _generateKey(threadId, checkpointNs, parentCheckpointId);
30
- const pendingSends = await Promise.all(Object.values(this.writes[parentKey] ?? {})
31
- .filter(([_taskId, channel]) => channel === TASKS)
32
- .map(async ([_taskId, _channel, writes]) => await this.serde.loadsTyped("json", writes)));
33
- deseriablizableCheckpoint.channel_values ??= {};
34
- deseriablizableCheckpoint.channel_values[TASKS] = pendingSends;
35
- deseriablizableCheckpoint.channel_versions ??= {};
36
- deseriablizableCheckpoint.channel_versions[TASKS] =
37
- Object.keys(deseriablizableCheckpoint.channel_versions).length > 0
38
- ? maxChannelVersion(...Object.values(deseriablizableCheckpoint.channel_versions))
39
- : this.getNextVersion(undefined);
40
- }
41
- async getTuple(config) {
42
- const thread_id = config.configurable?.thread_id;
43
- const checkpoint_ns = config.configurable?.checkpoint_ns ?? "";
44
- let checkpoint_id = getCheckpointId(config);
45
- if (checkpoint_id) {
46
- const saved = this.storage[thread_id]?.[checkpoint_ns]?.[checkpoint_id];
47
- if (saved !== undefined) {
48
- const [checkpoint, metadata, parentCheckpointId] = saved;
49
- const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);
50
- const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
51
- if (deserializedCheckpoint.v < 4 && parentCheckpointId !== undefined) {
52
- await this._migratePendingSends(deserializedCheckpoint, thread_id, checkpoint_ns, parentCheckpointId);
53
- }
54
- const pendingWrites = await Promise.all(Object.values(this.writes[key] || {}).map(async ([taskId, channel, value]) => {
55
- return [
56
- taskId,
57
- channel,
58
- await this.serde.loadsTyped("json", value),
59
- ];
60
- }));
61
- const checkpointTuple = {
62
- config,
63
- checkpoint: deserializedCheckpoint,
64
- metadata: (await this.serde.loadsTyped("json", metadata)),
65
- pendingWrites,
66
- };
67
- if (parentCheckpointId !== undefined) {
68
- checkpointTuple.parentConfig = {
69
- configurable: {
70
- thread_id,
71
- checkpoint_ns,
72
- checkpoint_id: parentCheckpointId,
73
- },
74
- };
75
- }
76
- return checkpointTuple;
77
- }
78
- }
79
- else {
80
- const checkpoints = this.storage[thread_id]?.[checkpoint_ns];
81
- if (checkpoints !== undefined) {
82
- // eslint-disable-next-line prefer-destructuring
83
- checkpoint_id = Object.keys(checkpoints).sort((a, b) => b.localeCompare(a))[0];
84
- const saved = checkpoints[checkpoint_id];
85
- const [checkpoint, metadata, parentCheckpointId] = saved;
86
- const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);
87
- const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
88
- if (deserializedCheckpoint.v < 4 && parentCheckpointId !== undefined) {
89
- await this._migratePendingSends(deserializedCheckpoint, thread_id, checkpoint_ns, parentCheckpointId);
90
- }
91
- const pendingWrites = await Promise.all(Object.values(this.writes[key] || {}).map(async ([taskId, channel, value]) => {
92
- return [
93
- taskId,
94
- channel,
95
- await this.serde.loadsTyped("json", value),
96
- ];
97
- }));
98
- const checkpointTuple = {
99
- config: {
100
- configurable: {
101
- thread_id,
102
- checkpoint_id,
103
- checkpoint_ns,
104
- },
105
- },
106
- checkpoint: deserializedCheckpoint,
107
- metadata: (await this.serde.loadsTyped("json", metadata)),
108
- pendingWrites,
109
- };
110
- if (parentCheckpointId !== undefined) {
111
- checkpointTuple.parentConfig = {
112
- configurable: {
113
- thread_id,
114
- checkpoint_ns,
115
- checkpoint_id: parentCheckpointId,
116
- },
117
- };
118
- }
119
- return checkpointTuple;
120
- }
121
- }
122
- return undefined;
123
- }
124
- async *list(config, options) {
125
- // eslint-disable-next-line prefer-const
126
- let { before, limit, filter } = options ?? {};
127
- const threadIds = config.configurable?.thread_id
128
- ? [config.configurable?.thread_id]
129
- : Object.keys(this.storage);
130
- const configCheckpointNamespace = config.configurable?.checkpoint_ns;
131
- const configCheckpointId = config.configurable?.checkpoint_id;
132
- for (const threadId of threadIds) {
133
- for (const checkpointNamespace of Object.keys(this.storage[threadId] ?? {})) {
134
- if (configCheckpointNamespace !== undefined &&
135
- checkpointNamespace !== configCheckpointNamespace) {
136
- continue;
137
- }
138
- const checkpoints = this.storage[threadId]?.[checkpointNamespace] ?? {};
139
- const sortedCheckpoints = Object.entries(checkpoints).sort((a, b) => b[0].localeCompare(a[0]));
140
- for (const [checkpointId, [checkpoint, metadataStr, parentCheckpointId],] of sortedCheckpoints) {
141
- // Filter by checkpoint ID from config
142
- if (configCheckpointId && checkpointId !== configCheckpointId) {
143
- continue;
144
- }
145
- // Filter by checkpoint ID from before config
146
- if (before &&
147
- before.configurable?.checkpoint_id &&
148
- checkpointId >= before.configurable.checkpoint_id) {
149
- continue;
150
- }
151
- // Parse metadata
152
- const metadata = (await this.serde.loadsTyped("json", metadataStr));
153
- if (filter &&
154
- !Object.entries(filter).every(([key, value]) => metadata[key] === value)) {
155
- continue;
156
- }
157
- // Limit search results
158
- if (limit !== undefined) {
159
- if (limit <= 0)
160
- break;
161
- limit -= 1;
162
- }
163
- const key = _generateKey(threadId, checkpointNamespace, checkpointId);
164
- const writes = Object.values(this.writes[key] || {});
165
- const pendingWrites = await Promise.all(writes.map(async ([taskId, channel, value]) => {
166
- return [
167
- taskId,
168
- channel,
169
- await this.serde.loadsTyped("json", value),
170
- ];
171
- }));
172
- const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
173
- if (deserializedCheckpoint.v < 4 &&
174
- parentCheckpointId !== undefined) {
175
- await this._migratePendingSends(deserializedCheckpoint, threadId, checkpointNamespace, parentCheckpointId);
176
- }
177
- const checkpointTuple = {
178
- config: {
179
- configurable: {
180
- thread_id: threadId,
181
- checkpoint_ns: checkpointNamespace,
182
- checkpoint_id: checkpointId,
183
- },
184
- },
185
- checkpoint: deserializedCheckpoint,
186
- metadata,
187
- pendingWrites,
188
- };
189
- if (parentCheckpointId !== undefined) {
190
- checkpointTuple.parentConfig = {
191
- configurable: {
192
- thread_id: threadId,
193
- checkpoint_ns: checkpointNamespace,
194
- checkpoint_id: parentCheckpointId,
195
- },
196
- };
197
- }
198
- yield checkpointTuple;
199
- }
200
- }
201
- }
202
- }
203
- async put(config, checkpoint, metadata) {
204
- const preparedCheckpoint = copyCheckpoint(checkpoint);
205
- const threadId = config.configurable?.thread_id;
206
- const checkpointNamespace = config.configurable?.checkpoint_ns ?? "";
207
- if (threadId === undefined) {
208
- throw new Error(`Failed to put checkpoint. The passed RunnableConfig is missing a required "thread_id" field in its "configurable" property.`);
209
- }
210
- if (!this.storage[threadId]) {
211
- this.storage[threadId] = {};
212
- }
213
- if (!this.storage[threadId][checkpointNamespace]) {
214
- this.storage[threadId][checkpointNamespace] = {};
215
- }
216
- const [[, serializedCheckpoint], [, serializedMetadata]] = await Promise.all([
217
- this.serde.dumpsTyped(preparedCheckpoint),
218
- this.serde.dumpsTyped(metadata),
219
- ]);
220
- this.storage[threadId][checkpointNamespace][checkpoint.id] = [
221
- serializedCheckpoint,
222
- serializedMetadata,
223
- config.configurable?.checkpoint_id, // parent
224
- ];
225
- return {
226
- configurable: {
227
- thread_id: threadId,
228
- checkpoint_ns: checkpointNamespace,
229
- checkpoint_id: checkpoint.id,
230
- },
231
- };
232
- }
233
- async putWrites(config, writes, taskId) {
234
- const threadId = config.configurable?.thread_id;
235
- const checkpointNamespace = config.configurable?.checkpoint_ns;
236
- const checkpointId = config.configurable?.checkpoint_id;
237
- if (threadId === undefined) {
238
- throw new Error(`Failed to put writes. The passed RunnableConfig is missing a required "thread_id" field in its "configurable" property`);
239
- }
240
- if (checkpointId === undefined) {
241
- throw new Error(`Failed to put writes. The passed RunnableConfig is missing a required "checkpoint_id" field in its "configurable" property.`);
242
- }
243
- const outerKey = _generateKey(threadId, checkpointNamespace, checkpointId);
244
- const outerWrites_ = this.writes[outerKey];
245
- if (this.writes[outerKey] === undefined) {
246
- this.writes[outerKey] = {};
247
- }
248
- await Promise.all(writes.map(async ([channel, value], idx) => {
249
- const [, serializedValue] = await this.serde.dumpsTyped(value);
250
- const innerKey = [
251
- taskId,
252
- WRITES_IDX_MAP[channel] || idx,
253
- ];
254
- const innerKeyStr = `${innerKey[0]},${innerKey[1]}`;
255
- if (innerKey[1] >= 0 && outerWrites_ && innerKeyStr in outerWrites_) {
256
- return;
257
- }
258
- this.writes[outerKey][innerKeyStr] = [taskId, channel, serializedValue];
259
- }));
260
- }
261
- async deleteThread(threadId) {
262
- delete this.storage[threadId];
263
- for (const key of Object.keys(this.writes)) {
264
- if (_parseKey(key).threadId === threadId)
265
- delete this.writes[key];
266
- }
267
- }
12
+ const [threadId, checkpointNamespace, checkpointId] = JSON.parse(key);
13
+ return {
14
+ threadId,
15
+ checkpointNamespace,
16
+ checkpointId
17
+ };
268
18
  }
19
+ var MemorySaver = class extends BaseCheckpointSaver {
20
+ storage = {};
21
+ writes = {};
22
+ constructor(serde) {
23
+ super(serde);
24
+ }
25
+ /** @internal */
26
+ async _migratePendingSends(mutableCheckpoint, threadId, checkpointNs, parentCheckpointId) {
27
+ const deseriablizableCheckpoint = mutableCheckpoint;
28
+ const parentKey = _generateKey(threadId, checkpointNs, parentCheckpointId);
29
+ const pendingSends = await Promise.all(Object.values(this.writes[parentKey] ?? {}).filter(([_taskId, channel]) => channel === TASKS).map(async ([_taskId, _channel, writes]) => await this.serde.loadsTyped("json", writes)));
30
+ deseriablizableCheckpoint.channel_values ??= {};
31
+ deseriablizableCheckpoint.channel_values[TASKS] = pendingSends;
32
+ deseriablizableCheckpoint.channel_versions ??= {};
33
+ deseriablizableCheckpoint.channel_versions[TASKS] = Object.keys(deseriablizableCheckpoint.channel_versions).length > 0 ? maxChannelVersion(...Object.values(deseriablizableCheckpoint.channel_versions)) : this.getNextVersion(void 0);
34
+ }
35
+ async getTuple(config) {
36
+ const thread_id = config.configurable?.thread_id;
37
+ const checkpoint_ns = config.configurable?.checkpoint_ns ?? "";
38
+ let checkpoint_id = getCheckpointId(config);
39
+ if (checkpoint_id) {
40
+ const saved = this.storage[thread_id]?.[checkpoint_ns]?.[checkpoint_id];
41
+ if (saved !== void 0) {
42
+ const [checkpoint, metadata, parentCheckpointId] = saved;
43
+ const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);
44
+ const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
45
+ if (deserializedCheckpoint.v < 4 && parentCheckpointId !== void 0) await this._migratePendingSends(deserializedCheckpoint, thread_id, checkpoint_ns, parentCheckpointId);
46
+ const pendingWrites = await Promise.all(Object.values(this.writes[key] || {}).map(async ([taskId, channel, value]) => {
47
+ return [
48
+ taskId,
49
+ channel,
50
+ await this.serde.loadsTyped("json", value)
51
+ ];
52
+ }));
53
+ const checkpointTuple = {
54
+ config,
55
+ checkpoint: deserializedCheckpoint,
56
+ metadata: await this.serde.loadsTyped("json", metadata),
57
+ pendingWrites
58
+ };
59
+ if (parentCheckpointId !== void 0) checkpointTuple.parentConfig = { configurable: {
60
+ thread_id,
61
+ checkpoint_ns,
62
+ checkpoint_id: parentCheckpointId
63
+ } };
64
+ return checkpointTuple;
65
+ }
66
+ } else {
67
+ const checkpoints = this.storage[thread_id]?.[checkpoint_ns];
68
+ if (checkpoints !== void 0) {
69
+ checkpoint_id = Object.keys(checkpoints).sort((a, b) => b.localeCompare(a))[0];
70
+ const [checkpoint, metadata, parentCheckpointId] = checkpoints[checkpoint_id];
71
+ const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);
72
+ const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
73
+ if (deserializedCheckpoint.v < 4 && parentCheckpointId !== void 0) await this._migratePendingSends(deserializedCheckpoint, thread_id, checkpoint_ns, parentCheckpointId);
74
+ const pendingWrites = await Promise.all(Object.values(this.writes[key] || {}).map(async ([taskId, channel, value]) => {
75
+ return [
76
+ taskId,
77
+ channel,
78
+ await this.serde.loadsTyped("json", value)
79
+ ];
80
+ }));
81
+ const checkpointTuple = {
82
+ config: { configurable: {
83
+ thread_id,
84
+ checkpoint_id,
85
+ checkpoint_ns
86
+ } },
87
+ checkpoint: deserializedCheckpoint,
88
+ metadata: await this.serde.loadsTyped("json", metadata),
89
+ pendingWrites
90
+ };
91
+ if (parentCheckpointId !== void 0) checkpointTuple.parentConfig = { configurable: {
92
+ thread_id,
93
+ checkpoint_ns,
94
+ checkpoint_id: parentCheckpointId
95
+ } };
96
+ return checkpointTuple;
97
+ }
98
+ }
99
+ }
100
+ async *list(config, options) {
101
+ let { before, limit, filter } = options ?? {};
102
+ const threadIds = config.configurable?.thread_id ? [config.configurable?.thread_id] : Object.keys(this.storage);
103
+ const configCheckpointNamespace = config.configurable?.checkpoint_ns;
104
+ const configCheckpointId = config.configurable?.checkpoint_id;
105
+ for (const threadId of threadIds) for (const checkpointNamespace of Object.keys(this.storage[threadId] ?? {})) {
106
+ if (configCheckpointNamespace !== void 0 && checkpointNamespace !== configCheckpointNamespace) continue;
107
+ const checkpoints = this.storage[threadId]?.[checkpointNamespace] ?? {};
108
+ const sortedCheckpoints = Object.entries(checkpoints).sort((a, b) => b[0].localeCompare(a[0]));
109
+ for (const [checkpointId, [checkpoint, metadataStr, parentCheckpointId]] of sortedCheckpoints) {
110
+ if (configCheckpointId && checkpointId !== configCheckpointId) continue;
111
+ if (before && before.configurable?.checkpoint_id && checkpointId >= before.configurable.checkpoint_id) continue;
112
+ const metadata = await this.serde.loadsTyped("json", metadataStr);
113
+ if (filter && !Object.entries(filter).every(([key, value]) => metadata[key] === value)) continue;
114
+ if (limit !== void 0) {
115
+ if (limit <= 0) break;
116
+ limit -= 1;
117
+ }
118
+ const key = _generateKey(threadId, checkpointNamespace, checkpointId);
119
+ const writes = Object.values(this.writes[key] || {});
120
+ const pendingWrites = await Promise.all(writes.map(async ([taskId, channel, value]) => {
121
+ return [
122
+ taskId,
123
+ channel,
124
+ await this.serde.loadsTyped("json", value)
125
+ ];
126
+ }));
127
+ const deserializedCheckpoint = await this.serde.loadsTyped("json", checkpoint);
128
+ if (deserializedCheckpoint.v < 4 && parentCheckpointId !== void 0) await this._migratePendingSends(deserializedCheckpoint, threadId, checkpointNamespace, parentCheckpointId);
129
+ const checkpointTuple = {
130
+ config: { configurable: {
131
+ thread_id: threadId,
132
+ checkpoint_ns: checkpointNamespace,
133
+ checkpoint_id: checkpointId
134
+ } },
135
+ checkpoint: deserializedCheckpoint,
136
+ metadata,
137
+ pendingWrites
138
+ };
139
+ if (parentCheckpointId !== void 0) checkpointTuple.parentConfig = { configurable: {
140
+ thread_id: threadId,
141
+ checkpoint_ns: checkpointNamespace,
142
+ checkpoint_id: parentCheckpointId
143
+ } };
144
+ yield checkpointTuple;
145
+ }
146
+ }
147
+ }
148
+ async put(config, checkpoint, metadata) {
149
+ const preparedCheckpoint = copyCheckpoint(checkpoint);
150
+ const threadId = config.configurable?.thread_id;
151
+ const checkpointNamespace = config.configurable?.checkpoint_ns ?? "";
152
+ if (threadId === void 0) throw new Error(`Failed to put checkpoint. The passed RunnableConfig is missing a required "thread_id" field in its "configurable" property.`);
153
+ if (!this.storage[threadId]) this.storage[threadId] = {};
154
+ if (!this.storage[threadId][checkpointNamespace]) this.storage[threadId][checkpointNamespace] = {};
155
+ const [[, serializedCheckpoint], [, serializedMetadata]] = await Promise.all([this.serde.dumpsTyped(preparedCheckpoint), this.serde.dumpsTyped(metadata)]);
156
+ this.storage[threadId][checkpointNamespace][checkpoint.id] = [
157
+ serializedCheckpoint,
158
+ serializedMetadata,
159
+ config.configurable?.checkpoint_id
160
+ ];
161
+ return { configurable: {
162
+ thread_id: threadId,
163
+ checkpoint_ns: checkpointNamespace,
164
+ checkpoint_id: checkpoint.id
165
+ } };
166
+ }
167
+ async putWrites(config, writes, taskId) {
168
+ const threadId = config.configurable?.thread_id;
169
+ const checkpointNamespace = config.configurable?.checkpoint_ns;
170
+ const checkpointId = config.configurable?.checkpoint_id;
171
+ if (threadId === void 0) throw new Error(`Failed to put writes. The passed RunnableConfig is missing a required "thread_id" field in its "configurable" property`);
172
+ if (checkpointId === void 0) throw new Error(`Failed to put writes. The passed RunnableConfig is missing a required "checkpoint_id" field in its "configurable" property.`);
173
+ const outerKey = _generateKey(threadId, checkpointNamespace, checkpointId);
174
+ const outerWrites_ = this.writes[outerKey];
175
+ if (this.writes[outerKey] === void 0) this.writes[outerKey] = {};
176
+ await Promise.all(writes.map(async ([channel, value], idx) => {
177
+ const [, serializedValue] = await this.serde.dumpsTyped(value);
178
+ const innerKey = [taskId, WRITES_IDX_MAP[channel] || idx];
179
+ const innerKeyStr = `${innerKey[0]},${innerKey[1]}`;
180
+ if (innerKey[1] >= 0 && outerWrites_ && innerKeyStr in outerWrites_) return;
181
+ this.writes[outerKey][innerKeyStr] = [
182
+ taskId,
183
+ channel,
184
+ serializedValue
185
+ ];
186
+ }));
187
+ }
188
+ async deleteThread(threadId) {
189
+ delete this.storage[threadId];
190
+ for (const key of Object.keys(this.writes)) if (_parseKey(key).threadId === threadId) delete this.writes[key];
191
+ }
192
+ };
193
+ //#endregion
194
+ export { MemorySaver };
195
+
269
196
  //# sourceMappingURL=memory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","names":[],"sources":["../src/memory.ts"],"sourcesContent":["import type { RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n BaseCheckpointSaver,\n Checkpoint,\n CheckpointListOptions,\n CheckpointTuple,\n copyCheckpoint,\n getCheckpointId,\n maxChannelVersion,\n WRITES_IDX_MAP,\n} from \"./base.js\";\nimport { SerializerProtocol } from \"./serde/base.js\";\nimport {\n CheckpointMetadata,\n CheckpointPendingWrite,\n PendingWrite,\n} from \"./types.js\";\nimport { TASKS } from \"./serde/types.js\";\n\nfunction _generateKey(\n threadId: string,\n checkpointNamespace: string,\n checkpointId: string\n) {\n return JSON.stringify([threadId, checkpointNamespace, checkpointId]);\n}\n\nfunction _parseKey(key: string) {\n const [threadId, checkpointNamespace, checkpointId] = JSON.parse(key);\n return { threadId, checkpointNamespace, checkpointId };\n}\n\nexport class MemorySaver extends BaseCheckpointSaver {\n // thread ID -> checkpoint namespace -> checkpoint ID -> checkpoint mapping\n storage: Record<\n string,\n Record<string, Record<string, [Uint8Array, Uint8Array, string | undefined]>>\n > = {};\n\n writes: Record<string, Record<string, [string, string, Uint8Array]>> = {};\n\n constructor(serde?: SerializerProtocol) {\n super(serde);\n }\n\n /** @internal */\n async _migratePendingSends(\n mutableCheckpoint: Checkpoint,\n threadId: string,\n checkpointNs: string,\n parentCheckpointId: string\n ) {\n const deseriablizableCheckpoint = mutableCheckpoint;\n const parentKey = _generateKey(threadId, checkpointNs, parentCheckpointId);\n\n const pendingSends = await Promise.all(\n Object.values(this.writes[parentKey] ?? {})\n .filter(([_taskId, channel]) => channel === TASKS)\n .map(\n async ([_taskId, _channel, writes]) =>\n await this.serde.loadsTyped(\"json\", writes)\n )\n );\n\n deseriablizableCheckpoint.channel_values ??= {};\n deseriablizableCheckpoint.channel_values[TASKS] = pendingSends;\n\n deseriablizableCheckpoint.channel_versions ??= {};\n deseriablizableCheckpoint.channel_versions[TASKS] =\n Object.keys(deseriablizableCheckpoint.channel_versions).length > 0\n ? maxChannelVersion(\n ...Object.values(deseriablizableCheckpoint.channel_versions)\n )\n : this.getNextVersion(undefined);\n }\n\n async getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined> {\n const thread_id = config.configurable?.thread_id;\n const checkpoint_ns = config.configurable?.checkpoint_ns ?? \"\";\n let checkpoint_id = getCheckpointId(config);\n\n if (checkpoint_id) {\n const saved = this.storage[thread_id]?.[checkpoint_ns]?.[checkpoint_id];\n if (saved !== undefined) {\n const [checkpoint, metadata, parentCheckpointId] = saved;\n const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);\n const deserializedCheckpoint: Checkpoint = await this.serde.loadsTyped(\n \"json\",\n checkpoint\n );\n\n if (deserializedCheckpoint.v < 4 && parentCheckpointId !== undefined) {\n await this._migratePendingSends(\n deserializedCheckpoint,\n thread_id,\n checkpoint_ns,\n parentCheckpointId\n );\n }\n\n const pendingWrites: CheckpointPendingWrite[] = await Promise.all(\n Object.values(this.writes[key] || {}).map(\n async ([taskId, channel, value]) => {\n return [\n taskId,\n channel,\n await this.serde.loadsTyped(\"json\", value),\n ];\n }\n )\n );\n const checkpointTuple: CheckpointTuple = {\n config,\n checkpoint: deserializedCheckpoint,\n metadata: (await this.serde.loadsTyped(\n \"json\",\n metadata\n )) as CheckpointMetadata,\n pendingWrites,\n };\n if (parentCheckpointId !== undefined) {\n checkpointTuple.parentConfig = {\n configurable: {\n thread_id,\n checkpoint_ns,\n checkpoint_id: parentCheckpointId,\n },\n };\n }\n return checkpointTuple;\n }\n } else {\n const checkpoints = this.storage[thread_id]?.[checkpoint_ns];\n if (checkpoints !== undefined) {\n // eslint-disable-next-line prefer-destructuring\n checkpoint_id = Object.keys(checkpoints).sort((a, b) =>\n b.localeCompare(a)\n )[0];\n const saved = checkpoints[checkpoint_id];\n const [checkpoint, metadata, parentCheckpointId] = saved;\n const key = _generateKey(thread_id, checkpoint_ns, checkpoint_id);\n const deserializedCheckpoint: Checkpoint = await this.serde.loadsTyped(\n \"json\",\n checkpoint\n );\n\n if (deserializedCheckpoint.v < 4 && parentCheckpointId !== undefined) {\n await this._migratePendingSends(\n deserializedCheckpoint,\n thread_id,\n checkpoint_ns,\n parentCheckpointId\n );\n }\n\n const pendingWrites: CheckpointPendingWrite[] = await Promise.all(\n Object.values(this.writes[key] || {}).map(\n async ([taskId, channel, value]) => {\n return [\n taskId,\n channel,\n await this.serde.loadsTyped(\"json\", value),\n ];\n }\n )\n );\n const checkpointTuple: CheckpointTuple = {\n config: {\n configurable: {\n thread_id,\n checkpoint_id,\n checkpoint_ns,\n },\n },\n checkpoint: deserializedCheckpoint,\n metadata: (await this.serde.loadsTyped(\n \"json\",\n metadata\n )) as CheckpointMetadata,\n pendingWrites,\n };\n if (parentCheckpointId !== undefined) {\n checkpointTuple.parentConfig = {\n configurable: {\n thread_id,\n checkpoint_ns,\n checkpoint_id: parentCheckpointId,\n },\n };\n }\n return checkpointTuple;\n }\n }\n\n return undefined;\n }\n\n async *list(\n config: RunnableConfig,\n options?: CheckpointListOptions\n ): AsyncGenerator<CheckpointTuple> {\n // eslint-disable-next-line prefer-const\n let { before, limit, filter } = options ?? {};\n const threadIds = config.configurable?.thread_id\n ? [config.configurable?.thread_id]\n : Object.keys(this.storage);\n const configCheckpointNamespace = config.configurable?.checkpoint_ns;\n const configCheckpointId = config.configurable?.checkpoint_id;\n\n for (const threadId of threadIds) {\n for (const checkpointNamespace of Object.keys(\n this.storage[threadId] ?? {}\n )) {\n if (\n configCheckpointNamespace !== undefined &&\n checkpointNamespace !== configCheckpointNamespace\n ) {\n continue;\n }\n const checkpoints = this.storage[threadId]?.[checkpointNamespace] ?? {};\n const sortedCheckpoints = Object.entries(checkpoints).sort((a, b) =>\n b[0].localeCompare(a[0])\n );\n\n for (const [\n checkpointId,\n [checkpoint, metadataStr, parentCheckpointId],\n ] of sortedCheckpoints) {\n // Filter by checkpoint ID from config\n if (configCheckpointId && checkpointId !== configCheckpointId) {\n continue;\n }\n\n // Filter by checkpoint ID from before config\n if (\n before &&\n before.configurable?.checkpoint_id &&\n checkpointId >= before.configurable.checkpoint_id\n ) {\n continue;\n }\n\n // Parse metadata\n const metadata = (await this.serde.loadsTyped(\n \"json\",\n metadataStr\n )) as CheckpointMetadata;\n\n if (\n filter &&\n !Object.entries(filter).every(\n ([key, value]) =>\n (metadata as unknown as Record<string, unknown>)[key] === value\n )\n ) {\n continue;\n }\n\n // Limit search results\n if (limit !== undefined) {\n if (limit <= 0) break;\n limit -= 1;\n }\n\n const key = _generateKey(threadId, checkpointNamespace, checkpointId);\n const writes = Object.values(this.writes[key] || {});\n\n const pendingWrites: CheckpointPendingWrite[] = await Promise.all(\n writes.map(async ([taskId, channel, value]) => {\n return [\n taskId,\n channel,\n await this.serde.loadsTyped(\"json\", value),\n ];\n })\n );\n\n const deserializedCheckpoint = await this.serde.loadsTyped(\n \"json\",\n checkpoint\n );\n\n if (\n deserializedCheckpoint.v < 4 &&\n parentCheckpointId !== undefined\n ) {\n await this._migratePendingSends(\n deserializedCheckpoint,\n threadId,\n checkpointNamespace,\n parentCheckpointId\n );\n }\n\n const checkpointTuple: CheckpointTuple = {\n config: {\n configurable: {\n thread_id: threadId,\n checkpoint_ns: checkpointNamespace,\n checkpoint_id: checkpointId,\n },\n },\n checkpoint: deserializedCheckpoint,\n metadata,\n pendingWrites,\n };\n if (parentCheckpointId !== undefined) {\n checkpointTuple.parentConfig = {\n configurable: {\n thread_id: threadId,\n checkpoint_ns: checkpointNamespace,\n checkpoint_id: parentCheckpointId,\n },\n };\n }\n yield checkpointTuple;\n }\n }\n }\n }\n\n async put(\n config: RunnableConfig,\n checkpoint: Checkpoint,\n metadata: CheckpointMetadata\n ): Promise<RunnableConfig> {\n const preparedCheckpoint: Partial<Checkpoint> = copyCheckpoint(checkpoint);\n const threadId = config.configurable?.thread_id;\n const checkpointNamespace = config.configurable?.checkpoint_ns ?? \"\";\n if (threadId === undefined) {\n throw new Error(\n `Failed to put checkpoint. The passed RunnableConfig is missing a required \"thread_id\" field in its \"configurable\" property.`\n );\n }\n\n if (!this.storage[threadId]) {\n this.storage[threadId] = {};\n }\n if (!this.storage[threadId][checkpointNamespace]) {\n this.storage[threadId][checkpointNamespace] = {};\n }\n\n const [[, serializedCheckpoint], [, serializedMetadata]] =\n await Promise.all([\n this.serde.dumpsTyped(preparedCheckpoint),\n this.serde.dumpsTyped(metadata),\n ]);\n\n this.storage[threadId][checkpointNamespace][checkpoint.id] = [\n serializedCheckpoint,\n serializedMetadata,\n config.configurable?.checkpoint_id, // parent\n ];\n\n return {\n configurable: {\n thread_id: threadId,\n checkpoint_ns: checkpointNamespace,\n checkpoint_id: checkpoint.id,\n },\n };\n }\n\n async putWrites(\n config: RunnableConfig,\n writes: PendingWrite[],\n taskId: string\n ): Promise<void> {\n const threadId = config.configurable?.thread_id;\n const checkpointNamespace = config.configurable?.checkpoint_ns;\n const checkpointId = config.configurable?.checkpoint_id;\n if (threadId === undefined) {\n throw new Error(\n `Failed to put writes. The passed RunnableConfig is missing a required \"thread_id\" field in its \"configurable\" property`\n );\n }\n if (checkpointId === undefined) {\n throw new Error(\n `Failed to put writes. The passed RunnableConfig is missing a required \"checkpoint_id\" field in its \"configurable\" property.`\n );\n }\n const outerKey = _generateKey(threadId, checkpointNamespace, checkpointId);\n const outerWrites_ = this.writes[outerKey];\n if (this.writes[outerKey] === undefined) {\n this.writes[outerKey] = {};\n }\n\n await Promise.all(\n writes.map(async ([channel, value], idx) => {\n const [, serializedValue] = await this.serde.dumpsTyped(value);\n const innerKey: [string, number] = [\n taskId,\n WRITES_IDX_MAP[channel] || idx,\n ];\n const innerKeyStr = `${innerKey[0]},${innerKey[1]}`;\n if (innerKey[1] >= 0 && outerWrites_ && innerKeyStr in outerWrites_) {\n return;\n }\n this.writes[outerKey][innerKeyStr] = [taskId, channel, serializedValue];\n })\n );\n }\n\n async deleteThread(threadId: string): Promise<void> {\n delete this.storage[threadId];\n for (const key of Object.keys(this.writes)) {\n if (_parseKey(key).threadId === threadId) delete this.writes[key];\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ //#region src/serde/base.d.ts
2
+ interface SerializerProtocol {
3
+ dumpsTyped(data: any): Promise<[string, Uint8Array]>;
4
+ loadsTyped(type: string, data: Uint8Array | string): Promise<any>;
5
+ }
6
+ //#endregion
7
+ export { SerializerProtocol };
8
+ //# sourceMappingURL=base.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.cts","names":[],"sources":["../../src/serde/base.ts"],"mappings":";UAAiB,kBAAA;EAEf,UAAA,CAAW,IAAA,QAAY,OAAA,UAAiB,UAAA;EAExC,UAAA,CAAW,IAAA,UAAc,IAAA,EAAM,UAAA,YAAsB,OAAA;AAAA"}
@@ -1,4 +1,8 @@
1
- export interface SerializerProtocol {
2
- dumpsTyped(data: any): Promise<[string, Uint8Array]>;
3
- loadsTyped(type: string, data: Uint8Array | string): Promise<any>;
1
+ //#region src/serde/base.d.ts
2
+ interface SerializerProtocol {
3
+ dumpsTyped(data: any): Promise<[string, Uint8Array]>;
4
+ loadsTyped(type: string, data: Uint8Array | string): Promise<any>;
4
5
  }
6
+ //#endregion
7
+ export { SerializerProtocol };
8
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","names":[],"sources":["../../src/serde/base.ts"],"mappings":";UAAiB,kBAAA;EAEf,UAAA,CAAW,IAAA,QAAY,OAAA,UAAiB,UAAA;EAExC,UAAA,CAAW,IAAA,UAAc,IAAA,EAAM,UAAA,YAAsB,OAAA;AAAA"}