diff --git a/src/google/adk/a2a/converters/request_converter.py b/src/google/adk/a2a/converters/request_converter.py index 78a6d78eee..6ba812d359 100644 --- a/src/google/adk/a2a/converters/request_converter.py +++ b/src/google/adk/a2a/converters/request_converter.py @@ -57,6 +57,7 @@ def convert_a2a_request_to_adk_run_args( if not request.message: raise ValueError('Request message cannot be None') + metadata = getattr(request, 'metadata', None) return { 'user_id': _get_user_id(request), 'session_id': request.context_id, @@ -64,5 +65,5 @@ def convert_a2a_request_to_adk_run_args( role='user', parts=[part_converter(part) for part in request.message.parts], ), - 'run_config': RunConfig(), + 'run_config': RunConfig(metadata=metadata), } diff --git a/src/google/adk/agents/invocation_context.py b/src/google/adk/agents/invocation_context.py index 66ecbaf4a9..7845c91929 100644 --- a/src/google/adk/agents/invocation_context.py +++ b/src/google/adk/agents/invocation_context.py @@ -202,6 +202,9 @@ class InvocationContext(BaseModel): plugin_manager: PluginManager = Field(default_factory=PluginManager) """The manager for keeping track of plugins in this invocation.""" + a2a_metadata: Optional[dict[str, Any]] = None + """The metadata of the A2A request.""" + _invocation_cost_manager: _InvocationCostManager = PrivateAttr( default_factory=_InvocationCostManager ) diff --git a/src/google/adk/agents/run_config.py b/src/google/adk/agents/run_config.py index 9fe82fabf1..fedfbd230a 100644 --- a/src/google/adk/agents/run_config.py +++ b/src/google/adk/agents/run_config.py @@ -17,6 +17,7 @@ from enum import Enum import logging import sys +from typing import Any from typing import Optional from google.genai import types @@ -42,6 +43,9 @@ class RunConfig(BaseModel): ) """The pydantic model config.""" + metadata: Optional[dict[str, Any]] = None + """The metadata of the run.""" + speech_config: Optional[types.SpeechConfig] = None """Speech configuration for the live agent.""" diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index e7066a0c48..157c9a1772 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -848,6 +848,7 @@ def _new_invocation_context( live_request_queue=live_request_queue, run_config=run_config, resumability_config=self.resumability_config, + a2a_metadata=run_config.metadata, ) def _new_invocation_context_for_live(