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 a198cdcea..83d639ad4 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 @@ -28,6 +28,7 @@ import com.google.cloud.vertexai.api.GenerationConfig; import com.google.cloud.vertexai.api.Part; import com.google.cloud.vertexai.api.Schema; import com.google.cloud.vertexai.api.Tool; +import com.google.cloud.vertexai.generativeai.ContentMaker; import com.google.cloud.vertexai.generativeai.GenerativeModel; import com.google.cloud.vertexai.generativeai.PartMaker; import com.google.cloud.vertexai.generativeai.ResponseStream; @@ -258,6 +259,16 @@ public class VertexAiGeminiChatModel GenerativeModel generativeModel = generativeModelBuilder.build(); + String systemContext = prompt.getInstructions() + .stream() + .filter(m -> m.getMessageType() == MessageType.SYSTEM) + .map(m -> m.getContent()) + .collect(Collectors.joining(System.lineSeparator())); + + if (StringUtils.hasText(systemContext)) { + generativeModel.withSystemInstruction(ContentMaker.fromString(systemContext)); + } + return new GeminiRequest(toGeminiContent(prompt), generativeModel); } @@ -289,18 +300,12 @@ public class VertexAiGeminiChatModel private List toGeminiContent(Prompt prompt) { - String systemContext = prompt.getInstructions() - .stream() - .filter(m -> m.getMessageType() == MessageType.SYSTEM) - .map(m -> m.getContent()) - .collect(Collectors.joining(System.lineSeparator())); - List contents = prompt.getInstructions() .stream() .filter(m -> m.getMessageType() == MessageType.USER || m.getMessageType() == MessageType.ASSISTANT) .map(message -> Content.newBuilder() .setRole(toGeminiMessageType(message.getMessageType()).getValue()) - .addAllParts(messageToGeminiParts(message, systemContext)) + .addAllParts(messageToGeminiParts(message)) .build()) .toList(); @@ -321,14 +326,11 @@ public class VertexAiGeminiChatModel } } - static List messageToGeminiParts(Message message, String systemContext) { + static List messageToGeminiParts(Message message) { if (message instanceof UserMessage userMessage) { String messageTextContent = (userMessage.getContent() == null) ? "null" : userMessage.getContent(); - if (StringUtils.hasText(systemContext)) { - messageTextContent = systemContext + "\n\n" + messageTextContent; - } Part textPart = Part.newBuilder().setText(messageTextContent).build(); List parts = new ArrayList<>(List.of(textPart)); diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java index a936fccb7..8f447c70f 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java @@ -28,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.messages.Message; -import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.model.Generation;