|
23 | 23 | from a2a.types import TaskStatusUpdateEvent |
24 | 24 | from google.adk.a2a.converters.from_adk_event import convert_event_to_a2a_events |
25 | 25 | from google.adk.a2a.converters.from_adk_event import create_error_status_event |
| 26 | +from google.adk.a2a.converters.to_adk_event import _parse_adk_metadata_value |
26 | 27 | from google.adk.a2a.converters.to_adk_event import convert_a2a_artifact_update_to_event |
27 | 28 | from google.adk.a2a.converters.to_adk_event import convert_a2a_status_update_to_event |
| 29 | +from google.adk.a2a.converters.utils import _get_adk_metadata_key |
28 | 30 | from google.adk.agents.invocation_context import InvocationContext |
29 | 31 | from google.adk.events.event import Event |
30 | 32 | from google.genai import types as genai_types |
@@ -206,3 +208,43 @@ def test_round_trip_function_response_event(): |
206 | 208 | assert restored_event.content.parts[0].function_response.response == { |
207 | 209 | "result": "success" |
208 | 210 | } |
| 211 | + |
| 212 | + |
| 213 | +def test_round_trip_custom_metadata_preserves_structured_values(): |
| 214 | + original_custom_metadata = { |
| 215 | + "flag": True, |
| 216 | + "count": 42, |
| 217 | + "nested": {"key": "val"}, |
| 218 | + "tags": ["a", "b"], |
| 219 | + } |
| 220 | + original_event = Event( |
| 221 | + invocation_id="test_invocation", |
| 222 | + author="test_agent", |
| 223 | + branch="main", |
| 224 | + content=genai_types.Content( |
| 225 | + role="model", |
| 226 | + parts=[genai_types.Part.from_text(text="Hello world!")], |
| 227 | + ), |
| 228 | + custom_metadata=original_custom_metadata, |
| 229 | + ) |
| 230 | + agents_artifacts: Dict[str, str] = {} |
| 231 | + |
| 232 | + a2a_events = convert_event_to_a2a_events( |
| 233 | + event=original_event, |
| 234 | + agents_artifacts=agents_artifacts, |
| 235 | + task_id="task1", |
| 236 | + context_id="context1", |
| 237 | + ) |
| 238 | + |
| 239 | + assert len(a2a_events) == 1 |
| 240 | + a2a_event = a2a_events[0] |
| 241 | + assert isinstance(a2a_event, TaskArtifactUpdateEvent) |
| 242 | + |
| 243 | + serialized_metadata = a2a_event.artifact.metadata[ |
| 244 | + _get_adk_metadata_key("custom_metadata") |
| 245 | + ] |
| 246 | + |
| 247 | + assert not isinstance(serialized_metadata, str) |
| 248 | + assert ( |
| 249 | + _parse_adk_metadata_value(serialized_metadata) == original_custom_metadata |
| 250 | + ) |
0 commit comments