async-durable-execution 2.3.0__tar.gz → 2.4.0__tar.gz

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 (67) hide show
  1. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/PKG-INFO +16 -6
  2. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/README.md +12 -4
  3. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/__about__.py +1 -1
  4. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/__init__.py +37 -1
  5. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/__init__.py +15 -0
  6. async_durable_execution-2.4.0/async_durable_execution/_core/aws_http.py +915 -0
  7. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/client.py +38 -47
  8. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/context.py +17 -2
  9. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/exceptions.py +10 -0
  10. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/models.py +28 -23
  11. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/serdes.py +220 -2
  12. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/parallel.py +14 -0
  13. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/wait_for_condition.py +47 -34
  14. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/base.py +50 -3
  15. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/callback.py +7 -0
  16. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/child.py +28 -10
  17. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/invoke.py +4 -0
  18. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/step.py +55 -11
  19. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/wait.py +3 -0
  20. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/cloud/__init__.py +125 -79
  21. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/model.py +8 -8
  22. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/model.py +33 -33
  23. async_durable_execution-2.4.0/async_durable_execution/filesystem_serdes.py +741 -0
  24. async_durable_execution-2.4.0/async_durable_execution/preview.py +181 -0
  25. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/pyproject.toml +7 -5
  26. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/.gitignore +0 -0
  27. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/LICENSE +0 -0
  28. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/NOTICE +0 -0
  29. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/.gitignore +0 -0
  30. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/config.py +0 -0
  31. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/execution.py +0 -0
  32. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/logger.py +0 -0
  33. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/state.py +0 -0
  34. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/task.py +0 -0
  35. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_extension/__init__.py +0 -0
  36. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/__init__.py +0 -0
  37. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/callback.py +0 -0
  38. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/child.py +0 -0
  39. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/flow.py +0 -0
  40. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/invoke.py +0 -0
  41. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/map.py +0 -0
  42. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/recurse.py +0 -0
  43. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/replay_safe.py +0 -0
  44. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/step.py +0 -0
  45. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/wait.py +0 -0
  46. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/wait_for_callback.py +0 -0
  47. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_operation/with_retry.py +0 -0
  48. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/__init__.py +0 -0
  49. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/__init__.py +0 -0
  50. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/exceptions.py +0 -0
  51. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/__init__.py +0 -0
  52. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/execution.py +0 -0
  53. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/executor.py +0 -0
  54. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processor.py +0 -0
  55. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/__init__.py +0 -0
  56. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/base.py +0 -0
  57. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/callback.py +0 -0
  58. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/context.py +0 -0
  59. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/execution.py +0 -0
  60. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/invoke.py +0 -0
  61. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/step.py +0 -0
  62. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/wait.py +0 -0
  63. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/scheduler.py +0 -0
  64. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/time_scale.py +0 -0
  65. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/py.typed +0 -0
  66. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/extension.py +0 -0
  67. {async_durable_execution-2.3.0 → async_durable_execution-2.4.0}/async_durable_execution/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: async-durable-execution
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: Community-maintained durable execution SDK for AWS Lambda in Python
5
5
  Project-URL: Documentation, https://github.com/zhongkechen/async-durable-execution#readme
6
6
  Project-URL: Issues, https://github.com/zhongkechen/async-durable-execution/issues
@@ -23,7 +23,9 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
23
23
  Requires-Python: >=3.10
24
24
  Requires-Dist: botocore<1.43.1,>=1.42.90
25
25
  Provides-Extra: aioboto
26
- Requires-Dist: aiobotocore; extra == 'aioboto'
26
+ Requires-Dist: httpx<1,>=0.28.1; extra == 'aioboto'
27
+ Provides-Extra: httpx
28
+ Requires-Dist: httpx<1,>=0.28.1; extra == 'httpx'
27
29
  Provides-Extra: typing
28
30
  Requires-Dist: botocore-stubs<1.43.0,>=1.42.40; extra == 'typing'
29
31
  Description-Content-Type: text/markdown
