github temporalio/sdk-python 1.34.0

2 hours ago

Notable Changes

Added

  • Added WorkflowAlreadyStartedError.first_run_id for the first execution run
    ID when provided by the server.

  • Experimental: temporalio.contrib.google_adk_agents now supports ADK v2
    graph workflows, dynamic @node workflows, and durable HITL.

  • Experimental: Experimental support for Event Groups. Event Groups is a new form of
    Workflow-level metadata that allows for improved visibility into a Workflow execution's history
    by grouping logically related Events together based on user-defined or system-inferred criteria.
    workflow.create_event_group(...) takes the Event Group's ID as its first and only required
    argument; the user-provided ID is used verbatim and should not contain sensitive information.
    The label is optional and passed as a keyword argument; it is a codec-encoded Payload.

  • Added workflow.Info.original_execution_run_id, the run ID recorded on the workflow
    execution started event. Unlike run_id, this value is preserved across workflow resets.

  • Experimental: temporalio.contrib.strands now supports durable,
    Workflow-isolated Strands sandboxes through TemporalSandbox and
    worker-side factories registered with StrandsPlugin(sandboxes=...).

  • Added the temporalio.contrib.gcp.cloud_run.id module with the CloudRunIdPlugin client plugin to set the worker identity on Cloud Run.

Changed

  • The deepagents extra now requires deepagents>=0.7,<0.8 (was <0.7). Because
    deepagents 0.7 requires langsmith>=0.10.9, the langsmith extra now allows
    langsmith<0.13 (was <0.9).

💥 Breaking Changes

  • The google-adk extra now requires google-adk>=2.8.0,<3, up from >=2.2.0.
  • temporalio.contrib.google_adk_agents: ADK-generated ids and retry jitter now draw from the
    workflow's deterministic random stream. A workflow started under an earlier release that calls
    workflow.random() or workflow.uuid4() after ADK code may not replay deterministically
    across the upgrade; drain such workflows or use worker versioning.

Fixed

  • temporalio.contrib.deepagents now preserves model binding options such as
    response_format and tool_choice when tools are also bound.

  • Workflow handles returned when a start attaches to a running workflow now use
    the server-provided first execution run ID with Temporal Server 1.32.0 or
    later.

  • Restore frozenset values when decoding JSON payloads with a frozenset type hint,
    including nested frozen sets.

  • Ordinary absolute imports of already-loaded modules in sandboxed workflows no longer go through
    importlib's module locks, fixing intermittent Failed validating workflow errors on Python 3.10
    caused by a KeyError in importlib._bootstrap._ModuleLock.acquire when a garbage-collection
    finalizer imported warnings during a workflow load
    (#585).

  • temporalio.contrib.deepagents.TemporalBackend is fixed for deepagents 0.7 compatibility
    (e.g., adding delete / adelete).

  • temporalio.contrib.deepagents.TemporalBackend now forwards the per-command timeout of
    deepagents' execute tool for a wrapped sandbox backend such as LocalShellBackend.

  • GoogleAdkPlugin now passes the optional anthropic, litellm, and openai SDKs through
    the workflow sandbox.

  • GoogleAdkPlugin now passes OpenTelemetry modules through the workflow sandbox so ADK 2.9
    graph workflows can load their context support during execution.

  • contrib.deepagents: prevent duplicate input messages after continue-as-new.

  • DataConverter.payload_converter and current workflow and activity payload converter accessors
    now return the configured converter without SDK-internal transfer type conversion.

  • Restore pickling of Pydantic data converters, preserving the type adapter cache
    size limit while excluding cached adapters.

  • Current workflow and activity payload converter accessors now return the configured converter
    without SDK-internal transfer type conversion.

  • A Nexus operation's user metadata is now serialized with NexusSerializationContext, the same way
    workflow and activity user metadata are serialized with theirs. This covers the static summary
    sent when starting an operation, and the summary and details read back from a description.

SDK Core

info: syncing channel updates for 1.94-x86_64-unknown-linux-gnu
info: latest update on 2026-03-26 for version 1.94.1 (e408947bf 2026-03-25)
info: downloading 5 components
warn: the missing active toolchain 1.94-x86_64-unknown-linux-gnu has been auto-installed
warn: this might cause rustup commands to take longer time to finish than expected
info: you may opt out with RUSTUP_AUTO_INSTALL=0 or rustup set auto-install disable

Changelog

Added

  • External workflow signal and cancellation resolution activations now include the typed server
    failure cause alongside the existing failure.

Fixed

  • Task-poll targets no longer decrease after cancelled or timed-out polls. Affected pollers still
    retain their slot during backoff, while resource-exhaustion errors still reduce the target.
  • Replay now preserves which local activity results were delivered together for newly recorded
    histories. This prevents local activity scheduling which was conditional on local activity
    resolution order from assigning recorded results to different handles. Older markers keep their
    existing behavior.
  • Workflow poll balancing now lets non-sticky pollers use capacity after sticky pollers reach their
    configured or autoscaled polling limit.
  • Every path that fails a workflow task now only reports the failure to server
    on the task's first attempt, and later attempts are left to time out. Previously PayloadsTooLarge
    failures and history fetch failures were re-reported on every attempt.
  • The workflow_task_execution_failed metric is now recorded for every failed workflow task
    attempt, including attempts whose failure was not sent to the server, and its failure_reason
    tag distinguishes GrpcMessageTooLarge, PayloadsTooLarge, and RequestTooLarge on every path.

Commits

What's Changed

New Contributors

Full Changelog: 1.31.0...1.34.0

Don't miss a new sdk-python release

NewReleases is sending notifications on new releases.