Skip to content

Commit fcb1e4b

Browse files
committed
Simplify example to return a Message.
This is needed to work around a2aproject/a2a-java#423 When returning Tasks via gRPC we don't actually get any artifacts
1 parent cbac6eb commit fcb1e4b

File tree

3 files changed

+20
-24
lines changed

3 files changed

+20
-24
lines changed

examples/simple/client/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@
5454
<groupId>com.google.guava</groupId>
5555
<artifactId>failureaccess</artifactId>
5656
</dependency>
57+
<!-- SLF4J implementation for gRPC logging -->
58+
<dependency>
59+
<groupId>org.slf4j</groupId>
60+
<artifactId>slf4j-simple</artifactId>
61+
<version>2.0.17</version>
62+
</dependency>
5763
</dependencies>
5864

5965
<build>

examples/simple/client/src/main/java/org/wildfly/extras/a2a/examples/simple/client/SimpleExampleClient.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import io.a2a.client.Client;
1212
import io.a2a.client.ClientBuilder;
1313
import io.a2a.client.ClientEvent;
14-
import io.a2a.client.TaskEvent;
14+
import io.a2a.client.MessageEvent;
1515
import io.a2a.client.config.ClientConfig;
1616
import io.a2a.client.http.A2ACardResolver;
1717
import io.a2a.client.transport.grpc.GrpcTransport;
@@ -23,10 +23,8 @@
2323
import io.a2a.spec.A2AClientError;
2424
import io.a2a.spec.A2AClientException;
2525
import io.a2a.spec.AgentCard;
26-
import io.a2a.spec.Artifact;
2726
import io.a2a.spec.Message;
2827
import io.a2a.spec.Part;
29-
import io.a2a.spec.Task;
3028
import io.a2a.spec.TextPart;
3129
import io.a2a.spec.TransportProtocol;
3230
import io.grpc.ManagedChannelBuilder;
@@ -67,16 +65,12 @@ public String sayHello(String name) throws Exception {
6765

6866
//CompletableFuture
6967
BiConsumer<ClientEvent, AgentCard> consumer = (event, agentCard) -> {
70-
if (event instanceof TaskEvent taskEvent) {
71-
Task task = taskEvent.getTask();
68+
if (event instanceof MessageEvent messageEvent) {
69+
Message msg = messageEvent.getMessage();
7270
StringBuilder sb = new StringBuilder();
73-
if (task.getArtifacts() != null) {
74-
for (Artifact a : task.getArtifacts()) {
75-
for (Part<?> part : a.parts()) {
76-
if (part instanceof TextPart textPart) {
77-
sb.append(textPart.getText());
78-
}
79-
}
71+
for (Part<?> part : msg.getParts()) {
72+
if (part instanceof TextPart textPart) {
73+
sb.append(textPart.getText());
8074
}
8175
}
8276
response.complete(sb.toString());

examples/simple/server/src/main/java/org/wildfly/extras/a2a/examples/simple/SimpleExampleAgentExecutorProducer.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22

33
import java.util.Collections;
44
import java.util.List;
5-
import java.util.stream.Collectors;
65

76
import jakarta.enterprise.context.ApplicationScoped;
87
import jakarta.enterprise.inject.Produces;
98

109
import io.a2a.server.agentexecution.AgentExecutor;
1110
import io.a2a.server.agentexecution.RequestContext;
1211
import io.a2a.server.events.EventQueue;
13-
import io.a2a.server.tasks.TaskUpdater;
14-
import io.a2a.spec.Artifact;
1512
import io.a2a.spec.JSONRPCError;
13+
import io.a2a.spec.Message;
1614
import io.a2a.spec.Part;
1715
import io.a2a.spec.TaskNotCancelableError;
1816
import io.a2a.spec.TextPart;
@@ -28,11 +26,6 @@ public AgentExecutor mockExecutor() {
2826
private static class SimpleExampleAgentExecutor implements AgentExecutor {
2927
@Override
3028
public void execute(RequestContext context, EventQueue eventQueue) throws JSONRPCError {
31-
TaskUpdater updater = new TaskUpdater(context, eventQueue);
32-
33-
// Signal we've started working
34-
updater.startWork();
35-
3629
// Get the name sent in the user's message
3730
List<Part<?>> partsList = context.getMessage().getParts();
3831
List<TextPart> textParts = partsList.stream()
@@ -44,10 +37,13 @@ public void execute(RequestContext context, EventQueue eventQueue) throws JSONRP
4437
// Simulate doing work with the LLM, and adding that as an artifact.
4538
// In this case we just add "Hello <name>" to the list of aritfacts
4639
String response = "Hello " + name;
47-
updater.addArtifact(Collections.singletonList(new TextPart(response)), null, "response", null);
48-
49-
// We have completed our simple example Task
50-
updater.complete();
40+
Message message = new Message.Builder()
41+
.role(Message.Role.AGENT)
42+
.parts(Collections.singletonList(new TextPart(response)))
43+
.taskId(context.getMessage().getTaskId())
44+
.contextId(context.getMessage().getContextId())
45+
.build();
46+
eventQueue.enqueueEvent(message);
5147
}
5248

5349
@Override

0 commit comments

Comments
 (0)