feat: Introduce custom_metadata field to run_config and propagate a2a request metadata to that field

PiperOrigin-RevId: 823066539
This commit is contained in:
Google Team Member
2025-10-23 09:13:35 -07:00
committed by Copybara-Service
parent 955632ce2c
commit ba631764a5
3 changed files with 18 additions and 1 deletions
@@ -106,6 +106,10 @@ def convert_a2a_request_to_agent_run_request(
if not request.message:
raise ValueError('Request message cannot be None')
custom_metadata = {}
if request.metadata:
custom_metadata['a2a_metadata'] = request.metadata
return AgentRunRequest(
user_id=_get_user_id(request),
session_id=request.context_id,
@@ -113,5 +117,5 @@ def convert_a2a_request_to_agent_run_request(
role='user',
parts=[part_converter(part) for part in request.message.parts],
),
run_config=RunConfig(),
run_config=RunConfig(custom_metadata=custom_metadata),
)
+4
View File
@@ -17,6 +17,7 @@ from __future__ import annotations
from enum import Enum
import logging
import sys
from typing import Any
from typing import Optional
from google.genai import types
@@ -118,6 +119,9 @@ class RunConfig(BaseModel):
- Less than or equal to 0: This allows for unbounded number of llm calls.
"""
custom_metadata: Optional[dict[str, Any]] = None
"""Custom metadata for the current invocation."""
@field_validator('max_llm_calls', mode='after')
@classmethod
def validate_max_llm_calls(cls, value: int) -> int:
@@ -165,6 +165,7 @@ class TestConvertA2aRequestToAgentRunRequest:
request.message = mock_message
request.context_id = "test_context_123"
request.call_context = mock_call_context
request.metadata = {"test_key": "test_value"}
# Create proper genai_types.Part objects instead of mocks
mock_genai_part1 = genai_types.Part(text="test part 1")
@@ -185,6 +186,9 @@ class TestConvertA2aRequestToAgentRunRequest:
assert result.new_message.role == "user"
assert result.new_message.parts == [mock_genai_part1, mock_genai_part2]
assert isinstance(result.run_config, RunConfig)
assert result.run_config.custom_metadata == {
"a2a_metadata": {"test_key": "test_value"}
}
# Verify calls
assert mock_convert_part.call_count == 2
@@ -212,6 +216,7 @@ class TestConvertA2aRequestToAgentRunRequest:
request.message = mock_message
request.context_id = "test_context_123"
request.call_context = None
request.metadata = {}
# Act
result = convert_a2a_request_to_agent_run_request(
@@ -241,6 +246,7 @@ class TestConvertA2aRequestToAgentRunRequest:
request.message = mock_message
request.context_id = None
request.call_context = None
request.metadata = {}
# Create proper genai_types.Part object instead of mock
mock_genai_part = genai_types.Part(text="test part")
@@ -272,6 +278,7 @@ class TestConvertA2aRequestToAgentRunRequest:
request.message = mock_message
request.context_id = "session_123"
request.call_context = None
request.metadata = {}
# Create proper genai_types.Part object instead of mock
mock_genai_part = genai_types.Part(text="test part")
@@ -313,6 +320,7 @@ class TestIntegration:
request.call_context = mock_call_context
request.message = mock_message
request.context_id = "mysession"
request.metadata = {}
# Create proper genai_types.Part object instead of mock
mock_genai_part = genai_types.Part(text="test part")
@@ -344,6 +352,7 @@ class TestIntegration:
request.call_context = None
request.message = mock_message
request.context_id = "test_session_456"
request.metadata = {}
# Create proper genai_types.Part object instead of mock
mock_genai_part = genai_types.Part(text="test part")