-
Notifications
You must be signed in to change notification settings - Fork 295
Description
Describe the Bug:
RemoteA2AAgent derives streaming mode from agentCard.capabilities().streaming(), but client execution path uses both clientConfig.isStreaming() and agentCard.capabilities().streaming().
This causes inconsistent mode decisions between layers when these values differ (e.g., card says streaming=true, client config says streaming=false), which can lead to send/stream flow mismatch and stuck completion behavior.
Steps to Reproduce:
- Configure an A2A client with:
- AgentCard capability streaming =
true - ClientConfig streaming =
false
- AgentCard capability streaming =
- Build remote agent via
RemoteA2AAgent.builder(...).a2aClient(client).build(). - Invoke remote agent in non-stream mode (
message:sendpath). - Observe inconsistent behavior between remote agent mode assumptions and client transport mode (in our case, response returns but top-level reactive flow completion is inconsistent/hangs).
Expected Behavior:
A single effective streaming decision should be used consistently across RemoteA2AAgent and client transport.
If client config disables streaming, all layers should behave non-streaming.
Observed Behavior:
Mode decision is inconsistent:
RemoteA2AAgentappears to use AgentCard capability only.- Client transport path gates behavior with both client config and AgentCard capability.
This mismatch can produce control-flow inconsistencies (including completion/hanging symptoms).
Environment Details:
- ADK Library Version (see maven dependency):
0.7.0 - OS:
macOS
Model Information:
- Which model is being used:
N/A / not model-specific (A2A transport+mode handling issue)
Screenshots / Video:
N/A
Additional Context:
In our integration, client config explicitly disables streaming:
.clientConfig(ClientConfig.builder().setStreaming(false).build())Even with this, behavior suggests another layer still treats streaming capability differently (derived from AgentCard).
Minimal Reproduction Code:
AgentCard agentCard = ... // capabilities.streaming() == true
Client client =
Client.builder(agentCard)
.withTransport(JSONRPCTransport.class, new JSONRPCTransportConfig(httpClient))
.clientConfig(ClientConfig.builder().setStreaming(false).build())
.build();
RemoteA2AAgent remote =
RemoteA2AAgent.builder()
.name(agentCard.name())
.description(agentCard.description())
.agentCard(agentCard)
.a2aClient(client)
.build();
// invoke non-stream operation (message:send)
// observe mismatch in mode behavior between remote agent and client transportHow often has this issue occurred?:
- Always (100%)