feat: add google adk plugins#1282
Draft
marcusmotill wants to merge 20 commits intotemporalio:mainfrom
Draft
Conversation
tconley1428
reviewed
Jan 20, 2026
tconley1428
reviewed
Jan 20, 2026
tconley1428
reviewed
Jan 20, 2026
tconley1428
reviewed
Jan 20, 2026
tconley1428
reviewed
Jan 20, 2026
9 tasks
copybara-service bot
pushed a commit
to google/adk-python
that referenced
this pull request
Mar 6, 2026
Merge #4200 **Problem:** The current implementation of `SessionService`, `Event`, and other core components relies directly on `time.time()` and `uuid.uuid4()`. These standard library functions are non-deterministic, which prevents the ADK from being used in deterministic execution environments (like Temporal workflows). In such environments, logic that depends on time or random IDs must be replayable and consistent across executions. **Solution:** Introduced `google.adk.platform.time` and `google.adk.platform.uuid` modules to abstract time and UUID generation. - Created `google.adk.platform.time` with `get_time()` and `set_time_provider()`. - Created `google.adk.platform.uuid` with `new_uuid()` and `set_id_provider()`. - Updated `Event`, `SessionService`, `InvocationContext`, and `SqliteSessionService` to use these new platform abstractions instead of `time` and `uuid` directly. This allows runtimes to inject deterministic providers (e.g., Temporal's `workflow.now()` and side-effect-safe UUIDs) when running in a deterministic context, while defaulting to standard `time` and `uuid` for standard execution. ### Testing Plan **Unit Tests:** - [x] I have added or updated unit tests for my change. - [x] All unit tests pass locally. Added new unit tests for the platform modules: - [tests/unittests/platform/test_time.py](cci:7://file:///usr/local/google/home/marcusmotill/Documents/code/temporal/adk-python-temporal/tests/unittests/platform/test_time.py:0:0-0:0): Verifies `get_time`, provider overriding, and resetting. - [tests/unittests/platform/test_uuid.py](cci:7://file:///usr/local/google/home/marcusmotill/Documents/code/temporal/adk-python-temporal/tests/unittests/platform/test_uuid.py:0:0-0:0): Verifies `new_uuid`, provider overriding, and resetting. - Updated [tests/unittests/artifacts/test_artifact_service.py](cci:7://file:///usr/local/google/home/marcusmotill/Documents/code/temporal/adk-python-temporal/tests/unittests/artifacts/test_artifact_service.py:0:0-0:0) to match the new patterns. **Manual End-to-End (E2E) Tests:** Verified that the ADK continues to function correctly in standard (non-deterministic) environments, ensuring the default providers for time and UUIDs work as expected. - Ran existing agent workflows to confirm session creation and event logging still produce valid timestamps and IDs. ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [x] Any dependent changes have been merged and published in downstream modules. ### Additional context These changes are a prerequisite for the [Temporal integration](temporalio/sdk-python#1282), allowing the ADK to run safely inside Temporal workflows without breaking determinism guarantees. COPYBARA_INTEGRATE_REVIEW=#4200 from marcusmotill:motill/durable-support 61d0e31 PiperOrigin-RevId: 879662233
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Google ADK Agents SDK Integration for Temporal
This package provides the integration layer between the Google ADK and Temporal. It allows ADK Agents to run reliably within Temporal Workflows by ensuring determinism and correctly routing external calls (network I/O) through Temporal Activities.
What's Included
Core ADK Integration
AdkAgentPlugin: Intercepts model calls and executes them as Temporal activitiesTemporalAdkPlugin: Worker plugin that configures runtime determinism and Pydantic serializationinvoke_model: Activity for executing LLM model calls with proper error handlingMCP (Model Context Protocol) Integration
TemporalMcpToolSet: Executes MCP tools as Temporal activitiesTemporalMcpToolSetProvider: Manages toolset creation and activity registrationOpenTelemetry Integration
Key Features
1. Deterministic Runtime
time.time()withworkflow.now()when in workflow contextuuid.uuid4()withworkflow.uuid4()for deterministic IDsTemporalAdkPlugin2. Activity-Based Model Execution
Model calls are intercepted and executed as Temporal activities with configurable:
3. Sandbox Compatibility
google.adk,google.genai, andmcpmodules4. Advanced Serialization
Usage
Basic Setup
Agent (Workflow) Side:
Worker Side:
Advanced Features
With MCP Tools:
With OpenTelemetry:
Integration Points
This integration provides comprehensive support for running Google ADK Agents within Temporal workflows while maintaining: