diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java index e84ad252042..3292a3deeb3 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Base64; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -48,6 +49,7 @@ * * @author Ben Middleton * @author Christian Tzolov + * @author Wei Jiang * @since 1.0.0 */ public class BedrockAnthropic3ChatModel implements ChatModel, StreamingChatModel { @@ -78,7 +80,12 @@ public ChatResponse call(Prompt prompt) { AnthropicChatResponse response = this.anthropicChatApi.chatCompletion(request); - return new ChatResponse(List.of(new Generation(response.content().get(0).text()))); + List generations = response.content().stream().map(content -> { + return new Generation(content.text(), Map.of()) + .withGenerationMetadata(ChatGenerationMetadata.from(response.stopReason(), null)); + }).toList(); + + return new ChatResponse(generations); } @Override diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java index 7e31a8f0174..2bc0a84c59d 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java @@ -217,6 +217,17 @@ void multiModalityTest() throws IOException { assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket"); } + @Test + void stopSequencesWithEmptyContents() { + Anthropic3ChatOptions chatOptions = new Anthropic3ChatOptions(); + chatOptions.setStopSequences(List.of("Hello")); + + var response = chatModel.call(new Prompt("hi", chatOptions)); + + assertThat(response).isNotNull(); + assertThat(response.getResults()).isEmpty(); + } + @SpringBootConfiguration public static class TestConfiguration {