From 254dd2e8f7b221c55e6842491d2c631b697e7217 Mon Sep 17 00:00:00 2001 From: ddobrin Date: Tue, 15 Apr 2025 16:29:10 -0400 Subject: [PATCH 1/3] Fixes #2185 - googleSearchRetrieval(true) causes INVALID_ARGUMENT error with Gemini 2.0 (use google_search instead) Signed-off-by: ddobrin --- .../gemini/VertexAiGeminiChatModel.java | 8 +++++--- .../gemini/VertexAiGeminiChatModelIT.java | 17 ++++++++++++++--- pom.xml | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java index 268cbf3ae94..b96fbfdf417 100644 --- a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java +++ b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java @@ -16,6 +16,7 @@ package org.springframework.ai.vertexai.gemini; +import com.google.cloud.vertexai.api.Tool.GoogleSearch; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -713,9 +714,10 @@ GeminiRequest createGeminiRequest(Prompt prompt) { } if (prompt.getOptions() instanceof VertexAiGeminiChatOptions options && options.getGoogleSearchRetrieval()) { - final var googleSearchRetrieval = GoogleSearchRetrieval.newBuilder().getDefaultInstanceForType(); + // final var googleSearchRetrieval = GoogleSearchRetrieval.newBuilder().getDefaultInstanceForType(); + var googleSearch = GoogleSearch.newBuilder().getDefaultInstanceForType(); final var googleSearchRetrievalTool = Tool.newBuilder() - .setGoogleSearchRetrieval(googleSearchRetrieval) + .setGoogleSearch(googleSearch) .build(); tools.add(googleSearchRetrievalTool); } @@ -969,7 +971,7 @@ public enum ChatModel implements ChatModelDescription { GEMINI_2_0_FLASH_LIGHT("gemini-2.0-flash-lite"), - GEMINI_2_5_PRO("gemini-2.5-pro-exp-03-28"); + GEMINI_2_5_PRO("gemini-2.5-pro-exp-03-25"); public final String value; diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java index 176cf111f22..c7adc68b193 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java @@ -88,17 +88,28 @@ void testMessageHistory() { assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } + // Disabled until Gemini 2.5 PRO has an official release + @Disabled @Test - void googleSearchTool() { + void googleSearchToolPro() { Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder() - .model(ChatModel.GEMINI_1_5_PRO) // Only the pro model supports the google - // search tool + .model(ChatModel.GEMINI_2_5_PRO) .googleSearchRetrieval(true) .build()); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } + @Test + void googleSearchToolFlash() { + Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder() + .model(ChatModel.GEMINI_2_0_FLASH) + .googleSearchRetrieval(true) + .build()); + ChatResponse response = this.chatModel.call(prompt); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew", "Bob"); + } + @Test @Disabled void testSafetySettings() { diff --git a/pom.xml b/pom.xml index 3976c81240d..ffc21c360df 100644 --- a/pom.xml +++ b/pom.xml @@ -268,7 +268,7 @@ 0.30.0 1.19.2 3.51.0 - 26.48.0 + 26.59.0 9.20.0 4.37.0 2.2.25 From d2508dfcc38bb73358561364e498d402ea58a911 Mon Sep 17 00:00:00 2001 From: ddobrin Date: Tue, 15 Apr 2025 17:17:00 -0400 Subject: [PATCH 2/3] Fixes #2185 - googleSearchRetrieval(true) causes INVALID_ARGUMENT error with Gemini 2.0 (use google_search instead) Signed-off-by: ddobrin --- .../ai/vertexai/gemini/VertexAiGeminiChatModel.java | 5 +---- .../ai/vertexai/gemini/VertexAiGeminiChatModelIT.java | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java index b96fbfdf417..6b9ad92af33 100644 --- a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java +++ b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java @@ -714,11 +714,8 @@ GeminiRequest createGeminiRequest(Prompt prompt) { } if (prompt.getOptions() instanceof VertexAiGeminiChatOptions options && options.getGoogleSearchRetrieval()) { - // final var googleSearchRetrieval = GoogleSearchRetrieval.newBuilder().getDefaultInstanceForType(); var googleSearch = GoogleSearch.newBuilder().getDefaultInstanceForType(); - final var googleSearchRetrievalTool = Tool.newBuilder() - .setGoogleSearch(googleSearch) - .build(); + final var googleSearchRetrievalTool = Tool.newBuilder().setGoogleSearch(googleSearch).build(); tools.add(googleSearchRetrievalTool); } diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java index c7adc68b193..3dec24540eb 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java @@ -103,9 +103,9 @@ void googleSearchToolPro() { @Test void googleSearchToolFlash() { Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder() - .model(ChatModel.GEMINI_2_0_FLASH) - .googleSearchRetrieval(true) - .build()); + .model(ChatModel.GEMINI_2_0_FLASH) + .googleSearchRetrieval(true) + .build()); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew", "Bob"); } From 8009d245a3dca16cfc1df4df762e73f4345fb32a Mon Sep 17 00:00:00 2001 From: ddobrin Date: Thu, 17 Apr 2025 09:37:26 -0400 Subject: [PATCH 3/3] Fixes #2185 - googleSearchRetrieval(true) causes INVALID_ARGUMENT error with Gemini 2.0 (use google_search instead) Adding DCO signature. Signed-off-by: Dan Dobrin <20207377+ddobrin@users.noreply.github.com> Signed-off-by: ddobrin --- .../ai/vertexai/gemini/VertexAiGeminiChatModelIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java index 3dec24540eb..78575f7dbd8 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java @@ -88,7 +88,7 @@ void testMessageHistory() { assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } - // Disabled until Gemini 2.5 PRO has an official release + // Test disabled until Gemini 2.5 PRO has an official release @Disabled @Test void googleSearchToolPro() {