Skip to content

Commit 6bd33e1

Browse files
google-genai-botcopybara-github
authored andcommitted
fix: Retain the consumers and transport registry when recreating the ClientFactory in remote_a2a_agent.py
PiperOrigin-RevId: 807762203
1 parent f7bd3c1 commit 6bd33e1

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

src/google/adk/agents/remote_a2a_agent.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,16 @@ async def _ensure_httpx_client(self) -> httpx.AsyncClient:
188188
)
189189
self._httpx_client_needs_cleanup = True
190190
if self._a2a_client_factory:
191+
registry = self._a2a_client_factory._registry
191192
self._a2a_client_factory = A2AClientFactory(
192193
config=dataclasses.replace(
193194
self._a2a_client_factory._config,
194195
httpx_client=self._httpx_client,
195-
)
196+
),
197+
consumers=self._a2a_client_factory._consumers,
196198
)
199+
for label, generator in registry.items():
200+
self._a2a_client_factory.register(label, generator)
197201
if not self._a2a_client_factory:
198202
client_config = A2AClientConfig(
199203
httpx_client=self._httpx_client,

tests/unittests/agents/test_remote_a2a_agent.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
# Import dependencies with version checking
3535
try:
3636
from a2a.client.client import ClientConfig
37+
from a2a.client.client import Consumer
3738
from a2a.client.client_factory import ClientFactory
3839
from a2a.types import AgentCapabilities
3940
from a2a.types import AgentCard
@@ -246,6 +247,50 @@ async def test_ensure_factory_reuses_existing_client(self):
246247
assert client == existing_client
247248
assert agent._httpx_client_needs_cleanup is False
248249

250+
@pytest.mark.asyncio
251+
async def test_ensure_httpx_client_updates_factory_with_new_client(self):
252+
"""Test that _ensure_httpx_client updates factory with new client."""
253+
agent = RemoteA2aAgent(
254+
name="test_agent",
255+
agent_card=create_test_agent_card(),
256+
a2a_client_factory=ClientFactory(
257+
ClientConfig(httpx_client=None),
258+
),
259+
)
260+
assert agent._a2a_client_factory._config.httpx_client is None
261+
262+
client = await agent._ensure_httpx_client()
263+
264+
assert client is not None
265+
assert agent._httpx_client == client
266+
assert agent._httpx_client_needs_cleanup is True
267+
assert agent._a2a_client_factory._config.httpx_client == client
268+
269+
@pytest.mark.asyncio
270+
async def test_ensure_httpx_client_reregisters_transports_with_new_client(
271+
self,
272+
):
273+
"""Test that _ensure_httpx_client registers transports with new client."""
274+
factory = ClientFactory(
275+
ClientConfig(httpx_client=None),
276+
)
277+
factory.register("transport_label", lambda: "test")
278+
agent = RemoteA2aAgent(
279+
name="test_agent",
280+
agent_card=create_test_agent_card(),
281+
a2a_client_factory=factory,
282+
)
283+
assert agent._a2a_client_factory._config.httpx_client is None
284+
assert "transport_label" in agent._a2a_client_factory._registry
285+
286+
client = await agent._ensure_httpx_client()
287+
288+
assert client is not None
289+
assert agent._httpx_client == client
290+
assert agent._httpx_client_needs_cleanup is True
291+
assert agent._a2a_client_factory._config.httpx_client == client
292+
assert "transport_label" in agent._a2a_client_factory._registry
293+
249294
@pytest.mark.asyncio
250295
async def test_resolve_agent_card_from_url_success(self):
251296
"""Test successful agent card resolution from URL."""

0 commit comments

Comments
 (0)