Skip to content

Commit 12b7db8

Browse files
committed
Merge main into the Workflow Streams retry fix
Signed-off-by: 1fanwang <1fannnw@gmail.com>
2 parents 1df426b + eb642b1 commit 12b7db8

101 files changed

Lines changed: 12769 additions & 995 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/scripts/release_verify.py‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,6 @@ def _sdk_core_changelog_entries(
271271
"run",
272272
"--quiet",
273273
"-p",
274-
"temporalio-sdk-core",
275-
"--bin",
276274
"changelog-release-notes",
277275
"--",
278276
"--from",

‎CHANGELOG.md‎

Lines changed: 81 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,84 @@ to include examples, links to docs, or any other relevant information.
2020

2121
### Added
2222

23+
- **Experimental**: `temporalio.contrib.google_adk_agents` now supports ADK v2
24+
graph workflows, dynamic `@node` workflows, and durable HITL.
25+
- **Experimental**: Experimental support for _Event Groups_. **Event Groups** is a new form of
26+
Workflow-level metadata that allows for improved visibility into a Workflow execution's history
27+
by grouping logically related Events together based on user-defined or system-inferred criteria.
28+
`workflow.create_event_group(...)` takes the Event Group's ID as its first and only required
29+
argument; the user-provided ID is used verbatim and should not contain sensitive information.
30+
The label is optional and passed as a keyword argument; it is a codec-encoded Payload.
31+
32+
- Added `workflow.Info.original_execution_run_id`, the run ID recorded on the workflow
33+
execution started event. Unlike `run_id`, this value is preserved across workflow resets.
34+
35+
- **Experimental**: `temporalio.contrib.strands` now supports durable,
36+
Workflow-isolated Strands sandboxes through `TemporalSandbox` and
37+
worker-side factories registered with `StrandsPlugin(sandboxes=...)`.
38+
39+
- Added the `temporalio.contrib.gcp.cloud_run.id` module with the `CloudRunIdPlugin` client plugin to set the worker identity on Cloud Run.
40+
41+
### Changed
42+
43+
### Deprecated
44+
45+
### :boom: Breaking Changes
46+
47+
- The `google-adk` extra now requires `google-adk>=2.8.0,<3`, up from `>=2.2.0`.
48+
- `temporalio.contrib.google_adk_agents`: ADK-generated ids and retry jitter now draw from the
49+
workflow's deterministic random stream. A workflow started under an earlier release that calls
50+
`workflow.random()` or `workflow.uuid4()` after ADK code may not replay deterministically
51+
across the upgrade; drain such workflows or use worker versioning.
52+
53+
### Fixed
54+
55+
- Experimental Workflow Streams background publishing now retries transient
56+
signal delivery failures without delaying payload conversion errors.
57+
- `GoogleAdkPlugin` now passes the optional `anthropic`, `litellm`, and `openai` SDKs through
58+
the workflow sandbox.
59+
- `contrib.deepagents`: prevent duplicate input messages after continue-as-new.
60+
- `DataConverter.payload_converter` and current workflow and activity payload converter accessors
61+
now return the configured converter without SDK-internal transfer type conversion.
62+
- Restore pickling of Pydantic data converters, preserving the type adapter cache
63+
size limit while excluding cached adapters.
64+
- Current workflow and activity payload converter accessors now return the configured converter
65+
without SDK-internal transfer type conversion.
66+
- A Nexus operation's user metadata is now serialized with `NexusSerializationContext`, the same way
67+
workflow and activity user metadata are serialized with theirs. This covers the static summary
68+
sent when starting an operation, and the summary and details read back from a description.
69+
70+
### Security
71+
72+
## [1.33.0] - 2026-09-14
73+
74+
### Added
75+
76+
#### Standalone Activity operator commands
77+
78+
- `ActivityHandle` now supports operator commands for standalone activities: `pause`,
79+
`unpause`, `update_options` and `restore_original_options`.
2380
- Added GCP Cloud Run serverless-worker OpenTelemetry plugin in `temporalio.contrib.opentelemetry`.
2481
- Added new options to ActivityHandle.describe() to retrieve associated payloads, such as activity input and outcome.
2582
- New properties and methods in ActivityExecution and ActivityExecutionDescription.
83+
- Added experimental `temporalio.converter.NexusSerializationContext` support for Nexus callers
84+
and handlers. Callers use it for inputs, results, and failures; handlers use it for inputs,
85+
synchronous results, and failures. Asynchronous handler results and detached standalone handles
86+
are not yet supported. Standalone `USE_EXISTING` handles use their start request's context.
2687

2788
### Changed
2889

90+
- Standalone Activities are now generally available (GA). (Standalone Activities as Nexus operations
91+
and Standalone Activities operator commands remain experimental. Operator commands are `pause`,
92+
`unpause`, `updateOptions`, `restoreOriginal`.)
2993
- System Nexus Signal-with-Start Workflow operations now use the typed
3094
`WorkflowOutboundInterceptor.start_signal_with_start_workflow` interception point instead of
3195
the generic `WorkflowOutboundInterceptor.start_nexus_operation` method.
3296
- System Nexus Signal-with-Start Workflow operations now invoke
3397
`WorkflowOutboundInterceptor.start_system_nexus_operation` after their typed interception
3498
point. They continue not to invoke `WorkflowOutboundInterceptor.start_nexus_operation`.
35-
36-
### Deprecated
99+
- The experimental `GetNexusOperationResultInput` now includes the Nexus endpoint, service, and
100+
operation.
37101

38102
### :boom: Breaking Changes
39103

@@ -52,8 +116,21 @@ to include examples, links to docs, or any other relevant information.
52116

53117
### Fixed
54118

55-
- Experimental Workflow Streams background publishing now retries transient
56-
signal delivery failures without delaying payload conversion errors.
119+
- `temporalio.contrib.google_genai` now requires `google-genai` 2.21.0 or later
120+
and supports its file download API, including video inputs and download
121+
destinations.
122+
- `temporalio.contrib.deepagents` no longer dedups repeated identical tool,
123+
model, and backend-op calls: each dispatch runs its own Activity, and the
124+
continue-as-new result cache is retired for new executions (a continued run
125+
resumes from the carried transcript and never re-executes prior dispatches,
126+
so a carried cache entry could only serve stale results). Patch-gated
127+
(`deepagents.retire-result-cache`), so histories recorded before this change
128+
replay unchanged; note that deferring the patch keeps the full legacy dedup
129+
cache — including the stale-result behavior this entry describes — and that
130+
a chain upgraded mid-continue-as-new re-executes rather than reuses a
131+
repeated identical call (the conservative direction).
132+
- `contrib.deepagents`: summarization middleware configured with a model name string now routes its LLM calls through Activities instead of running them in the Workflow.
133+
57134
- **Experimental**: External storage metrics now report the wall-clock time storage was in flight.
58135
Previously each batch's duration was summed, over-reporting the time whenever storage operations
59136
ran concurrently.
@@ -73,8 +150,6 @@ to include examples, links to docs, or any other relevant information.
73150
or callbacks to attach.
74151
- The workflow sandbox now passes `pydantic_core` through by default, alongside `pydantic`.
75152

76-
### Security
77-
78153
## [1.32.0] - 2026-08-24
79154

80155
### Added

‎pyproject.toml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "temporalio"
3-
version = "1.32.0"
3+
version = "1.33.0"
44
description = "Temporal.io Python SDK"
55
authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }]
66
requires-python = ">=3.10"
@@ -29,7 +29,7 @@ grpc = ["grpcio>=1.48.2,<2"]
2929
opentelemetry = ["opentelemetry-api>=1.26,<2", "opentelemetry-sdk>=1.26,<2"]
3030
pydantic = ["pydantic>=2.0.0,<3"]
3131
openai-agents = ["openai-agents>=0.19.2,<0.20", "mcp>=1.9.4, <2"]
32-
google-adk = ["google-adk>=2.2.0,<3", "mcp>=1.24,<2"]
32+
google-adk = ["google-adk>=2.8.0,<3", "mcp>=1.24,<2"]
3333
langgraph = ["langgraph>=1.1.0"]
3434
langsmith = ["langsmith>=0.7.34,<0.9"]
3535
deepagents = [
@@ -55,8 +55,8 @@ cloud-run-worker-otel = [
5555
"protobuf<7",
5656
]
5757
aioboto3 = ["aioboto3>=10.4.0", "types-aioboto3[s3]>=10.4.0"]
58-
google-genai = ["google-genai>=2.10.0,<3.0.0"]
59-
strands-agents = ["strands-agents>=1.39.0"]
58+
google-genai = ["google-genai>=2.21.0,<3.0.0"]
59+
strands-agents = ["strands-agents>=1.51.0"]
6060

6161
[project.urls]
6262
Homepage = "https://github.com/temporalio/sdk-python"
@@ -107,7 +107,7 @@ dev = [
107107
"opentelemetry-sdk-extension-aws>=2.0.0,<3",
108108
"pytest-flakefinder>=1.1.0",
109109
"async-timeout>=4.0,<6; python_version < '3.11'",
110-
"strands-agents>=1.39.0",
110+
"strands-agents>=1.51.0",
111111
"strands-agents-tools>=0.5.2",
112112
"mcp>=1.9.4,<2",
113113
]

‎temporalio/activity.py‎

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -241,13 +241,9 @@ def payload_converter(self) -> temporalio.converter.PayloadConverter:
241241
self.payload_converter_class_or_instance,
242242
temporalio.converter.PayloadConverter,
243243
):
244-
self._payload_converter = _TemporalTransferTypePayloadConverter.wrap(
245-
self.payload_converter_class_or_instance
246-
)
244+
self._payload_converter = self.payload_converter_class_or_instance
247245
else:
248-
self._payload_converter = _TemporalTransferTypePayloadConverter.wrap(
249-
self.payload_converter_class_or_instance()
250-
)
246+
self._payload_converter = self.payload_converter_class_or_instance()
251247
return self._payload_converter
252248

