Skip to content

Commit fac72eb

Browse files
committed
Fixed remaining tests
Signed-off-by: ddobrin <[email protected]>
1 parent 1d18d4b commit fac72eb

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

models/spring-ai-google-genai/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package org.springframework.ai.vertexai.gemini;
1818

19+
import java.net.URI;
1920
import java.util.ArrayList;
2021
import java.util.Collection;
22+
import java.util.HashMap;
2123
import java.util.List;
2224
import java.util.Map;
2325

@@ -311,7 +313,20 @@ private static List<Part> mediaToParts(Collection<Media> media) {
311313
List<Part> parts = new ArrayList<>();
312314

313315
List<Part> mediaParts = media.stream()
314-
.map(mediaData -> Part.fromBytes((byte[]) mediaData.getData(), mediaData.getMimeType().toString()))
316+
.map(mediaData -> {
317+
Object data = mediaData.getData();
318+
String mimeType = mediaData.getMimeType().toString();
319+
320+
if (data instanceof byte[]) {
321+
return Part.fromBytes((byte[]) data, mimeType);
322+
} else if (data instanceof URI || data instanceof String) {
323+
// Handle URI or String URLs
324+
String uri = data.toString();
325+
return Part.fromUri(uri, mimeType);
326+
} else {
327+
throw new IllegalArgumentException("Unsupported media data type: " + data.getClass());
328+
}
329+
})
315330
.toList();
316331

317332
if (!CollectionUtils.isEmpty(mediaParts)) {
@@ -324,7 +339,22 @@ private static List<Part> mediaToParts(Collection<Media> media) {
324339
// Helper methods for JSON/Map conversion
325340
private static Map<String, Object> parseJsonToMap(String json) {
326341
try {
327-
return ModelOptionsUtils.OBJECT_MAPPER.readValue(json, Map.class);
342+
// First, try to parse as an array
343+
Object parsed = ModelOptionsUtils.OBJECT_MAPPER.readValue(json, Object.class);
344+
if (parsed instanceof List) {
345+
// It's an array, wrap it in a map with "result" key
346+
Map<String, Object> wrapper = new HashMap<>();
347+
wrapper.put("result", parsed);
348+
return wrapper;
349+
} else if (parsed instanceof Map) {
350+
// It's already a map, return it
351+
return (Map<String, Object>) parsed;
352+
} else {
353+
// It's a primitive or other type, wrap it
354+
Map<String, Object> wrapper = new HashMap<>();
355+
wrapper.put("result", parsed);
356+
return wrapper;
357+
}
328358
}
329359
catch (Exception e) {
330360
throw new RuntimeException("Failed to parse JSON: " + json, e);
@@ -949,7 +979,7 @@ public enum ChatModel implements ChatModelDescription {
949979
* See: <a href=
950980
* "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-pro">gemini-2.5-pro</a>
951981
*/
952-
GEMINI_2_5_PRO("gemini-2.5-pro-preview-05-06"),
982+
GEMINI_2_5_PRO("gemini-2.5-pro"),
953983

954984
/**
955985
* <b>gemini-2.5-flash</b> is a thinking model that offers great, well-rounded
@@ -965,7 +995,7 @@ public enum ChatModel implements ChatModelDescription {
965995
* See: <a href=
966996
* "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash">gemini-2.5-flash</a>
967997
*/
968-
GEMINI_2_5_FLASH("gemini-2.5-flash-preview-04-17");
998+
GEMINI_2_5_FLASH("gemini-2.5-flash");
969999

9701000
public final String value;
9711001

models/spring-ai-google-genai/src/test/java/org/springframework/ai/vertexai/gemini/CreateGeminiRequestTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public void defaultOptionsTools() {
233233
assertThat(tool.functionDeclarations()).isPresent();
234234
assertThat(tool.functionDeclarations().get()).hasSize(1);
235235
assertThat(tool.functionDeclarations().get().get(0).name()).as("Explicitly enabled function")
236-
.isEqualTo(TOOL_FUNCTION_NAME);
236+
.isEqualTo(String.format(TOOL_FUNCTION_NAME));
237237

238238
// Override the default options function with one from the prompt
239239
requestPrompt = client.buildRequestPrompt(new Prompt("Test message content",

models/spring-ai-google-genai/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ void testMessageHistory() {
9191
assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew");
9292
}
9393

94-
// Disabled until Gemini 2.5 PRO has an official release
95-
@Disabled
9694
@Test
9795
void googleSearchToolPro() {
9896
Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder()
@@ -131,7 +129,7 @@ void testSafetySettings() {
131129

132130
@NonNull
133131
private Prompt createPrompt(VertexAiGeminiChatOptions chatOptions) {
134-
String request = "Tell me about 3 famous pirates from the Golden Age of Piracy and why they did.";
132+
String request = "Name 3 famous pirates from the Golden Age of Piracy and what they did.";
135133
String name = "Bob";
136134
String voice = "pirate";
137135
UserMessage userMessage = new UserMessage(request);

0 commit comments

Comments
 (0)