diff --git a/a2a/README.md b/a2a/google-adk-a2a-core/README.md similarity index 99% rename from a2a/README.md rename to a2a/google-adk-a2a-core/README.md index a5ae45008..82f1a13ae 100644 --- a/a2a/README.md +++ b/a2a/google-adk-a2a-core/README.md @@ -177,7 +177,7 @@ curl -X POST http://localhost:8081/a2a/remote/v1/message:send \ "kind": "message", "contextId": "cli-demo-context", "messageId": "cli-check-2", - "role": "USER", + "role": "user", "parts": [ { "kind": "text", "text": "Is 2 prime?" } ] diff --git a/a2a/google-adk-a2a-core/pom.xml b/a2a/google-adk-a2a-core/pom.xml new file mode 100644 index 000000000..1ad23c111 --- /dev/null +++ b/a2a/google-adk-a2a-core/pom.xml @@ -0,0 +1,117 @@ + + + 4.0.0 + + + com.google.adk + google-adk-a2a + 0.3.1-SNAPSHOT + + + google-adk-a2a-core + jar + + Google ADK A2A Integration + + + 17 + ${java.version} + 0.3.0.Beta1 + ${project.version} + 33.0.0-jre + 2.19.0 + 3.1.5 + 1.0.0 + 2.0.17 + 2.38.0 + 1.4.4 + 4.13.2 + + + + + com.google.adk + google-adk + ${google.adk.version} + + + com.google.guava + guava + ${guava.version} + + + com.google.errorprone + error_prone_annotations + ${errorprone.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-parameter-names + ${jackson.version} + + + io.reactivex.rxjava3 + rxjava + ${rxjava.version} + + + org.jspecify + jspecify + ${jspecify.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + io.github.a2asdk + a2a-java-sdk-spec + ${a2a.sdk.version} + + + io.github.a2asdk + a2a-java-sdk-transport-rest + ${a2a.sdk.version} + + + io.github.a2asdk + a2a-java-sdk-http-client + ${a2a.sdk.version} + + + junit + junit + ${junit4.version} + test + + + com.google.truth + truth + ${truth.version} + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + ${java.version} + + + + + diff --git a/a2a/src/main/java/com/google/adk/a2a/A2AClient.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/A2AClient.java similarity index 100% rename from a2a/src/main/java/com/google/adk/a2a/A2AClient.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/A2AClient.java diff --git a/a2a/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java similarity index 92% rename from a2a/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java index 4beef8432..68828df94 100644 --- a/a2a/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/A2ASendMessageExecutor.java @@ -3,16 +3,21 @@ import static com.google.common.base.Strings.isNullOrEmpty; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import com.google.adk.a2a.converters.ConversationPreprocessor; +import com.google.adk.a2a.converters.RequestConverter; +import com.google.adk.a2a.converters.ResponseConverter; import com.google.adk.agents.BaseAgent; import com.google.adk.agents.RunConfig; import com.google.adk.artifacts.InMemoryArtifactService; import com.google.adk.events.Event; import com.google.adk.memory.InMemoryMemoryService; import com.google.adk.runner.Runner; +import com.google.adk.sessions.BaseSessionService; import com.google.adk.sessions.InMemorySessionService; import com.google.adk.sessions.Session; import com.google.common.collect.ImmutableList; import com.google.genai.types.Content; +import io.a2a.spec.AgentCard; import io.a2a.spec.Message; import io.a2a.spec.TextPart; import io.reactivex.rxjava3.core.Completable; @@ -43,12 +48,13 @@ Single> execute( String invocationId); } - private final InMemorySessionService sessionService; + private final BaseSessionService sessionService; private final String appName; @Nullable private final Runner runner; @Nullable private final Duration agentTimeout; private static final RunConfig DEFAULT_RUN_CONFIG = RunConfig.builder().setStreamingMode(RunConfig.StreamingMode.NONE).setMaxLlmCalls(20).build(); + private AgentCard agentCard; public A2ASendMessageExecutor(InMemorySessionService sessionService, String appName) { this.sessionService = sessionService; @@ -57,7 +63,16 @@ public A2ASendMessageExecutor(InMemorySessionService sessionService, String appN this.agentTimeout = null; } - public A2ASendMessageExecutor(BaseAgent agent, String appName, Duration agentTimeout) { + public A2ASendMessageExecutor(Runner runner, Duration agentTimeout, AgentCard agentCard) { + this.sessionService = runner.sessionService(); + this.appName = runner.appName(); + this.runner = runner; + this.agentTimeout = agentTimeout; + this.agentCard = agentCard; + } + + public A2ASendMessageExecutor( + BaseAgent agent, String appName, Duration agentTimeout, AgentCard agentCard) { InMemorySessionService sessionService = new InMemorySessionService(); Runner runnerInstance = new Runner( @@ -70,6 +85,7 @@ public A2ASendMessageExecutor(BaseAgent agent, String appName, Duration agentTim this.appName = appName; this.runner = runnerInstance; this.agentTimeout = agentTimeout; + this.agentCard = agentCard; } public Single execute( @@ -296,4 +312,8 @@ private static boolean isTimeout(@Nullable Throwable throwable) { } return false; } + + public AgentCard getAgentCard() { + return agentCard; + } } diff --git a/a2a/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java similarity index 99% rename from a2a/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java index 3fd4fa552..55ada25e4 100644 --- a/a2a/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/RemoteA2AAgent.java @@ -4,6 +4,8 @@ import static com.google.common.base.Strings.nullToEmpty; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.adk.a2a.converters.EventConverter; +import com.google.adk.a2a.converters.ResponseConverter; import com.google.adk.agents.BaseAgent; import com.google.adk.agents.Callbacks; import com.google.adk.agents.InvocationContext; diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java similarity index 98% rename from a2a/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java index 91b9237ac..d54e67a18 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ConversationPreprocessor.java @@ -1,4 +1,4 @@ -package com.google.adk.a2a; +package com.google.adk.a2a.converters; import com.google.adk.events.Event; import com.google.common.collect.ImmutableList; diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/EventConverter.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/EventConverter.java similarity index 99% rename from a2a/src/main/java/com/google/adk/a2a/converters/EventConverter.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/EventConverter.java index 19d7d5ca9..848f5264f 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/EventConverter.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/EventConverter.java @@ -1,4 +1,4 @@ -package com.google.adk.a2a; +package com.google.adk.a2a.converters; import com.google.adk.agents.InvocationContext; import com.google.adk.events.Event; diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/PartConverter.java similarity index 99% rename from a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/PartConverter.java index 38d0e7910..0ac1cefb5 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/PartConverter.java @@ -1,4 +1,4 @@ -package com.google.adk.a2a; +package com.google.adk.a2a.converters; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/RequestConverter.java similarity index 99% rename from a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/RequestConverter.java index 5936f64c2..c7d9deea4 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/RequestConverter.java @@ -1,4 +1,4 @@ -package com.google.adk.a2a; +package com.google.adk.a2a.converters; import com.google.adk.events.Event; import com.google.common.collect.ImmutableList; diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java similarity index 99% rename from a2a/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java rename to a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java index 516a61bc0..61c61ebd4 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java +++ b/a2a/google-adk-a2a-core/src/main/java/com/google/adk/a2a/converters/ResponseConverter.java @@ -1,4 +1,4 @@ -package com.google.adk.a2a; +package com.google.adk.a2a.converters; import com.google.adk.events.Event; import com.google.genai.types.Content; diff --git a/a2a/src/test/java/com/google/adk/a2a/EventConverterTest.java b/a2a/google-adk-a2a-core/src/test/java/com/google/adk/a2a/EventConverterTest.java similarity index 97% rename from a2a/src/test/java/com/google/adk/a2a/EventConverterTest.java rename to a2a/google-adk-a2a-core/src/test/java/com/google/adk/a2a/EventConverterTest.java index 0593120fd..3cff47899 100644 --- a/a2a/src/test/java/com/google/adk/a2a/EventConverterTest.java +++ b/a2a/google-adk-a2a-core/src/test/java/com/google/adk/a2a/EventConverterTest.java @@ -2,6 +2,8 @@ import static com.google.common.truth.Truth.assertThat; +import com.google.adk.a2a.converters.EventConverter; +import com.google.adk.a2a.converters.PartConverter; import com.google.adk.agents.BaseAgent; import com.google.adk.agents.InvocationContext; import com.google.adk.agents.RunConfig; diff --git a/a2a/webservice/pom.xml b/a2a/google-adk-a2a-webservice/pom.xml similarity index 88% rename from a2a/webservice/pom.xml rename to a2a/google-adk-a2a-webservice/pom.xml index dd723aa7e..87893da42 100644 --- a/a2a/webservice/pom.xml +++ b/a2a/google-adk-a2a-webservice/pom.xml @@ -6,8 +6,8 @@ com.google.adk - google-adk-parent - 0.3.1-SNAPSHOT + google-adk-a2a + 0.3.1-SNAPSHOT google-adk-a2a-webservice @@ -23,8 +23,8 @@ com.google.adk - google-adk-a2a - ${project.version} + google-adk-a2a-core + 0.3.1-SNAPSHOT org.springframework.boot diff --git a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteApplication.java b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteApplication.java similarity index 100% rename from a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteApplication.java rename to a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteApplication.java diff --git a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java similarity index 70% rename from a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java rename to a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java index 3c911bad9..b1cd4cb17 100644 --- a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java +++ b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteConfiguration.java @@ -2,9 +2,12 @@ import com.google.adk.a2a.A2ASendMessageExecutor; import com.google.adk.agents.BaseAgent; +import com.google.adk.runner.Runner; +import io.a2a.spec.AgentCard; import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -34,13 +37,21 @@ public class A2ARemoteConfiguration { @Bean public A2ASendMessageExecutor a2aSendMessageExecutor( - BaseAgent agent, + @Autowired(required = false) BaseAgent agent, + @Autowired(required = false) Runner runner, @Value("${a2a.remote.appName:" + DEFAULT_APP_NAME + "}") String appName, - @Value("${a2a.remote.timeoutSeconds:" + DEFAULT_TIMEOUT_SECONDS + "}") long timeoutSeconds) { + @Value("${a2a.remote.timeoutSeconds:" + DEFAULT_TIMEOUT_SECONDS + "}") long timeoutSeconds, + AgentCard agentCard) { logger.info( "Initializing A2A send message executor for appName {} with timeout {}s", appName, timeoutSeconds); - return new A2ASendMessageExecutor(agent, appName, Duration.ofSeconds(timeoutSeconds)); + if (agent != null) { + return new A2ASendMessageExecutor( + agent, appName, Duration.ofSeconds(timeoutSeconds), agentCard); + } else if (runner != null) { + return new A2ASendMessageExecutor(runner, Duration.ofSeconds(timeoutSeconds), agentCard); + } + throw new IllegalStateException("Neither BaseAgent nor Runner is available!"); } } diff --git a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java similarity index 77% rename from a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java rename to a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java index fbb7cf108..45991a82c 100644 --- a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java +++ b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteController.java @@ -1,9 +1,12 @@ package com.google.adk.webservice; +import io.a2a.spec.AgentCard; import io.a2a.spec.SendMessageRequest; import io.a2a.spec.SendMessageResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,4 +35,10 @@ public SendMessageResponse sendMessage(@RequestBody SendMessageRequest request) logger.debug("Responding with remote A2A payload: {}", response); return response; } + + /** Get agent card information */ + @GetMapping(path = "/v1/.well-known/agent-card.json", produces = "application/json") + public ResponseEntity getAgentCard() { + return ResponseEntity.ok(service.getAgentCard()); + } } diff --git a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java similarity index 95% rename from a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java rename to a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java index 6f4613bfe..71aad0a04 100644 --- a/a2a/webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java +++ b/a2a/google-adk-a2a-webservice/src/main/java/com/google/adk/webservice/A2ARemoteService.java @@ -1,7 +1,8 @@ package com.google.adk.webservice; import com.google.adk.a2a.A2ASendMessageExecutor; -import com.google.adk.a2a.ResponseConverter; +import com.google.adk.a2a.converters.ResponseConverter; +import io.a2a.spec.AgentCard; import io.a2a.spec.JSONRPCError; import io.a2a.spec.Message; import io.a2a.spec.MessageSendParams; @@ -85,4 +86,8 @@ private static SendMessageResponse errorResponse(SendMessageRequest request, Thr JSONRPCError jsonrpcError = new JSONRPCError(ERROR_CODE_INTERNAL_ERROR, message, null); return new SendMessageResponse(request != null ? request.getId() : null, jsonrpcError); } + + public AgentCard getAgentCard() { + return executor.getAgentCard(); + } } diff --git a/a2a/pom.xml b/a2a/pom.xml index 35b0651bc..3fd67bc29 100644 --- a/a2a/pom.xml +++ b/a2a/pom.xml @@ -1,117 +1,21 @@ - - - 4.0.0 - + + 4.0.0 + com.google.adk google-adk-parent 0.3.1-SNAPSHOT - google-adk-a2a - jar - Google ADK A2A Integration + google-adk-a2a + google-adk-a2a + pom - - 17 - ${java.version} - 0.3.0.Beta1 - ${project.version} - 33.0.0-jre - 2.19.0 - 3.1.5 - 1.0.0 - 2.0.17 - 2.38.0 - 1.4.4 - 4.13.2 - + + google-adk-a2a-core + google-adk-a2a-webservice + - - - com.google.adk - google-adk - ${google.adk.version} - - - com.google.guava - guava - ${guava.version} - - - com.google.errorprone - error_prone_annotations - ${errorprone.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.module - jackson-module-parameter-names - ${jackson.version} - - - io.reactivex.rxjava3 - rxjava - ${rxjava.version} - - - org.jspecify - jspecify - ${jspecify.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - io.github.a2asdk - a2a-java-sdk-spec - ${a2a.sdk.version} - - - io.github.a2asdk - a2a-java-sdk-transport-rest - ${a2a.sdk.version} - - - io.github.a2asdk - a2a-java-sdk-http-client - ${a2a.sdk.version} - - - junit - junit - ${junit4.version} - test - - - com.google.truth - truth - ${truth.version} - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - ${java.version} - - - - + diff --git a/contrib/samples/a2a_basic/pom.xml b/contrib/samples/a2a_basic/pom.xml index 59e10c375..61214b2e6 100644 --- a/contrib/samples/a2a_basic/pom.xml +++ b/contrib/samples/a2a_basic/pom.xml @@ -33,7 +33,7 @@ com.google.adk - google-adk-a2a + google-adk-a2a-core ${google-adk-a2a.version} @@ -55,25 +55,7 @@ true - - org.codehaus.mojo - build-helper-maven-plugin - 3.6.0 - - - add-source - generate-sources - - add-source - - - - . - - - - - + org.apache.maven.plugins maven-source-plugin diff --git a/contrib/samples/a2a_basic/A2AAgent.java b/contrib/samples/a2a_basic/src/main/java/com/example/a2a_basic/A2AAgent.java similarity index 100% rename from contrib/samples/a2a_basic/A2AAgent.java rename to contrib/samples/a2a_basic/src/main/java/com/example/a2a_basic/A2AAgent.java diff --git a/contrib/samples/a2a_basic/A2AAgentRun.java b/contrib/samples/a2a_basic/src/main/java/com/example/a2a_basic/A2AAgentRun.java similarity index 99% rename from contrib/samples/a2a_basic/A2AAgentRun.java rename to contrib/samples/a2a_basic/src/main/java/com/example/a2a_basic/A2AAgentRun.java index 406a8dcbc..428817dfe 100644 --- a/contrib/samples/a2a_basic/A2AAgentRun.java +++ b/contrib/samples/a2a_basic/src/main/java/com/example/a2a_basic/A2AAgentRun.java @@ -78,7 +78,7 @@ private List processRunRequest(Content inputContent) { } public static void main(String[] args) { - String primeAgentUrl = args.length > 0 ? args[0] : "http://localhost:9876/a2a/prime_agent"; + String primeAgentUrl = args.length > 0 ? args[0] : "http://localhost:8080/a2a/remote"; LlmAgent agent = A2AAgent.createRootAgent(primeAgentUrl); A2AAgentRun a2aRun = new A2AAgentRun(agent); diff --git a/contrib/samples/a2a_remote/pom.xml b/contrib/samples/a2a_remote/pom.xml index ee65bddec..36c7b2b3c 100644 --- a/contrib/samples/a2a_remote/pom.xml +++ b/contrib/samples/a2a_remote/pom.xml @@ -9,7 +9,7 @@ google-adk-parent 0.3.1-SNAPSHOT - + google-adk-sample-a2a-remote Google ADK - Sample - A2A Remote Prime Service Spring Boot service that exposes the remote prime-check agent over the A2A REST interface. @@ -48,14 +48,14 @@ com.google.adk - google-adk-a2a - ${project.version} + google-adk-a2a-core + 0.3.1-SNAPSHOT com.google.adk google-adk-a2a-webservice - ${project.version} + 0.3.1-SNAPSHOT @@ -95,35 +95,6 @@ spring-boot-maven-plugin ${spring-boot.version} - - org.codehaus.mojo - build-helper-maven-plugin - 3.6.0 - - - add-source - generate-sources - - add-source - - - - . - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - **/*.jar - target/** - - - org.codehaus.mojo exec-maven-plugin diff --git a/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/RemoteA2AApplication.java b/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/RemoteA2AApplication.java index 53be8d1d0..8f7c89562 100644 --- a/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/RemoteA2AApplication.java +++ b/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/RemoteA2AApplication.java @@ -3,6 +3,10 @@ import com.google.adk.agents.BaseAgent; import com.google.adk.samples.a2a_remote.remote_prime_agent.Agent; import com.google.adk.webservice.A2ARemoteConfiguration; +import io.a2a.spec.AgentCapabilities; +import io.a2a.spec.AgentCard; +import io.a2a.spec.AgentSkill; +import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -21,4 +25,30 @@ public static void main(String[] args) { public BaseAgent primeAgent() { return Agent.ROOT_AGENT; } + + @Bean + public AgentCard agentCard() { + return new AgentCard.Builder() + .name("check_prime_agent") + .capabilities(new AgentCapabilities(false, false, false, List.of())) + .description( + "An agent specialized in checking whether numbers are prime. It can efficiently determine the primality of individual numbers or lists of numbers.") + .url("http://localhost:8080/a2a/remote/v1/message:send") + .version("1.0.0") + .defaultInputModes(List.of("text/plain")) + .defaultOutputModes(List.of("application/json")) + .skills( + List.of( + new AgentSkill( + "prime_checking", + "Prime Number Checking", + "Check if numbers in a list are prime using efficient mathematical algorithms", + List.of("mathematical", "computation", "prime", "numbers"), + List.of(), + List.of(), + List.of(), + List.of()))) + .security(List.of()) + .build(); + } } diff --git a/contrib/samples/a2a_remote/remote_prime_agent/Agent.java b/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/remote_prime_agent/Agent.java similarity index 100% rename from contrib/samples/a2a_remote/remote_prime_agent/Agent.java rename to contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/remote_prime_agent/Agent.java diff --git a/contrib/samples/a2a_remote/remote_prime_agent/agent.json b/contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/remote_prime_agent/agent.json similarity index 100% rename from contrib/samples/a2a_remote/remote_prime_agent/agent.json rename to contrib/samples/a2a_remote/src/main/java/com/google/adk/samples/a2a_remote/remote_prime_agent/agent.json diff --git a/pom.xml b/pom.xml index d174f6ad8..0f52647c7 100644 --- a/pom.xml +++ b/pom.xml @@ -28,11 +28,10 @@ core dev maven_plugin + a2a contrib/langchain4j contrib/samples tutorials/city-time-weather - a2a - a2a/webservice