@farukada/aws-langgraph-dynamodb-ts 0.0.11 → 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 (134) hide show
  1. package/README.md +353 -242
  2. package/dist/checkpointer/actions/delete-thread.d.ts +3 -3
  3. package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
  4. package/dist/checkpointer/actions/delete-thread.js +95 -52
  5. package/dist/checkpointer/actions/delete-thread.js.map +1 -1
  6. package/dist/checkpointer/actions/get-tuple.d.ts +8 -1
  7. package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
  8. package/dist/checkpointer/actions/get-tuple.js +72 -20
  9. package/dist/checkpointer/actions/get-tuple.js.map +1 -1
  10. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
  11. package/dist/checkpointer/actions/put-writes.js +27 -22
  12. package/dist/checkpointer/actions/put-writes.js.map +1 -1
  13. package/dist/checkpointer/actions/put.d.ts +6 -2
  14. package/dist/checkpointer/actions/put.d.ts.map +1 -1
  15. package/dist/checkpointer/actions/put.js +80 -19
  16. package/dist/checkpointer/actions/put.js.map +1 -1
  17. package/dist/checkpointer/index.d.ts +43 -2
  18. package/dist/checkpointer/index.d.ts.map +1 -1
  19. package/dist/checkpointer/index.js +226 -11
  20. package/dist/checkpointer/index.js.map +1 -1
  21. package/dist/checkpointer/types/index.d.ts +66 -4
  22. package/dist/checkpointer/types/index.d.ts.map +1 -1
  23. package/dist/checkpointer/types/index.js +10 -0
  24. package/dist/checkpointer/types/index.js.map +1 -1
  25. package/dist/checkpointer/utils/deserialization.d.ts +8 -3
  26. package/dist/checkpointer/utils/deserialization.d.ts.map +1 -1
  27. package/dist/checkpointer/utils/deserialization.js +23 -5
  28. package/dist/checkpointer/utils/deserialization.js.map +1 -1
  29. package/dist/checkpointer/utils/validation.d.ts +1 -1
  30. package/dist/checkpointer/utils/validation.js +1 -1
  31. package/dist/checkpointer/utils/validation.js.map +1 -1
  32. package/dist/factory.d.ts +8 -6
  33. package/dist/factory.d.ts.map +1 -1
  34. package/dist/factory.js +16 -4
  35. package/dist/factory.js.map +1 -1
  36. package/dist/history/actions/add-message.d.ts +2 -1
  37. package/dist/history/actions/add-message.d.ts.map +1 -1
  38. package/dist/history/actions/add-message.js +22 -18
  39. package/dist/history/actions/add-message.js.map +1 -1
  40. package/dist/history/actions/add-messages.d.ts +3 -2
  41. package/dist/history/actions/add-messages.d.ts.map +1 -1
  42. package/dist/history/actions/add-messages.js +30 -20
  43. package/dist/history/actions/add-messages.js.map +1 -1
  44. package/dist/history/actions/clear.d.ts +4 -3
  45. package/dist/history/actions/clear.d.ts.map +1 -1
  46. package/dist/history/actions/clear.js +47 -12
  47. package/dist/history/actions/clear.js.map +1 -1
  48. package/dist/history/actions/get-messages.d.ts +2 -1
  49. package/dist/history/actions/get-messages.d.ts.map +1 -1
  50. package/dist/history/actions/get-messages.js +41 -15
  51. package/dist/history/actions/get-messages.js.map +1 -1
  52. package/dist/history/actions/list-sessions.d.ts +11 -0
  53. package/dist/history/actions/list-sessions.d.ts.map +1 -1
  54. package/dist/history/actions/list-sessions.js +23 -3
  55. package/dist/history/actions/list-sessions.js.map +1 -1
  56. package/dist/history/index.d.ts +8 -0
  57. package/dist/history/index.d.ts.map +1 -1
  58. package/dist/history/index.js +22 -2
  59. package/dist/history/index.js.map +1 -1
  60. package/dist/history/types/index.d.ts +27 -5
  61. package/dist/history/types/index.d.ts.map +1 -1
  62. package/dist/history/types/index.js +1 -0
  63. package/dist/history/types/index.js.map +1 -1
  64. package/dist/history/utils/title-generator.js.map +1 -1
  65. package/dist/history/utils/update-expression-builder.d.ts +45 -21
  66. package/dist/history/utils/update-expression-builder.d.ts.map +1 -1
  67. package/dist/history/utils/update-expression-builder.js +105 -38
  68. package/dist/history/utils/update-expression-builder.js.map +1 -1
  69. package/dist/history/utils/validation.d.ts +8 -0
  70. package/dist/history/utils/validation.d.ts.map +1 -1
  71. package/dist/history/utils/validation.js +22 -0
  72. package/dist/history/utils/validation.js.map +1 -1
  73. package/dist/index.d.ts +2 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +5 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/shared/utils/batch-write.d.ts +36 -0
  78. package/dist/shared/utils/batch-write.d.ts.map +1 -0
  79. package/dist/shared/utils/batch-write.js +62 -0
  80. package/dist/shared/utils/batch-write.js.map +1 -0
  81. package/dist/shared/utils/compressor.d.ts +48 -0
  82. package/dist/shared/utils/compressor.d.ts.map +1 -0
  83. package/dist/shared/utils/compressor.js +68 -0
  84. package/dist/shared/utils/compressor.js.map +1 -0
  85. package/dist/shared/utils/constants.d.ts +2 -0
  86. package/dist/shared/utils/constants.d.ts.map +1 -1
  87. package/dist/shared/utils/constants.js +3 -7
  88. package/dist/shared/utils/constants.js.map +1 -1
  89. package/dist/shared/utils/index.d.ts +4 -0
  90. package/dist/shared/utils/index.d.ts.map +1 -1
  91. package/dist/shared/utils/index.js +4 -0
  92. package/dist/shared/utils/index.js.map +1 -1
  93. package/dist/shared/utils/logger.d.ts +48 -0
  94. package/dist/shared/utils/logger.d.ts.map +1 -0
  95. package/dist/shared/utils/logger.js +62 -0
  96. package/dist/shared/utils/logger.js.map +1 -0
  97. package/dist/shared/utils/retry.d.ts +1 -1
  98. package/dist/shared/utils/retry.d.ts.map +1 -1
  99. package/dist/shared/utils/retry.js +13 -6
  100. package/dist/shared/utils/retry.js.map +1 -1
  101. package/dist/shared/utils/s3-offloader.d.ts +146 -0
  102. package/dist/shared/utils/s3-offloader.d.ts.map +1 -0
  103. package/dist/shared/utils/s3-offloader.js +271 -0
  104. package/dist/shared/utils/s3-offloader.js.map +1 -0
  105. package/dist/shared/utils/ttl.d.ts +8 -1
  106. package/dist/shared/utils/ttl.d.ts.map +1 -1
  107. package/dist/shared/utils/ttl.js +12 -8
  108. package/dist/shared/utils/ttl.js.map +1 -1
  109. package/dist/store/actions/get-operation.js +2 -2
  110. package/dist/store/actions/get-operation.js.map +1 -1
  111. package/dist/store/actions/put-operation.d.ts.map +1 -1
  112. package/dist/store/actions/put-operation.js +2 -1
  113. package/dist/store/actions/put-operation.js.map +1 -1
  114. package/dist/store/actions/search-operation.d.ts +6 -0
  115. package/dist/store/actions/search-operation.d.ts.map +1 -1
  116. package/dist/store/actions/search-operation.js +41 -21
  117. package/dist/store/actions/search-operation.js.map +1 -1
  118. package/dist/store/index.d.ts +10 -2
  119. package/dist/store/index.d.ts.map +1 -1
  120. package/dist/store/index.js +28 -5
  121. package/dist/store/index.js.map +1 -1
  122. package/dist/store/types/index.d.ts +7 -5
  123. package/dist/store/types/index.d.ts.map +1 -1
  124. package/dist/store/utils/index.d.ts +0 -1
  125. package/dist/store/utils/index.d.ts.map +1 -1
  126. package/dist/store/utils/index.js +0 -1
  127. package/dist/store/utils/index.js.map +1 -1
  128. package/dist/store/utils/validation.js +1 -1
  129. package/dist/store/utils/validation.js.map +1 -1
  130. package/package.json +41 -24
  131. package/dist/store/utils/result.d.ts +0 -42
  132. package/dist/store/utils/result.d.ts.map +0 -1
  133. package/dist/store/utils/result.js +0 -51
  134. package/dist/store/utils/result.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { DeleteThreadActionParams } from '../types';
