Skip to content

Commit 6253677

Browse files
committed
fixed bug in anthropic cache
1 parent e3bb1fe commit 6253677

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@
1616

1717
package org.springframework.ai.anthropic;
1818

19-
import java.util.ArrayList;
20-
import java.util.Base64;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
24-
import java.util.Set;
19+
import java.util.*;
2520
import java.util.stream.Collectors;
2621

2722
import com.fasterxml.jackson.core.type.TypeReference;
@@ -30,6 +25,7 @@
3025
import io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor;
3126
import org.slf4j.Logger;
3227
import org.slf4j.LoggerFactory;
28+
import org.springframework.ai.chat.messages.*;
3329
import reactor.core.publisher.Flux;
3430
import reactor.core.publisher.Mono;
3531
import reactor.core.scheduler.Schedulers;
@@ -43,11 +39,6 @@
4339
import org.springframework.ai.anthropic.api.AnthropicApi.ContentBlock.Type;
4440
import org.springframework.ai.anthropic.api.AnthropicApi.Role;
4541
import org.springframework.ai.anthropic.api.AnthropicCacheType;
46-
import org.springframework.ai.chat.messages.AbstractMessage;
47-
import org.springframework.ai.chat.messages.AssistantMessage;
48-
import org.springframework.ai.chat.messages.MessageType;
49-
import org.springframework.ai.chat.messages.ToolResponseMessage;
50-
import org.springframework.ai.chat.messages.UserMessage;
5142
import org.springframework.ai.chat.metadata.ChatGenerationMetadata;
5243
import org.springframework.ai.chat.metadata.ChatResponseMetadata;
5344
import org.springframework.ai.chat.metadata.DefaultUsage;
@@ -429,14 +420,20 @@ private Map<String, String> mergeHttpHeaders(Map<String, String> runtimeHttpHead
429420

430421
ChatCompletionRequest createRequest(Prompt prompt, boolean stream) {
431422

423+
Optional<Message> lastMessage = prompt.getInstructions()
424+
.stream()
425+
.filter(message -> message.getMessageType() != MessageType.SYSTEM)
426+
.findFirst();
427+
432428
List<AnthropicMessage> userMessages = prompt.getInstructions()
433429
.stream()
434430
.filter(message -> message.getMessageType() != MessageType.SYSTEM)
435431
.map(message -> {
436432
if (message.getMessageType() == MessageType.USER) {
437433
AbstractMessage abstractMessage = (AbstractMessage) message;
438434
List<ContentBlock> contents;
439-
if (abstractMessage.getCache() != null) {
435+
boolean isLastItem = lastMessage.filter(message::equals).isPresent();
436+
if (isLastItem && abstractMessage.getCache() != null) {
440437
AnthropicCacheType cacheType = AnthropicCacheType.valueOf(abstractMessage.getCache());
441438
contents = new ArrayList<>(
442439
List.of(new ContentBlock(message.getText(), cacheType.cacheControl())));

0 commit comments

Comments
 (0)