253249
@property
@@ -462,7 +458,9 @@ def payload_converter() -> temporalio.converter.PayloadConverter:
462458
The returned converter has :py:class:`temporalio.converter.ActivitySerializationContext` set.
463459
This is often used for dynamic activities to convert payloads.
464460
"""
465-
return _Context.current().payload_converter
461+
return _TemporalTransferTypePayloadConverter.unwrap(
462+
_Context.current().payload_converter
463+
)
466464

467465

468466
def metric_meter() -> temporalio.common.MetricMeter:

‎temporalio/client/__init__.py‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,12 @@
5151
ActivityExecutionCount,
5252
ActivityExecutionCountAggregationGroup,
5353
ActivityExecutionDescription,
54+
ActivityExecutionOptions,
5455
ActivityExecutionStatus,
5556
ActivityHandle,
57+
ActivityOptionsKey,
58+
ActivityOptionsKeys,
59+
ActivityOptionsUpdate,
5660
AsyncActivityHandle,
5761
AsyncActivityIDReference,
5862
PendingActivityState,
@@ -117,6 +121,7 @@
117121
ListSchedulesInput,
118122
ListWorkflowsInput,
119123
OutboundInterceptor,
124+
PauseActivityInput,
120125
PauseScheduleInput,
121126
QueryWorkflowInput,
122127
ReportCancellationAsyncActivityInput,
@@ -130,7 +135,9 @@
130135
TerminateNexusOperationInput,
131136
TerminateWorkflowInput,
132137
TriggerScheduleInput,
138+
UnpauseActivityInput,
133139
UnpauseScheduleInput,
140+
UpdateActivityOptionsInput,
134141
UpdateScheduleInput,
135142
UpdateWithStartStartWorkflowInput,
136143
UpdateWithStartUpdateWorkflowInput,
@@ -227,6 +234,10 @@
227234
"ActivityExecutionAsyncIterator",
228235
"ActivityExecution",
229236
"ActivityExecutionDescription",
237+
"ActivityExecutionOptions",
238+
"ActivityOptionsKey",
239+
"ActivityOptionsKeys",
240+
"ActivityOptionsUpdate",
230241
"ActivityExecutionStatus",
231242
"PendingActivityState",
232243
"ActivityExecutionCount",
@@ -292,6 +303,9 @@
292303
"CancelActivityInput",
293304
"TerminateActivityInput",
294305
"DescribeActivityInput",
306+
"PauseActivityInput",
307+
"UpdateActivityOptionsInput",
308+
"UnpauseActivityInput",
295309
"ListActivitiesInput",
296310
"CountActivitiesInput",
297311
"StartNexusOperationInput",

0 commit comments

Comments
 (0)