Skip to content

Commit b468354

Browse files
Claudio-codetzolov
authored andcommitted
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.
1 parent e63dc6a commit b468354

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatModel.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
* @author luocongqiu
7171
* @author Mariusz Bernacki
7272
* @author Thomas Vitale
73+
* @author Claudio Silva Junior
7374
* @since 1.0.0
7475
*/
7576
public class AnthropicChatModel extends AbstractToolCallSupport implements ChatModel {
@@ -293,6 +294,12 @@ private ChatResponse toChatResponse(ChatCompletionResponse chatCompletion) {
293294

294295
List<Generation> allGenerations = new ArrayList<>(generations);
295296

297+
if (chatCompletion.stopReason() != null && generations.isEmpty()) {
298+
Generation generation = new Generation(new AssistantMessage(null, Map.of()),
299+
ChatGenerationMetadata.from(chatCompletion.stopReason(), null));
300+
allGenerations.add(generation);
301+
}
302+
296303
List<ContentBlock> toolToUseList = chatCompletion.content()
297304
.stream()
298305
.filter(c -> c.type() == ContentBlock.Type.TOOL_USE)

models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelObservationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ void observationForStreamingChatOperation() {
118118
ChatResponseMetadata responseMetadata = lastChatResponse.getMetadata();
119119
assertThat(responseMetadata).isNotNull();
120120

121-
validate(responseMetadata, KeyValue.NONE_VALUE);
121+
validate(responseMetadata, "[\"end_turn\"]");
122122
}
123123

124124
private void validate(ChatResponseMetadata responseMetadata, String finishReasons) {

0 commit comments

Comments
 (0)