From b468354dd321de36cff3d4b063309668e136c6ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cclaudio-code=E2=80=9D?= Date: Tue, 24 Sep 2024 00:49:56 -0300 Subject: [PATCH] Improve AnthropicChatModel handling of empty generations - Add handling for cases where ChatCompletion has a stop reason but empty generations. Creates a Generation with empty content and metadata when this occurs. - Update AnthropicChatModelObservationIT to expect "end_turn" finish reason. - Update javadoc. --- .../springframework/ai/anthropic/AnthropicChatModel.java | 7 +++++++ .../ai/anthropic/AnthropicChatModelObservationIT.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatModel.java b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatModel.java index dfa402674..c79b611dc 100644 --- a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatModel.java +++ b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatModel.java @@ -70,6 +70,7 @@ import reactor.core.publisher.Mono; * @author luocongqiu * @author Mariusz Bernacki * @author Thomas Vitale + * @author Claudio Silva Junior * @since 1.0.0 */ public class AnthropicChatModel extends AbstractToolCallSupport implements ChatModel { @@ -293,6 +294,12 @@ public class AnthropicChatModel extends AbstractToolCallSupport implements ChatM List allGenerations = new ArrayList<>(generations); + if (chatCompletion.stopReason() != null && generations.isEmpty()) { + Generation generation = new Generation(new AssistantMessage(null, Map.of()), + ChatGenerationMetadata.from(chatCompletion.stopReason(), null)); + allGenerations.add(generation); + } + List toolToUseList = chatCompletion.content() .stream() .filter(c -> c.type() == ContentBlock.Type.TOOL_USE) diff --git a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelObservationIT.java b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelObservationIT.java index d01de8ee0..e257d8a4f 100644 --- a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelObservationIT.java +++ b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelObservationIT.java @@ -118,7 +118,7 @@ public class AnthropicChatModelObservationIT { ChatResponseMetadata responseMetadata = lastChatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); - validate(responseMetadata, KeyValue.NONE_VALUE); + validate(responseMetadata, "[\"end_turn\"]"); } private void validate(ChatResponseMetadata responseMetadata, String finishReasons) {