@@ -77,8 +79,9 @@ composition, and APIs designed for modern Python applications.
77
79
  - **[Declarative DAG workflows](https://zhongkechen.github.io/async-durable-execution/api/extension/flow.html#quick-start)** - Define acyclic workflows with typed node inputs, inferred or conditional dependencies, failure routes, and durable operations inside each node. The SDK validates the graph before execution and skips nodes that are not required by the selected outputs.
78
80
  - **[Background operation tasks](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#background-operation-tasks)** - Durable operations such as `step(...)`, `wait(...)`, `invoke(...)`, `recurse(...)`, `run_in_child_context(...)`, and `flow(...)` return `asyncio.Task` objects, so independent operations can run in the background and be awaited together with `asyncio.gather` without using `parallel()` or `map()`.
79
81
  - **[Pythonic operation parameters](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#api-mapping)** - Operations use direct keyword arguments, standard Python types such as `datetime.timedelta`, and keyword-only names instead of configuration wrapper objects.
82
+ - **[Composable SerDes pipelines](https://zhongkechen.github.io/async-durable-execution/serdes-pipelines.html)** - Chain async string transformations and offload large checkpoint payloads to EFS or S3 Files with bounded previews and validated immutable storage.
80
83
  - **[Integrated local and cloud runner](https://zhongkechen.github.io/async-durable-execution/api/runner.html)** - Runner functionality now ships through `async_durable_execution`, with separate local and cloud runner factories and typed test result helpers.
81
- - **[Async Lambda client support](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - Install the optional `aioboto` extra to use an async Lambda client; otherwise the SDK uses the bundled sync client through an async adapter.
84
+ - **[Model-free Lambda clients](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - The SDK owns its Lambda REST wire format instead of depending on botocore service models. Install the optional `httpx` extra to send requests with HTTPX; otherwise the same requests use botocore's synchronous HTTP transport through an async adapter.
82
85
  - **[Replay-aware logging with stdlib logging](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#logging)** - Standard `logging` loggers are enriched by durable context filtering so workflow logs remain replay safe.
83
86
  - **[Lambda layer packaging](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-layer-packaging)** - The repo includes tooling and workflows to build and publish an SDK Lambda layer for functions that do not vendor dependencies directly.
84
87
 
@@ -90,13 +93,20 @@ Install the execution SDK:
90
93
  pip install async-durable-execution
91
94
  ```
92
95
 
93
- For an async Lambda service client, install the optional `aioboto` extra:
96
+ For an async Lambda service client, install the optional `httpx` extra:
94
97
 
95
98
  ```console
96
- pip install "async-durable-execution[aioboto]"
99
+ pip install "async-durable-execution[httpx]"
97
100
  ```
98
101
 
99
- The `aioboto` extra installs `aiobotocore`, which lets the SDK create an async Lambda client for durable checkpoint and state APIs. Without it, the SDK uses the bundled `botocore` dependency through a threaded async adapter.
102
+ The `httpx` extra installs HTTPX, which the SDK uses for asynchronous
103
+ model-free Lambda REST calls. Without it, the SDK sends the same signed
104
+ requests with botocore's synchronous HTTP transport through a threaded async
105
+ adapter. Botocore continues to provide AWS credentials, endpoint metadata, and
106
+ SigV4 signing, but its generated Lambda service model is not used.
107
+
108
+ The previous `aioboto` extra remains available as a backward-compatible alias
109
+ for `httpx`.
100
110
 
101
111
  Create a durable Lambda handler:
102
112
 
@@ -47,8 +47,9 @@ composition, and APIs designed for modern Python applications.
47
47
  - **[Declarative DAG workflows](https://zhongkechen.github.io/async-durable-execution/api/extension/flow.html#quick-start)** - Define acyclic workflows with typed node inputs, inferred or conditional dependencies, failure routes, and durable operations inside each node. The SDK validates the graph before execution and skips nodes that are not required by the selected outputs.
48
48
  - **[Background operation tasks](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#background-operation-tasks)** - Durable operations such as `step(...)`, `wait(...)`, `invoke(...)`, `recurse(...)`, `run_in_child_context(...)`, and `flow(...)` return `asyncio.Task` objects, so independent operations can run in the background and be awaited together with `asyncio.gather` without using `parallel()` or `map()`.
49
49
  - **[Pythonic operation parameters](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#api-mapping)** - Operations use direct keyword arguments, standard Python types such as `datetime.timedelta`, and keyword-only names instead of configuration wrapper objects.
50
+ - **[Composable SerDes pipelines](https://zhongkechen.github.io/async-durable-execution/serdes-pipelines.html)** - Chain async string transformations and offload large checkpoint payloads to EFS or S3 Files with bounded previews and validated immutable storage.
50
51
  - **[Integrated local and cloud runner](https://zhongkechen.github.io/async-durable-execution/api/runner.html)** - Runner functionality now ships through `async_durable_execution`, with separate local and cloud runner factories and typed test result helpers.
51
- - **[Async Lambda client support](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - Install the optional `aioboto` extra to use an async Lambda client; otherwise the SDK uses the bundled sync client through an async adapter.
52
+ - **[Model-free Lambda clients](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - The SDK owns its Lambda REST wire format instead of depending on botocore service models. Install the optional `httpx` extra to send requests with HTTPX; otherwise the same requests use botocore's synchronous HTTP transport through an async adapter.
52
53
  - **[Replay-aware logging with stdlib logging](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#logging)** - Standard `logging` loggers are enriched by durable context filtering so workflow logs remain replay safe.
53
54
  - **[Lambda layer packaging](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-layer-packaging)** - The repo includes tooling and workflows to build and publish an SDK Lambda layer for functions that do not vendor dependencies directly.
54
55
 
@@ -60,13 +61,20 @@ Install the execution SDK:
60
61
  pip install async-durable-execution
61
62
  ```
62
63
 
63
- For an async Lambda service client, install the optional `aioboto` extra:
64
+ For an async Lambda service client, install the optional `httpx` extra:
64
65
 
65
66
  ```console
66
- pip install "async-durable-execution[aioboto]"
67
+ pip install "async-durable-execution[httpx]"
67
68
  ```
68
69
 
69
- The `aioboto` extra installs `aiobotocore`, which lets the SDK create an async Lambda client for durable checkpoint and state APIs. Without it, the SDK uses the bundled `botocore` dependency through a threaded async adapter.
70
+ The `httpx` extra installs HTTPX, which the SDK uses for asynchronous
71
+ model-free Lambda REST calls. Without it, the SDK sends the same signed
72
+ requests with botocore's synchronous HTTP transport through a threaded async
73
+ adapter. Botocore continues to provide AWS credentials, endpoint metadata, and
74
+ SigV4 signing, but its generated Lambda service model is not used.
75
+
76
+ The previous `aioboto` extra remains available as a backward-compatible alias
77
+ for `httpx`.
70
78
 
71
79
  Create a durable Lambda handler:
72
80
 
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
- __version__ = "2.3.0"
5
+ __version__ = "2.4.0"
@@ -6,6 +6,7 @@ from .__about__ import __version__
6
6
  # Core runtime and supporting public APIs
7
7
  from ._core import (
8
8
  CallableRuntimeError,
9
+ ComposableSerDes,
9
10
  DurableContext,
10
11
  DurableExecutionsError,
11
12
  DurableServiceClient,
@@ -22,17 +23,36 @@ from ._core import (
22
23
  OperationSubType,
23
24
  OperationType,
24
25
  RetryStrategy,
26
+ RetryableSerDesError,
25
27
  SerDes,
26
28
  SerDesContext,
27
29
  SerDesError,
30
+ SerDesPipelineError,
31
+ SerDesStage,
28
32
  UserlandError,
29
33
  ValidationError,
30
34
  create_default_sync_client,
35
+ create_serdes_pipeline,
31
36
  durable_callable,
32
37
  durable_execution,
33
38
  get_current_context,
34
39
  get_durable_context,
35
40
  get_serdes_context,
41
+ is_composable_serdes,
42
+ )
43
+ from .filesystem_serdes import (
44
+ FileSystemPathEncoding,
45
+ FileSystemSerDesMode,
46
+ FileSystemSerDesStage,
47
+ FileSystemSerDesStageConfig,
48
+ create_file_system_serdes_stage,
49
+ )
50
+ from .preview import (
51
+ FieldMatchMode,
52
+ PreviewConfig,
53
+ PreviewField,
54
+ PreviewMode,
55
+ build_preview,
36
56
  )
37
57
 
38
58
  # Durable operations
@@ -116,10 +136,13 @@ from ._runner import (
116
136
 
117
137
  __all__ = [
118
138
  "__version__",
139
+ "build_preview",
119
140
  "create_callback",
120
141
  "create_cloud_runner",
121
142
  "create_default_sync_client",
143
+ "create_file_system_serdes_stage",
122
144
  "create_local_runner",
145
+ "create_serdes_pipeline",
123
146
  "durable_callable",
124
147
  "durable_dag",
125
148
  "durable_execution",
@@ -136,6 +159,7 @@ __all__ = [
136
159
  "get_wait_for_condition_check_context",
137
160
  "get_with_retry_context",
138
161
  "invoke",
162
+ "is_composable_serdes",
139
163
  "map",
140
164
  "now",
141
165
  "node",
@@ -156,6 +180,7 @@ __all__ = [
156
180
  "Callback",
157
181
  "CallbackError",
158
182
  "CallableRuntimeError",
183
+ "ComposableSerDes",
159
184
  "CompletionConfig",
160
185
  "CompletionDecision",
161
186
  "CompletionReason",
@@ -174,6 +199,11 @@ __all__ = [
174
199
  "ExtensionStepResult",
175
200
  "ExtensionStepRetryStrategy",
176
201
  "ExtendedTypeSerDes",
202
+ "FieldMatchMode",
203
+ "FileSystemPathEncoding",
204
+ "FileSystemSerDesMode",
205
+ "FileSystemSerDesStage",
206
+ "FileSystemSerDesStageConfig",
177
207
  "FlowDefinitionError",
178
208
  "FlowExecutionError",
179
209
  "FlowNode",
@@ -192,10 +222,17 @@ __all__ = [
192
222
  "OperationStatus",
193
223
  "OperationSubType",
194
224
  "OperationType",
225
+ "PollingStrategy",
226
+ "PreviewConfig",
227
+ "PreviewField",
228
+ "PreviewMode",
195
229
  "RetryStrategy",
230
+ "RetryableSerDesError",
196
231
  "SerDes",
197
232
  "SerDesContext",
198
233
  "SerDesError",
234
+ "SerDesPipelineError",
235
+ "SerDesStage",
199
236
  "StepContext",
200
237
  "StepInterruptedError",
201
238
  "StepSemantics",
@@ -206,5 +243,4 @@ __all__ = [
206
243
  "WaitForConditionCheckContext",
207
244
  "WaitForConditionError",
208
245
  "WithRetryContext",
209
- "PollingStrategy",
210
246
  ]
@@ -3,7 +3,9 @@
3
3
  from .client import (
4
4
  DurableServiceClient,
5
5
  aioboto_is_installed,
6
+ create_default_async_client,
6
7
  create_default_sync_client,
8
+ httpx_is_installed,
7
9
  )
8
10
  from .config import (
9
11
  Duration,
@@ -31,6 +33,7 @@ from .exceptions import (
31
33
  InvalidStateError,
32
34
  InvocationError,
33
35
  OrphanedChildException,
36
+ RetryableSerDesError,
34
37
  SerDesError,
35
38
  SuspendExecution,
36
39
  TerminationReason,
@@ -51,6 +54,7 @@ from .execution import (
51
54
  durable_execution,
52
55
  )
53
56
  from .models import (
57
+ AwsApiModel,
54
58
  BotoSerializableModel,
55
59
  CallbackDetails,
56
60
  CallbackOptions,
@@ -83,16 +87,21 @@ from .models import (
83
87
  WaitOptions,
84
88
  )
85
89
  from .serdes import (
90
+ ComposableSerDes,
86
91
  DEFAULT_JSON_SERDES,
87
92
  EncodedValue,
88
93
  ExtendedTypeSerDes,
89
94
  JsonSerDes,
90
95
  PassThroughSerDes,
91
96
  SerDes,
97
+ SerDesPipelineError,
98
+ SerDesStage,
92
99
  TypeCodecExtension,
93
100
  TypeTag,
101
+ create_serdes_pipeline,
94
102
  deserialize,
95
103
  get_serdes_context,
104
+ is_composable_serdes,
96
105
  serialize,
97
106
  )
98
107
  from .state import RECURSIVE_LEVEL_INPUT_FIELD, ExecutionState
@@ -100,6 +109,7 @@ from .task import create_eager_task
100
109
 
101
110
  __all__ = [
102
111
  "CallableRuntimeError",
112
+ "ComposableSerDes",
103
113
  "DurableContext",
104
114
  "DurableExecutionsError",
105
115
  "DurableServiceClient",
@@ -116,15 +126,20 @@ __all__ = [
116
126
  "OperationSubType",
117
127
  "OperationType",
118
128
  "RetryStrategy",
129
+ "RetryableSerDesError",
119
130
  "SerDes",
120
131
  "SerDesContext",
121
132
  "SerDesError",
133
+ "SerDesPipelineError",
134
+ "SerDesStage",
122
135
  "UserlandError",
123
136
  "ValidationError",
124
137
  "create_default_sync_client",
138
+ "create_serdes_pipeline",
125
139
  "durable_callable",
126
140
  "durable_execution",
127
141
  "get_current_context",
128
142
  "get_durable_context",
129
143
  "get_serdes_context",
144
+ "is_composable_serdes",
130
145
  ]