Skip to content

Commit 841675b

Browse files
authored
feat!: Update Message.Role enum (#662)
Align the enum values with the protobuf definition to simplify the serialiazition. Remove the string representation to rely directly on the enum textual serialization. Remove the nullabitily of the Message role fied. If not present, it will be mapped to the ROLE_UNSPECIFIED. Remove the RoleTypeAdapter as the GSON serialization is handled automatically from the enum. This fixes #661 Signed-off-by: Jeff Mesnil <jmesnil@ibm.com>
1 parent 9366743 commit 841675b

39 files changed

Lines changed: 150 additions & 204 deletions

File tree

client/base/src/main/java/io/a2a/A2A.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public class A2A {
7474
* @see #createUserTextMessage(String, String, String)
7575
*/
7676
public static Message toUserMessage(String text) {
77-
return toMessage(text, Message.Role.USER, null);
77+
return toMessage(text, Message.Role.ROLE_USER, null);
7878
}
7979

8080
/**
@@ -96,7 +96,7 @@ public static Message toUserMessage(String text) {
9696
* @see #toUserMessage(String)
9797
*/
9898
public static Message toUserMessage(String text, String messageId) {
99-
return toMessage(text, Message.Role.USER, messageId);
99+
return toMessage(text, Message.Role.ROLE_USER, messageId);
100100
}
101101

102102
/**
@@ -117,7 +117,7 @@ public static Message toUserMessage(String text, String messageId) {
117117
* @see #toAgentMessage(String, String)
118118
*/
119119
public static Message toAgentMessage(String text) {
120-
return toMessage(text, Message.Role.AGENT, null);
120+
return toMessage(text, Message.Role.ROLE_AGENT, null);
121121
}
122122

123123
/**
@@ -133,7 +133,7 @@ public static Message toAgentMessage(String text) {
133133
* @return an agent message with the specified text and ID
134134
*/
135135
public static Message toAgentMessage(String text, String messageId) {
136-
return toMessage(text, Message.Role.AGENT, messageId);
136+
return toMessage(text, Message.Role.ROLE_AGENT, messageId);
137137
}
138138

139139
/**
@@ -180,7 +180,7 @@ public static Message toAgentMessage(String text, String messageId) {
180180
* @see Message#taskId()
181181
*/
182182
public static Message createUserTextMessage(String text, String contextId, String taskId) {
183-
return toMessage(text, Message.Role.USER, null, contextId, taskId);
183+
return toMessage(text, Message.Role.ROLE_USER, null, contextId, taskId);
184184
}
185185

186186
/**
@@ -195,7 +195,7 @@ public static Message createUserTextMessage(String text, String contextId, Strin
195195
* @see #createUserTextMessage(String, String, String)
196196
*/
197197
public static Message createAgentTextMessage(String text, String contextId, String taskId) {
198-
return toMessage(text, Message.Role.AGENT, null, contextId, taskId);
198+
return toMessage(text, Message.Role.ROLE_AGENT, null, contextId, taskId);
199199
}
200200

201201
/**
@@ -225,7 +225,7 @@ public static Message createAgentPartsMessage(List<Part<?>> parts, String contex
225225
if (parts == null || parts.isEmpty()) {
226226
throw new IllegalArgumentException("Parts cannot be null or empty");
227227
}
228-
return toMessage(parts, Message.Role.AGENT, null, contextId, taskId);
228+
return toMessage(parts, Message.Role.ROLE_AGENT, null, contextId, taskId);
229229
}
230230

231231
private static Message toMessage(String text, Message.Role role, String messageId) {

client/base/src/test/java/io/a2a/A2ATest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void testToUserMessage() {
2020
String text = "Hello, world!";
2121
Message message = A2A.toUserMessage(text);
2222

23-
assertEquals(Message.Role.USER, message.role());
23+
assertEquals(Message.Role.ROLE_USER, message.role());
2424
assertEquals(1, message.parts().size());
2525
assertEquals(text, ((TextPart) message.parts().get(0)).text());
2626
assertNotNull(message.messageId());
@@ -34,7 +34,7 @@ public void testToUserMessageWithId() {
3434
String messageId = "test-message-id";
3535
Message message = A2A.toUserMessage(text, messageId);
3636

37-
assertEquals(Message.Role.USER, message.role());
37+
assertEquals(Message.Role.ROLE_USER, message.role());
3838
assertEquals(messageId, message.messageId());
3939
}
4040

@@ -43,7 +43,7 @@ public void testToAgentMessage() {
4343
String text = "Hello, I'm an agent!";
4444
Message message = A2A.toAgentMessage(text);
4545

46-
assertEquals(Message.Role.AGENT, message.role());
46+
assertEquals(Message.Role.ROLE_AGENT, message.role());
4747
assertEquals(1, message.parts().size());
4848
assertEquals(text, ((TextPart) message.parts().get(0)).text());
4949
assertNotNull(message.messageId());
@@ -55,7 +55,7 @@ public void testToAgentMessageWithId() {
5555
String messageId = "agent-message-id";
5656
Message message = A2A.toAgentMessage(text, messageId);
5757

58-
assertEquals(Message.Role.AGENT, message.role());
58+
assertEquals(Message.Role.ROLE_AGENT, message.role());
5959
assertEquals(messageId, message.messageId());
6060
}
6161

@@ -67,7 +67,7 @@ public void testCreateUserTextMessage() {
6767

6868
Message message = A2A.createUserTextMessage(text, contextId, taskId);
6969

70-
assertEquals(Message.Role.USER, message.role());
70+
assertEquals(Message.Role.ROLE_USER, message.role());
7171
assertEquals(contextId, message.contextId());
7272
assertEquals(taskId, message.taskId());
7373
assertEquals(1, message.parts().size());
@@ -83,7 +83,7 @@ public void testCreateUserTextMessageWithNullParams() {
8383

8484
Message message = A2A.createUserTextMessage(text, null, null);
8585

86-
assertEquals(Message.Role.USER, message.role());
86+
assertEquals(Message.Role.ROLE_USER, message.role());
8787
assertNull(message.contextId());
8888
assertNull(message.taskId());
8989
assertEquals(1, message.parts().size());
@@ -98,7 +98,7 @@ public void testCreateAgentTextMessage() {
9898

9999
Message message = A2A.createAgentTextMessage(text, contextId, taskId);
100100

101-
assertEquals(Message.Role.AGENT, message.role());
101+
assertEquals(Message.Role.ROLE_AGENT, message.role());
102102
assertEquals(contextId, message.contextId());
103103
assertEquals(taskId, message.taskId());
104104
assertEquals(1, message.parts().size());
@@ -117,7 +117,7 @@ public void testCreateAgentPartsMessage() {
117117

118118
Message message = A2A.createAgentPartsMessage(parts, contextId, taskId);
119119

120-
assertEquals(Message.Role.AGENT, message.role());
120+
assertEquals(Message.Role.ROLE_AGENT, message.role());
121121
assertEquals(contextId, message.contextId());
122122
assertEquals(taskId, message.taskId());
123123
assertEquals(2, message.parts().size());

client/base/src/test/java/io/a2a/client/AuthenticationAuthorizationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public class AuthenticationAuthorizationTest {
6666
public void setUp() {
6767
server = new ClientAndServer(4001);
6868
MESSAGE = Message.builder()
69-
.role(Message.Role.USER)
69+
.role(Message.Role.ROLE_USER)
7070
.parts(Collections.singletonList(new TextPart("test message")))
7171
.contextId("context-1234")
7272
.messageId("message-1234")

client/base/src/test/java/io/a2a/client/ClientTaskManagerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void setUp() {
4242

4343
sampleMessage = Message.builder()
4444
.messageId("msg1")
45-
.role(Message.Role.USER)
45+
.role(Message.Role.ROLE_USER)
4646
.parts(Collections.singletonList(new TextPart("Hello")))
4747
.build();
4848
}
@@ -196,7 +196,7 @@ public void testUpdateWithMessage() {
196196
public void testUpdateWithMessageMovesStatusMessage() {
197197
Message statusMessage = Message.builder()
198198
.messageId("status_msg")
199-
.role(Message.Role.AGENT)
199+
.role(Message.Role.ROLE_AGENT)
200200
.parts(Collections.singletonList(new TextPart("Status")))
201201
.build();
202202

@@ -219,7 +219,7 @@ public void testUpdateWithMessageMovesStatusMessage() {
219219
public void testUpdateWithMessagePreservesExistingHistory() {
220220
Message existingMessage = Message.builder()
221221
.messageId("existing_msg")
222-
.role(Message.Role.USER)
222+
.role(Message.Role.ROLE_USER)
223223
.parts(Collections.singletonList(new TextPart("Existing")))
224224
.build();
225225

@@ -256,7 +256,7 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception {
256256
// Second status update
257257
Message secondMessage = Message.builder()
258258
.messageId("msg2")
259-
.role(Message.Role.AGENT)
259+
.role(Message.Role.ROLE_AGENT)
260260
.parts(Collections.singletonList(new TextPart("Second message")))
261261
.build();
262262

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/JSONRPCTransportStreamingTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void testSendStreamingMessageParams() {
5454
// The goal here is just to verify the correct parameters are being used
5555
// This is a unit test of the parameter construction, not the streaming itself
5656
Message message = Message.builder()
57-
.role(Message.Role.USER)
57+
.role(Message.Role.ROLE_USER)
5858
.parts(Collections.singletonList(new TextPart("test message")))
5959
.contextId("context-test")
6060
.messageId("message-test")
@@ -73,7 +73,7 @@ public void testSendStreamingMessageParams() {
7373
assertNotNull(params);
7474
assertEquals(message, params.message());
7575
assertEquals(configuration, params.configuration());
76-
assertEquals(Message.Role.USER, params.message().role());
76+
assertEquals(Message.Role.ROLE_USER, params.message().role());
7777
assertEquals("test message", ((TextPart) params.message().parts().get(0)).text());
7878
}
7979

@@ -95,7 +95,7 @@ public void testA2AClientSendStreamingMessage() throws Exception {
9595

9696
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
9797
Message message = Message.builder()
98-
.role(Message.Role.USER)
98+
.role(Message.Role.ROLE_USER)
9999
.parts(Collections.singletonList(new TextPart("tell me some jokes")))
100100
.contextId("context-1234")
101101
.messageId("message-1234")

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/JSONRPCTransportTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public void testA2AClientSendMessage() throws Exception {
103103

104104
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
105105
Message message = Message.builder()
106-
.role(Message.Role.USER)
106+
.role(Message.Role.ROLE_USER)
107107
.parts(Collections.singletonList(new TextPart("tell me a joke")))
108108
.contextId("context-1234")
109109
.messageId("message-1234")
@@ -151,7 +151,7 @@ public void testA2AClientSendMessageWithMessageResponse() throws Exception {
151151

152152
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
153153
Message message = Message.builder()
154-
.role(Message.Role.USER)
154+
.role(Message.Role.ROLE_USER)
155155
.parts(Collections.singletonList(new TextPart("tell me a joke")))
156156
.contextId("context-1234")
157157
.messageId("message-1234")
@@ -168,7 +168,7 @@ public void testA2AClientSendMessageWithMessageResponse() throws Exception {
168168
EventKind result = client.sendMessage(params, null);
169169
assertInstanceOf(Message.class, result);
170170
Message agentMessage = (Message) result;
171-
assertEquals(Message.Role.AGENT, agentMessage.role());
171+
assertEquals(Message.Role.ROLE_AGENT, agentMessage.role());
172172
Part<?> part = agentMessage.parts().get(0);
173173
assertTrue(part instanceof TextPart);
174174
assertEquals("Why did the chicken cross the road? To get to the other side!", ((TextPart) part).text());
@@ -193,7 +193,7 @@ public void testA2AClientSendMessageWithError() throws Exception {
193193

194194
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
195195
Message message = Message.builder()
196-
.role(Message.Role.USER)
196+
.role(Message.Role.ROLE_USER)
197197
.parts(Collections.singletonList(new TextPart("tell me a joke")))
198198
.contextId("context-1234")
199199
.messageId("message-1234")
@@ -248,7 +248,7 @@ public void testA2AClientGetTask() throws Exception {
248248
assertNotNull(history);
249249
assertEquals(1, history.size());
250250
Message message = history.get(0);
251-
assertEquals(Message.Role.USER, message.role());
251+
assertEquals(Message.Role.ROLE_USER, message.role());
252252
List<Part<?>> parts = message.parts();
253253
assertNotNull(parts);
254254
assertEquals(3, parts.size());
@@ -435,7 +435,7 @@ public void testA2AClientSendMessageWithFilePart() throws Exception {
435435

436436
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
437437
Message message = Message.builder()
438-
.role(Message.Role.USER)
438+
.role(Message.Role.ROLE_USER)
439439
.parts(List.of(
440440
new TextPart("analyze this image"),
441441
new FilePart(new FileWithUri("image/jpeg", null, "file:///path/to/image.jpg"))
@@ -495,7 +495,7 @@ public void testA2AClientSendMessageWithDataPart() throws Exception {
495495
data.put("timestamp", "2024-01-15T10:30:00Z");
496496

497497
Message message = Message.builder()
498-
.role(Message.Role.USER)
498+
.role(Message.Role.ROLE_USER)
499499
.parts(List.of(
500500
new TextPart("process this data"),
501501
new DataPart(data)
@@ -552,7 +552,7 @@ public void testA2AClientSendMessageWithMixedParts() throws Exception {
552552
data.put("labels", List.of("Q1", "Q2", "Q3", "Q4"));
553553

554554
Message message = Message.builder()
555-
.role(Message.Role.USER)
555+
.role(Message.Role.ROLE_USER)
556556
.parts(List.of(
557557
new TextPart("analyze this data and image"),
558558
new FilePart(new FileWithBytes("image/png", "chart.png", "aGVsbG8=")),
@@ -617,7 +617,7 @@ public void testExtensionSupportRequiredErrorUnmarshalling() throws Exception {
617617

618618
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
619619
Message message = Message.builder()
620-
.role(Message.Role.USER)
620+
.role(Message.Role.ROLE_USER)
621621
.parts(Collections.singletonList(new TextPart("test message")))
622622
.contextId("context-test")
623623
.messageId("message-test")
@@ -673,7 +673,7 @@ public void testVersionNotSupportedErrorUnmarshalling() throws Exception {
673673

674674
JSONRPCTransport client = new JSONRPCTransport("http://localhost:4001");
675675
Message message = Message.builder()
676-
.role(Message.Role.USER)
676+
.role(Message.Role.ROLE_USER)
677677
.parts(Collections.singletonList(new TextPart("test message")))
678678
.contextId("context-test")
679679
.messageId("message-test")

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/sse/SSEEventListenerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void testOnEventWithMessageResult() throws Exception {
7373
assertNotNull(receivedEvent.get());
7474
assertTrue(receivedEvent.get() instanceof Message);
7575
Message message = (Message) receivedEvent.get();
76-
assertEquals(Message.Role.AGENT, message.role());
76+
assertEquals(Message.Role.ROLE_AGENT, message.role());
7777
assertEquals("msg-123", message.messageId());
7878
assertEquals("context-456", message.contextId());
7979
assertEquals(1, message.parts().size());

client/transport/rest/src/test/java/io/a2a/client/transport/rest/RestTransportTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public RestTransportTest() {
110110
@Test
111111
public void testSendMessage() throws Exception {
112112
Message message = Message.builder()
113-
.role(Message.Role.USER)
113+
.role(Message.Role.ROLE_USER)
114114
.parts(Collections.singletonList(new TextPart("tell me a joke")))
115115
.contextId("context-1234")
116116
.messageId("message-1234")
@@ -143,7 +143,7 @@ public void testSendMessage() throws Exception {
143143
assertEquals(1, task.history().size());
144144
Message history = task.history().get(0);
145145
assertEquals("message", history.kind());
146-
assertEquals(Message.Role.USER, history.role());
146+
assertEquals(Message.Role.ROLE_USER, history.role());
147147
assertEquals("context-1234", history.contextId());
148148
assertEquals("message-1234", history.messageId());
149149
assertEquals("9b511af4-b27c-47fa-aecf-2a93c08a44f8", history.taskId());
@@ -215,7 +215,7 @@ public void testGetTask() throws Exception {
215215
assertEquals(1, task.history().size());
216216
Message history = task.history().get(0);
217217
assertEquals("message", history.kind());
218-
assertEquals(Message.Role.USER, history.role());
218+
assertEquals(Message.Role.ROLE_USER, history.role());
219219
assertEquals("message-123", history.messageId());
220220
assertEquals(3, history.parts().size());
221221
assertTrue(history.parts().get(0) instanceof io.a2a.spec.TextPart);
@@ -252,7 +252,7 @@ public void testSendMessageStreaming() throws Exception {
252252

253253
RestTransport client = new RestTransport(CARD);
254254
Message message = Message.builder()
255-
.role(Message.Role.USER)
255+
.role(Message.Role.ROLE_USER)
256256
.parts(Collections.singletonList(new TextPart("tell me some jokes")))
257257
.contextId("context-1234")
258258
.messageId("message-1234")
@@ -478,7 +478,7 @@ public void testExtensionSupportRequiredErrorUnmarshalling() throws Exception {
478478

479479
RestTransport client = new RestTransport(CARD);
480480
Message message = Message.builder()
481-
.role(Message.Role.USER)
481+
.role(Message.Role.ROLE_USER)
482482
.parts(Collections.singletonList(new TextPart("test message")))
483483
.contextId("context-test")
484484
.messageId("message-test")
@@ -526,7 +526,7 @@ public void testVersionNotSupportedErrorUnmarshalling() throws Exception {
526526

527527
RestTransport client = new RestTransport(CARD);
528528
Message message = Message.builder()
529-
.role(Message.Role.USER)
529+
.role(Message.Role.ROLE_USER)
530530
.parts(Collections.singletonList(new TextPart("test message")))
531531
.contextId("context-test")
532532
.messageId("message-test")
@@ -573,7 +573,7 @@ public void testVersionNotSupportedErrorUnmarshallingStreaming() throws Exceptio
573573

574574
RestTransport client = new RestTransport(CARD);
575575
Message message = Message.builder()
576-
.role(Message.Role.USER)
576+
.role(Message.Role.ROLE_USER)
577577
.parts(Collections.singletonList(new TextPart("test message")))
578578
.contextId("context-test")
579579
.messageId("message-test")

client/transport/rest/src/test/java/io/a2a/client/transport/rest/sse/SSEEventListenerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void testOnMessageWithMessageResult() {
126126
assertNotNull(receivedEvent.get());
127127
assertTrue(receivedEvent.get() instanceof Message);
128128
Message message = (Message) receivedEvent.get();
129-
assertEquals(Message.Role.AGENT, message.role());
129+
assertEquals(Message.Role.ROLE_AGENT, message.role());
130130
assertEquals("msg-123", message.messageId());
131131
assertEquals("context-456", message.contextId());
132132
assertEquals(1, message.parts().size());

0 commit comments

Comments
 (0)