File tree Expand file tree Collapse file tree 2 files changed +27
-3
lines changed Expand file tree Collapse file tree 2 files changed +27
-3
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ import 'transport.dart';
2525/// Events (SSE).
2626class A2AClient {
2727 final _log = Logger ('A2AClient' );
28+ int _nextId = 1 ;
2829
2930 /// The base URL of the A2A server.
3031 final String url;
@@ -94,7 +95,7 @@ class A2AClient {
9495 'jsonrpc' : '2.0' ,
9596 'method' : 'create_task' ,
9697 'params' : {'message' : message.toJson ()},
97- 'id' : 1 ,
98+ 'id' : _nextId ++ ,
9899 };
99100 _log.info ('Creating task with message: ${message .toJson ()}' );
100101 final response = await transport.send (request);
@@ -120,7 +121,7 @@ class A2AClient {
120121 'jsonrpc' : '2.0' ,
121122 'method' : 'message/stream' ,
122123 'params' : {'message' : message.toJson ()},
123- 'id' : 1 ,
124+ 'id' : _nextId ++ ,
124125 };
125126 _log.info ('Sending message stream: ${message .toJson ()}' );
126127 return transport.sendStream (request);
@@ -136,7 +137,7 @@ class A2AClient {
136137 'jsonrpc' : '2.0' ,
137138 'method' : 'execute_task' ,
138139 'params' : {'task_id' : taskId},
139- 'id' : 1 ,
140+ 'id' : _nextId ++ ,
140141 };
141142 _log.info ('Executing task $taskId ' );
142143 return transport.sendStream (request).map (
Original file line number Diff line number Diff line change @@ -102,6 +102,29 @@ void main() {
102102 );
103103 });
104104
105+ test ('sends unique request IDs' , () async {
106+ final message = Message (
107+ messageId: '1' ,
108+ role: Role .user,
109+ parts: [Part .text (text: 'Hello' )],
110+ );
111+ final taskJson = {
112+ 'id' : '123' ,
113+ 'contextId' : '456' ,
114+ 'status' : {'state' : 'submitted' },
115+ };
116+
117+ when (
118+ mockTransport.send (any),
119+ ).thenAnswer ((_) async => {'result' : taskJson});
120+
121+ await client.createTask (message);
122+ await client.createTask (message);
123+
124+ final requests = verify (mockTransport.send (captureAny)).captured;
125+ expect (requests[0 ]['id' ], isNot (equals (requests[1 ]['id' ])));
126+ });
127+
105128 test ('executeTask returns a stream of StreamingEvents on success' , () {
106129 final streamController = StreamController <Map <String , dynamic >>();
107130 final eventJson = {
You can’t perform that action at this time.
0 commit comments