From 3ba04d33dc8f2ef8b151abe1be4d1c8b7afcc25a Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 18 Mar 2026 07:59:31 -0700 Subject: [PATCH] fix: workaround for the client config streaming settings are not respected (#983) PiperOrigin-RevId: 885595843 --- .../com/google/adk/a2a/agent/RemoteA2AAgent.java | 13 ++++++++++++- .../google/adk/a2a/agent/RemoteA2AAgentTest.java | 16 +++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/a2a/src/main/java/com/google/adk/a2a/agent/RemoteA2AAgent.java b/a2a/src/main/java/com/google/adk/a2a/agent/RemoteA2AAgent.java index ccb662b7c..4a375980c 100644 --- a/a2a/src/main/java/com/google/adk/a2a/agent/RemoteA2AAgent.java +++ b/a2a/src/main/java/com/google/adk/a2a/agent/RemoteA2AAgent.java @@ -117,7 +117,7 @@ private RemoteA2AAgent(Builder builder) { if (this.description.isEmpty() && this.agentCard.description() != null) { this.description = this.agentCard.description(); } - this.streaming = this.agentCard.capabilities().streaming(); + this.streaming = builder.streaming && this.agentCard.capabilities().streaming(); } public static Builder builder() { @@ -133,6 +133,13 @@ public static class Builder { private List subAgents; private List beforeAgentCallback; private List afterAgentCallback; + private boolean streaming; + + @CanIgnoreReturnValue + public Builder streaming(boolean streaming) { + this.streaming = streaming; + return this; + } @CanIgnoreReturnValue public Builder name(String name) { @@ -181,6 +188,10 @@ public RemoteA2AAgent build() { } } + public boolean isStreaming() { + return streaming; + } + private Message.Builder newA2AMessage(Message.Role role, List> parts) { return new Message.Builder().messageId(UUID.randomUUID().toString()).role(role).parts(parts); } diff --git a/a2a/src/test/java/com/google/adk/a2a/agent/RemoteA2AAgentTest.java b/a2a/src/test/java/com/google/adk/a2a/agent/RemoteA2AAgentTest.java index b1ffa248a..0609c3b04 100644 --- a/a2a/src/test/java/com/google/adk/a2a/agent/RemoteA2AAgentTest.java +++ b/a2a/src/test/java/com/google/adk/a2a/agent/RemoteA2AAgentTest.java @@ -113,6 +113,20 @@ public void setUp() { .build(); } + @Test + public void createAgent_streaming_false_returnsNonStreamingAgent() { + // With streaming false, the agent should not stream even if the AgentCard supports streaming. + RemoteA2AAgent agent = getAgentBuilder().streaming(false).build(); + assertThat(agent.isStreaming()).isFalse(); + } + + @Test + public void createAgent_streaming_true_returnsStreamingAgent() { + // With streaming true, the agent should support streaming if the AgentCard supports streaming. + RemoteA2AAgent agent = getAgentBuilder().streaming(true).build(); + assertThat(agent.isStreaming()).isTrue(); + } + @Test public void runAsync_aggregatesPartialEvents() { RemoteA2AAgent agent = createAgent(); @@ -763,7 +777,7 @@ private RemoteA2AAgent.Builder getAgentBuilder() { } private RemoteA2AAgent createAgent() { - return getAgentBuilder().build(); + return getAgentBuilder().streaming(true).build(); } @SuppressWarnings("unchecked") // cast for Mockito