1
+ import { type DeleteThreadActionParams } from '../types';
2
2
  /**
3
- * Delete a thread and all its checkpoints and writes from DynamoDB
3
+ * Delete a thread and all its checkpoints (metadata + payload items) and writes from DynamoDB
4
4
  *
5
5
  * @param params - Parameters for the delete thread operation
6
- * @throws Error if validation fails or too many checkpoints exist
6
+ * @throws Error if validation fails or too many items exist
7
7
  */
8
8
  export declare const deleteThreadAction: (params: DeleteThreadActionParams) => Promise<void>;
9
9
  //# sourceMappingURL=delete-thread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-thread.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,wBAAwB,EAAqB,MAAM,UAAU,CAAC;AAKvF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,wBAAwB,KAAG,OAAO,CAAC,IAAI,CA6GvF,CAAC"}
1
+ {"version":3,"file":"delete-thread.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,wBAAwB,EAG9B,MAAM,UAAU,CAAC;AAclB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,wBAAwB,KAAG,OAAO,CAAC,IAAI,CAwIvF,CAAC"}
@@ -1,23 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deleteThreadAction = void 0;
4
- const writer_1 = require("./writer");
5
- const utils_1 = require("../utils");
6
4
  const shared_1 = require("../../shared");
5
+ const types_1 = require("../types");
6
+ const utils_1 = require("../utils");
7
+ const writer_1 = require("./writer");
7
8
  /**
8
- * Delete a thread and all its checkpoints and writes from DynamoDB
9
+ * Delete a thread and all its checkpoints (metadata + payload items) and writes from DynamoDB
9
10
  *
10
11
  * @param params - Parameters for the delete thread operation
11
- * @throws Error if validation fails or too many checkpoints exist
12
+ * @throws Error if validation fails or too many items exist
12
13
  */
