From 7f60e03054265db6d3626a3bbc8e8b201b027068 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 8 Mar 2024 18:24:56 +0100 Subject: [PATCH] Fix Bedrock Anthropic line separator handling on Windows Resolves an issue where Bedrock Anthropic failed to handle line separators properly on Windows. Resolves #404 --- .../ai/bedrock/MessageToPromptConverter.java | 16 ++++++++++++---- .../anthropic/BedrockAnthropicChatClient.java | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/MessageToPromptConverter.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/MessageToPromptConverter.java index d20041541..6f2f3301e 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/MessageToPromptConverter.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/MessageToPromptConverter.java @@ -37,11 +37,18 @@ public class MessageToPromptConverter { private String assistantPrompt = ASSISTANT_PROMPT; - private MessageToPromptConverter() { + private final String lineSeparator; + + private MessageToPromptConverter(String lineSeparator) { + this.lineSeparator = lineSeparator; } public static MessageToPromptConverter create() { - return new MessageToPromptConverter(); + return create(System.lineSeparator()); + } + + public static MessageToPromptConverter create(String lineSeparator) { + return new MessageToPromptConverter(lineSeparator); } public MessageToPromptConverter withHumanPrompt(String humanPrompt) { @@ -67,8 +74,9 @@ public class MessageToPromptConverter { .map(this::messageToString) .collect(Collectors.joining(System.lineSeparator())); - final String prompt = systemMessages + System.lineSeparator() + System.lineSeparator() + userMessages - + System.lineSeparator() + ASSISTANT_PROMPT; + // Related to: https://github.com/spring-projects/spring-ai/issues/404 + final String prompt = systemMessages + this.lineSeparator + this.lineSeparator + userMessages + + this.lineSeparator + ASSISTANT_PROMPT; return prompt; } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java index 0eb9f9696..26b887344 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java @@ -93,7 +93,8 @@ public class BedrockAnthropicChatClient implements ChatClient, StreamingChatClie */ AnthropicChatRequest createRequest(Prompt prompt) { - final String promptValue = MessageToPromptConverter.create().toPrompt(prompt.getInstructions()); + // Related to: https://github.com/spring-projects/spring-ai/issues/404 + final String promptValue = MessageToPromptConverter.create("\n").toPrompt(prompt.getInstructions()); AnthropicChatRequest request = AnthropicChatRequest.builder(promptValue).build();