diff --git a/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java b/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java index c34f8fbb2..d5ff9492c 100644 --- a/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java +++ b/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java @@ -62,7 +62,7 @@ public Completable processLlmRequest( updatedToolsBuilder.addAll(existingTools); String model = llmRequestBuilder.build().model().orElse(null); - if (model != null && (model.startsWith("gemini-2") || model.startsWith("gemini-3"))) { + if (isSupportedModel(model)) { updatedToolsBuilder.add(Tool.builder().googleSearch(GoogleSearch.builder().build()).build()); configBuilder.tools(updatedToolsBuilder.build()); @@ -74,4 +74,13 @@ public Completable processLlmRequest( llmRequestBuilder.config(configBuilder.build()); return Completable.complete(); } + + private boolean isSupportedModel(String model) { + if (model == null || !model.startsWith("gemini-")) { + return false; + } + return model.startsWith("gemini-2") + || model.startsWith("gemini-3") + || model.endsWith("-latest"); + } } diff --git a/core/src/test/java/com/google/adk/tools/BaseToolTest.java b/core/src/test/java/com/google/adk/tools/BaseToolTest.java index 40865cc41..513297d93 100644 --- a/core/src/test/java/com/google/adk/tools/BaseToolTest.java +++ b/core/src/test/java/com/google/adk/tools/BaseToolTest.java @@ -166,6 +166,33 @@ public void processLlmRequestWithGoogleSearchToolAddsToolToConfig() { Tool.builder().googleSearch(GoogleSearch.builder().build()).build()); } + @Test + public void processLlmRequestWithLatestAliasAddsToolToConfig() { + final GoogleSearchTool googleSearchTool = new GoogleSearchTool(); + LlmRequest.Builder builder = + LlmRequest.builder().model("gemini-flash-latest").build().toBuilder(); + Completable result = googleSearchTool.processLlmRequest(builder, null); + result.test().assertComplete(); + assertThat(builder.build().config().get().tools().get()) + .contains(Tool.builder().googleSearch(GoogleSearch.builder().build()).build()); + } + + @Test + public void processLlmRequestWithUnsupportedModelReturnsError() { + final GoogleSearchTool googleSearchTool = new GoogleSearchTool(); + LlmRequest.Builder builder = LlmRequest.builder().model("text-bison-001").build().toBuilder(); + Completable result = googleSearchTool.processLlmRequest(builder, null); + result.test().assertError(IllegalArgumentException.class); + } + + @Test + public void processLlmRequest_WithNullModel_ReturnsError() { + final GoogleSearchTool googleSearchTool = new GoogleSearchTool(); + LlmRequest.Builder builder = LlmRequest.builder().build().toBuilder(); + Completable result = googleSearchTool.processLlmRequest(builder, null); + result.test().assertError(IllegalArgumentException.class); + } + @Test public void processLlmRequestWithUrlContextToolAddsToolToConfig() { FunctionDeclaration functionDeclaration =