13
14
  const deleteThreadAction = async (params) => {
14
15
  // Validate thread ID
15
16
  (0, utils_1.validateThreadId)(params.threadId);
16
- const allCheckpoints = [];
17
+ // Query returns BOTH metadata items and PAYLOAD# items for the thread
18
+ const allItems = [];
17
19
  let lastEvaluatedKey;
18
20
  let iterationCount = 0;
19
21
  const MAX_ITERATIONS = 10;
20
- // Fetch checkpoints with pagination and safety limits
22
+ // Fetch all items with pagination and safety limits
21
23
  do {
22
24
  iterationCount++;
23
25
  if (iterationCount > MAX_ITERATIONS) {
@@ -35,19 +37,40 @@ const deleteThreadAction = async (params) => {
35
37
  });
36
38
  });
37
39
  if (result.Items && result.Items.length > 0) {
38
- allCheckpoints.push(...result.Items);
39
- // Safety check: prevent deleting too many checkpoints at once
40
- if (allCheckpoints.length > utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE) {
41
- throw new Error(`Thread has too many checkpoints (>${utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE}). Delete operation aborted for safety.`);
40
+ allItems.push(...result.Items);
41
+ // Safety check: prevent deleting too many items at once
42
+ if (allItems.length > utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE) {
43
+ throw new Error(`Thread has too many items (>${utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE}). Delete operation aborted for safety.`);
42
44
  }
43
45
  }
44
46
  lastEvaluatedKey = result.LastEvaluatedKey;
45
47
  } while (lastEvaluatedKey);
