Fix Bedrock Anthropic line separator handling on Windows

Resolves an issue where Bedrock Anthropic failed to handle line separators properly on Windows.

  Resolves #404
This commit is contained in:
Christian Tzolov
2024-03-08 18:24:56 +01:00
parent 680150e9ad
commit 7f60e03054
2 changed files with 14 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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();