Conversation
Implements the SendLiveMessage bidi streaming RPC from the A2A v1.1 proposal (https://github.com/Tehsmash/a2a-python/tree/feat/send-live-message). - Add SendLiveMessage to A2AServiceStub (client, via call_stream_stream), A2AServiceServicer (UNIMPLEMENTED stub), _A2AServiceServicer_SendLiveMessage_Handler (StreamStreamHandler), and register_stream_stream in add_A2AServiceServicer_to_server - Add SRPCHandler.SendLiveMessage: bridges RequestStream to decoded async iterable of StreamRequest protos, delegates to request_handler.on_live_message_send - Add SRPCTransport.send_live_message: opens BidiStreamHandler, concurrently sends serialized StreamRequests and yields decoded StreamResponse events - Point a2a-sdk dependency to Tehsmash/a2a-python@feat/send-live-message (the branch adding StreamRequest and on_live_message_send) - Add --live flag to echo_agent client example demonstrating the new method Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
- Add A2AServiceGroupStub.SendLiveMessage using call_multicast_stream_stream, returning a MulticastBidiStreamHandler - Add SRPCMulticastTransport.send_live_message: concurrently sends requests and yields (source, StreamResponse) tuples from all group members - Add MulticastClient.send_live_message delegating to the transport Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Adds support for the broadcast extension to SendLiveMessage as described in the slimrpc-broadcast-live spec. Every StreamResponse from any agent in a group channel is delivered to all other participants via SLIM's shared-responses transport primitive (slim-bindings PR #85). - a2a_pb2_slimrpc.py: add A2AServiceSharedServicer base class, _A2AServiceServicer_SendLiveMessage_SharedHandler extending StreamStreamSharedHandler, and add_A2AServiceServicer_to_server_shared() - handler.py: add SRPCSharedHandler with asyncio.Queue fan-in merge of client request stream and translated peer StreamResponse events; add _translate_peer_response() implementing spec Section 5 translation (task/status_update/artifact_update/message_update -> StreamRequest) - client_transport.py: add slimrpc_group_shared_channel_factory() using Channel.new_group_shared_with_connection; add field to ClientConfig - __init__.py: export slimrpc_group_shared_channel_factory - examples/echo_agent/server.py: use Server.new_with_shared_responses_and_connection and register both SRPCHandler and SRPCSharedHandler so the server accepts both standard and broadcast sessions without any flags - examples/echo_agent/client.py: add --broadcast flag that uses the shared channel factory and routes to MulticastClient.send_live_message Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
… RequestStream Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
…ueueShutDown Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
…es early Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
… in client Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
…messages) Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Per spec §6 slim-src must be set on all messages in broadcast mode. Client sets slim-src in RPC call metadata; server reads it from context.metadata() and stamps each decoded StreamRequest from the client stream. Executor now captures client identity on first turn and skips messages from other senders by comparing slim-src. Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Read slim-src identity directly from Channel.local_name accessor instead of threading local_name through ClientConfig and transport constructors. Add interactive stdin mode to the echo agent client: omitting --text in --live or --broadcast mode reads lines from stdin, sending each as a StreamRequest and printing responses inline. Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
Signed-off-by: Sam Betts <1769706+Tehsmash@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SendLiveMessagebidi streaming RPC from the A2A v1.1 proposal (Tehsmash/a2a-python@feat/send-live-message)a2a-sdkdependency at the upstream branch until it is released; will be updated to a pinned version once merged upstream--liveflag demonstrating the new methodChanges
slima2a/types/v1/a2a_pb2_slimrpc.pyA2AServiceStub.SendLiveMessage— returnsBidiStreamHandlerviachannel.call_stream_streamA2AServiceServicer.SendLiveMessage— UNIMPLEMENTED base stub_A2AServiceServicer_SendLiveMessage_Handler(StreamStreamHandler)— decodesStreamRequestbytes, passes to servicer async-generator, encodesStreamResponseto sinkadd_A2AServiceServicer_to_server— registers viaserver.register_stream_streamslima2a/handler.pySRPCHandler.SendLiveMessage— bridgesRequestStreamto decoded async iterable ofStreamRequest, callsrequest_handler.on_live_message_send, yieldsStreamResponseslima2a/client_transport.pySRPCTransport.send_live_message— opens bidi handle, concurrently sends serialized requests and yields decodedStreamResponseeventsexamples/echo_agent/client.py--liveflag andsend_live_message()function demonstrating the new APIpyproject.toml/uv.locka2a-sdkpointed atTehsmash/a2a-python@feat/send-live-messageforStreamRequestandon_live_message_sendNotes
AgentExecutor—DefaultRequestHandler(DefaultRequestHandlerV2) already implementson_live_message_sendand routes through the existingexecute()patha2a-sdkdependency pin should be updated to a stable release once the upstream PR is merged