46
- if (allCheckpoints.length === 0) {
48
+ if (allItems.length === 0) {
47
49
  return; // Nothing to delete
48
50
  }
49
- // Delete checkpoints in batches of 25 (DynamoDB limit)
50
- const checkpointDeleteRequests = allCheckpoints.map((item) => ({
51
+ // Separate metadata items from payload items
52
+ const metadataItems = [];
53
+ for (const item of allItems) {
54
+ // Skip items without checkpoint_id or those with PAYLOAD# prefix
55
+ const ckptId = item.checkpoint_id;
56
+ if (typeof ckptId === 'string' && !ckptId.startsWith(types_1.PAYLOAD_SK_PREFIX)) {
57
+ metadataItems.push(item);
58
+ }
59
+ }
60
+ // Collect S3 keys from metadata items only (payload items don't carry S3 refs)
61
+ const s3KeysToDelete = [];
62
+ if (params.s3Offloader) {
63
+ for (const item of metadataItems) {
64
+ if (item.s3_checkpoint_key) {
65
+ s3KeysToDelete.push(item.s3_checkpoint_key);
66
+ }
67
+ if (item.s3_metadata_key) {
68
+ s3KeysToDelete.push(item.s3_metadata_key);
69
+ }
70
+ }
71
+ }
72
+ // Delete ALL items (metadata + payload) using their actual PK+SK
73
+ const checkpointDeleteRequests = allItems.map((item) => ({
51
74
  DeleteRequest: {
52
75
  Key: {
53
76
  thread_id: item.thread_id,
@@ -55,22 +78,59 @@ const deleteThreadAction = async (params) => {
55
78
  },
56
79
  },
57
80
  }));
58
- for (let i = 0; i < checkpointDeleteRequests.length; i += 25) {
59
- const batch = checkpointDeleteRequests.slice(i, i + 25);
60
- await (0, shared_1.withDynamoDBRetry)(async () => {
61
- await params.client.batchWrite({
62
- RequestItems: {
63
- [params.checkpointsTableName]: batch,
64
- },
65
- });
66
- });
67
- }
68
- // Delete associated writes - batch queries to avoid the N+1 problem
81
+ await (0, shared_1.batchWriteAllWithRetry)(params.client, params.checkpointsTableName, checkpointDeleteRequests);
82
+ // Fetch writes for metadata items only (payload items don't have associated writes)
69
83
  const allWriteDeleteRequests = [];
70
- for (const checkpoint of allCheckpoints) {
71
- const writes = await (0, shared_1.withDynamoDBRetry)(async () => {
72
- return await params.client.query({
73
- TableName: params.writesTableName,
84
+ const QUERY_CONCURRENCY = 10;
85
+ for (let i = 0; i < metadataItems.length; i += QUERY_CONCURRENCY) {
86
+ const checkpointBatch = metadataItems.slice(i, i + QUERY_CONCURRENCY);
87
+ const writesResults = await Promise.all(checkpointBatch.map((checkpoint) => queryAllWritesForCheckpoint(params.client, params.writesTableName, checkpoint)));
88
+ for (const writeItems of writesResults) {
89
+ if (writeItems.length > 0) {
90
+ const deleteRequests = writeItems.map((item) => ({
91
+ DeleteRequest: {
92
+ Key: {
93
+ thread_id_checkpoint_id_checkpoint_ns: item.thread_id_checkpoint_id_checkpoint_ns,
94
+ task_id_idx: item.task_id_idx,
95
+ },
96
+ },
97
+ }));
98
+ allWriteDeleteRequests.push(...deleteRequests);
99
+ // Collect S3 keys from write items
100
+ if (params.s3Offloader) {
101
+ for (const item of writeItems) {
102
+ if (item.s3_value_key) {
103
+ s3KeysToDelete.push(item.s3_value_key);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ // Delete all writes using shared batch write utility
111
+ await (0, shared_1.batchWriteAllWithRetry)(params.client, params.writesTableName, allWriteDeleteRequests);
112
+ // Clean up S3 offloaded data
113
+ if (params.s3Offloader && s3KeysToDelete.length > 0) {
114
+ await params.s3Offloader.deleteBatch(s3KeysToDelete);
115
+ }
116
+ };
117
+ exports.deleteThreadAction = deleteThreadAction;
118
+ /**
119
+ * Fetch all writes for a single checkpoint, paginating through results.
120
+ * DynamoDB Query returns at most 1 MB per call — this loop ensures all writes are collected.
121
+ *
122
+ * @param client - DynamoDB Document client
123
+ * @param tableName - Writes table name
124
+ * @param checkpoint - Checkpoint metadata item
125
+ * @returns All write items for this checkpoint
126
+ */
127
+ async function queryAllWritesForCheckpoint(client, tableName, checkpoint) {
128
+ const allItems = [];
129
+ let lastKey;
130
+ do {
131
+ const result = await (0, shared_1.withDynamoDBRetry)(async () => {
132
+ return await client.query({
133
+ TableName: tableName,
74
134
  KeyConditionExpression: 'thread_id_checkpoint_id_checkpoint_ns = :pk',
75
135
  ExpressionAttributeValues: {
76
136
  ':pk': writer_1.Writer.getPartitionKey({
@@ -79,31 +139,14 @@ const deleteThreadAction = async (params) => {
79
139
  checkpoint_ns: checkpoint.checkpoint_ns,
80
140
  }),
81
141
  },
142
+ ExclusiveStartKey: lastKey,
82
143
  });
83
144
  });
84
- if (writes.Items && writes.Items.length > 0) {
85
- const deleteRequests = writes.Items.map((item) => ({
86
- DeleteRequest: {
87
- Key: {
88
- thread_id_checkpoint_id_checkpoint_ns: item.thread_id_checkpoint_id_checkpoint_ns,
89
- task_id_idx: item.task_id_idx,
90
- },
91
- },
92
- }));
93
- allWriteDeleteRequests.push(...deleteRequests);
145
+ if (result.Items) {
146
+ allItems.push(...result.Items);
94
147
  }
95
- }
96
- // Delete all writes in batches of 25
97
- for (let i = 0; i < allWriteDeleteRequests.length; i += 25) {
98
- const batch = allWriteDeleteRequests.slice(i, i + 25);
99
- await (0, shared_1.withDynamoDBRetry)(async () => {
100
- await params.client.batchWrite({
101
- RequestItems: {
102
- [params.writesTableName]: batch,
103
- },
104
- });
105
- });
106
- }
107
- };
108
- exports.deleteThreadAction = deleteThreadAction;
148
+ lastKey = result.LastEvaluatedKey;
149
+ } while (lastKey);
150
+ return allItems;
151
+ }
109
152
  //# sourceMappingURL=delete-thread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-thread.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete-thread.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  import type { CheckpointTuple } from '@langchain/langgraph-checkpoint';
2
- import { GetTupleActionParams } from '../types';
2
+ import { type GetTupleActionParams } from '../types';
3
3
  /**
4
4
  * Get a checkpoint tuple from DynamoDB
5
5
  *
6
+ * Fetches two items from the checkpoints table:
7
+ * 1. Metadata item (SK = checkpoint_id) — contains metadata, S3 refs, type
8
+ * 2. Payload item (SK = PAYLOAD#checkpoint_id) — contains the heavy checkpoint blob
9
+ *
10
+ * For backward compatibility, also handles legacy single-item format where the
11
+ * checkpoint blob is stored inline on the metadata item.
12
+ *
6
13
  * @param params - Parameters for the get tuple operation
7
14
  * @returns CheckpointTuple if found, undefined otherwise
8
15
  * @throws Error if operation fails
@@ -1 +1 @@
1
- {"version":3,"file":"get-tuple.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAI/F,OAAO,EAGL,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAIlB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,oBAAoB,KAC3B,OAAO,CAAC,eAAe,GAAG,SAAS,CAsErC,CAAC"}
1
+ {"version":3,"file":"get-tuple.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAG/F,OAAO,EAIL,KAAK,oBAAoB,EAG1B,MAAM,UAAU,CAAC;AAKlB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,oBAAoB,KAC3B,OAAO,CAAC,eAAe,GAAG,SAAS,CA4HrC,CAAC"}
@@ -1,13 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTupleAction = void 0;
4
- const writer_1 = require("./writer");
5
- const validate_configurable_1 = require("./validate-configurable");
6
- const utils_1 = require("../utils");
7
4
  const shared_1 = require("../../shared");
5
+ const types_1 = require("../types");
6
+ const utils_1 = require("../utils");
7
+ const validate_configurable_1 = require("./validate-configurable");
8
+ const writer_1 = require("./writer");
8
9
  /**
9
10
  * Get a checkpoint tuple from DynamoDB
10
11
  *
12
+ * Fetches two items from the checkpoints table:
13
+ * 1. Metadata item (SK = checkpoint_id) — contains metadata, S3 refs, type
14
+ * 2. Payload item (SK = PAYLOAD#checkpoint_id) — contains the heavy checkpoint blob
15
+ *
16
+ * For backward compatibility, also handles legacy single-item format where the
17
+ * checkpoint blob is stored inline on the metadata item.
18
+ *
11
19
  * @param params - Parameters for the get tuple operation
12
20
  * @returns CheckpointTuple if found, undefined otherwise
13
21
  * @throws Error if operation fails
@@ -30,9 +38,10 @@ const getTupleAction = async (params) => {
30
38
  const result = await (0, shared_1.withDynamoDBRetry)(async () => {
31
39
  return await params.client.query({
32
40
  TableName: params.checkpointsTableName,
33
- KeyConditionExpression: 'thread_id = :thread_id',
41
+ KeyConditionExpression: 'thread_id = :thread_id AND checkpoint_id < :payload_prefix',
34
42
  ExpressionAttributeValues: {
35
43
  ':thread_id': configurable.thread_id,
44
+ ':payload_prefix': types_1.PAYLOAD_SK_PREFIX,
36
45
  ...(configurable.checkpoint_ns && {
37
46
  ':checkpoint_ns': configurable.checkpoint_ns,
38
47
  }),
@@ -52,26 +61,69 @@ const getTupleAction = async (params) => {
52
61
  if (!item) {
53
62
  return undefined;
54
63
  }
55
- // Get pending writes for this checkpoint
56
- const writesResult = await (0, shared_1.withDynamoDBRetry)(async () => {
57
- return await params.client.query({
58
- TableName: params.writesTableName,
59
- KeyConditionExpression: 'thread_id_checkpoint_id_checkpoint_ns = :thread_id_checkpoint_id_checkpoint_ns',
60
- ExpressionAttributeValues: {
61
- ':thread_id_checkpoint_id_checkpoint_ns': writer_1.Writer.getPartitionKey(item),
62
- },
64
+ // Fetch the payload item (heavy checkpoint blob)
65
+ // Optimization: if checkpoint data is stored in S3, skip the payload fetch —
66
+ // deserializeCheckpointTuple will download the real data from S3.
67
+ let checkpointData;
68
+ if (item.s3_checkpoint_key) {
69
+ // S3 offloaded — real data will be fetched by deserializeCheckpointTuple
70
+ checkpointData = new Uint8Array(0);
71
+ }
72
+ else if (item.checkpoint && item.checkpoint.length > 0) {
73
+ // Legacy single-item format — checkpoint blob is inline
74
+ checkpointData = item.checkpoint;
75
+ }
76
+ else {
77
+ // New split format — fetch payload item separately
78
+ const payloadResult = await (0, shared_1.withDynamoDBRetry)(async () => {
79
+ return await params.client.get({
80
+ TableName: params.checkpointsTableName,
81
+ Key: {
82
+ thread_id: item.thread_id,
83
+ checkpoint_id: `${types_1.PAYLOAD_SK_PREFIX}${item.checkpoint_id}`,
84
+ },
85
+ });
86
+ });
87
+ const payloadItem = payloadResult.Item;
88
+ if (!payloadItem) {
89
+ throw new Error(`Checkpoint payload item not found for thread_id=${item.thread_id}, checkpoint_id=${item.checkpoint_id}`);
90
+ }
91
+ checkpointData = payloadItem.checkpoint;
92
+ }
93
+ // Get pending writes for this checkpoint (with pagination for large result sets)
94
+ const allWriteItems = [];
95
+ let writesLastEvaluatedKey;
96
+ do {
97
+ const writesResult = await (0, shared_1.withDynamoDBRetry)(async () => {
98
+ return await params.client.query({
99
+ TableName: params.writesTableName,
100
+ KeyConditionExpression: 'thread_id_checkpoint_id_checkpoint_ns = :thread_id_checkpoint_id_checkpoint_ns',
101
+ ExpressionAttributeValues: {
102
+ ':thread_id_checkpoint_id_checkpoint_ns': writer_1.Writer.getPartitionKey(item),
103
+ },
104
+ ExclusiveStartKey: writesLastEvaluatedKey,
105
+ });
63
106
  });
64
- });
107
+ if (writesResult.Items) {
108
+ allWriteItems.push(...writesResult.Items);
109
+ }
110
+ writesLastEvaluatedKey = writesResult.LastEvaluatedKey;
111
+ } while (writesLastEvaluatedKey);
65
112
  const pendingWrites = [];
66
- if (writesResult.Items) {
67
- for (const writeItem of writesResult.Items) {
68
- const write = writer_1.Writer.fromDynamoDBItem(writeItem);
69
- const value = await params.serde.loadsTyped(write.type, write.value);
70
- pendingWrites.push([write.task_id, write.channel, value]);
113
+ for (const writeItem of allWriteItems) {
114
+ const write = writer_1.Writer.fromDynamoDBItem(writeItem);
115
+ // Download from S3 if offloaded
116
+ let rawValue = write.value;
117
+ if (writeItem.s3_value_key && params.s3Offloader) {
118
+ rawValue = await params.s3Offloader.download(writeItem.s3_value_key);
71
119
  }
120
+ // Decompress write value if compressor is provided (auto-detects gzip)
121
+ const writeValue = params.compressor ? await params.compressor.decompress(rawValue) : rawValue;
122
+ const value = await params.serde.loadsTyped(write.type, writeValue);
123
+ pendingWrites.push([write.task_id, write.channel, value]);
72
124
  }
73
- // Get the base checkpoint tuple using a utility
74
- const checkpointTuple = await (0, utils_1.deserializeCheckpointTuple)(item, params.serde);
125
+ // Deserialize the checkpoint tuple from metadata item + payload data
126
+ const checkpointTuple = await (0, utils_1.deserializeCheckpointTuple)(item, checkpointData, params.serde, params.compressor, params.s3Offloader);
75
127
  // Add pending writes to the tuple
76
128
  return {
77
129
  ...checkpointTuple,
@@ -1 +1 @@
1
- {"version":3,"file":"get-tuple.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-tuple.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"put-writes.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAU,QAAQ,qBAAqB,KAAG,OAAO,CAAC,IAAI,CA2DjF,CAAC"}
1
+ {"version":3,"file":"put-writes.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAU,QAAQ,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAsEjF,CAAC"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.putWritesAction = void 0;
4
+ const shared_1 = require("../../shared");
5
+ const utils_1 = require("../utils");
4
6
  const validate_configurable_1 = require("./validate-configurable");
5
7
  const writer_1 = require("./writer");
6
- const utils_1 = require("../utils");
7
- const shared_1 = require("../../shared");
8
8
  /**
9
9
  * Save pending writes to DynamoDB
10
10
  *
@@ -21,7 +21,18 @@ const putWritesAction = async (params) => {
21
21
  (0, utils_1.validateTaskId)(params.taskId);
22
22
  (0, utils_1.validateTTLDays)(params.ttlDays);
23
23
  const writeItems = await Promise.all(params.writes.map(async (write, idx) => {
24
- const [type, serializedValue] = await params.serde.dumpsTyped(write[1]);
24
+ const [type, rawValue] = await params.serde.dumpsTyped(write[1]);
25
+ // Compress after serialization if compressor is provided
26
+ const serializedValue = params.compressor
27
+ ? await params.compressor.compress(rawValue)
28
+ : rawValue;
29
+ // S3 offloading for large write values
30
+ let s3ValueKey;
31
+ let storedValue = serializedValue;
32
+ if (params.s3Offloader && params.s3Offloader.shouldOffload(serializedValue)) {
33
+ s3ValueKey = await params.s3Offloader.upload(params.s3Offloader.buildKey(thread_id, checkpoint_id, `write-${idx}`), serializedValue);
34
+ storedValue = new Uint8Array(0); // Empty placeholder in DynamoDB
35
+ }
25
36
  const item = new writer_1.Writer({
26
37
  thread_id,
27
38
  checkpoint_ns,
@@ -30,34 +41,28 @@ const putWritesAction = async (params) => {
30
41
  idx,
31
42
  channel: write[0],
32
43
  type,
33
- value: serializedValue,
44
+ value: storedValue,
34
45
  });
35
46
  const dynamoItem = item.toDynamoDBItem();
36
- // FIX: Add TTL to the item that will actually be saved
37
- if (params.ttlDays !== undefined) {
47
+ // Add S3 reference if offloaded
48
+ if (s3ValueKey) {
49
+ dynamoItem.s3_value_key = s3ValueKey;
50
+ }
51
+ // Add TTL to the item that will actually be saved (ttlSeconds takes precedence)
52
+ if (params.ttlSeconds !== undefined) {
53
+ dynamoItem.ttl = (0, shared_1.calculateTTLTimestampFromSeconds)(params.ttlSeconds);
54
+ }
55
+ else if (params.ttlDays !== undefined) {
38
56
  dynamoItem.ttl = (0, shared_1.calculateTTLTimestamp)(params.ttlDays);
39
57
  }
40
58
  return {
41
59
  PutRequest: {
42
- Item: dynamoItem, // Use the same item with TTL
60
+ Item: dynamoItem,
43
61
  },
44
62
  };
45
63
  }));
46
- // Batch writes in groups of 25 (DynamoDB limit)
47
- const batches = [];
48
- for (let i = 0; i < writeItems.length; i += 25) {
49
- batches.push(writeItems.slice(i, i + 25));
50
- }
51
- // Execute batches with retry logic
52
- for (const batch of batches) {
53
- await (0, shared_1.withDynamoDBRetry)(async () => {
54
- await params.client.batchWrite({
55
- RequestItems: {
56
- [params.writesTableName]: batch,
57
- },
58
- });
59
- });
60
- }
64
+ // Batch writes using shared utility with retry logic
65
+ await (0, shared_1.batchWriteAllWithRetry)(params.client, params.writesTableName, writeItems);
61
66
  };
62
67
  exports.putWritesAction = putWritesAction;
63
68
  //# sourceMappingURL=put-writes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"put-writes.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,qCAAkC;AAElC,oCAAgF;AAChF,yCAAwE;AAExE;;;;;GAKG;AACI,MAAM,eAAe,GAAG,KAAK,EAAE,MAA6B,EAAiB,EAAE;IACpF,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAA,4CAAoB,EACtE,MAAM,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;IAEF,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,IAAA,2BAAmB,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAA,sBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAA,uBAAe,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,IAAI,eAAM,CAAC;YACtB,SAAS;YACT,aAAa;YACb,aAAa;YACb,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,GAAG;YACH,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,IAAI;YACJ,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,uDAAuD;QACvD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,UAAkB,CAAC,GAAG,GAAG,IAAA,8BAAqB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU,EAAE,6BAA6B;aAChD;SACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,gDAAgD;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAA,0BAAiB,EAAC,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC7B,YAAY,EAAE;oBACZ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK;iBAChC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AA3DW,QAAA,eAAe,mBA2D1B"}
1
+ {"version":3,"file":"put-writes.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":";;;AAAA,yCAIsB;AAEtB,oCAAgF;AAChF,mEAA+D;AAC/D,qCAAkC;AAElC;;;;;GAKG;AACI,MAAM,eAAe,GAAG,KAAK,EAAE,MAA6B,EAAiB,EAAE;IACpF,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAA,4CAAoB,EACtE,MAAM,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;IAEF,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,IAAA,2BAAmB,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAA,sBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAA,uBAAe,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,yDAAyD;QACzD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU;YACvC,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5C,CAAC,CAAC,QAAQ,CAAC;QAEb,uCAAuC;QACvC,IAAI,UAA8B,CAAC;QACnC,IAAI,WAAW,GAAe,eAAe,CAAC;QAE9C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5E,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAC1C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAc,EAAE,SAAS,GAAG,EAAE,CAAC,EACtE,eAAe,CAChB,CAAC;YACF,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;QACnE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,eAAM,CAAC;YACtB,SAAS;YACT,aAAa;YACb,aAAa;YACb,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,GAAG;YACH,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,IAAI;YACJ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,gCAAgC;QAChC,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC;QACvC,CAAC;QAED,gFAAgF;QAChF,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,CAAC,GAAG,GAAG,IAAA,yCAAgC,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACxC,UAAU,CAAC,GAAG,GAAG,IAAA,8BAAqB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,qDAAqD;IACrD,MAAM,IAAA,+BAAsB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAClF,CAAC,CAAC;AAtEW,QAAA,eAAe,mBAsE1B"}
@@ -1,7 +1,11 @@
1
1
  import type { RunnableConfig } from '@langchain/core/runnables';
2
- import { PutActionParams } from '../types';
2
+ import { type PutActionParams } from '../types';
3
3
  /**
4
- * Save a checkpoint to DynamoDB
4
+ * Save a checkpoint to DynamoDB as two items:
5
+ * 1. Metadata item (SK = checkpoint_id) — lightweight, queried by list()
6
+ * 2. Payload item (SK = PAYLOAD#checkpoint_id) — heavy blob, fetched only by getTuple()
7
+ *
8
+ * Both items are written atomically via transactWrite.
5
9
  *
6
10
  * @param params - Parameters for the put operation
7
11
  * @returns RunnableConfig with the saved checkpoint information
@@ -1 +1 @@
1
- {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAkB,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3D;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,eAAe,KAAG,OAAO,CAAC,cAAc,CA8C/E,CAAC"}
1
+ {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAOhE,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAIlB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,eAAe,KAAG,OAAO,CAAC,cAAc,CAkH/E,CAAC"}