diff --git a/document-readers/markdown-reader/src/main/java/org/springframework/ai/reader/markdown/MarkdownDocumentReader.java b/document-readers/markdown-reader/src/main/java/org/springframework/ai/reader/markdown/MarkdownDocumentReader.java index 393846724..630c20341 100644 --- a/document-readers/markdown-reader/src/main/java/org/springframework/ai/reader/markdown/MarkdownDocumentReader.java +++ b/document-readers/markdown-reader/src/main/java/org/springframework/ai/reader/markdown/MarkdownDocumentReader.java @@ -226,7 +226,7 @@ public class MarkdownDocumentReader implements DocumentReader { if (!this.currentParagraphs.isEmpty()) { String content = String.join("", this.currentParagraphs); - Document.Builder builder = this.currentDocumentBuilder.content(content); + Document.Builder builder = this.currentDocumentBuilder.text(content); this.config.additionalMetadata.forEach(builder::metadata); 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 89e8648a0..c68fb6d29 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 @@ -378,7 +378,7 @@ public class AnthropicChatModel extends AbstractToolCallSupport implements ChatM .filter(message -> message.getMessageType() != MessageType.SYSTEM) .map(message -> { if (message.getMessageType() == MessageType.USER) { - List contents = new ArrayList<>(List.of(new ContentBlock(message.getContent()))); + List contents = new ArrayList<>(List.of(new ContentBlock(message.getText()))); if (message instanceof UserMessage userMessage) { if (!CollectionUtils.isEmpty(userMessage.getMedia())) { List mediaContent = userMessage.getMedia().stream().map(media -> { @@ -395,8 +395,8 @@ public class AnthropicChatModel extends AbstractToolCallSupport implements ChatM else if (message.getMessageType() == MessageType.ASSISTANT) { AssistantMessage assistantMessage = (AssistantMessage) message; List contentBlocks = new ArrayList<>(); - if (StringUtils.hasText(message.getContent())) { - contentBlocks.add(new ContentBlock(message.getContent())); + if (StringUtils.hasText(message.getText())) { + contentBlocks.add(new ContentBlock(message.getText())); } if (!CollectionUtils.isEmpty(assistantMessage.getToolCalls())) { for (AssistantMessage.ToolCall toolCall : assistantMessage.getToolCalls()) { @@ -423,7 +423,7 @@ public class AnthropicChatModel extends AbstractToolCallSupport implements ChatM String systemPrompt = prompt.getInstructions() .stream() .filter(m -> m.getMessageType() == MessageType.SYSTEM) - .map(m -> m.getContent()) + .map(m -> m.getText()) .collect(Collectors.joining(System.lineSeparator())); ChatCompletionRequest request = new ChatCompletionRequest(this.defaultOptions.getModel(), userMessages, diff --git a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelIT.java b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelIT.java index 0777acf5b..aa62746bc 100644 --- a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelIT.java +++ b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatModelIT.java @@ -105,7 +105,7 @@ class AnthropicChatModelIT { .isEqualTo(response.getMetadata().getUsage().getPromptTokens() + response.getMetadata().getUsage().getGenerationTokens()); Generation generation = response.getResults().get(0); - assertThat(generation.getOutput().getContent()).contains("Blackbeard"); + assertThat(generation.getOutput().getText()).contains("Blackbeard"); assertThat(generation.getMetadata().getFinishReason()).isEqualTo("end_turn"); logger.info(response.toString()); } @@ -120,13 +120,13 @@ class AnthropicChatModelIT { AnthropicChatOptions.builder().withModel("claude-3-sonnet-20240229").build()); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Dummy"), response.getResult().getOutput(), new UserMessage("Repeat the last assistant message."))); response = this.chatModel.call(promptWithMessageHistory); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @Test @@ -162,7 +162,7 @@ class AnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = listOutputConverter.convert(generation.getOutput().getContent()); + List list = listOutputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -180,7 +180,7 @@ class AnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = mapOutputConverter.convert(generation.getOutput().getContent()); + Map result = mapOutputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -199,7 +199,7 @@ class AnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -225,7 +225,7 @@ class AnthropicChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generationTextFromStream); @@ -244,8 +244,8 @@ class AnthropicChatModelIT { var response = this.chatModel.call(new Prompt(List.of(userMessage))); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("banan", "apple", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("banan", "apple", "basket"); } @Test @@ -262,7 +262,7 @@ class AnthropicChatModelIT { .withModel(AnthropicApi.ChatModel.CLAUDE_3_5_SONNET.getName()) .build())); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Spring AI", "portable API"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Spring AI", "portable API"); } @Test @@ -288,7 +288,7 @@ class AnthropicChatModelIT { logger.info("Response: {}", response); Generation generation = response.getResult(); - assertThat(generation.getOutput().getContent()).contains("30", "10", "15"); + assertThat(generation.getOutput().getText()).contains("30", "10", "15"); } @Test @@ -317,7 +317,7 @@ class AnthropicChatModelIT { .block() .stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", content); 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 4eec3d349..af423708d 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 @@ -79,7 +79,7 @@ public class AnthropicChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -109,7 +109,7 @@ public class AnthropicChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() .filter(r -> r.getResult() != null) - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/client/AnthropicChatClientIT.java b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/client/AnthropicChatClientIT.java index f6d1a8891..41b53b180 100644 --- a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/client/AnthropicChatClientIT.java +++ b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/client/AnthropicChatClientIT.java @@ -84,7 +84,7 @@ class AnthropicChatClientIT { logger.info("" + response); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test diff --git a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatModel.java b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatModel.java index 04de1e3e4..226a9eef0 100644 --- a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatModel.java +++ b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatModel.java @@ -402,7 +402,7 @@ public class AzureOpenAiChatModel extends AbstractToolCallSupport implements Cha case USER: // https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/openai/azure-ai-openai/README.md#text-completions-with-images List items = new ArrayList<>(); - items.add(new ChatMessageTextContentItem(message.getContent())); + items.add(new ChatMessageTextContentItem(message.getText())); if (message instanceof UserMessage userMessage) { if (!CollectionUtils.isEmpty(userMessage.getMedia())) { items.addAll(userMessage.getMedia() @@ -413,7 +413,7 @@ public class AzureOpenAiChatModel extends AbstractToolCallSupport implements Cha } return List.of(new ChatRequestUserMessage(items)); case SYSTEM: - return List.of(new ChatRequestSystemMessage(message.getContent())); + return List.of(new ChatRequestSystemMessage(message.getText())); case ASSISTANT: AssistantMessage assistantMessage = (AssistantMessage) message; List toolCalls = null; @@ -425,7 +425,7 @@ public class AzureOpenAiChatModel extends AbstractToolCallSupport implements Cha .map(tc -> ((ChatCompletionsToolCall) tc)) // !!! .toList(); } - var azureAssistantMessage = new ChatRequestAssistantMessage(message.getContent()); + var azureAssistantMessage = new ChatRequestAssistantMessage(message.getText()); azureAssistantMessage.setToolCalls(toolCalls); return List.of(azureAssistantMessage); case TOOL: diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatClientIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatClientIT.java index e974743fc..6836a06a6 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatClientIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatClientIT.java @@ -68,7 +68,7 @@ public class AzureOpenAiChatClientIT { // @formatter:on assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -94,7 +94,7 @@ public class AzureOpenAiChatClientIT { String generationTextFromStream = chatResponses .stream() - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); // @formatter:on diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelIT.java index 8bf66e618..04b34be64 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelIT.java @@ -77,7 +77,7 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -96,14 +96,14 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Dummy"), response.getResult().getOutput(), new UserMessage("Repeat the last assistant message."))); response = this.chatModel.call(promptWithMessageHistory); - System.out.println(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard"); + System.out.println(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard"); } @Test @@ -121,7 +121,7 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -140,7 +140,7 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -159,7 +159,7 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isNotNull(); } @@ -177,7 +177,7 @@ class AzureOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -203,7 +203,7 @@ class AzureOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(Objects::nonNull) .collect(Collectors.joining()); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelObservationIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelObservationIT.java index 924ea78f7..6367ec7e9 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelObservationIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatModelObservationIT.java @@ -76,7 +76,7 @@ class AzureOpenAiChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -106,7 +106,7 @@ class AzureOpenAiChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatModelFunctionCallIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatModelFunctionCallIT.java index 8adb93fed..a80817cd1 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatModelFunctionCallIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatModelFunctionCallIT.java @@ -80,7 +80,7 @@ class AzureOpenAiChatModelFunctionCallIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -104,7 +104,7 @@ class AzureOpenAiChatModelFunctionCallIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -132,7 +132,7 @@ class AzureOpenAiChatModelFunctionCallIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -169,7 +169,7 @@ class AzureOpenAiChatModelFunctionCallIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(Objects::nonNull) .collect(Collectors.joining()); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatModelMetadataTests.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatModelMetadataTests.java index 8de56f2db..97e95bebb 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatModelMetadataTests.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatModelMetadataTests.java @@ -84,7 +84,7 @@ class AzureOpenAiChatModelMetadataTests { assertThat(generation).isNotNull() .extracting(Generation::getOutput) - .extracting(AssistantMessage::getContent) + .extracting(AssistantMessage::getText) .isEqualTo("No! You will actually land with a resounding thud. This is the way!"); // assertPromptMetadata(response); diff --git a/models/spring-ai-bedrock-converse/src/main/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModel.java b/models/spring-ai-bedrock-converse/src/main/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModel.java index 15394e044..9bf22cf59 100644 --- a/models/spring-ai-bedrock-converse/src/main/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModel.java +++ b/models/spring-ai-bedrock-converse/src/main/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModel.java @@ -259,7 +259,7 @@ public class BedrockProxyChatModel extends AbstractToolCallSupport implements Ch List contents = new ArrayList<>(); if (message instanceof UserMessage) { var userMessage = (UserMessage) message; - contents.add(ContentBlock.fromText(userMessage.getContent())); + contents.add(ContentBlock.fromText(userMessage.getText())); if (!CollectionUtils.isEmpty(userMessage.getMedia())) { List mediaContent = userMessage.getMedia() @@ -274,8 +274,8 @@ public class BedrockProxyChatModel extends AbstractToolCallSupport implements Ch else if (message.getMessageType() == MessageType.ASSISTANT) { AssistantMessage assistantMessage = (AssistantMessage) message; List contentBlocks = new ArrayList<>(); - if (StringUtils.hasText(message.getContent())) { - contentBlocks.add(ContentBlock.fromText(message.getContent())); + if (StringUtils.hasText(message.getText())) { + contentBlocks.add(ContentBlock.fromText(message.getText())); } if (!CollectionUtils.isEmpty(assistantMessage.getToolCalls())) { for (AssistantMessage.ToolCall toolCall : assistantMessage.getToolCalls()) { @@ -315,7 +315,7 @@ public class BedrockProxyChatModel extends AbstractToolCallSupport implements Ch List systemMessages = prompt.getInstructions() .stream() .filter(m -> m.getMessageType() == MessageType.SYSTEM) - .map(sysMessage -> SystemContentBlock.builder().text(sysMessage.getContent()).build()) + .map(sysMessage -> SystemContentBlock.builder().text(sysMessage.getText()).build()) .toList(); FunctionCallingOptions updatedRuntimeOptions = (FunctionCallingOptions) this.defaultOptions.copy(); diff --git a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseChatClientIT.java b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseChatClientIT.java index 5317e31a7..d34f92028 100644 --- a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseChatClientIT.java +++ b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseChatClientIT.java @@ -79,7 +79,7 @@ class BedrockConverseChatClientIT { logger.info("" + response); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -196,7 +196,7 @@ class BedrockConverseChatClientIT { String generationTextFromStream = chatResponses .stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); // @formatter:on @@ -259,7 +259,7 @@ class BedrockConverseChatClientIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -340,7 +340,7 @@ class BedrockConverseChatClientIT { String content = chatResponses.stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseUsageAggregationTests.java b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseUsageAggregationTests.java index 097982d3e..e4d747435 100644 --- a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseUsageAggregationTests.java +++ b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockConverseUsageAggregationTests.java @@ -83,7 +83,7 @@ public class BedrockConverseUsageAggregationTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response Content Block"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response Content Block"); assertThat(result.getMetadata().getUsage().getPromptTokens()).isEqualTo(16); assertThat(result.getMetadata().getUsage().getGenerationTokens()).isEqualTo(14); @@ -148,7 +148,7 @@ public class BedrockConverseUsageAggregationTests { PortableFunctionCallingOptions.builder().withFunctionCallbacks(functionCallback).build())); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()) + assertThat(result.getResult().getOutput().getText()) .isSameAs(converseResponseFinal.output().message().content().get(0).text()); assertThat(result.getMetadata().getUsage().getPromptTokens()).isEqualTo(445 + 540); diff --git a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelIT.java b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelIT.java index 54b2f5f3f..7913db9b5 100644 --- a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelIT.java +++ b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelIT.java @@ -101,7 +101,7 @@ class BedrockProxyChatModelIT { .isEqualTo(response.getMetadata().getUsage().getPromptTokens() + response.getMetadata().getUsage().getGenerationTokens()); Generation generation = response.getResults().get(0); - assertThat(generation.getOutput().getContent()).contains("Blackbeard"); + assertThat(generation.getOutput().getText()).contains("Blackbeard"); assertThat(generation.getMetadata().getFinishReason()).isEqualTo("end_turn"); logger.info(response.toString()); } @@ -116,14 +116,14 @@ class BedrockProxyChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Dummy"), response.getResult().getOutput(), new UserMessage("Repeat the last assistant message."))); response = this.chatModel.call(promptWithMessageHistory); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @Test @@ -159,7 +159,7 @@ class BedrockProxyChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = listOutputConverter.convert(generation.getOutput().getContent()); + List list = listOutputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -177,7 +177,7 @@ class BedrockProxyChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = mapOutputConverter.convert(generation.getOutput().getContent()); + Map result = mapOutputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -196,7 +196,7 @@ class BedrockProxyChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -222,7 +222,7 @@ class BedrockProxyChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generationTextFromStream); @@ -241,8 +241,8 @@ class BedrockProxyChatModelIT { var response = this.chatModel.call(new Prompt(List.of(userMessage))); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("banan", "apple", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("banan", "apple", "basket"); } @Test @@ -267,7 +267,7 @@ class BedrockProxyChatModelIT { logger.info("Response: {}", response); Generation generation = response.getResult(); - assertThat(generation.getOutput().getContent()).contains("30", "10", "15"); + assertThat(generation.getOutput().getText()).contains("30", "10", "15"); } @Test @@ -296,7 +296,7 @@ class BedrockProxyChatModelIT { .block() .stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelObservationIT.java b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelObservationIT.java index 1b2be8a27..07c79bdae 100644 --- a/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelObservationIT.java +++ b/models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelObservationIT.java @@ -80,7 +80,7 @@ public class BedrockProxyChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -109,7 +109,7 @@ public class BedrockProxyChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() .filter(r -> r.getResult() != null) - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); 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 fb42f6b6f..7117a8370 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 @@ -66,7 +66,7 @@ public final class MessageToPromptConverter { final String systemMessages = messages.stream() .filter(message -> message.getMessageType() == MessageType.SYSTEM) - .map(Message::getContent) + .map(Message::getText) .collect(Collectors.joining(System.lineSeparator())); final String userMessages = messages.stream() @@ -83,11 +83,11 @@ public final class MessageToPromptConverter { protected String messageToString(Message message) { switch (message.getMessageType()) { case SYSTEM: - return message.getContent(); + return message.getText(); case USER: - return this.humanPrompt + " " + message.getContent(); + return this.humanPrompt + " " + message.getText(); case ASSISTANT: - return this.assistantPrompt + " " + message.getContent(); + return this.assistantPrompt + " " + message.getText(); case TOOL: throw new IllegalArgumentException("Tool execution results are not supported for Bedrock models"); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java index a9d1a620f..9a5b35da8 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java @@ -164,7 +164,7 @@ public class BedrockAnthropic3ChatModel implements ChatModel, StreamingChatModel return prompt.getInstructions() .stream() .filter(m -> m.getMessageType() == MessageType.SYSTEM) - .map(Message::getContent) + .map(Message::getText) .collect(Collectors.joining(System.lineSeparator())); } @@ -179,7 +179,7 @@ public class BedrockAnthropic3ChatModel implements ChatModel, StreamingChatModel .stream() .filter(m -> m.getMessageType() == MessageType.USER || m.getMessageType() == MessageType.ASSISTANT) .map(message -> { - List contents = new ArrayList<>(List.of(new MediaContent(message.getContent()))); + List contents = new ArrayList<>(List.of(new MediaContent(message.getText()))); if (message instanceof UserMessage userMessage) { if (!CollectionUtils.isEmpty(userMessage.getMedia())) { List mediaContent = userMessage.getMedia() diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModelIT.java index 0ccd002d7..c11bf0e0b 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModelIT.java @@ -79,7 +79,7 @@ class BedrockAnthropicChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); String joke2 = joke2Stream.collectList() .block() @@ -87,7 +87,7 @@ class BedrockAnthropicChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(joke1).isNotBlank(); @@ -105,7 +105,7 @@ class BedrockAnthropicChatModelIT { ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -123,7 +123,7 @@ class BedrockAnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = converter.convert(generation.getOutput().getContent()); + List list = converter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -142,7 +142,7 @@ class BedrockAnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -164,7 +164,7 @@ class BedrockAnthropicChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -190,7 +190,7 @@ class BedrockAnthropicChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java index d2d906035..59bf29345 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModelIT.java @@ -82,7 +82,7 @@ class BedrockAnthropic3ChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); String joke2 = joke2Stream.collectList() .block() @@ -90,7 +90,7 @@ class BedrockAnthropic3ChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(joke1).isNotBlank(); @@ -108,7 +108,7 @@ class BedrockAnthropic3ChatModelIT { ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -126,7 +126,7 @@ class BedrockAnthropic3ChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -145,7 +145,7 @@ class BedrockAnthropic3ChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -166,7 +166,7 @@ class BedrockAnthropic3ChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -192,7 +192,7 @@ class BedrockAnthropic3ChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -211,8 +211,8 @@ class BedrockAnthropic3ChatModelIT { var response = this.chatModel.call(new Prompt(List.of(userMessage))); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple", "basket"); } @Test diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModelIT.java index 2dc38802a..4702c6ca1 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModelIT.java @@ -77,7 +77,7 @@ class BedrockCohereChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); String joke2 = joke2Stream.collectList() .block() @@ -85,7 +85,7 @@ class BedrockCohereChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(joke1).isNotBlank(); @@ -102,7 +102,7 @@ class BedrockCohereChatModelIT { Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -120,7 +120,7 @@ class BedrockCohereChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -139,7 +139,7 @@ class BedrockCohereChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -159,7 +159,7 @@ class BedrockCohereChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -185,7 +185,7 @@ class BedrockCohereChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModelIT.java index 8b20091c9..248eef7c9 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModelIT.java @@ -67,7 +67,7 @@ class BedrockAi21Jurassic2ChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - String content = response.getResult().getOutput().getContent(); + String content = response.getResult().getOutput().getText(); // System.out.println("Response content: " + content); @@ -96,9 +96,9 @@ class BedrockAi21Jurassic2ChatModelIT { Prompt prompt = new Prompt(List.of(userMessage), options); ChatResponse response = this.chatModel.call(prompt); - - assertThat(response.getResult().getOutput().getContent()) + assertThat(response.getResult().getOutput().getText()) .matches(content -> content.contains("😄") || content.contains(":)")); + } @Test @@ -118,7 +118,7 @@ class BedrockAi21Jurassic2ChatModelIT { ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).doesNotContain("😄"); + assertThat(response.getResult().getOutput().getText()).doesNotContain("😄"); } @Test @@ -135,7 +135,7 @@ class BedrockAi21Jurassic2ChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -151,7 +151,7 @@ class BedrockAi21Jurassic2ChatModelIT { ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("AI"); + assertThat(response.getResult().getOutput().getText()).contains("AI"); } @SpringBootConfiguration diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModelIT.java index 1e5ad7b87..8a7c278ef 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModelIT.java @@ -75,7 +75,7 @@ class BedrockLlamaChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); String joke2 = joke2Stream.collectList() .block() @@ -83,7 +83,7 @@ class BedrockLlamaChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(joke1).isNotBlank(); @@ -103,8 +103,7 @@ class BedrockLlamaChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - - assertThat(response.getResult().getOutput().getContent()).satisfies(content -> { + assertThat(response.getResult().getOutput().getText()).satisfies(content -> { // Check for name assertThat(content).contains("Bob"); @@ -129,7 +128,7 @@ class BedrockLlamaChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -147,7 +146,7 @@ class BedrockLlamaChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -168,7 +167,7 @@ class BedrockLlamaChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -194,7 +193,7 @@ class BedrockLlamaChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModelIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModelIT.java index 40f674783..8f012288e 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModelIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModelIT.java @@ -76,7 +76,7 @@ class BedrockTitanChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); String joke2 = joke2Stream.collectList() .block() @@ -84,7 +84,7 @@ class BedrockTitanChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(joke1).isNotBlank(); @@ -101,7 +101,7 @@ class BedrockTitanChatModelIT { Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -119,7 +119,7 @@ class BedrockTitanChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -139,7 +139,7 @@ class BedrockTitanChatModelIT { Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -160,7 +160,7 @@ class BedrockTitanChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -187,7 +187,7 @@ class BedrockTitanChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-huggingface/src/test/java/org/springframework/ai/huggingface/client/ClientIT.java b/models/spring-ai-huggingface/src/test/java/org/springframework/ai/huggingface/client/ClientIT.java index 94f6bd81f..ce84e2a3d 100644 --- a/models/spring-ai-huggingface/src/test/java/org/springframework/ai/huggingface/client/ClientIT.java +++ b/models/spring-ai-huggingface/src/test/java/org/springframework/ai/huggingface/client/ClientIT.java @@ -51,14 +51,14 @@ public class ClientIT { """; Prompt prompt = new Prompt(mistral7bInstruct); ChatResponse chatResponse = this.huggingfaceChatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); String expectedResponse = """ { "name": "John", "lastname": "Smith", "address": "#1 Samuel St." }"""; - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo(expectedResponse); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo(expectedResponse); assertThat(chatResponse.getResult().getOutput().getMetadata()).containsKey("generated_tokens"); assertThat(chatResponse.getResult().getOutput().getMetadata()).containsEntry("generated_tokens", 32); diff --git a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java index 93f7f5188..754dc77f5 100644 --- a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java +++ b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java @@ -439,7 +439,7 @@ public class MiniMaxChatModel extends AbstractToolCallSupport implements ChatMod List chatCompletionMessages = prompt.getInstructions().stream().map(message -> { if (message.getMessageType() == MessageType.USER || message.getMessageType() == MessageType.SYSTEM) { - Object content = message.getContent(); + Object content = message.getText(); return List.of(new ChatCompletionMessage(content, ChatCompletionMessage.Role.valueOf(message.getMessageType().name()))); } @@ -452,7 +452,7 @@ public class MiniMaxChatModel extends AbstractToolCallSupport implements ChatMod return new ToolCall(toolCall.id(), toolCall.type(), function); }).toList(); } - return List.of(new ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new ChatCompletionMessage(assistantMessage.getText(), ChatCompletionMessage.Role.ASSISTANT, null, null, toolCalls)); } else if (message.getMessageType() == MessageType.TOOL) { diff --git a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java index 67910ecd8..720f30891 100644 --- a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java +++ b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java @@ -98,7 +98,7 @@ public class MiniMaxRetryTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -126,7 +126,7 @@ public class MiniMaxRetryTests { var result = this.chatModel.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.collectList().block().get(0).getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.collectList().block().get(0).getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatModelObservationIT.java b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatModelObservationIT.java index e5cd810b8..6110971ca 100644 --- a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatModelObservationIT.java +++ b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatModelObservationIT.java @@ -82,7 +82,7 @@ public class MiniMaxChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -111,7 +111,7 @@ public class MiniMaxChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatOptionsTests.java b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatOptionsTests.java index fe083cd9d..481278616 100644 --- a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatOptionsTests.java +++ b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/chat/MiniMaxChatOptionsTests.java @@ -59,7 +59,7 @@ public class MiniMaxChatOptionsTests { // markSensitiveInfo is enabled by default ChatResponse response = this.chatModel.call(new Prompt(messages)); - String responseContent = response.getResult().getOutput().getContent(); + String responseContent = response.getResult().getOutput().getText(); assertThat(responseContent).contains("133-**"); assertThat(responseContent).doesNotContain("133-12345678"); @@ -67,7 +67,7 @@ public class MiniMaxChatOptionsTests { var chatOptions = MiniMaxChatOptions.builder().withMaskSensitiveInfo(false).build(); ChatResponse unmaskResponse = this.chatModel.call(new Prompt(messages, chatOptions)); - String unmaskResponseContent = unmaskResponse.getResult().getOutput().getContent(); + String unmaskResponseContent = unmaskResponse.getResult().getOutput().getText(); assertThat(unmaskResponseContent).contains("133-12345678"); } @@ -97,7 +97,7 @@ public class MiniMaxChatOptionsTests { .build(); ChatResponse response = this.chatModel.call(new Prompt(messages, options)); - String responseContent = response.getResult().getOutput().getContent(); + String responseContent = response.getResult().getOutput().getText(); assertThat(responseContent).contains("40"); } @@ -132,7 +132,7 @@ public class MiniMaxChatOptionsTests { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(Objects::nonNull) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java index d3a509a43..c7b967a56 100644 --- a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java +++ b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java @@ -326,11 +326,11 @@ public class MistralAiChatModel extends AbstractToolCallSupport implements ChatM List chatCompletionMessages = prompt.getInstructions().stream().map(message -> { if (message instanceof UserMessage userMessage) { - return List.of(new MistralAiApi.ChatCompletionMessage(userMessage.getContent(), + return List.of(new MistralAiApi.ChatCompletionMessage(userMessage.getText(), MistralAiApi.ChatCompletionMessage.Role.USER)); } else if (message instanceof SystemMessage systemMessage) { - return List.of(new MistralAiApi.ChatCompletionMessage(systemMessage.getContent(), + return List.of(new MistralAiApi.ChatCompletionMessage(systemMessage.getText(), MistralAiApi.ChatCompletionMessage.Role.SYSTEM)); } else if (message instanceof AssistantMessage assistantMessage) { @@ -342,7 +342,7 @@ public class MistralAiChatModel extends AbstractToolCallSupport implements ChatM }).toList(); } - return List.of(new MistralAiApi.ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new MistralAiApi.ChatCompletionMessage(assistantMessage.getText(), MistralAiApi.ChatCompletionMessage.Role.ASSISTANT, null, toolCalls, null)); } else if (message instanceof ToolResponseMessage toolResponseMessage) { diff --git a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatClientIT.java b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatClientIT.java index 45e0b3dce..d56390700 100644 --- a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatClientIT.java +++ b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatClientIT.java @@ -70,7 +70,7 @@ class MistralAiChatClientIT { logger.info("" + response); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -85,7 +85,7 @@ class MistralAiChatClientIT { .call() .chatResponse(); // @formatter:on - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard"); // @formatter:off response = ChatClient.create(this.chatModel).prompt() @@ -96,7 +96,7 @@ class MistralAiChatClientIT { // @formatter:on logger.info("" + response); - assertThat(response.getResult().getOutput().getContent().toLowerCase()).containsAnyOf("blackbeard", + assertThat(response.getResult().getOutput().getText().toLowerCase()).containsAnyOf("blackbeard", "bartholomew roberts"); } diff --git a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelIT.java b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelIT.java index 10bbea59f..b8a4ebdaf 100644 --- a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelIT.java +++ b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelIT.java @@ -93,7 +93,7 @@ class MistralAiChatModelIT { Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -111,7 +111,7 @@ class MistralAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -129,7 +129,7 @@ class MistralAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -148,7 +148,7 @@ class MistralAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -174,7 +174,7 @@ class MistralAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -204,7 +204,7 @@ class MistralAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("30.0", "30"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("30.0", "30"); } @Test @@ -231,7 +231,7 @@ class MistralAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelObservationIT.java b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelObservationIT.java index 3e95903e6..59f2f2a98 100644 --- a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelObservationIT.java +++ b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelObservationIT.java @@ -79,7 +79,7 @@ public class MistralAiChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -107,7 +107,7 @@ public class MistralAiChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiRetryTests.java b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiRetryTests.java index 9432cfb79..71982a390 100644 --- a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiRetryTests.java +++ b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiRetryTests.java @@ -105,7 +105,7 @@ public class MistralAiRetryTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -134,7 +134,7 @@ public class MistralAiRetryTests { var result = this.chatModel.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.collectList().block().get(0).getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.collectList().block().get(0).getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/MoonshotChatModel.java b/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/MoonshotChatModel.java index 2443b1445..0d321996b 100644 --- a/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/MoonshotChatModel.java +++ b/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/MoonshotChatModel.java @@ -349,7 +349,7 @@ public class MoonshotChatModel extends AbstractToolCallSupport implements ChatMo List chatCompletionMessages = prompt.getInstructions().stream().map(message -> { if (message.getMessageType() == MessageType.USER || message.getMessageType() == MessageType.SYSTEM) { - Object content = message.getContent(); + Object content = message.getText(); return List.of(new ChatCompletionMessage(content, ChatCompletionMessage.Role.valueOf(message.getMessageType().name()))); } @@ -362,7 +362,7 @@ public class MoonshotChatModel extends AbstractToolCallSupport implements ChatMo return new ToolCall(toolCall.id(), toolCall.type(), function); }).toList(); } - return List.of(new ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new ChatCompletionMessage(assistantMessage.getText(), ChatCompletionMessage.Role.ASSISTANT, null, null, toolCalls)); } else if (message.getMessageType() == MessageType.TOOL) { diff --git a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/MoonshotRetryTests.java b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/MoonshotRetryTests.java index 7ce54ee72..dad148286 100644 --- a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/MoonshotRetryTests.java +++ b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/MoonshotRetryTests.java @@ -91,7 +91,7 @@ public class MoonshotRetryTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -119,7 +119,7 @@ public class MoonshotRetryTests { var result = this.chatModel.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.collectList().block().get(0).getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.collectList().block().get(0).getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelFunctionCallingIT.java b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelFunctionCallingIT.java index 400420671..eb8fdaf5e 100644 --- a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelFunctionCallingIT.java +++ b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelFunctionCallingIT.java @@ -74,7 +74,7 @@ class MoonshotChatModelFunctionCallingIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -100,7 +100,7 @@ class MoonshotChatModelFunctionCallingIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(Objects::nonNull) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelIT.java b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelIT.java index 83222c75d..c177645b7 100644 --- a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelIT.java +++ b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelIT.java @@ -75,7 +75,7 @@ public class MoonshotChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -93,7 +93,7 @@ public class MoonshotChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -118,7 +118,7 @@ public class MoonshotChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -137,7 +137,7 @@ public class MoonshotChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); } @@ -162,7 +162,7 @@ public class MoonshotChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -190,7 +190,7 @@ public class MoonshotChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelObservationIT.java b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelObservationIT.java index f345c1c5f..1a2dda1e6 100644 --- a/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelObservationIT.java +++ b/models/spring-ai-moonshot/src/test/java/org/springframework/ai/moonshot/chat/MoonshotChatModelObservationIT.java @@ -82,7 +82,7 @@ public class MoonshotChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -112,7 +112,7 @@ public class MoonshotChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-oci-genai/src/main/java/org/springframework/ai/oci/cohere/OCICohereChatModel.java b/models/spring-ai-oci-genai/src/main/java/org/springframework/ai/oci/cohere/OCICohereChatModel.java index 4fcb82241..236b459d5 100644 --- a/models/spring-ai-oci-genai/src/main/java/org/springframework/ai/oci/cohere/OCICohereChatModel.java +++ b/models/spring-ai-oci-genai/src/main/java/org/springframework/ai/oci/cohere/OCICohereChatModel.java @@ -203,9 +203,9 @@ public class OCICohereChatModel implements ChatModel { for (int i = 1; i < messages.size(); i++) { Message message = messages.get(i); switch (message.getMessageType()) { - case USER -> chatHistory.add(CohereUserMessage.builder().message(message.getContent()).build()); - case ASSISTANT -> chatHistory.add(CohereChatBotMessage.builder().message(message.getContent()).build()); - case SYSTEM -> chatHistory.add(CohereSystemMessage.builder().message(message.getContent()).build()); + case USER -> chatHistory.add(CohereUserMessage.builder().message(message.getText()).build()); + case ASSISTANT -> chatHistory.add(CohereChatBotMessage.builder().message(message.getText()).build()); + case SYSTEM -> chatHistory.add(CohereSystemMessage.builder().message(message.getText()).build()); case TOOL -> { if (message instanceof ToolResponseMessage tm) { chatHistory.add(toToolMessage(tm)); @@ -237,7 +237,7 @@ public class OCICohereChatModel implements ChatModel { .documents(options.getDocuments()) .tools(options.getTools()) .chatHistory(chatHistory) - .message(message.getContent()) + .message(message.getText()) .build(); ServingMode servingMode = ServingModeHelper.get(options.getServingMode(), options.getModel()); ChatDetails chatDetails = ChatDetails.builder() diff --git a/models/spring-ai-oci-genai/src/test/java/org/springframework/ai/oci/cohere/OCICohereChatModelIT.java b/models/spring-ai-oci-genai/src/test/java/org/springframework/ai/oci/cohere/OCICohereChatModelIT.java index 13f465ff4..6ec9f91b5 100644 --- a/models/spring-ai-oci-genai/src/test/java/org/springframework/ai/oci/cohere/OCICohereChatModelIT.java +++ b/models/spring-ai-oci-genai/src/test/java/org/springframework/ai/oci/cohere/OCICohereChatModelIT.java @@ -54,7 +54,7 @@ public class OCICohereChatModelIT extends BaseOCIGenAITest { assertThat(response).isNotNull(); assertThat(response.getMetadata().getModel()).isEqualTo(CHAT_MODEL_ID); assertThat(response.getResult()).isNotNull(); - assertThat(response.getResult().getOutput().getContent()).isNotBlank(); + assertThat(response.getResult().getOutput().getText()).isNotBlank(); } } diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java index d20a56b56..09cf70af0 100644 --- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java +++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java @@ -317,7 +317,7 @@ public class OllamaChatModel extends AbstractToolCallSupport implements ChatMode List ollamaMessages = prompt.getInstructions().stream().map(message -> { if (message instanceof UserMessage userMessage) { - var messageBuilder = OllamaApi.Message.builder(Role.USER).content(message.getContent()); + var messageBuilder = OllamaApi.Message.builder(Role.USER).withContent(message.getText()); if (!CollectionUtils.isEmpty(userMessage.getMedia())) { messageBuilder.images( userMessage.getMedia().stream().map(media -> this.fromMediaData(media.getData())).toList()); @@ -325,7 +325,7 @@ public class OllamaChatModel extends AbstractToolCallSupport implements ChatMode return List.of(messageBuilder.build()); } else if (message instanceof SystemMessage systemMessage) { - return List.of(OllamaApi.Message.builder(Role.SYSTEM).content(systemMessage.getContent()).build()); + return List.of(OllamaApi.Message.builder(Role.SYSTEM).withContent(systemMessage.getText()).build()); } else if (message instanceof AssistantMessage assistantMessage) { List toolCalls = null; @@ -337,8 +337,8 @@ public class OllamaChatModel extends AbstractToolCallSupport implements ChatMode }).toList(); } return List.of(OllamaApi.Message.builder(Role.ASSISTANT) - .content(assistantMessage.getContent()) - .toolCalls(toolCalls) + .withContent(assistantMessage.getText()) + .withToolCalls(toolCalls) .build()); } else if (message instanceof ToolResponseMessage toolMessage) { diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelFunctionCallingIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelFunctionCallingIT.java index 129dd7005..bec302aed 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelFunctionCallingIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelFunctionCallingIT.java @@ -75,7 +75,7 @@ class OllamaChatModelFunctionCallingIT extends BaseOllamaIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -103,7 +103,7 @@ class OllamaChatModelFunctionCallingIT extends BaseOllamaIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelIT.java index a5102586f..8cc3b4042 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelIT.java @@ -96,13 +96,13 @@ class OllamaChatModelIT extends BaseOllamaIT { Prompt prompt = new Prompt(List.of(systemMessage, userMessage), portableOptions); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); // ollama specific options var ollamaOptions = new OllamaOptions().withLowVRAM(true); response = this.chatModel.call(new Prompt(List.of(systemMessage, userMessage), ollamaOptions)); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); } @Test @@ -120,13 +120,13 @@ class OllamaChatModelIT extends BaseOllamaIT { Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Hello"), response.getResult().getOutput(), new UserMessage("Tell me just the names of those pirates."))); response = this.chatModel.call(promptWithMessageHistory); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard"); } @Test @@ -156,7 +156,7 @@ class OllamaChatModelIT extends BaseOllamaIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -175,7 +175,7 @@ class OllamaChatModelIT extends BaseOllamaIT { Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result).isNotNull(); assertThat((String) result.get("R")).containsIgnoringCase("red"); assertThat((String) result.get("G")).containsIgnoringCase("green"); @@ -195,7 +195,7 @@ class OllamaChatModelIT extends BaseOllamaIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -219,7 +219,7 @@ class OllamaChatModelIT extends BaseOllamaIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelMultimodalIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelMultimodalIT.java index 48f33f57b..2789b3a39 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelMultimodalIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelMultimodalIT.java @@ -67,8 +67,8 @@ class OllamaChatModelMultimodalIT extends BaseOllamaIT { var response = this.chatModel.call(new Prompt(List.of(userMessage))); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bananas", "apple"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); } @SpringBootConfiguration diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelObservationIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelObservationIT.java index 330ba7bcf..2293122b6 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelObservationIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelObservationIT.java @@ -80,7 +80,7 @@ public class OllamaChatModelObservationIT extends BaseOllamaIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -111,7 +111,7 @@ public class OllamaChatModelObservationIT extends BaseOllamaIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatModel.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatModel.java index d44eec0da..77be632b5 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatModel.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatModel.java @@ -454,11 +454,10 @@ public class OpenAiChatModel extends AbstractToolCallSupport implements ChatMode List chatCompletionMessages = prompt.getInstructions().stream().map(message -> { if (message.getMessageType() == MessageType.USER || message.getMessageType() == MessageType.SYSTEM) { - Object content = message.getContent(); + Object content = message.getText(); if (message instanceof UserMessage userMessage) { if (!CollectionUtils.isEmpty(userMessage.getMedia())) { - List contentList = new ArrayList<>( - List.of(new MediaContent(message.getContent()))); + List contentList = new ArrayList<>(List.of(new MediaContent(message.getText()))); contentList.addAll(userMessage.getMedia().stream().map(this::mapToMediaContent).toList()); @@ -485,7 +484,7 @@ public class OpenAiChatModel extends AbstractToolCallSupport implements ChatMode audioOutput = new AudioOutput(assistantMessage.getMedia().get(0).getId(), null, null, null); } - return List.of(new ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new ChatCompletionMessage(assistantMessage.getText(), ChatCompletionMessage.Role.ASSISTANT, null, null, toolCalls, null, audioOutput)); } else if (message.getMessageType() == MessageType.TOOL) { diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelFunctionCallingIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelFunctionCallingIT.java index 7d6f09d9f..257961689 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelFunctionCallingIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelFunctionCallingIT.java @@ -139,7 +139,7 @@ class OpenAiChatModelFunctionCallingIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -207,7 +207,7 @@ class OpenAiChatModelFunctionCallingIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelIT.java index a66186bf6..9f84ea83f 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelIT.java @@ -89,7 +89,7 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); // needs fine tuning... evaluateQuestionAndAnswer(request, response, false); } @@ -102,13 +102,13 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Dummy"), response.getResult().getOutput(), new UserMessage("Repeat the last assistant message."))); response = this.chatModel.call(promptWithMessageHistory); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @Test @@ -121,7 +121,7 @@ public class OpenAiChatModelIT extends AbstractIT { CountDownLatch latch = new CountDownLatch(1); Flux chatResponseFlux = this.streamingChatModel.stream(prompt).doOnNext(chatResponse -> { - String responseContent = chatResponse.getResults().get(0).getOutput().getContent(); + String responseContent = chatResponse.getResults().get(0).getOutput().getText(); answer.append(responseContent); }).doOnComplete(() -> { logger.info(answer.toString()); @@ -146,7 +146,7 @@ public class OpenAiChatModelIT extends AbstractIT { .stream() .chatResponse() .doOnNext(chatResponse -> { - String responseContent = chatResponse.getResults().get(0).getOutput().getContent(); + String responseContent = chatResponse.getResults().get(0).getOutput().getText(); answer.append(responseContent); }) .doOnComplete(() -> { @@ -197,7 +197,7 @@ public class OpenAiChatModelIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -237,7 +237,7 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -256,7 +256,7 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -275,7 +275,7 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); } @Test @@ -292,7 +292,7 @@ public class OpenAiChatModelIT extends AbstractIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -318,7 +318,7 @@ public class OpenAiChatModelIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -347,9 +347,9 @@ public class OpenAiChatModelIT extends AbstractIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("30.0", "30"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("10.0", "10"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15.0", "15"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("30.0", "30"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("10.0", "10"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("15.0", "15"); } @Test @@ -376,7 +376,7 @@ public class OpenAiChatModelIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -424,9 +424,9 @@ public class OpenAiChatModelIT extends AbstractIT { var response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket", "fruit stand"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket", "fruit stand"); } @ParameterizedTest(name = "{0} : {displayName} ") @@ -442,9 +442,9 @@ public class OpenAiChatModelIT extends AbstractIT { ChatResponse response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket", "fruit stand"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket", "fruit stand"); } @Test @@ -465,7 +465,7 @@ public class OpenAiChatModelIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).contains("bananas", "apple"); @@ -484,8 +484,8 @@ public class OpenAiChatModelIT extends AbstractIT { .withOutputAudio(new AudioParameters(Voice.ALLOY, AudioResponseFormat.WAV)) .build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).isNotEmpty(); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).isNotEmpty(); byte[] audio = response.getResult().getOutput().getMedia().get(0).getDataAsByteArray(); assertThat(audio).isNotEmpty(); @@ -520,8 +520,8 @@ public class OpenAiChatModelIT extends AbstractIT { ChatResponse response = chatModel .call(new Prompt(List.of(userMessage), ChatOptionsBuilder.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("hobbits"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("hobbits"); assertThat(response.getMetadata().getModel()).containsIgnoringCase(modelName); } @@ -541,7 +541,7 @@ public class OpenAiChatModelIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).containsIgnoringCase("hobbits"); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelObservationIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelObservationIT.java index 54b33b472..9d95097e5 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelObservationIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelObservationIT.java @@ -82,7 +82,7 @@ public class OpenAiChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -113,7 +113,7 @@ public class OpenAiChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelProxyToolCallsIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelProxyToolCallsIT.java index acaca6836..d64d467a8 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelProxyToolCallsIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelProxyToolCallsIT.java @@ -188,7 +188,7 @@ class OpenAiChatModelProxyToolCallsIT { logger.info("Response: {}", chatResponse); - assertThat(chatResponse.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(chatResponse.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -220,7 +220,7 @@ class OpenAiChatModelProxyToolCallsIT { .collectList() .block() .stream() - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", response); @@ -306,7 +306,7 @@ class OpenAiChatModelProxyToolCallsIT { logger.info("Response: {}", chatResponse); - assertThat(chatResponse.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(chatResponse.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -341,7 +341,7 @@ class OpenAiChatModelProxyToolCallsIT { String response = responses.collectList() .block() .stream() - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", response); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelResponseFormatIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelResponseFormatIT.java index bb0db5ce3..3cc512ee0 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelResponseFormatIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelResponseFormatIT.java @@ -89,7 +89,7 @@ public class OpenAiChatModelResponseFormatIT { assertThat(response).isNotNull(); - String content = response.getResult().getOutput().getContent(); + String content = response.getResult().getOutput().getText(); logger.info("Response content: {}", content); @@ -132,7 +132,7 @@ public class OpenAiChatModelResponseFormatIT { assertThat(response).isNotNull(); - String content = response.getResult().getOutput().getContent(); + String content = response.getResult().getOutput().getText(); logger.info("Response content: {}", content); @@ -213,7 +213,7 @@ public class OpenAiChatModelResponseFormatIT { assertThat(response).isNotNull(); - String content = response.getResult().getOutput().getContent(); + String content = response.getResult().getOutput().getText(); logger.info("Response content: {}", content); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelTypeReferenceBeanOutputConverterIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelTypeReferenceBeanOutputConverterIT.java index 443c65c79..1831095ab 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelTypeReferenceBeanOutputConverterIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelTypeReferenceBeanOutputConverterIT.java @@ -62,7 +62,7 @@ class OpenAiChatModelTypeReferenceBeanOutputConverterIT extends AbstractIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + List actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms).hasSize(2); assertThat(actorsFilms.get(0).actor()).isEqualTo("Tom Hanks"); @@ -94,7 +94,7 @@ class OpenAiChatModelTypeReferenceBeanOutputConverterIT extends AbstractIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); List actorsFilms = outputConverter.convert(generationTextFromStream); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiCompatibleChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiCompatibleChatModelIT.java index 997fb02c3..fa7e938ca 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiCompatibleChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiCompatibleChatModelIT.java @@ -78,7 +78,7 @@ public class OpenAiCompatibleChatModelIT { ChatResponse response = chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @ParameterizedTest @@ -94,7 +94,7 @@ public class OpenAiCompatibleChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiRetryTests.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiRetryTests.java index 9e63ef281..587d26f61 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiRetryTests.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiRetryTests.java @@ -140,7 +140,7 @@ public class OpenAiRetryTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -169,7 +169,7 @@ public class OpenAiRetryTests { var result = this.chatModel.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.collectList().block().get(0).getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.collectList().block().get(0).getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientIT.java index 4241bdd20..fd77f37e2 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientIT.java @@ -113,7 +113,7 @@ class OpenAiChatClientIT extends AbstractIT { logger.info("" + response); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -232,7 +232,7 @@ class OpenAiChatClientIT extends AbstractIT { String generationTextFromStream = chatResponses .stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); // @formatter:on diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientProxyFunctionCallsIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientProxyFunctionCallsIT.java index b02892a51..d3338b7ce 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientProxyFunctionCallsIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/client/OpenAiChatClientProxyFunctionCallsIT.java @@ -179,7 +179,7 @@ class OpenAiChatClientProxyFunctionCallsIT extends AbstractIT { logger.info("Response: {}", chatResponse); - assertThat(chatResponse.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(chatResponse.getResult().getOutput().getText()).contains("30", "10", "15"); } } diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/GroqWithOpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/GroqWithOpenAiChatModelIT.java index 319808e8d..17882cb47 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/GroqWithOpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/GroqWithOpenAiChatModelIT.java @@ -90,7 +90,7 @@ class GroqWithOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -109,7 +109,7 @@ class GroqWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -150,7 +150,7 @@ class GroqWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -169,7 +169,7 @@ class GroqWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -188,7 +188,7 @@ class GroqWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.getActor()).isNotEmpty(); } @@ -206,7 +206,7 @@ class GroqWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -232,7 +232,7 @@ class GroqWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -260,7 +260,7 @@ class GroqWithOpenAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -287,7 +287,7 @@ class GroqWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -307,9 +307,9 @@ class GroqWithOpenAiChatModelIT { var response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Groq does not support multi modality API") @@ -326,9 +326,9 @@ class GroqWithOpenAiChatModelIT { ChatResponse response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Groq does not support multi modality API") @@ -349,7 +349,7 @@ class GroqWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).contains("bananas", "apple"); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java index 76395323e..23b1ce483 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java @@ -89,7 +89,7 @@ class MistralWithOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -108,7 +108,7 @@ class MistralWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -149,7 +149,7 @@ class MistralWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -168,7 +168,7 @@ class MistralWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -187,7 +187,7 @@ class MistralWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.getActor()).isNotEmpty(); } @@ -205,7 +205,7 @@ class MistralWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -231,7 +231,7 @@ class MistralWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -262,7 +262,7 @@ class MistralWithOpenAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @ParameterizedTest(name = "{0} : {displayName} ") @@ -291,7 +291,7 @@ class MistralWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -311,9 +311,9 @@ class MistralWithOpenAiChatModelIT { var response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Mistral AI does not support multi modality API") @@ -330,9 +330,9 @@ class MistralWithOpenAiChatModelIT { ChatResponse response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Mistral AI does not support multi modality API") @@ -353,7 +353,7 @@ class MistralWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).contains("bananas", "apple"); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/NvidiaWithOpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/NvidiaWithOpenAiChatModelIT.java index a8e8d7b41..158f231a8 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/NvidiaWithOpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/NvidiaWithOpenAiChatModelIT.java @@ -87,7 +87,7 @@ class NvidiaWithOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -106,7 +106,7 @@ class NvidiaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -146,7 +146,7 @@ class NvidiaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -165,7 +165,7 @@ class NvidiaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -184,7 +184,7 @@ class NvidiaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.getActor()).isNotEmpty(); } @@ -202,7 +202,7 @@ class NvidiaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -228,7 +228,7 @@ class NvidiaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(c -> c != null) .collect(Collectors.joining()); @@ -257,7 +257,7 @@ class NvidiaWithOpenAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -284,7 +284,7 @@ class NvidiaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/OllamaWithOpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/OllamaWithOpenAiChatModelIT.java index 41a790863..f053e390a 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/OllamaWithOpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/OllamaWithOpenAiChatModelIT.java @@ -107,7 +107,7 @@ class OllamaWithOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -126,7 +126,7 @@ class OllamaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -167,7 +167,7 @@ class OllamaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -186,7 +186,7 @@ class OllamaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -205,7 +205,7 @@ class OllamaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.getActor()).isNotEmpty(); } @@ -223,7 +223,7 @@ class OllamaWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -249,7 +249,7 @@ class OllamaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -279,7 +279,7 @@ class OllamaWithOpenAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -306,7 +306,7 @@ class OllamaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -325,9 +325,9 @@ class OllamaWithOpenAiChatModelIT { var response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Not supported by the current Ollama API") @@ -344,9 +344,9 @@ class OllamaWithOpenAiChatModelIT { ChatResponse response = this.chatModel .call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Disabled("Not supported by the current Ollama API") @@ -369,7 +369,7 @@ class OllamaWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).contains("bananas", "apple"); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/PerplexityWithOpenAiChatModelIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/PerplexityWithOpenAiChatModelIT.java index be8f088ac..cb2bdf8fa 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/PerplexityWithOpenAiChatModelIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/PerplexityWithOpenAiChatModelIT.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.slf4j.Logger; @@ -102,7 +101,7 @@ class PerplexityWithOpenAiChatModelIT { Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -123,7 +122,7 @@ class PerplexityWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -162,7 +161,7 @@ class PerplexityWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -180,7 +179,7 @@ class PerplexityWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -197,7 +196,7 @@ class PerplexityWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); assertThat(actorsFilms.getActor()).isNotEmpty(); } @@ -214,7 +213,7 @@ class PerplexityWithOpenAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -239,7 +238,7 @@ class PerplexityWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(c -> c != null) .collect(Collectors.joining()); @@ -293,7 +292,7 @@ class PerplexityWithOpenAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/testutils/AbstractIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/testutils/AbstractIT.java index e12bb25c4..90a0de6b6 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/testutils/AbstractIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/testutils/AbstractIT.java @@ -84,7 +84,7 @@ public abstract class AbstractIT { protected void evaluateQuestionAndAnswer(String question, ChatResponse response, boolean factBased) { assertThat(response).isNotNull(); - String answer = response.getResult().getOutput().getContent(); + String answer = response.getResult().getOutput().getText(); logger.info("Question: " + question); logger.info("Answer:" + answer); PromptTemplate userPromptTemplate = new PromptTemplate(this.userEvaluatorResource, @@ -98,12 +98,12 @@ public abstract class AbstractIT { } Message userMessage = userPromptTemplate.createMessage(); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - String yesOrNo = this.chatModel.call(prompt).getResult().getOutput().getContent(); + String yesOrNo = this.chatModel.call(prompt).getResult().getOutput().getText(); logger.info("Is Answer related to question: " + yesOrNo); if (yesOrNo.equalsIgnoreCase("no")) { SystemMessage notRelatedSystemMessage = new SystemMessage(this.qaEvaluatorNotRelatedResource); prompt = new Prompt(List.of(userMessage, notRelatedSystemMessage)); - String reasonForFailure = this.chatModel.call(prompt).getResult().getOutput().getContent(); + String reasonForFailure = this.chatModel.call(prompt).getResult().getOutput().getText(); fail(reasonForFailure); } else { diff --git a/models/spring-ai-qianfan/src/main/java/org/springframework/ai/qianfan/QianFanChatModel.java b/models/spring-ai-qianfan/src/main/java/org/springframework/ai/qianfan/QianFanChatModel.java index 944a1c4e1..074655b5e 100644 --- a/models/spring-ai-qianfan/src/main/java/org/springframework/ai/qianfan/QianFanChatModel.java +++ b/models/spring-ai-qianfan/src/main/java/org/springframework/ai/qianfan/QianFanChatModel.java @@ -246,7 +246,7 @@ public class QianFanChatModel implements ChatModel, StreamingChatModel { public ChatCompletionRequest createRequest(Prompt prompt, boolean stream) { var chatCompletionMessages = prompt.getInstructions() .stream() - .map(m -> new ChatCompletionMessage(m.getContent(), + .map(m -> new ChatCompletionMessage(m.getText(), ChatCompletionMessage.Role.valueOf(m.getMessageType().name()))) .toList(); var systemMessageList = chatCompletionMessages.stream().filter(msg -> msg.role() == Role.SYSTEM).toList(); diff --git a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/api/QianFanRetryTests.java b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/api/QianFanRetryTests.java index 7e7c1dac7..b3a12d264 100644 --- a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/api/QianFanRetryTests.java +++ b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/api/QianFanRetryTests.java @@ -104,7 +104,7 @@ public class QianFanRetryTests { var result = this.chatClient.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -130,7 +130,7 @@ public class QianFanRetryTests { var result = this.chatClient.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(Objects.requireNonNull(result.collectList().block()).get(0).getResult().getOutput().getContent()) + assertThat(Objects.requireNonNull(result.collectList().block()).get(0).getResult().getOutput().getText()) .isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); diff --git a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelIT.java b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelIT.java index f8bb6ef69..7fc69dcbc 100644 --- a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelIT.java +++ b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelIT.java @@ -68,7 +68,7 @@ class QianFanChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); } @Test @@ -87,7 +87,7 @@ class QianFanChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelObservationIT.java b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelObservationIT.java index 9d0ebc6d9..44292f745 100644 --- a/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelObservationIT.java +++ b/models/spring-ai-qianfan/src/test/java/org/springframework/ai/qianfan/chat/QianFanChatModelObservationIT.java @@ -83,7 +83,7 @@ public class QianFanChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -112,7 +112,7 @@ public class QianFanChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-vertex-ai-embedding/src/main/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModel.java b/models/spring-ai-vertex-ai-embedding/src/main/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModel.java index b13efe0dd..bb77ed439 100644 --- a/models/spring-ai-vertex-ai-embedding/src/main/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModel.java +++ b/models/spring-ai-vertex-ai-embedding/src/main/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModel.java @@ -51,7 +51,6 @@ import org.springframework.ai.vertexai.embedding.VertexAiEmbeddingUtils.ImageBui import org.springframework.ai.vertexai.embedding.VertexAiEmbeddingUtils.MultimodalInstanceBuilder; import org.springframework.ai.vertexai.embedding.VertexAiEmbeddingUtils.VideoBuilder; import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; import org.springframework.util.StringUtils; @@ -149,44 +148,42 @@ public class VertexAiMultimodalEmbeddingModel implements DocumentEmbeddingModel new DocumentMetadata(document.getId(), MimeTypeUtils.TEXT_PLAIN, document.getContent())); } - if (!CollectionUtils.isEmpty(document.getMedia())) { - - for (Media media : document.getMedia()) { - if (media.getMimeType().isCompatibleWith(TEXT_MIME_TYPE)) { - instanceBuilder.withText(media.getData().toString()); - documentMetadata.put(ModalityType.TEXT, - new DocumentMetadata(document.getId(), MimeTypeUtils.TEXT_PLAIN, media.getData())); - if (StringUtils.hasText(document.getContent())) { - logger.warn("Media type String overrides the Document text content!"); - } + Media media = document.getMedia(); + if (media != null) { + if (media.getMimeType().isCompatibleWith(TEXT_MIME_TYPE)) { + instanceBuilder.withText(media.getData().toString()); + documentMetadata.put(ModalityType.TEXT, + new DocumentMetadata(document.getId(), MimeTypeUtils.TEXT_PLAIN, media.getData())); + if (StringUtils.hasText(document.getContent())) { + logger.warn("Media type String overrides the Document text content!"); } - else if (media.getMimeType().isCompatibleWith(IMAGE_MIME_TYPE)) { - if (SUPPORTED_IMAGE_MIME_SUB_TYPES.contains(media.getMimeType())) { - instanceBuilder - .withImage(ImageBuilder.of(media.getMimeType()).withImageData(media.getData()).build()); - documentMetadata.put(ModalityType.IMAGE, - new DocumentMetadata(document.getId(), media.getMimeType(), media.getData())); - } - else { - logger.warn("Unsupported image mime type: {}", media.getMimeType()); - throw new IllegalArgumentException("Unsupported image mime type: " + media.getMimeType()); - } - } - else if (media.getMimeType().isCompatibleWith(VIDEO_MIME_TYPE)) { - instanceBuilder.withVideo(VideoBuilder.of(media.getMimeType()) - .withVideoData(media.getData()) - .withStartOffsetSec(mergedOptions.getVideoStartOffsetSec()) - .withEndOffsetSec(mergedOptions.getVideoEndOffsetSec()) - .withIntervalSec(mergedOptions.getVideoIntervalSec()) - .build()); - documentMetadata.put(ModalityType.VIDEO, + } + else if (media.getMimeType().isCompatibleWith(IMAGE_MIME_TYPE)) { + if (SUPPORTED_IMAGE_MIME_SUB_TYPES.contains(media.getMimeType())) { + instanceBuilder + .withImage(ImageBuilder.of(media.getMimeType()).withImageData(media.getData()).build()); + documentMetadata.put(ModalityType.IMAGE, new DocumentMetadata(document.getId(), media.getMimeType(), media.getData())); } else { - logger.warn("Unsupported media type: {}", media.getMimeType()); - throw new IllegalArgumentException("Unsupported media type: " + media.getMimeType()); + logger.warn("Unsupported image mime type: {}", media.getMimeType()); + throw new IllegalArgumentException("Unsupported image mime type: " + media.getMimeType()); } } + else if (media.getMimeType().isCompatibleWith(VIDEO_MIME_TYPE)) { + instanceBuilder.withVideo(VideoBuilder.of(media.getMimeType()) + .withVideoData(media.getData()) + .withStartOffsetSec(mergedOptions.getVideoStartOffsetSec()) + .withEndOffsetSec(mergedOptions.getVideoEndOffsetSec()) + .withIntervalSec(mergedOptions.getVideoIntervalSec()) + .build()); + documentMetadata.put(ModalityType.VIDEO, + new DocumentMetadata(document.getId(), media.getMimeType(), media.getData())); + } + else { + logger.warn("Unsupported media type: {}", media.getMimeType()); + throw new IllegalArgumentException("Unsupported media type: " + media.getMimeType()); + } } List instances = List.of(VertexAiEmbeddingUtils.valueOf(instanceBuilder.build())); diff --git a/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java b/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java index b762b6423..d1bd8f4c7 100644 --- a/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java +++ b/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java @@ -189,7 +189,7 @@ class VertexAiMultimodalEmbeddingModelIT { void textImageAndVideoEmbedding() { var document = Document.builder() - .content("Hello World") + .text("Hello World") .media(new Media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource("/test.image.png"))) .media(new Media(new MimeType("video", "mp4"), new ClassPathResource("/test.video.mp4"))) .build(); diff --git a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java index d7b7abab4..7601ca35a 100644 --- a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java +++ b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModel.java @@ -186,16 +186,16 @@ public class VertexAiGeminiChatModel extends AbstractToolCallSupport implements List parts = new ArrayList<>(); - if (systemMessage.getContent() != null) { - parts.add(Part.newBuilder().setText(systemMessage.getContent()).build()); + if (systemMessage.getText() != null) { + parts.add(Part.newBuilder().setText(systemMessage.getText()).build()); } return parts; } else if (message instanceof UserMessage userMessage) { List parts = new ArrayList<>(); - if (userMessage.getContent() != null) { - parts.add(Part.newBuilder().setText(userMessage.getContent()).build()); + if (userMessage.getText() != null) { + parts.add(Part.newBuilder().setText(userMessage.getText()).build()); } parts.addAll(mediaToParts(userMessage.getMedia())); @@ -204,8 +204,8 @@ public class VertexAiGeminiChatModel extends AbstractToolCallSupport implements } else if (message instanceof AssistantMessage assistantMessage) { List parts = new ArrayList<>(); - if (StringUtils.hasText(assistantMessage.getContent())) { - parts.add(Part.newBuilder().setText(assistantMessage.getContent()).build()); + if (StringUtils.hasText(assistantMessage.getText())) { + parts.add(Part.newBuilder().setText(assistantMessage.getText()).build()); } if (!CollectionUtils.isEmpty(assistantMessage.getToolCalls())) { parts.addAll(assistantMessage.getToolCalls() diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiChatModelObservationIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiChatModelObservationIT.java index e34963c59..3905212a6 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiChatModelObservationIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiChatModelObservationIT.java @@ -76,7 +76,7 @@ public class VertexAiChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -104,7 +104,7 @@ public class VertexAiChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java index 7e7f095e9..bfae7cccb 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatModelIT.java @@ -69,27 +69,27 @@ class VertexAiGeminiChatModelIT { void roleTest() { Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder().build()); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @Test void testMessageHistory() { Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder().build()); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); var promptWithMessageHistory = new Prompt(List.of(new UserMessage("Dummy"), prompt.getInstructions().get(1), response.getResult().getOutput(), new UserMessage("Repeat the last assistant message."))); response = this.chatModel.call(promptWithMessageHistory); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @Test void googleSearchTool() { Prompt prompt = createPrompt(VertexAiGeminiChatOptions.builder().withGoogleSearchRetrieval(true).build()); ChatResponse response = this.chatModel.call(prompt); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Blackbeard", "Bartholomew"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Blackbeard", "Bartholomew"); } @NotNull @@ -119,7 +119,7 @@ class VertexAiGeminiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = converter.convert(generation.getOutput().getContent()); + List list = converter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -137,7 +137,7 @@ class VertexAiGeminiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -157,7 +157,7 @@ class VertexAiGeminiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getText()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); } @@ -173,7 +173,7 @@ class VertexAiGeminiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); // logger.info("" + actorsFilms); @@ -201,7 +201,7 @@ class VertexAiGeminiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -224,7 +224,7 @@ class VertexAiGeminiChatModelIT { // I see a bunch of bananas in a golden basket. The bananas are ripe and yellow. // There are also some red apples in the basket. The basket is sitting on a table. // The background is a blurred light blue color.' - assertThat(response.getResult().getOutput().getContent()).satisfies(content -> { + assertThat(response.getResult().getOutput().getText()).satisfies(content -> { long count = Stream.of("bananas", "apple", "basket").filter(content::contains).count(); assertThat(count).isGreaterThanOrEqualTo(2); }); @@ -258,7 +258,7 @@ class VertexAiGeminiChatModelIT { var response = this.chatModel.call(new Prompt(List.of(userMessage))); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("Spring AI", "portable API"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("Spring AI", "portable API"); } record ActorsFilmsRecord(String actor, List movies) { diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiRetryTests.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiRetryTests.java index 2e646082f..a69f7ed96 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiRetryTests.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiRetryTests.java @@ -101,7 +101,7 @@ public class VertexAiGeminiRetryTests { // Assertions assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isEqualTo("Response"); + assertThat(result.getResult().getOutput().getText()).isEqualTo("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java index a9eea815d..c43287262 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatModelFunctionCallingIT.java @@ -95,7 +95,7 @@ public class VertexAiGeminiChatModelFunctionCallingIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); } @Test @@ -127,14 +127,14 @@ public class VertexAiGeminiChatModelFunctionCallingIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15.0", "15"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("15.0", "15"); ChatResponse response2 = this.chatModel .call(new Prompt("What is the payment status for transaction 696?", promptOptions)); logger.info("Response: {}", response2); - assertThat(response2.getResult().getOutput().getContent()).containsIgnoringCase("transaction 696 is PAYED"); + assertThat(response2.getResult().getOutput().getText()).containsIgnoringCase("transaction 696 is PAYED"); } @@ -168,14 +168,14 @@ public class VertexAiGeminiChatModelFunctionCallingIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); ChatResponse response2 = this.chatModel .call(new Prompt("What is the payment status for transaction 696?", promptOptions)); logger.info("Response: {}", response2); - assertThat(response2.getResult().getOutput().getContent()).containsIgnoringCase("transaction 696 is PAYED"); + assertThat(response2.getResult().getOutput().getText()).containsIgnoringCase("transaction 696 is PAYED"); } @@ -205,7 +205,7 @@ public class VertexAiGeminiChatModelFunctionCallingIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", responseString); diff --git a/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/utils/MessageToPromptConverter.java b/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/utils/MessageToPromptConverter.java index 8f23b766b..c527c7efb 100644 --- a/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/utils/MessageToPromptConverter.java +++ b/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/utils/MessageToPromptConverter.java @@ -55,7 +55,7 @@ public final class MessageToPromptConverter { final String systemMessages = messages.stream() .filter(message -> message.getMessageType() == MessageType.SYSTEM) - .map(Message::getContent) + .map(Message::getText) .collect(Collectors.joining("\n")); final String userMessages = messages.stream() @@ -70,11 +70,11 @@ public final class MessageToPromptConverter { protected String messageToString(Message message) { switch (message.getMessageType()) { case SYSTEM: - return message.getContent(); + return message.getText(); case USER: - return this.humanPrompt + message.getContent(); + return this.humanPrompt + message.getText(); case ASSISTANT: - return this.assistantPrompt + message.getContent(); + return this.assistantPrompt + message.getText(); case TOOL: throw new IllegalArgumentException(TOOL_EXECUTION_NOT_SUPPORTED_FOR_WAI_MODELS); } diff --git a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java index c9a18206e..6adac8559 100644 --- a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java +++ b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java @@ -359,11 +359,10 @@ public class ZhiPuAiChatModel extends AbstractToolCallSupport implements ChatMod List chatCompletionMessages = prompt.getInstructions().stream().map(message -> { if (message.getMessageType() == MessageType.USER || message.getMessageType() == MessageType.SYSTEM) { - Object content = message.getContent(); + Object content = message.getText(); if (message instanceof UserMessage userMessage) { if (!CollectionUtils.isEmpty(userMessage.getMedia())) { - List contentList = new ArrayList<>( - List.of(new MediaContent(message.getContent()))); + List contentList = new ArrayList<>(List.of(new MediaContent(message.getText()))); contentList.addAll(userMessage.getMedia() .stream() @@ -387,7 +386,7 @@ public class ZhiPuAiChatModel extends AbstractToolCallSupport implements ChatMod return new ToolCall(toolCall.id(), toolCall.type(), function); }).toList(); } - return List.of(new ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new ChatCompletionMessage(assistantMessage.getText(), ChatCompletionMessage.Role.ASSISTANT, null, null, toolCalls)); } else if (message.getMessageType() == MessageType.TOOL) { diff --git a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java index 713351fab..a2cdea7e5 100644 --- a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java +++ b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java @@ -112,7 +112,7 @@ public class ZhiPuAiRetryTests { var result = this.chatModel.call(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } @@ -140,7 +140,7 @@ public class ZhiPuAiRetryTests { var result = this.chatModel.stream(new Prompt("text")); assertThat(result).isNotNull(); - assertThat(result.collectList().block().get(0).getResult().getOutput().getContent()).isSameAs("Response"); + assertThat(result.collectList().block().get(0).getResult().getOutput().getText()).isSameAs("Response"); assertThat(this.retryListener.onSuccessRetryCount).isEqualTo(2); assertThat(this.retryListener.onErrorRetryCount).isEqualTo(2); } diff --git a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelIT.java b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelIT.java index 89ae166b5..1b2e12a51 100644 --- a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelIT.java +++ b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelIT.java @@ -89,7 +89,7 @@ class ZhiPuAiChatModelIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); ChatResponse response = this.chatModel.call(prompt); assertThat(response.getResults()).hasSize(1); - assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResults().get(0).getOutput().getText()).contains("Blackbeard"); // needs fine tuning... evaluateQuestionAndAnswer(request, response, false); } @@ -109,7 +109,7 @@ class ZhiPuAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); @@ -131,7 +131,7 @@ class ZhiPuAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - List list = outputConverter.convert(generation.getOutput().getContent()); + List list = outputConverter.convert(generation.getOutput().getText()); assertThat(list).hasSize(5); } @@ -150,7 +150,7 @@ class ZhiPuAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - Map result = outputConverter.convert(generation.getOutput().getContent()); + Map result = outputConverter.convert(generation.getOutput().getText()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); } @@ -169,7 +169,7 @@ class ZhiPuAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getText()); } @Test @@ -186,7 +186,7 @@ class ZhiPuAiChatModelIT { Prompt prompt = new Prompt(promptTemplate.createMessage()); Generation generation = this.chatModel.call(prompt).getResult(); - ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); + ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getText()); logger.info("" + actorsFilms); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); assertThat(actorsFilms.movies()).hasSize(5); @@ -211,7 +211,7 @@ class ZhiPuAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); ActorsFilmsRecord actorsFilms = outputConverter.convert(generationTextFromStream); @@ -241,9 +241,9 @@ class ZhiPuAiChatModelIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("30.0", "30"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("10.0", "10"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15.0", "15"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("30.0", "30"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("10.0", "10"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("15.0", "15"); } @Test @@ -270,7 +270,7 @@ class ZhiPuAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -291,9 +291,9 @@ class ZhiPuAiChatModelIT { var response = this.chatModel .call(new Prompt(List.of(userMessage), ZhiPuAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @ParameterizedTest(name = "{0} : {displayName} ") @@ -309,9 +309,9 @@ class ZhiPuAiChatModelIT { ChatResponse response = this.chatModel .call(new Prompt(List.of(userMessage), ZhiPuAiChatOptions.builder().withModel(modelName).build())); - logger.info(response.getResult().getOutput().getContent()); - assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple"); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("bowl", "basket"); + logger.info(response.getResult().getOutput().getText()); + assertThat(response.getResult().getOutput().getText()).contains("bananas", "apple"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("bowl", "basket"); } @Test @@ -331,7 +331,7 @@ class ZhiPuAiChatModelIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); assertThat(content).contains("bananas", "apple"); diff --git a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelObservationIT.java b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelObservationIT.java index 65c88d8b4..63ea779cb 100644 --- a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelObservationIT.java +++ b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelObservationIT.java @@ -80,7 +80,7 @@ public class ZhiPuAiChatModelObservationIT { Prompt prompt = new Prompt("Why does a raven look like a desk?", options); ChatResponse chatResponse = this.chatModel.call(prompt); - assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(chatResponse.getResult().getOutput().getText()).isNotEmpty(); ChatResponseMetadata responseMetadata = chatResponse.getMetadata(); assertThat(responseMetadata).isNotNull(); @@ -108,7 +108,7 @@ public class ZhiPuAiChatModelObservationIT { String aggregatedResponse = responses.subList(0, responses.size() - 1) .stream() - .map(r -> r.getResult().getOutput().getContent()) + .map(r -> r.getResult().getOutput().getText()) .collect(Collectors.joining()); assertThat(aggregatedResponse).isNotEmpty(); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java index 12938ca67..127390df7 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java @@ -115,8 +115,8 @@ public class DefaultChatClient implements ChatClient { Message lastMessage = messages.get(messages.size() - 1); if (lastMessage.getMessageType() == MessageType.USER) { UserMessage userMessage = (UserMessage) lastMessage; - if (StringUtils.hasText(userMessage.getContent())) { - userText = lastMessage.getContent(); + if (StringUtils.hasText(userMessage.getText())) { + userText = lastMessage.getText(); } Collection messageMedia = userMessage.getMedia(); if (!CollectionUtils.isEmpty(messageMedia)) { @@ -493,10 +493,10 @@ public class DefaultChatClient implements ChatClient { @Nullable private static String getContentFromChatResponse(@Nullable ChatResponse chatResponse) { if (chatResponse == null || chatResponse.getResult() == null || chatResponse.getResult().getOutput() == null - || chatResponse.getResult().getOutput().getContent() == null) { + || chatResponse.getResult().getOutput().getText() == null) { return null; } - return chatResponse.getResult().getOutput().getContent(); + return chatResponse.getResult().getOutput().getText(); } @Override @@ -562,10 +562,10 @@ public class DefaultChatClient implements ChatClient { public Flux content() { return doGetObservableFluxChatResponse(this.request).map(r -> { if (r.getResult() == null || r.getResult().getOutput() == null - || r.getResult().getOutput().getContent() == null) { + || r.getResult().getOutput().getText() == null) { return ""; } - return r.getResult().getOutput().getContent(); + return r.getResult().getOutput().getText(); }).filter(StringUtils::hasLength); } @@ -1005,11 +1005,11 @@ public class DefaultChatClient implements ChatClient { } public String content() { - return doGetChatResponse(this.prompt).getResult().getOutput().getContent(); + return doGetChatResponse(this.prompt).getResult().getOutput().getText(); } public List contents() { - return doGetChatResponse(this.prompt).getResults().stream().map(r -> r.getOutput().getContent()).toList(); + return doGetChatResponse(this.prompt).getResults().stream().map(r -> r.getOutput().getText()).toList(); } public ChatResponse chatResponse() { @@ -1046,10 +1046,10 @@ public class DefaultChatClient implements ChatClient { public Flux content() { return doGetFluxChatResponse(this.prompt).map(r -> { if (r.getResult() == null || r.getResult().getOutput() == null - || r.getResult().getOutput().getContent() == null) { + || r.getResult().getOutput().getText() == null) { return ""; } - return r.getResult().getOutput().getContent(); + return r.getResult().getOutput().getText(); }).filter(StringUtils::hasLength); } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java index 2989fa64c..07e76e27c 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java @@ -111,7 +111,7 @@ public class PromptChatMemoryAdvisor extends AbstractChatMemoryAdvisor m.getMessageType() == MessageType.USER || m.getMessageType() == MessageType.ASSISTANT) - .map(m -> m.getMessageType() + ":" + ((Content) m).getContent()) + .map(m -> m.getMessageType() + ":" + ((Content) m).getText()) .collect(Collectors.joining(System.lineSeparator())) : ""; Map advisedSystemParams = new HashMap<>(request.systemParams()); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisor.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisor.java index 2e935ab62..21bcc41c5 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisor.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisor.java @@ -227,7 +227,7 @@ public class QuestionAnswerAdvisor implements CallAroundAdvisor, StreamAroundAdv context.put(RETRIEVED_DOCUMENTS, documents); String documentContext = documents.stream() - .map(Content::getContent) + .map(Document::getText) .collect(Collectors.joining(System.lineSeparator())); // 4. Advise the user parameters. diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/VectorStoreChatMemoryAdvisor.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/VectorStoreChatMemoryAdvisor.java index ccc58d8d6..3873417eb 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/VectorStoreChatMemoryAdvisor.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/client/advisor/VectorStoreChatMemoryAdvisor.java @@ -16,7 +16,6 @@ package org.springframework.ai.chat.client.advisor; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,7 +34,6 @@ import org.springframework.ai.chat.messages.MessageType; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.MessageAggregator; import org.springframework.ai.document.Document; -import org.springframework.ai.model.Content; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.util.StringUtils; @@ -43,6 +41,8 @@ import org.springframework.util.StringUtils; /** * Memory is retrieved from a VectorStore added into the prompt's system text. * + * This only works for text based exchanges with the models, not multi-modal exchanges. + * * @author Christian Tzolov * @author Thomas Vitale * @since 1.0.0 @@ -146,7 +146,7 @@ public class VectorStoreChatMemoryAdvisor extends AbstractChatMemoryAdvisor documents = this.getChatMemoryStore().similaritySearch(searchRequest); String longTermMemory = documents.stream() - .map(Content::getContent) + .map(Document::getText) .collect(Collectors.joining(System.lineSeparator())); Map advisedSystemParams = new HashMap<>(request.systemParams()); @@ -186,13 +186,16 @@ public class VectorStoreChatMemoryAdvisor extends AbstractChatMemoryAdvisor(userMessage.getMedia())) + .text(userMessage.getText()) + // userMessage.getMedia().get(0).getId() + // TODO vector store for memory would not store this into the + // vector store, could store an 'id' instead + // .media(userMessage.getMedia()) .metadata(metadata) .build(); } else if (message instanceof AssistantMessage assistantMessage) { - return Document.builder().content(assistantMessage.getContent()).metadata(metadata).build(); + return Document.builder().text(assistantMessage.getText()).metadata(metadata).build(); } throw new RuntimeException("Unknown message type: " + message.getMessageType()); }) diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java index aff40fa4a..ee3701d81 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java @@ -97,6 +97,11 @@ public abstract class AbstractMessage implements Message { * Get the content of the message. * @return the content of the message */ + @Override + public String getText() { + return this.textContent; + } + @Override public String getContent() { return this.textContent; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/SystemMessage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/SystemMessage.java index e673de98a..e7afc8b6a 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/SystemMessage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/SystemMessage.java @@ -39,7 +39,7 @@ public class SystemMessage extends AbstractMessage { } @Override - public String getContent() { + public String getText() { return this.textContent; } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/UserMessage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/UserMessage.java index 19f700b1f..74e8386eb 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/UserMessage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/UserMessage.java @@ -66,17 +66,17 @@ public class UserMessage extends AbstractMessage implements MediaContent { @Override public String toString() { - return "UserMessage{" + "content='" + getContent() + '\'' + ", properties=" + this.metadata + ", messageType=" + return "UserMessage{" + "content='" + getText() + '\'' + ", properties=" + this.metadata + ", messageType=" + this.messageType + '}'; } @Override - public Collection getMedia() { + public List getMedia() { return this.media; } @Override - public String getContent() { + public String getText() { return this.textContent; } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/AbstractToolCallSupport.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/AbstractToolCallSupport.java index c462a37ca..52b2abe71 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/AbstractToolCallSupport.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/AbstractToolCallSupport.java @@ -147,7 +147,7 @@ public abstract class AbstractToolCallSupport { toolContextMap = new HashMap<>(functionCallOptions.getToolContext()); List toolCallHistory = new ArrayList<>(prompt.copy().getInstructions()); - toolCallHistory.add(new AssistantMessage(assistantMessage.getContent(), assistantMessage.getMetadata(), + toolCallHistory.add(new AssistantMessage(assistantMessage.getText(), assistantMessage.getMetadata(), assistantMessage.getToolCalls())); toolContextMap.put(ToolContext.TOOL_CALL_HISTORY, toolCallHistory); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/ChatModel.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/ChatModel.java index e72a1c23e..45ffa1bc7 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/ChatModel.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/ChatModel.java @@ -31,13 +31,13 @@ public interface ChatModel extends Model, StreamingChatMod default String call(String message) { Prompt prompt = new Prompt(new UserMessage(message)); Generation generation = call(prompt).getResult(); - return (generation != null) ? generation.getOutput().getContent() : ""; + return (generation != null) ? generation.getOutput().getText() : ""; } default String call(Message... messages) { Prompt prompt = new Prompt(Arrays.asList(messages)); Generation generation = call(prompt).getResult(); - return (generation != null) ? generation.getOutput().getContent() : ""; + return (generation != null) ? generation.getOutput().getText() : ""; } @Override diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/MessageAggregator.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/MessageAggregator.java index 6940d193e..6e0beaa28 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/MessageAggregator.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/MessageAggregator.java @@ -108,8 +108,8 @@ public class MessageAggregator { && chatResponse.getResult().getMetadata() != ChatGenerationMetadata.NULL) { generationMetadataRef.set(chatResponse.getResult().getMetadata()); } - if (chatResponse.getResult().getOutput().getContent() != null) { - messageTextContentRef.get().append(chatResponse.getResult().getOutput().getContent()); + if (chatResponse.getResult().getOutput().getText() != null) { + messageTextContentRef.get().append(chatResponse.getResult().getOutput().getText()); } if (chatResponse.getResult().getOutput().getMetadata() != null) { messageMetadataMapRef.get().putAll(chatResponse.getResult().getOutput().getMetadata()); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/StreamingChatModel.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/StreamingChatModel.java index 9105add8c..57a23da18 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/StreamingChatModel.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/StreamingChatModel.java @@ -30,15 +30,15 @@ public interface StreamingChatModel extends StreamingModel default Flux stream(String message) { Prompt prompt = new Prompt(message); return stream(prompt).map(response -> (response.getResult() == null || response.getResult().getOutput() == null - || response.getResult().getOutput().getContent() == null) ? "" - : response.getResult().getOutput().getContent()); + || response.getResult().getOutput().getText() == null) ? "" + : response.getResult().getOutput().getText()); } default Flux stream(Message... messages) { Prompt prompt = new Prompt(Arrays.asList(messages)); return stream(prompt).map(response -> (response.getResult() == null || response.getResult().getOutput() == null - || response.getResult().getOutput().getContent() == null) ? "" - : response.getResult().getOutput().getContent()); + || response.getResult().getOutput().getText() == null) ? "" + : response.getResult().getOutput().getText()); } @Override diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/observation/ChatModelObservationContentProcessor.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/observation/ChatModelObservationContentProcessor.java index 3de4a3215..382d48817 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/observation/ChatModelObservationContentProcessor.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/observation/ChatModelObservationContentProcessor.java @@ -37,7 +37,7 @@ public final class ChatModelObservationContentProcessor { return List.of(); } - return context.getRequest().getInstructions().stream().map(Content::getContent).toList(); + return context.getRequest().getInstructions().stream().map(Content::getText).toList(); } public static List completion(ChatModelObservationContext context) { @@ -46,7 +46,7 @@ public final class ChatModelObservationContentProcessor { return List.of(); } - if (!StringUtils.hasText(context.getResponse().getResult().getOutput().getContent())) { + if (!StringUtils.hasText(context.getResponse().getResult().getOutput().getText())) { return List.of(); } @@ -54,8 +54,8 @@ public final class ChatModelObservationContentProcessor { .getResults() .stream() .filter(generation -> generation.getOutput() != null - && StringUtils.hasText(generation.getOutput().getContent())) - .map(generation -> generation.getOutput().getContent()) + && StringUtils.hasText(generation.getOutput().getText())) + .map(generation -> generation.getOutput().getText()) .toList(); } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java index deb35cb9b..3140901c0 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java @@ -75,7 +75,7 @@ public class Prompt implements ModelRequest> { public String getContents() { StringBuilder sb = new StringBuilder(); for (Message message : getInstructions()) { - sb.append(message.getContent()); + sb.append(message.getText()); } return sb.toString(); } @@ -119,14 +119,13 @@ public class Prompt implements ModelRequest> { List messagesCopy = new ArrayList<>(); this.messages.forEach(message -> { if (message instanceof UserMessage userMessage) { - messagesCopy - .add(new UserMessage(userMessage.getContent(), userMessage.getMedia(), message.getMetadata())); + messagesCopy.add(new UserMessage(userMessage.getText(), userMessage.getMedia(), message.getMetadata())); } else if (message instanceof SystemMessage systemMessage) { - messagesCopy.add(new SystemMessage(systemMessage.getContent())); + messagesCopy.add(new SystemMessage(systemMessage.getText())); } else if (message instanceof AssistantMessage assistantMessage) { - messagesCopy.add(new AssistantMessage(assistantMessage.getContent(), assistantMessage.getMetadata(), + messagesCopy.add(new AssistantMessage(assistantMessage.getText(), assistantMessage.getMetadata(), assistantMessage.getToolCalls())); } else if (message instanceof ToolResponseMessage toolResponseMessage) { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/document/Document.java b/spring-ai-core/src/main/java/org/springframework/ai/document/Document.java index df294c0b0..3a1df9b2f 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/document/Document.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/document/Document.java @@ -16,10 +16,7 @@ package org.springframework.ai.document; -import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; @@ -31,7 +28,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.springframework.ai.document.id.IdGenerator; import org.springframework.ai.document.id.RandomIdGenerator; import org.springframework.ai.model.Media; -import org.springframework.ai.model.MediaContent; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -39,25 +35,69 @@ import org.springframework.util.StringUtils; /** * A document is a container for the content and metadata of a document. It also contains * the document's unique ID and an optional embedding. + * + * A Document can hold either text content or media content, but not both. This ensures + * clear content type handling and processing. + * + * It is intended to be used to take data from external sources as part of spring-ai's ETL + * pipeline and create an embedding for the text or media and store that embedding in a + * vector database. + * + *

+ * Example of creating a text document:

{@code
+ * // Using constructor
+ * Document textDoc = new Document("Sample text content", Map.of("source", "user-input"));
+ *
+ * // Using builder
+ * Document textDoc = Document.builder()
+ *     .text("Sample text content")
+ *     .metadata("source", "user-input")
+ *     .build();
+ * }
+ * + *

+ * Example of creating a media document:

{@code
+ * // Using constructor
+ * Media imageContent = new Media(MediaType.IMAGE_PNG, new byte[] {...});
+ * Document mediaDoc = new Document(imageContent, Map.of("filename", "sample.png"));
+ *
+ * // Using builder
+ * Document mediaDoc = Document.builder()
+ *     .media(new Media(MediaType.IMAGE_PNG, new byte[] {...}))
+ *     .metadata("filename", "sample.png")
+ *     .build();
+ * }
+ * + *

+ * Example of checking content type and accessing content:

{@code
+ * if (document.isText()) {
+ *     String textContent = document.getText();
+ *     // Process text content
+ * } else {
+ *     Media mediaContent = document.getMedia();
+ *     // Process media content
+ * }
+ * }
*/ @JsonIgnoreProperties({ "contentFormatter" }) -public class Document implements MediaContent { +public class Document { public static final ContentFormatter DEFAULT_CONTENT_FORMATTER = DefaultContentFormatter.defaultConfig(); - public static final String EMPTY_TEXT = ""; - /** * Unique ID */ private final String id; /** - * Document content. + * Document string content. */ - private final String content; + private final String text; - private final Collection media; + /** + * Document media content + */ + private final Media media; /** * Metadata for the document. It should not be nested and values should be restricted @@ -66,9 +106,18 @@ public class Document implements MediaContent { private final Map metadata; /** - * Measure of similarity between the document embedding and the query vector. The - * higher the score, the more they are similar. It's the opposite of the distance - * measure. + * A numeric score associated with this document that can represent various types of + * relevance measures. + *

+ * Common uses include: + *

    + *
  • Measure of similarity between the document embedding and a query vector, where + * higher scores indicate greater similarity (opposite of distance measure) + *
  • Text relevancy rankings from retrieval systems + *
  • Custom relevancy metrics from RAG patterns + *
+ *

+ * Higher values typically indicate greater relevance or similarity. */ @Nullable private final Double score; @@ -90,56 +139,33 @@ public class Document implements MediaContent { this(content, new HashMap<>()); } - public Document(String content, Map metadata) { - this(content, metadata, new RandomIdGenerator()); + public Document(String text, Map metadata) { + this(new RandomIdGenerator().generateId(), text, null, metadata, null); } - /** - * @deprecated Use builder instead: {@link Document#builder()}. - */ - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Document(String content, Collection media, Map metadata) { - this(new RandomIdGenerator().generateId(content, metadata), content, media, metadata); + public Document(String id, String text, Map metadata) { + this(id, text, null, metadata, null); } - /** - * @deprecated Use builder instead: {@link Document#builder()}. - */ - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Document(String content, Map metadata, IdGenerator idGenerator) { - this(idGenerator.generateId(content, metadata), content, metadata); + public Document(Media media, Map metadata) { + this(new RandomIdGenerator().generateId(), null, media, metadata, null); } - public Document(String id, String content, Map metadata) { - this(id, content, List.of(), metadata); + public Document(String id, Media media, Map metadata) { + this(id, null, media, metadata, null); } - /** - * @deprecated Use builder instead: {@link Document#builder()}. - */ - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Document(String id, String content, Collection media, Map metadata) { - this(id, content, media, metadata, null); - } - - /** - * @deprecated Use builder instead: {@link Document#builder()}. - */ - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Document(String id, String content, @Nullable Collection media, - @Nullable Map metadata, @Nullable Double score) { + private Document(String id, String text, Media media, Map metadata, @Nullable Double score) { Assert.hasText(id, "id cannot be null or empty"); - Assert.notNull(content, "content cannot be null"); - Assert.notNull(media, "media cannot be null"); - Assert.noNullElements(media, "media cannot have null elements"); Assert.notNull(metadata, "metadata cannot be null"); Assert.noNullElements(metadata.keySet(), "metadata cannot have null keys"); Assert.noNullElements(metadata.values(), "metadata cannot have null values"); + Assert.isTrue(text != null ^ media != null, "exactly one of text or media must be specified"); this.id = id; - this.content = content; - this.media = media != null ? media : List.of(); - this.metadata = metadata != null ? metadata : new HashMap<>(); + this.text = text; + this.media = media; + this.metadata = new HashMap<>(metadata); this.score = score; } @@ -147,17 +173,55 @@ public class Document implements MediaContent { return new Builder(); } + /** + * Returns the unique identifier for this document. + *

+ * This ID is either explicitly provided during document creation or generated using + * the configured {@link IdGenerator} (defaults to {@link RandomIdGenerator}). + * @return the unique identifier of this document + * @see RandomIdGenerator + */ public String getId() { return this.id; } - @Override + /** + * @deprecated Use getText() instead as it more accurately reflects the content type + */ + @Deprecated public String getContent() { - return this.content; + return this.getText(); } - @Override - public Collection getMedia() { + /** + * Returns the document's text content, if any. + * @return the text content if {@link #isText()} is true, null otherwise + * @see #isText() + * @see #getMedia() + */ + @Nullable + public String getText() { + return this.text; + } + + /** + * Determines whether this document contains text or media content. + * @return true if this document contains text content (accessible via + * {@link #getText()}), false if it contains media content (accessible via + * {@link #getMedia()}) + */ + public boolean isText() { + return this.text != null; + } + + /** + * Returns the document's media content, if any. + * @return the media content if {@link #isText()} is false, null otherwise + * @see #isText() + * @see #getText() + */ + @Nullable + public Media getMedia() { return this.media; } @@ -180,7 +244,13 @@ public class Document implements MediaContent { return formatter.format(this, metadataMode); } - @Override + /** + * Returns the metadata associated with this document. + *

+ * The metadata values are restricted to simple types (string, int, float, boolean) + * for compatibility with Vector Databases. + * @return the metadata map + */ public Map getMetadata() { return this.metadata; } @@ -227,11 +297,7 @@ public class Document implements MediaContent { } public Builder mutate() { - return new Builder().id(this.id) - .content(this.content) - .media(new ArrayList<>(this.media)) - .metadata(this.metadata) - .score(this.score); + return new Builder().id(this.id).text(this.text).media(this.media).metadata(this.metadata).score(this.score); } @Override @@ -240,19 +306,19 @@ public class Document implements MediaContent { return false; } Document document = (Document) o; - return Objects.equals(this.id, document.id) && Objects.equals(this.content, document.content) + return Objects.equals(this.id, document.id) && Objects.equals(this.text, document.text) && Objects.equals(this.media, document.media) && Objects.equals(this.metadata, document.metadata) && Objects.equals(this.score, document.score); } @Override public int hashCode() { - return Objects.hash(this.id, this.content, this.media, this.metadata, this.score); + return Objects.hash(this.id, this.text, this.media, this.metadata, this.score); } @Override public String toString() { - return "Document{" + "id='" + this.id + '\'' + ", content='" + this.content + '\'' + ", media=" + this.media + return "Document{" + "id='" + this.id + '\'' + ", text='" + this.text + '\'' + ", media='" + this.media + '\'' + ", metadata=" + this.metadata + ", score=" + this.score + '}'; } @@ -260,9 +326,9 @@ public class Document implements MediaContent { private String id; - private String content = Document.EMPTY_TEXT; + private String text; - private List media = new ArrayList<>(); + private Media media; private Map metadata = new HashMap<>(); @@ -285,83 +351,92 @@ public class Document implements MediaContent { return this; } - public Builder content(String content) { - this.content = content; + /** + * Sets the text content of the document. + *

+ * Either text or media content must be set before building the document, but not + * both. + * @param text the text content + * @return the builder instance + * @see #media(Media) + */ + public Builder text(@Nullable String text) { + this.text = text; return this; } - public Builder media(List media) { - Assert.notNull(media, "media cannot be null"); - this.media.addAll(media); + /** + * Sets the text content of the document. + * @param text the text content to set + * @return the builder instance + * @deprecated since 1.0.0-M5, use {@link #text(String)} instead as it more + * accurately reflects that this Document instance will contain text rather than + * generic content. This method will be removed in a future release. + */ + @Deprecated(since = "1.0.0-M5", forRemoval = true) + public Builder content(@Nullable String text) { + this.text = text; return this; } - public Builder media(Media... media) { - Assert.noNullElements(media, "media cannot contain null elements"); - this.media.addAll(List.of(media)); + /** + * Sets the media content of the document. + *

+ * Either text or media content must be set before building the document, but not + * both. + * @param media the media content + * @return the builder instance + * @see #text(String) + */ + public Builder media(@Nullable Media media) { + this.media = media; return this; } public Builder metadata(Map metadata) { + Assert.notNull(metadata, "metadata cannot be null"); this.metadata = metadata; return this; } public Builder metadata(String key, Object value) { + Assert.notNull(key, "metadata key cannot be null"); + Assert.notNull(value, "metadata value cannot be null"); this.metadata.put(key, value); return this; } public Builder embedding(float[] embedding) { + Assert.notNull(embedding, "embedding cannot be null"); this.embedding = embedding; return this; } + /** + * Sets a score value for this document. + *

+ * Common uses include: + *

    + *
  • Measure of similarity between the document embedding and a query vector, + * where higher scores indicate greater similarity (opposite of distance measure) + *
  • Text relevancy rankings from retrieval systems + *
  • Custom relevancy metrics from RAG patterns + *
+ *

+ * Higher values typically indicate greater relevance or similarity. + * @param score the document score, may be null + * @return the builder instance + */ public Builder score(@Nullable Double score) { this.score = score; return this; } - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withIdGenerator(IdGenerator idGenerator) { - return idGenerator(idGenerator); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withId(String id) { - return id(id); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withContent(String content) { - return content(content); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withMedia(List media) { - return media(media); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withMedia(Media media) { - return media(media); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withMetadata(Map metadata) { - return metadata(metadata); - } - - @Deprecated(since = "1.0.0-M5", forRemoval = true) - public Builder withMetadata(String key, Object value) { - return metadata(key, value); - } - public Document build() { if (!StringUtils.hasText(this.id)) { - this.id = this.idGenerator.generateId(this.content, this.metadata); + this.id = this.idGenerator.generateId(this.text, this.metadata); } - var document = new Document(this.id, this.content, this.media, this.metadata, this.score); + var document = new Document(this.id, this.text, this.media, this.metadata, this.score); document.setEmbedding(this.embedding); return document; } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/Evaluator.java b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/Evaluator.java index 9b12205d3..927b97acb 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/Evaluator.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/Evaluator.java @@ -30,7 +30,7 @@ public interface Evaluator { default String doGetSupportingData(EvaluationRequest evaluationRequest) { List data = evaluationRequest.getDataList(); return data.stream() - .map(Content::getContent) + .map(Content::getText) .filter(StringUtils::hasText) .collect(Collectors.joining(System.lineSeparator())); } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/model/Content.java b/spring-ai-core/src/main/java/org/springframework/ai/model/Content.java index b5e8fa2a5..585866c95 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/model/Content.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/model/Content.java @@ -33,7 +33,15 @@ public interface Content { * Get the content of the message. * @return the content of the message */ - String getContent(); // TODO consider getText + String getText(); + + /** + * Get the content of the message. + * @return the content of the message + * @deprecated Use getText + */ + @Deprecated(since = "1.0.0.M5") + String getContent(); /** * Get the metadata associated with the content. diff --git a/spring-ai-core/src/main/java/org/springframework/ai/model/MediaContent.java b/spring-ai-core/src/main/java/org/springframework/ai/model/MediaContent.java index 933ded36b..a554b86e7 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/model/MediaContent.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/model/MediaContent.java @@ -17,12 +17,13 @@ package org.springframework.ai.model; import java.util.Collection; +import java.util.List; public interface MediaContent extends Content { /** * Get the media associated with the content. */ - Collection getMedia(); + List getMedia(); } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java b/spring-ai-core/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java index e2a89aa7c..d7e3fe251 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/rag/generation/augmentation/ContextualQueryAugmenter.java @@ -104,7 +104,7 @@ public final class ContextualQueryAugmenter implements QueryAugmenter { // 1. Collect content from documents. String documentContext = documents.stream() - .map(Content::getContent) + .map(Document::getText) .collect(Collectors.joining(System.lineSeparator())); // 2. Define prompt parameters. diff --git a/spring-ai-core/src/main/java/org/springframework/ai/tokenizer/JTokkitTokenCountEstimator.java b/spring-ai-core/src/main/java/org/springframework/ai/tokenizer/JTokkitTokenCountEstimator.java index 760a9a4b3..b5f0523d8 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/tokenizer/JTokkitTokenCountEstimator.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/tokenizer/JTokkitTokenCountEstimator.java @@ -56,8 +56,8 @@ public class JTokkitTokenCountEstimator implements TokenCountEstimator { public int estimate(MediaContent content) { int tokenCount = 0; - if (content.getContent() != null) { - tokenCount += this.estimate(content.getContent()); + if (content.getText() != null) { + tokenCount += this.estimate(content.getText()); } if (!CollectionUtils.isEmpty(content.getMedia())) { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/transformer/KeywordMetadataEnricher.java b/spring-ai-core/src/main/java/org/springframework/ai/transformer/KeywordMetadataEnricher.java index dd02b336b..ff5a4a5d1 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/transformer/KeywordMetadataEnricher.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/transformer/KeywordMetadataEnricher.java @@ -65,7 +65,7 @@ public class KeywordMetadataEnricher implements DocumentTransformer { var template = new PromptTemplate(String.format(KEYWORDS_TEMPLATE, this.keywordCount)); Prompt prompt = template.create(Map.of(CONTEXT_STR_PLACEHOLDER, document.getContent())); - String keywords = this.chatModel.call(prompt).getResult().getOutput().getContent(); + String keywords = this.chatModel.call(prompt).getResult().getOutput().getText(); document.getMetadata().putAll(Map.of(EXCERPT_KEYWORDS_METADATA_KEY, keywords)); } return documents; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/transformer/SummaryMetadataEnricher.java b/spring-ai-core/src/main/java/org/springframework/ai/transformer/SummaryMetadataEnricher.java index a15378282..4f1fe394d 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/transformer/SummaryMetadataEnricher.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/transformer/SummaryMetadataEnricher.java @@ -97,7 +97,7 @@ public class SummaryMetadataEnricher implements DocumentTransformer { Prompt prompt = new PromptTemplate(this.summaryTemplate) .create(Map.of(CONTEXT_STR_PLACEHOLDER, documentContext)); - documentSummaries.add(this.chatModel.call(prompt).getResult().getOutput().getContent()); + documentSummaries.add(this.chatModel.call(prompt).getResult().getOutput().getText()); } for (int i = 0; i < documentSummaries.size(); i++) { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SimpleVectorStoreContent.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SimpleVectorStoreContent.java index 2d1590f68..b44389678 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SimpleVectorStoreContent.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SimpleVectorStoreContent.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -41,7 +42,7 @@ public final class SimpleVectorStoreContent implements Content { private final String id; - private final String content; + private final String text; private final Map metadata; @@ -50,55 +51,55 @@ public final class SimpleVectorStoreContent implements Content { /** * Creates a new instance with the given content, empty metadata, and embedding * vector. - * @param content the content text, must not be null + * @param text the content text, must not be null * @param embedding the embedding vector, must not be null */ @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - public SimpleVectorStoreContent(@JsonProperty("content") String content, + public SimpleVectorStoreContent(@JsonProperty("text") @JsonAlias({ "content" }) String text, @JsonProperty("embedding") float[] embedding) { - this(content, new HashMap<>(), embedding); + this(text, new HashMap<>(), embedding); } /** * Creates a new instance with the given content, metadata, and embedding vector. - * @param content the content text, must not be null + * @param text the content text, must not be null * @param metadata the metadata map, must not be null * @param embedding the embedding vector, must not be null */ - public SimpleVectorStoreContent(String content, Map metadata, float[] embedding) { - this(content, metadata, new RandomIdGenerator(), embedding); + public SimpleVectorStoreContent(String text, Map metadata, float[] embedding) { + this(text, metadata, new RandomIdGenerator(), embedding); } /** * Creates a new instance with the given content, metadata, custom ID generator, and * embedding vector. - * @param content the content text, must not be null + * @param text the content text, must not be null * @param metadata the metadata map, must not be null * @param idGenerator the ID generator to use, must not be null * @param embedding the embedding vector, must not be null */ - public SimpleVectorStoreContent(String content, Map metadata, IdGenerator idGenerator, + public SimpleVectorStoreContent(String text, Map metadata, IdGenerator idGenerator, float[] embedding) { - this(idGenerator.generateId(content, metadata), content, metadata, embedding); + this(idGenerator.generateId(text, metadata), text, metadata, embedding); } /** * Creates a new instance with all fields specified. * @param id the unique identifier, must not be empty - * @param content the content text, must not be null + * @param text the content text, must not be null * @param metadata the metadata map, must not be null * @param embedding the embedding vector, must not be null * @throws IllegalArgumentException if any parameter is null or if id is empty */ - public SimpleVectorStoreContent(String id, String content, Map metadata, float[] embedding) { + public SimpleVectorStoreContent(String id, String text, Map metadata, float[] embedding) { Assert.hasText(id, "id must not be null or empty"); - Assert.notNull(content, "content must not be null"); + Assert.notNull(text, "content must not be null"); Assert.notNull(metadata, "metadata must not be null"); Assert.notNull(embedding, "embedding must not be null"); Assert.isTrue(embedding.length > 0, "embedding vector must not be empty"); this.id = id; - this.content = content; + this.text = text; this.metadata = Collections.unmodifiableMap(new HashMap<>(metadata)); this.embedding = Arrays.copyOf(embedding, embedding.length); } @@ -112,16 +113,21 @@ public final class SimpleVectorStoreContent implements Content { public SimpleVectorStoreContent withEmbedding(float[] embedding) { Assert.notNull(embedding, "embedding must not be null"); Assert.isTrue(embedding.length > 0, "embedding vector must not be empty"); - return new SimpleVectorStoreContent(this.id, this.content, this.metadata, embedding); + return new SimpleVectorStoreContent(this.id, this.text, this.metadata, embedding); } public String getId() { return this.id; } + @Override + public String getText() { + return this.text; + } + @Override public String getContent() { - return this.content; + return this.text; } @Override @@ -140,7 +146,7 @@ public final class SimpleVectorStoreContent implements Content { public Document toDocument(Double score) { var metadata = new HashMap<>(this.metadata); metadata.put(DocumentMetadata.DISTANCE.value(), 1.0 - score); - return Document.builder().id(this.id).content(this.content).metadata(metadata).score(score).build(); + return Document.builder().id(this.id).text(this.text).metadata(metadata).score(score).build(); } @Override @@ -152,14 +158,14 @@ public final class SimpleVectorStoreContent implements Content { return false; } SimpleVectorStoreContent that = (SimpleVectorStoreContent) o; - return Objects.equals(this.id, that.id) && Objects.equals(this.content, that.content) + return Objects.equals(this.id, that.id) && Objects.equals(this.text, that.text) && Objects.equals(this.metadata, that.metadata) && Arrays.equals(this.embedding, that.embedding); } @Override public int hashCode() { int result = Objects.hashCode(this.id); - result = 31 * result + Objects.hashCode(this.content); + result = 31 * result + Objects.hashCode(this.text); result = 31 * result + Objects.hashCode(this.metadata); result = 31 * result + Arrays.hashCode(this.embedding); return result; @@ -167,8 +173,8 @@ public final class SimpleVectorStoreContent implements Content { @Override public String toString() { - return "SimpleVectorStoreContent{" + "id='" + this.id + '\'' + ", content='" + this.content + '\'' - + ", metadata=" + this.metadata + ", embedding=" + Arrays.toString(this.embedding) + '}'; + return "SimpleVectorStoreContent{" + "id='" + this.id + '\'' + ", content='" + this.text + '\'' + ", metadata=" + + this.metadata + ", embedding=" + Arrays.toString(this.embedding) + '}'; } } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatModelTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatModelTests.java index 27568b6be..37440e836 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatModelTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatModelTests.java @@ -53,7 +53,7 @@ class ChatModelTests { ChatModel mockClient = Mockito.mock(ChatModel.class); AssistantMessage mockAssistantMessage = Mockito.mock(AssistantMessage.class); - given(mockAssistantMessage.getContent()).willReturn(responseMessage); + given(mockAssistantMessage.getText()).willReturn(responseMessage); // Create a mock Generation Generation generation = Mockito.mock(Generation.class); @@ -84,7 +84,7 @@ class ChatModelTests { verify(mockClient, times(1)).call(isA(Prompt.class)); verify(response, times(1)).getResult(); verify(generation, times(1)).getOutput(); - verify(mockAssistantMessage, times(1)).getContent(); + verify(mockAssistantMessage, times(1)).getText(); verifyNoMoreInteractions(mockClient, generation, response); } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientAdvisorTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientAdvisorTests.java index 07d77ecb1..cbfc57910 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientAdvisorTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientAdvisorTests.java @@ -85,11 +85,11 @@ public class ChatClientAdvisorTests { ChatResponse chatResponse = chatClient.prompt().user("my name is John").call().chatResponse(); - String content = chatResponse.getResult().getOutput().getContent(); + String content = chatResponse.getResult().getOutput().getText(); assertThat(content).isEqualTo("Hello John"); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(systemMessage.getText()).isEqualToIgnoringWhitespace(""" Default system text. Use the conversation memory from the MEMORY section to provide accurate answers. @@ -101,14 +101,14 @@ public class ChatClientAdvisorTests { assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); Message userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace("my name is John"); + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace("my name is John"); content = chatClient.prompt().user("What is my name?").call().content(); assertThat(content).isEqualTo("Your name is John"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(systemMessage.getText()).isEqualToIgnoringWhitespace(""" Default system text. Use the conversation memory from the MEMORY section to provide accurate answers. @@ -122,7 +122,7 @@ public class ChatClientAdvisorTests { assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace("What is my name?"); + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace("What is my name?"); } @Test @@ -154,7 +154,7 @@ public class ChatClientAdvisorTests { assertThat(content).isEqualTo("Hello John"); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(systemMessage.getText()).isEqualToIgnoringWhitespace(""" Default system text. Use the conversation memory from the MEMORY section to provide accurate answers. @@ -166,14 +166,14 @@ public class ChatClientAdvisorTests { assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); Message userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace("my name is John"); + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace("my name is John"); content = join(chatClient.prompt().user("What is my name?").stream().content()); assertThat(content).isEqualTo("Your name is John"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(systemMessage.getText()).isEqualToIgnoringWhitespace(""" Default system text. Use the conversation memory from the MEMORY section to provide accurate answers. @@ -187,7 +187,7 @@ public class ChatClientAdvisorTests { assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace("What is my name?"); + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace("What is my name?"); } } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java index a5038f32a..4dfc4a0a8 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java @@ -77,7 +77,7 @@ public class ChatClientResponseEntityTests { Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).contains("Tell me about John"); + assertThat(userMessage.getText()).contains("Tell me about John"); } @Test @@ -107,7 +107,7 @@ public class ChatClientResponseEntityTests { Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).contains("Tell me about them"); + assertThat(userMessage.getText()).contains("Tell me about them"); } @Test @@ -132,7 +132,7 @@ public class ChatClientResponseEntityTests { Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).contains("Tell me about Max"); + assertThat(userMessage.getText()).contains("Tell me about Max"); } record MyBean(String name, int age) { diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientTest.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientTest.java index b596efd3b..1254ec5db 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientTest.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientTest.java @@ -91,7 +91,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text"); + assertThat(systemMessage.getText()).isEqualTo("Default system text"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); content = join(chatClient.prompt("What's Spring AI?").stream().content()); @@ -99,7 +99,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text"); + assertThat(systemMessage.getText()).isEqualTo("Default system text"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Override the default system text with prompt system @@ -107,7 +107,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Override default system text"); + assertThat(systemMessage.getText()).isEqualTo("Override default system text"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Streaming @@ -116,7 +116,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Override default system text"); + assertThat(systemMessage.getText()).isEqualTo("Override default system text"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -144,7 +144,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1, value2"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Streaming @@ -153,7 +153,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1, value2"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Override single default system parameter @@ -161,7 +161,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1New, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1New, value2"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // streaming @@ -170,7 +170,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1New, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1New, value2"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Override default system text @@ -181,7 +181,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Override default system text value3"); + assertThat(systemMessage.getText()).isEqualTo("Override default system text value3"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); // Streaming @@ -192,7 +192,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("Override default system text value3"); + assertThat(systemMessage.getText()).isEqualTo("Override default system text value3"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -239,11 +239,11 @@ public class ChatClientTest { Message systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1, value2"); UserMessage userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Default user text value1, value2"); + assertThat(userMessage.getText()).isEqualTo("Default user text value1, value2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -261,11 +261,11 @@ public class ChatClientTest { systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("Default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Default system text value1, value2"); userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Default user text value1, value2"); + assertThat(userMessage.getText()).isEqualTo("Default user text value1, value2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -291,11 +291,11 @@ public class ChatClientTest { systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("Mutated default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Mutated default system text value1, value2"); userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Mutated default user text value1, value2"); + assertThat(userMessage.getText()).isEqualTo("Mutated default user text value1, value2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -313,11 +313,11 @@ public class ChatClientTest { systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("Mutated default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("Mutated default system text value1, value2"); userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Mutated default user text value1, value2"); + assertThat(userMessage.getText()).isEqualTo("Mutated default user text value1, value2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -377,11 +377,11 @@ public class ChatClientTest { Message systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("New default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("New default system text value1, value2"); UserMessage userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Default user text userValue1, userValue2"); + assertThat(userMessage.getText()).isEqualTo("Default user text userValue1, userValue2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -408,11 +408,11 @@ public class ChatClientTest { systemMessage = prompt.getInstructions().get(0); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); - assertThat(systemMessage.getContent()).isEqualTo("New default system text value1, value2"); + assertThat(systemMessage.getText()).isEqualTo("New default system text value1, value2"); userMessage = (UserMessage) prompt.getInstructions().get(1); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("Default user text userValue1, userValue2"); + assertThat(userMessage.getText()).isEqualTo("Default user text userValue1, userValue2"); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_JPEG); @@ -435,7 +435,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualTo("Default user text"); + assertThat(userMessage.getText()).isEqualTo("Default user text"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); // Override the default system text with prompt system @@ -443,7 +443,7 @@ public class ChatClientTest { assertThat(content).isEqualTo("response"); userMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualTo("Override default user text"); + assertThat(userMessage.getText()).isEqualTo("Override default user text"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -456,7 +456,7 @@ public class ChatClientTest { .isEqualTo("response"); Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualTo("User prompt"); + assertThat(userMessage.getText()).isEqualTo("User prompt"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -469,7 +469,7 @@ public class ChatClientTest { .isEqualTo("response"); Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualTo("User prompt"); + assertThat(userMessage.getText()).isEqualTo("User prompt"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -488,7 +488,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(1); Message userMessage = this.promptCaptor.getValue().getInstructions().get(0); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); - assertThat(userMessage.getContent()).isEqualTo("User prompt"); + assertThat(userMessage.getText()).isEqualTo("User prompt"); assertThat(((UserMessage) userMessage).getMedia()).hasSize(1); } @@ -509,7 +509,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("System prompt"); + assertThat(systemMessage.getText()).isEqualTo("System prompt"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -539,11 +539,11 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("System text"); + assertThat(systemMessage.getText()).isEqualTo("System text"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); UserMessage userMessage = (UserMessage) this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualTo("User text Rock"); + assertThat(userMessage.getText()).isEqualTo("User text Rock"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); assertThat(userMessage.getMedia()).hasSize(1); assertThat(userMessage.getMedia().iterator().next().getMimeType()).isEqualTo(MimeTypeUtils.IMAGE_PNG); @@ -598,7 +598,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(1); var userMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualTo("my question"); + assertThat(userMessage.getText()).isEqualTo("my question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -615,7 +615,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); var userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualTo("my question"); + assertThat(userMessage.getText()).isEqualTo("my question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -631,7 +631,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); var userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualTo("another question"); + assertThat(userMessage.getText()).isEqualTo("another question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -648,7 +648,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(3); var userMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(userMessage.getContent()).isEqualTo("another question"); + assertThat(userMessage.getText()).isEqualTo("another question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -665,7 +665,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); var userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualTo("another question"); + assertThat(userMessage.getText()).isEqualTo("another question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -682,7 +682,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(3); var userMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(userMessage.getContent()).isEqualTo("another question"); + assertThat(userMessage.getText()).isEqualTo("another question"); } @Test @@ -698,7 +698,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(2); var userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualTo("another question"); + assertThat(userMessage.getText()).isEqualTo("another question"); assertThat(userMessage.getMessageType()).isEqualTo(MessageType.USER); } @@ -717,7 +717,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(4); var systemMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(systemMessage.getContent()).isEqualTo("instructions"); + assertThat(systemMessage.getText()).isEqualTo("instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -734,7 +734,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(3); var systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("instructions"); + assertThat(systemMessage.getText()).isEqualTo("instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -751,7 +751,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(4); var systemMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(systemMessage.getContent()).isEqualTo("other instructions"); + assertThat(systemMessage.getText()).isEqualTo("other instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -773,7 +773,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(4); var systemMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(systemMessage.getContent()).isEqualTo("instructions"); + assertThat(systemMessage.getText()).isEqualTo("instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -790,7 +790,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(3); var systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - assertThat(systemMessage.getContent()).isEqualTo("instructions"); + assertThat(systemMessage.getText()).isEqualTo("instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } @@ -812,7 +812,7 @@ public class ChatClientTest { assertThat(this.promptCaptor.getValue().getInstructions()).hasSize(4); var systemMessage = this.promptCaptor.getValue().getInstructions().get(2); - assertThat(systemMessage.getContent()).isEqualTo("other instructions"); + assertThat(systemMessage.getText()).isEqualTo("other instructions"); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/DefaultChatClientTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/DefaultChatClientTests.java index 48e59a053..c610daf44 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/DefaultChatClientTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/DefaultChatClientTests.java @@ -97,7 +97,7 @@ class DefaultChatClientTests { DefaultChatClient.DefaultChatClientRequestSpec spec = (DefaultChatClient.DefaultChatClientRequestSpec) chatClient .prompt("my question"); assertThat(spec.getMessages()).hasSize(1); - assertThat(spec.getMessages().get(0).getContent()).isEqualTo("my question"); + assertThat(spec.getMessages().get(0).getText()).isEqualTo("my question"); } @Test @@ -107,8 +107,8 @@ class DefaultChatClientTests { DefaultChatClient.DefaultChatClientRequestSpec spec = (DefaultChatClient.DefaultChatClientRequestSpec) chatClient .prompt(prompt); assertThat(spec.getMessages()).hasSize(2); - assertThat(spec.getMessages().get(0).getContent()).isEqualTo("instructions"); - assertThat(spec.getMessages().get(1).getContent()).isEqualTo("my question"); + assertThat(spec.getMessages().get(0).getText()).isEqualTo("instructions"); + assertThat(spec.getMessages().get(1).getText()).isEqualTo("my question"); assertThat(spec.getChatOptions()).isNull(); } @@ -628,11 +628,11 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(1); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("my question"); } @Test @@ -651,12 +651,12 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(2); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); } @Test @@ -676,13 +676,13 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(3); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); - assertThat(actualPrompt.getInstructions().get(2).getContent()).isEqualTo("another question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(2).getText()).isEqualTo("another question"); } @Test @@ -703,13 +703,13 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(3); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); - assertThat(actualPrompt.getInstructions().get(2).getContent()).isEqualTo("another question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(2).getText()).isEqualTo("another question"); } @Test @@ -1091,11 +1091,11 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse().blockLast(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(1); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("my question"); } @Test @@ -1114,12 +1114,12 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse().blockLast(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(2); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); } @Test @@ -1139,13 +1139,13 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse().blockLast(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(3); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); - assertThat(actualPrompt.getInstructions().get(2).getContent()).isEqualTo("another question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(2).getText()).isEqualTo("another question"); } @Test @@ -1166,13 +1166,13 @@ class DefaultChatClientTests { ChatResponse chatResponse = spec.chatResponse().blockLast(); assertThat(chatResponse).isNotNull(); - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("response"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("response"); Prompt actualPrompt = promptCaptor.getValue(); assertThat(actualPrompt.getInstructions()).hasSize(3); - assertThat(actualPrompt.getInstructions().get(0).getContent()).isEqualTo("instructions"); - assertThat(actualPrompt.getInstructions().get(1).getContent()).isEqualTo("my question"); - assertThat(actualPrompt.getInstructions().get(2).getContent()).isEqualTo("another question"); + assertThat(actualPrompt.getInstructions().get(0).getText()).isEqualTo("instructions"); + assertThat(actualPrompt.getInstructions().get(1).getText()).isEqualTo("my question"); + assertThat(actualPrompt.getInstructions().get(2).getText()).isEqualTo("another question"); } @Test diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisorTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisorTests.java index 08b365ffd..7a02fb004 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisorTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/QuestionAnswerAdvisorTests.java @@ -148,22 +148,22 @@ public class QuestionAnswerAdvisorTests { assertThat(response.getMetadata().get("key6").toString()).isEqualTo("value6"); assertThat(response.getMetadata().get("key1").toString()).isEqualTo("value1"); - String content = response.getResult().getOutput().getContent(); + String content = response.getResult().getOutput().getText(); assertThat(content).isEqualTo("Your answer is ZXY"); Message systemMessage = this.promptCaptor.getValue().getInstructions().get(0); - System.out.println(systemMessage.getContent()); + System.out.println(systemMessage.getText()); - assertThat(systemMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(systemMessage.getText()).isEqualToIgnoringWhitespace(""" Default system text. """); assertThat(systemMessage.getMessageType()).isEqualTo(MessageType.SYSTEM); Message userMessage = this.promptCaptor.getValue().getInstructions().get(1); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace(""" + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace(""" Please answer my question XYZ Context information is below, surrounded by --------------------- @@ -204,7 +204,7 @@ public class QuestionAnswerAdvisorTests { //formatter:on var expectedQuery = "Please answer my question XYZ"; - var userPrompt = this.promptCaptor.getValue().getInstructions().get(0).getContent(); + var userPrompt = this.promptCaptor.getValue().getInstructions().get(0).getText(); assertThat(userPrompt).doesNotContain(userTextTemplate); assertThat(userPrompt).contains(expectedQuery); assertThat(this.vectorSearchCaptor.getValue().getQuery()).isEqualTo(expectedQuery); @@ -233,7 +233,7 @@ public class QuestionAnswerAdvisorTests { //formatter:on var expectedQuery = "Please answer my question XYZ"; - var userPrompt = this.promptCaptor.getValue().getInstructions().get(0).getContent(); + var userPrompt = this.promptCaptor.getValue().getInstructions().get(0).getText(); assertThat(userPrompt).doesNotContain(userTextTemplate); assertThat(userPrompt).contains(expectedQuery); assertThat(this.vectorSearchCaptor.getValue().getQuery()).isEqualTo(expectedQuery); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/RetrievalAugmentationAdvisorTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/RetrievalAugmentationAdvisorTests.java index c8e336d6c..a78bb1693 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/RetrievalAugmentationAdvisorTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/RetrievalAugmentationAdvisorTests.java @@ -70,8 +70,8 @@ class RetrievalAugmentationAdvisorTests { .build()); // Document Retriever - var documentContext = List.of(Document.builder().id("1").content("doc1").build(), - Document.builder().id("2").content("doc2").build()); + var documentContext = List.of(Document.builder().id("1").text("doc1").build(), + Document.builder().id("2").text("doc2").build()); var documentRetriever = mock(DocumentRetriever.class); var queryCaptor = ArgumentCaptor.forClass(Query.class); given(documentRetriever.retrieve(queryCaptor.capture())).willReturn(documentContext); @@ -94,7 +94,7 @@ class RetrievalAugmentationAdvisorTests { .chatResponse(); // Verify - assertThat(chatResponse.getResult().getOutput().getContent()).isEqualTo("Felix Felicis"); + assertThat(chatResponse.getResult().getOutput().getText()).isEqualTo("Felix Felicis"); assertThat(chatResponse.getMetadata().>get(RetrievalAugmentationAdvisor.DOCUMENT_CONTEXT)) .containsAll(documentContext); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/SimpleLoggerAdvisorTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/SimpleLoggerAdvisorTests.java index b12e1b24f..3a62b7a1f 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/SimpleLoggerAdvisorTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/advisor/SimpleLoggerAdvisorTests.java @@ -101,7 +101,7 @@ public class SimpleLoggerAdvisorTests { assertThat(content).isEqualTo("Your answer is ZXY"); UserMessage userMessage = (UserMessage) this.promptCaptor.getValue().getInstructions().get(0); - assertThat(userMessage.getContent()).isEqualToIgnoringWhitespace("Please answer my question XYZ"); + assertThat(userMessage.getText()).isEqualToIgnoringWhitespace("Please answer my question XYZ"); assertThat(output.getOut()).contains("request: AdvisedRequest", "userText=Please answer my question XYZ"); assertThat(output.getOut()).contains("response:", "finishReason"); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/model/GenerationTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/model/GenerationTests.java index b5e173e1d..eec864914 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/model/GenerationTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/model/GenerationTests.java @@ -52,7 +52,7 @@ public class GenerationTests { AssistantMessage assistantMessage = new AssistantMessage(expectedText); Generation generation = new Generation(assistantMessage); - assertEquals(expectedText, generation.getOutput().getContent()); + assertEquals(expectedText, generation.getOutput().getText()); } @Test diff --git a/spring-ai-core/src/test/java/org/springframework/ai/document/ContentFormatterTests.java b/spring-ai-core/src/test/java/org/springframework/ai/document/ContentFormatterTests.java index 5437d965c..2e3574d53 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/document/ContentFormatterTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/document/ContentFormatterTests.java @@ -61,35 +61,4 @@ public class ContentFormatterTests { .isEqualTo(defaultConfigFormatter.format(this.document, MetadataMode.ALL)); } - @Test - public void customTextFormatter() { - - DefaultContentFormatter textFormatter = DefaultContentFormatter.builder() - .withExcludedEmbedMetadataKeys("embedKey2", "embedKey3") - .withExcludedInferenceMetadataKeys("llmKey2") - .withTextTemplate("Metadata:\n{metadata_string}\n\nText:{content}") - .withMetadataTemplate("Key/Value {key}={value}") - .build(); - - assertThat(this.document.getFormattedContent(textFormatter, MetadataMode.EMBED)).isEqualTo(""" - Metadata: - Key/Value llmKey2=value4 - Key/Value embedKey1=value1 - - Text:The World is Big and Salvation Lurks Around the Corner"""); - - assertThat(this.document.getContent()).isEqualTo(""" - The World is Big and Salvation Lurks Around the Corner"""); - - assertThat(this.document.getFormattedContent(textFormatter, MetadataMode.EMBED)) - .isEqualTo(textFormatter.format(this.document, MetadataMode.EMBED)); - - var documentWithCustomFormatter = new Document(this.document.getId(), this.document.getContent(), - this.document.getMetadata()); - documentWithCustomFormatter.setContentFormatter(textFormatter); - - assertThat(this.document.getFormattedContent(textFormatter, MetadataMode.ALL)) - .isEqualTo(documentWithCustomFormatter.getFormattedContent()); - } - } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentBuilderTests.java b/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentBuilderTests.java index 222b4b585..ca89c1e24 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentBuilderTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentBuilderTests.java @@ -19,7 +19,6 @@ package org.springframework.ai.document; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.junit.jupiter.api.BeforeEach; @@ -36,13 +35,11 @@ public class DocumentBuilderTests { private Document.Builder builder; - private static List getMediaList() { + private static Media getMedia() { try { URL mediaUrl1 = new URL("http://type1"); - URL mediaUrl2 = new URL("http://type2"); - Media media1 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl1).build(); - Media media2 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl2).build(); - return List.of(media1, media2); + Media media1 = new Media(MimeTypeUtils.IMAGE_JPEG, mediaUrl1); + return media1; } catch (MalformedURLException e) { throw new RuntimeException(e); @@ -62,7 +59,7 @@ public class DocumentBuilderTests { assertThat(result).isSameAs(this.builder); - Document document = result.content("Test content").metadata("key", "value").build(); + Document document = result.text("Test content").metadata("key", "value").build(); assertThat(document.getId()).isEqualTo("mockedId"); } @@ -75,7 +72,7 @@ public class DocumentBuilderTests { @Test void testWithId() { - Document.Builder result = this.builder.id("testId"); + Document.Builder result = this.builder.text("text").id("testId"); assertThat(result).isSameAs(this.builder); assertThat(result.build().getId()).isEqualTo("testId"); @@ -83,43 +80,22 @@ public class DocumentBuilderTests { @Test void testWithIdNullOrEmpty() { - assertThatThrownBy(() -> this.builder.id(null).build()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> this.builder.text("text").id(null).build()) + .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("id cannot be null or empty"); - assertThatThrownBy(() -> this.builder.id("").build()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> this.builder.text("text").id("").build()).isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("id cannot be null or empty"); } @Test void testWithContent() { - Document.Builder result = this.builder.content("Test content"); + Document.Builder result = this.builder.text("Test content"); assertThat(result).isSameAs(this.builder); assertThat(result.build().getContent()).isEqualTo("Test content"); } - @Test - void testWithContentNull() { - assertThatThrownBy(() -> this.builder.content(null).build()).isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("content cannot be null"); - } - - @Test - void testWithMediaList() { - List mediaList = getMediaList(); - Document.Builder result = this.builder.media(mediaList); - - assertThat(result).isSameAs(this.builder); - assertThat(result.build().getMedia()).isEqualTo(mediaList); - } - - @Test - void testWithMediaListNull() { - assertThatThrownBy(() -> this.builder.media((List) null).build()) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("media cannot be null"); - } - @Test void testWithMediaSingle() throws MalformedURLException { URL mediaUrl = new URL("http://test"); @@ -128,13 +104,7 @@ public class DocumentBuilderTests { Document.Builder result = this.builder.media(media); assertThat(result).isSameAs(this.builder); - assertThat(result.build().getMedia()).contains(media); - } - - @Test - void testWithMediaSingleNull() { - assertThatThrownBy(() -> this.builder.media((Media) null).build()).isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("media cannot contain null elements"); + assertThat(result.build().getMedia()).isEqualTo(media); } @Test @@ -142,7 +112,7 @@ public class DocumentBuilderTests { Map metadata = new HashMap<>(); metadata.put("key1", "value1"); metadata.put("key2", 2); - Document.Builder result = this.builder.metadata(metadata); + Document.Builder result = this.builder.text("text").metadata(metadata); assertThat(result).isSameAs(this.builder); assertThat(result.build().getMetadata()).isEqualTo(metadata); @@ -150,7 +120,8 @@ public class DocumentBuilderTests { @Test void testWithMetadataMapNull() { - assertThatThrownBy(() -> this.builder.metadata(null).build()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> this.builder.text("text").metadata(null).build()) + .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("metadata cannot be null"); } @@ -159,26 +130,26 @@ public class DocumentBuilderTests { Document.Builder result = this.builder.metadata("key", "value"); assertThat(result).isSameAs(this.builder); - assertThat(result.build().getMetadata()).containsEntry("key", "value"); + assertThat(result.text("text").build().getMetadata()).containsEntry("key", "value"); } @Test void testWithMetadataKeyNull() { - assertThatThrownBy(() -> this.builder.metadata(null, "value").build()) + assertThatThrownBy(() -> this.builder.text("text").metadata(null, "value").build()) .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("metadata cannot have null keys"); + .hasMessageContaining("metadata key cannot be null"); } @Test void testWithMetadataValueNull() { - assertThatThrownBy(() -> this.builder.metadata("key", null).build()) + assertThatThrownBy(() -> this.builder.text("text").metadata("key", null).build()) .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("metadata cannot have null values"); + .hasMessageContaining("metadata value cannot be null"); } @Test void testBuildWithoutId() { - Document document = this.builder.content("Test content").build(); + Document document = this.builder.text("text").text("Test content").build(); assertThat(document.getId()).isNotNull().isNotEmpty(); assertThat(document.getContent()).isEqualTo("Test content"); @@ -187,19 +158,14 @@ public class DocumentBuilderTests { @Test void testBuildWithAllProperties() { - List mediaList = getMediaList(); + Media media = getMedia(); Map metadata = new HashMap<>(); metadata.put("key", "value"); - Document document = this.builder.id("customId") - .content("Test content") - .media(mediaList) - .metadata(metadata) - .build(); + Document document = this.builder.id("customId").text("Test content").metadata(metadata).build(); assertThat(document.getId()).isEqualTo("customId"); - assertThat(document.getContent()).isEqualTo("Test content"); - assertThat(document.getMedia()).isEqualTo(mediaList); + assertThat(document.getText()).isEqualTo("Test content"); assertThat(document.getMetadata()).isEqualTo(metadata); } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentTests.java b/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentTests.java index 31ca4920c..b7089afe5 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/document/DocumentTests.java @@ -17,6 +17,8 @@ package org.springframework.ai.document; import org.junit.jupiter.api.Test; + +import org.springframework.ai.document.id.IdGenerator; import org.springframework.ai.model.Media; import org.springframework.util.MimeTypeUtils; @@ -27,56 +29,36 @@ import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; public class DocumentTests { @Test void testScore() { Double score = 0.95; - Document document = Document.builder().content("Test content").score(score).build(); + Document document = Document.builder().text("Test content").score(score).build(); assertThat(document.getScore()).isEqualTo(score); } @Test void testNullScore() { - Document document = Document.builder().content("Test content").score(null).build(); + Document document = Document.builder().text("Test content").score(null).build(); assertThat(document.getScore()).isNull(); } - @Test - void testMediaBuilderIsAdditive() { - try { - URL mediaUrl1 = new URL("http://type1"); - URL mediaUrl2 = new URL("http://type2"); - URL mediaUrl3 = new URL("http://type3"); - - Media media1 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl1).build(); - Media media2 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl2).build(); - Media media3 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl3).build(); - - Document document = Document.builder().media(media1).media(media2).media(List.of(media3)).build(); - - assertThat(document.getMedia()).hasSize(3).containsExactly(media1, media2, media3); - - } - catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - @Test void testMutate() { - List mediaList = getMediaList(); + Media media = getMedia(); Map metadata = new HashMap<>(); metadata.put("key", "value"); Double score = 0.95; Document original = Document.builder() .id("customId") - .content("Test content") - .media(mediaList) + .text("Test content") + .media(null) .metadata(metadata) .score(score) .build(); @@ -88,31 +70,18 @@ public class DocumentTests { @Test void testEquals() { - List mediaList = getMediaList(); + Media media = getMedia(); Map metadata = new HashMap<>(); metadata.put("key", "value"); Double score = 0.95; - Document doc1 = Document.builder() - .id("customId") - .content("Test content") - .media(mediaList) - .metadata(metadata) - .score(score) - .build(); + Document doc1 = Document.builder().id("customId").text("Test text").metadata(metadata).score(score).build(); - Document doc2 = Document.builder() - .id("customId") - .content("Test content") - .media(mediaList) - .metadata(metadata) - .score(score) - .build(); + Document doc2 = Document.builder().id("customId").text("Test text").metadata(metadata).score(score).build(); Document differentDoc = Document.builder() .id("differentId") - .content("Different content") - .media(mediaList) + .text("Different content") .metadata(metadata) .score(score) .build(); @@ -124,25 +93,20 @@ public class DocumentTests { @Test void testEmptyDocument() { - Document emptyDoc = Document.builder().build(); - - assertThat(emptyDoc.getContent()).isEqualTo(Document.EMPTY_TEXT).isEmpty(); - assertThat(emptyDoc.getMedia()).isEmpty(); - assertThat(emptyDoc.getMetadata()).isEmpty(); - assertThat(emptyDoc.getScore()).isNull(); + assertThrows(IllegalArgumentException.class, () -> Document.builder().build()); } @Test void testToString() { - List mediaList = getMediaList(); + Media media = getMedia(); Map metadata = new HashMap<>(); metadata.put("key", "value"); Double score = 0.95; Document document = Document.builder() .id("customId") - .content("Test content") - .media(mediaList) + .text("Test content") + .media(null) .metadata(metadata) .score(score) .build(); @@ -150,28 +114,122 @@ public class DocumentTests { String toString = document.toString(); assertThat(toString).contains("id='customId'") - .contains("content='Test content'") - .contains("media=" + mediaList) + .contains("text='Test content'") .contains("metadata=" + metadata) .contains("score=" + score); } @Test - void testToStringWithEmptyDocument() { - Document emptyDoc = Document.builder().build(); + void testMediaDocumentConstruction() { + Media media = getMedia(); + Map metadata = new HashMap<>(); + metadata.put("key", "value"); - String toString = emptyDoc.toString(); + Document document = Document.builder().media(media).metadata(metadata).build(); - assertThat(toString).contains("content=''").contains("media=[]").contains("metadata={}").contains("score=null"); + assertThat(document.getMedia()).isEqualTo(media); + assertThat(document.getText()).isNull(); + assertThat(document.isText()).isFalse(); } - private static List getMediaList() { + @Test + void testTextDocumentConstruction() { + Map metadata = new HashMap<>(); + metadata.put("key", "value"); + + Document document = Document.builder().text("Test text").metadata(metadata).build(); + + assertThat(document.getText()).isEqualTo("Test text"); + assertThat(document.getMedia()).isNull(); + assertThat(document.isText()).isTrue(); + } + + @Test + void testBothTextAndMediaThrowsException() { + Media media = getMedia(); + assertThrows(IllegalArgumentException.class, () -> Document.builder().text("Test text").media(media).build()); + } + + @Test + void testCustomIdGenerator() { + IdGenerator customGenerator = contents -> "custom-" + contents[0]; + + Document document = Document.builder().text("test").idGenerator(customGenerator).build(); + + assertThat(document.getId()).isEqualTo("custom-test"); + } + + @Test + void testMetadataValidation() { + Map metadata = new HashMap<>(); + metadata.put("nullKey", null); + + assertThrows(IllegalArgumentException.class, () -> Document.builder().text("test").metadata(metadata).build()); + } + + @Test + void testFormattedContent() { + Map metadata = new HashMap<>(); + metadata.put("key", "value"); + + Document document = Document.builder().text("Test text").metadata(metadata).build(); + + String formattedContent = document.getFormattedContent(MetadataMode.ALL); + assertThat(formattedContent).contains("Test text"); + assertThat(formattedContent).contains("key"); + assertThat(formattedContent).contains("value"); + } + + @Test + void testCustomFormattedContent() { + Document document = Document.builder().text("Test text").build(); + + ContentFormatter customFormatter = (doc, mode) -> "Custom: " + doc.getText(); + String formattedContent = document.getFormattedContent(customFormatter, MetadataMode.ALL); + + assertThat(formattedContent).isEqualTo("Custom: Test text"); + } + + @Test + void testNullIdThrowsException() { + assertThrows(IllegalArgumentException.class, () -> Document.builder().id(null).text("test").build()); + } + + @Test + void testEmptyIdThrowsException() { + assertThrows(IllegalArgumentException.class, () -> Document.builder().id("").text("test").build()); + } + + @Test + void testMetadataKeyValueAddition() { + Document document = Document.builder() + .text("test") + .metadata("key1", "value1") + .metadata("key2", "value2") + .build(); + + assertThat(document.getMetadata()).containsEntry("key1", "value1").containsEntry("key2", "value2"); + } + + @Test + void testEmbeddingOperations() { + float[] embedding = new float[] { 0.1f, 0.2f, 0.3f }; + + Document document = Document.builder().text("test").embedding(embedding).build(); + + assertThat(document.getEmbedding()).isEqualTo(embedding); + } + + @Test + void testNullEmbeddingThrowsException() { + assertThrows(IllegalArgumentException.class, () -> Document.builder().text("test").embedding(null).build()); + } + + private static Media getMedia() { try { URL mediaUrl1 = new URL("http://type1"); - URL mediaUrl2 = new URL("http://type2"); - Media media1 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl1).build(); - Media media2 = Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl2).build(); - return List.of(media1, media2); + Media media1 = new Media(MimeTypeUtils.IMAGE_JPEG, mediaUrl1); + return media1; } catch (MalformedURLException e) { throw new RuntimeException(e); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/prompt/PromptTemplateTest.java b/spring-ai-core/src/test/java/org/springframework/ai/prompt/PromptTemplateTest.java index 096d5e21c..57c0a3c76 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/prompt/PromptTemplateTest.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/prompt/PromptTemplateTest.java @@ -115,7 +115,7 @@ public class PromptTemplateTest { // don't normalize EOLs. // It should be fine on Unix systems. In addition, Git will replace CRLF by LF by // default. - assertEqualsWithNormalizedEOLs(expected, message.getContent()); + assertEqualsWithNormalizedEOLs(expected, message.getText()); PromptTemplate unfilledPromptTemplate = new PromptTemplate(templateString); assertThatExceptionOfType(IllegalStateException.class).isThrownBy(unfilledPromptTemplate::render) diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/SimpleVectorStoreTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/SimpleVectorStoreTests.java index 07564c76b..4e81eb5d3 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/SimpleVectorStoreTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/SimpleVectorStoreTests.java @@ -62,7 +62,7 @@ class SimpleVectorStoreTests { @Test void shouldAddAndRetrieveDocument() { - Document doc = Document.builder().id("1").content("test content").metadata(Map.of("key", "value")).build(); + Document doc = Document.builder().id("1").text("test content").metadata(Map.of("key", "value")).build(); this.vectorStore.add(List.of(doc)); @@ -76,8 +76,8 @@ class SimpleVectorStoreTests { @Test void shouldAddMultipleDocuments() { - List docs = Arrays.asList(Document.builder().id("1").content("first").build(), - Document.builder().id("2").content("second").build()); + List docs = Arrays.asList(Document.builder().id("1").text("first").build(), + Document.builder().id("2").text("second").build()); this.vectorStore.add(docs); @@ -100,7 +100,7 @@ class SimpleVectorStoreTests { @Test void shouldDeleteDocuments() { - Document doc = Document.builder().id("1").content("test content").build(); + Document doc = Document.builder().id("1").text("test content").build(); this.vectorStore.add(List.of(doc)); assertThat(this.vectorStore.similaritySearch("test")).hasSize(1); @@ -121,7 +121,7 @@ class SimpleVectorStoreTests { // Configure mock to return different embeddings for different queries when(this.mockEmbeddingModel.embed("query")).thenReturn(new float[] { 0.9f, 0.9f, 0.9f }); - Document doc = Document.builder().id("1").content("test content").build(); + Document doc = Document.builder().id("1").text("test content").build(); this.vectorStore.add(List.of(doc)); @@ -135,7 +135,7 @@ class SimpleVectorStoreTests { void shouldSaveAndLoadVectorStore() throws IOException { Document doc = Document.builder() .id("1") - .content("test content") + .text("test content") .metadata(new HashMap<>(Map.of("key", "value"))) .build(); @@ -181,7 +181,7 @@ class SimpleVectorStoreTests { for (int i = 0; i < numThreads; i++) { final String id = String.valueOf(i); threads[i] = new Thread(() -> { - Document doc = Document.builder().id(id).content("content " + id).build(); + Document doc = Document.builder().id(id).text("content " + id).build(); this.vectorStore.add(List.of(doc)); }); threads[i].start(); diff --git a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java index 1ff422c6d..a971ddba6 100644 --- a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java +++ b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/client/advisor/RetrievalAugmentationAdvisorIT.java @@ -96,7 +96,7 @@ class RetrievalAugmentationAdvisorIT { assertThat(chatResponse).isNotNull(); - String response = chatResponse.getResult().getOutput().getContent(); + String response = chatResponse.getResult().getOutput().getText(); System.out.println(response); assertThat(response).containsIgnoringCase("Highlands"); @@ -126,7 +126,7 @@ class RetrievalAugmentationAdvisorIT { assertThat(chatResponse).isNotNull(); - String response = chatResponse.getResult().getOutput().getContent(); + String response = chatResponse.getResult().getOutput().getText(); System.out.println(response); assertThat(response.toLowerCase()).containsAnyOf("highlands", "højland"); @@ -154,7 +154,7 @@ class RetrievalAugmentationAdvisorIT { assertThat(chatResponse).isNotNull(); - String response = chatResponse.getResult().getOutput().getContent(); + String response = chatResponse.getResult().getOutput().getText(); System.out.println(response); assertThat(response).containsIgnoringCase("Highlands"); @@ -164,7 +164,7 @@ class RetrievalAugmentationAdvisorIT { private void evaluateRelevancy(String question, ChatResponse chatResponse) { EvaluationRequest evaluationRequest = new EvaluationRequest(question, chatResponse.getMetadata().get(RetrievalAugmentationAdvisor.DOCUMENT_CONTEXT), - chatResponse.getResult().getOutput().getContent()); + chatResponse.getResult().getOutput().getText()); RelevancyEvaluator evaluator = new RelevancyEvaluator(ChatClient.builder(this.openAiChatModel)); EvaluationResponse evaluationResponse = evaluator.evaluate(evaluationRequest); assertThat(evaluationResponse.isPass()).isTrue(); diff --git a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/vectorstore/SimpleVectorStoreIT.java b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/vectorstore/SimpleVectorStoreIT.java index c6bb774db..4cc598393 100644 --- a/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/vectorstore/SimpleVectorStoreIT.java +++ b/spring-ai-integration-tests/src/test/java/org/springframework/ai/integration/tests/vectorstore/SimpleVectorStoreIT.java @@ -51,17 +51,17 @@ public class SimpleVectorStoreIT { List documents = List.of( Document.builder() .id("471a8c78-549a-4b2c-bce5-ef3ae6579be3") - .content(getText("classpath:/test/data/spring.ai.txt")) + .text(getText("classpath:/test/data/spring.ai.txt")) .metadata(Map.of("meta1", "meta1")) .build(), Document.builder() .id("bc51d7f7-627b-4ba6-adf4-f0bcd1998f8f") - .content(getText("classpath:/test/data/time.shelter.txt")) + .text(getText("classpath:/test/data/time.shelter.txt")) .metadata(Map.of()) .build(), Document.builder() .id("d0237682-1150-44ff-b4d2-1be9b1731ee5") - .content(getText("classpath:/test/data/great.depression.txt")) + .text(getText("classpath:/test/data/great.depression.txt")) .metadata(Map.of("meta2", "meta2")) .build()); @@ -84,7 +84,7 @@ public class SimpleVectorStoreIT { public void searchWithThreshold() { Document document = Document.builder() .id(UUID.randomUUID().toString()) - .content("Spring AI rocks!!") + .text("Spring AI rocks!!") .metadata("meta1", "meta1") .build(); @@ -101,7 +101,7 @@ public class SimpleVectorStoreIT { Document sameIdDocument = Document.builder() .id(document.getId()) - .content("The World is Big and Salvation Lurks Around the Corner") + .text("The World is Big and Salvation Lurks Around the Corner") .metadata("meta2", "meta2") .build(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfigurationIT.java index d550d32b3..6174c5c67 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfigurationIT.java @@ -66,7 +66,7 @@ public class AnthropicAutoConfigurationIT { AnthropicChatModel chatModel = context.getBean(AnthropicChatModel.class); var optoins = AnthropicChatOptions.builder().withMaxTokens(8192).build(); var response = chatModel.call(new Prompt("Tell me a joke", optoins)); - assertThat(response.getResult().getOutput().getContent()).isNotEmpty(); + assertThat(response.getResult().getOutput().getText()).isNotEmpty(); logger.info("Response: " + response); }); } @@ -83,7 +83,7 @@ public class AnthropicAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithFunctionBeanIT.java index 13d503f94..5a03f27ee 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithFunctionBeanIT.java @@ -70,14 +70,14 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel.call(new Prompt(List.of(userMessage), AnthropicChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -100,7 +100,7 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithPromptFunctionIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithPromptFunctionIT.java index f856113e6..3c8867ac8 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithPromptFunctionIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/anthropic/tool/FunctionCallWithPromptFunctionIT.java @@ -69,7 +69,7 @@ public class FunctionCallWithPromptFunctionIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiAutoConfigurationIT.java index eecd8c025..8af26e0b7 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiAutoConfigurationIT.java @@ -98,7 +98,7 @@ class AzureOpenAiAutoConfigurationIT { this.contextRunner.run(context -> { AzureOpenAiChatModel chatModel = context.getBean(AzureOpenAiChatModel.class); ChatResponse response = chatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -144,7 +144,7 @@ class AzureOpenAiAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiDirectOpenAiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiDirectOpenAiAutoConfigurationIT.java index 19c651b3e..88de524d1 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiDirectOpenAiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/AzureOpenAiDirectOpenAiAutoConfigurationIT.java @@ -77,7 +77,7 @@ public class AzureOpenAiDirectOpenAiAutoConfigurationIT { this.contextRunner.run(context -> { AzureOpenAiChatModel chatModel = context.getBean(AzureOpenAiChatModel.class); ChatResponse response = chatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -96,7 +96,7 @@ public class AzureOpenAiDirectOpenAiAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionBeanIT.java index 7991bb3e0..2917adaf2 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionBeanIT.java @@ -71,14 +71,14 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel.call(new Prompt(List.of(userMessage), AzureOpenAiChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -100,7 +100,7 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionWrapperIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionWrapperIT.java index f1400ab22..ae1bb0348 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionWrapperIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithFunctionWrapperIT.java @@ -68,7 +68,7 @@ public class FunctionCallWithFunctionWrapperIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithPromptFunctionIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithPromptFunctionIT.java index c682aaa8e..dae9e5b4e 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithPromptFunctionIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/azure/tool/FunctionCallWithPromptFunctionIT.java @@ -72,7 +72,7 @@ public class FunctionCallWithPromptFunctionIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfigurationIT.java index fca0b2756..c20e3cf2e 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfigurationIT.java @@ -71,7 +71,7 @@ public class BedrockAnthropicChatAutoConfigurationIT { this.contextRunner.run(context -> { BedrockAnthropicChatModel anthropicChatModel = context.getBean(BedrockAnthropicChatModel.class); ChatResponse response = anthropicChatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -91,7 +91,7 @@ public class BedrockAnthropicChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfigurationIT.java index 07b803ad2..afdf1518a 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfigurationIT.java @@ -70,7 +70,7 @@ public class BedrockAnthropic3ChatAutoConfigurationIT { this.contextRunner.run(context -> { BedrockAnthropic3ChatModel anthropicChatModel = context.getBean(BedrockAnthropic3ChatModel.class); ChatResponse response = anthropicChatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -90,7 +90,7 @@ public class BedrockAnthropic3ChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfigurationIT.java index ea2dc8cb2..890286312 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfigurationIT.java @@ -74,7 +74,7 @@ public class BedrockCohereChatAutoConfigurationIT { this.contextRunner.run(context -> { BedrockCohereChatModel cohereChatModel = context.getBean(BedrockCohereChatModel.class); ChatResponse response = cohereChatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -94,7 +94,7 @@ public class BedrockCohereChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/BedrockConverseProxyChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/BedrockConverseProxyChatAutoConfigurationIT.java index e43845a5b..936f4b59f 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/BedrockConverseProxyChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/BedrockConverseProxyChatAutoConfigurationIT.java @@ -70,7 +70,7 @@ public class BedrockConverseProxyChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithFunctionBeanIT.java index b869d5a46..4adff9022 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithFunctionBeanIT.java @@ -69,14 +69,14 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel.call(new Prompt(List.of(userMessage), FunctionCallingOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -100,7 +100,7 @@ class FunctionCallWithFunctionBeanIT { .block() .stream() .filter(cr -> cr.getResult() != null) - .map(cr -> cr.getResult().getOutput().getContent()) + .map(cr -> cr.getResult().getOutput().getText()) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithPromptFunctionIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithPromptFunctionIT.java index aa05b8dcc..ed8c7b58e 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithPromptFunctionIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/converse/tool/FunctionCallWithPromptFunctionIT.java @@ -68,7 +68,7 @@ public class FunctionCallWithPromptFunctionIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/jurassic2/BedrockAi21Jurassic2ChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/jurassic2/BedrockAi21Jurassic2ChatAutoConfigurationIT.java index ed2200573..2e1eeb59b 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/jurassic2/BedrockAi21Jurassic2ChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/jurassic2/BedrockAi21Jurassic2ChatAutoConfigurationIT.java @@ -71,7 +71,7 @@ public class BedrockAi21Jurassic2ChatAutoConfigurationIT { BedrockAi21Jurassic2ChatModel ai21Jurassic2ChatModel = context.getBean(BedrockAi21Jurassic2ChatModel.class); ChatResponse response = ai21Jurassic2ChatModel .call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfigurationIT.java index cdbeea701..786d9ec56 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfigurationIT.java @@ -73,7 +73,7 @@ public class BedrockLlamaChatAutoConfigurationIT { this.contextRunner.run(context -> { BedrockLlamaChatModel llamaChatModel = context.getBean(BedrockLlamaChatModel.class); ChatResponse response = llamaChatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -93,7 +93,7 @@ public class BedrockLlamaChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfigurationIT.java index 557dfd454..a3dd9b42b 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfigurationIT.java @@ -72,7 +72,7 @@ public class BedrockTitanChatAutoConfigurationIT { this.contextRunner.run(context -> { BedrockTitanChatModel chatModel = context.getBean(BedrockTitanChatModel.class); ChatResponse response = chatModel.call(new Prompt(List.of(this.userMessage, this.systemMessage))); - assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); + assertThat(response.getResult().getOutput().getText()).contains("Blackbeard"); }); } @@ -91,7 +91,7 @@ public class BedrockTitanChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Blackbeard"); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java index c1eba20a8..8dbc9dc4a 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java @@ -71,7 +71,7 @@ class CassandraChatMemoryAutoConfigurationIT { assertThat(memory.get(sessionId, Integer.MAX_VALUE)).hasSize(1); assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getMessageType()) .isEqualTo(MessageType.USER); - assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getContent()).isEqualTo("test question"); + assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getText()).isEqualTo("test question"); memory.clear(sessionId); assertThat(memory.get(sessionId, Integer.MAX_VALUE)).isEmpty(); @@ -81,10 +81,10 @@ class CassandraChatMemoryAutoConfigurationIT { assertThat(memory.get(sessionId, Integer.MAX_VALUE)).hasSize(2); assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(1).getMessageType()) .isEqualTo(MessageType.USER); - assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(1).getContent()).isEqualTo("test question"); + assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(1).getText()).isEqualTo("test question"); assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getMessageType()) .isEqualTo(MessageType.ASSISTANT); - assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getContent()).isEqualTo("test answer"); + assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getText()).isEqualTo("test answer"); CassandraChatMemoryProperties properties = context.getBean(CassandraChatMemoryProperties.class); assertThat(properties.getTimeToLive()).isEqualTo(getTimeToLive()); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/huggingface/HuggingfaceChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/huggingface/HuggingfaceChatAutoConfigurationIT.java index a0b5c014d..e3980a13a 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/huggingface/HuggingfaceChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/huggingface/HuggingfaceChatAutoConfigurationIT.java @@ -73,7 +73,7 @@ public class HuggingfaceChatAutoConfigurationIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackInPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackInPromptIT.java index ad91d5094..7dcd4be2b 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackInPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackInPromptIT.java @@ -74,7 +74,7 @@ public class FunctionCallbackInPromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -104,7 +104,7 @@ public class FunctionCallbackInPromptIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackWithPlainFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackWithPlainFunctionBeanIT.java index 3cd864d16..0c597d09b 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackWithPlainFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/FunctionCallbackWithPlainFunctionBeanIT.java @@ -75,7 +75,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); // Test weatherFunctionTwo response = chatModel.call(new Prompt(List.of(userMessage), @@ -83,7 +83,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -128,7 +128,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -146,7 +146,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxAutoConfigurationIT.java index ec0ed5c81..6a3893274 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxAutoConfigurationIT.java @@ -69,7 +69,7 @@ public class MiniMaxAutoConfigurationIT { String response = responseFlux.collectList() .block() .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxFunctionCallbackIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxFunctionCallbackIT.java index 3966cbf2c..9336a3848 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxFunctionCallbackIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/minimax/MiniMaxFunctionCallbackIT.java @@ -70,7 +70,7 @@ public class MiniMaxFunctionCallbackIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -93,7 +93,7 @@ public class MiniMaxFunctionCallbackIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfigurationIT.java index 68c80242a..99d91c6f3 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfigurationIT.java @@ -67,7 +67,7 @@ public class MistralAiAutoConfigurationIT { String response = responseFlux.collectList() .block() .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanIT.java index 965b9f562..16a4b6359 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanIT.java @@ -74,8 +74,8 @@ class PaymentStatusBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("T1001"); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("paid"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("T1001"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("paid"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanOpenAiIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanOpenAiIT.java index 08e844279..dadbbf1d5 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanOpenAiIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusBeanOpenAiIT.java @@ -81,8 +81,8 @@ class PaymentStatusBeanOpenAiIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("T1001"); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("paid"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("T1001"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("paid"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusPromptIT.java index b9d199e55..31637c260 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/PaymentStatusPromptIT.java @@ -76,8 +76,8 @@ public class PaymentStatusPromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("T1001"); - assertThat(response.getResult().getOutput().getContent()).containsIgnoringCase("paid"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("T1001"); + assertThat(response.getResult().getOutput().getText()).containsIgnoringCase("paid"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/WeatherServicePromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/WeatherServicePromptIT.java index 48edeb116..588c089b8 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/WeatherServicePromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/mistralai/tool/WeatherServicePromptIT.java @@ -84,7 +84,7 @@ public class WeatherServicePromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15", "15.0"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("15", "15.0"); }); } @@ -111,7 +111,7 @@ public class WeatherServicePromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15", "15.0"); + assertThat(response.getResult().getOutput().getText()).containsAnyOf("15", "15.0"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/MoonshotAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/MoonshotAutoConfigurationIT.java index f24c6599c..cf8cdd647 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/MoonshotAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/MoonshotAutoConfigurationIT.java @@ -66,7 +66,7 @@ public class MoonshotAutoConfigurationIT { Flux responseFlux = client.stream(new Prompt(new UserMessage("Hello"))); String response = Objects.requireNonNull(responseFlux.collectList().block()) .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackInPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackInPromptIT.java index 550939b63..37f4fe121 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackInPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackInPromptIT.java @@ -75,7 +75,7 @@ public class FunctionCallbackInPromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -105,7 +105,7 @@ public class FunctionCallbackInPromptIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackWithPlainFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackWithPlainFunctionBeanIT.java index ba1d4d416..0456b9e65 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackWithPlainFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/FunctionCallbackWithPlainFunctionBeanIT.java @@ -75,7 +75,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); // Test weatherFunctionTwo response = chatModel.call(new Prompt(List.of(userMessage), @@ -83,7 +83,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -127,7 +127,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -145,7 +145,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/MoonshotFunctionCallbackIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/MoonshotFunctionCallbackIT.java index f68bed8b0..de62945c7 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/MoonshotFunctionCallbackIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/moonshot/tool/MoonshotFunctionCallbackIT.java @@ -72,7 +72,7 @@ public class MoonshotFunctionCallbackIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -95,7 +95,7 @@ public class MoonshotFunctionCallbackIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .filter(Objects::nonNull) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/OllamaChatAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/OllamaChatAutoConfigurationIT.java index 335378099..40d936968 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/OllamaChatAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/OllamaChatAutoConfigurationIT.java @@ -69,7 +69,7 @@ public class OllamaChatAutoConfigurationIT extends BaseOllamaIT { this.contextRunner.run(context -> { OllamaChatModel chatModel = context.getBean(OllamaChatModel.class); ChatResponse response = chatModel.call(new Prompt(this.userMessage)); - assertThat(response.getResult().getOutput().getContent()).contains("Copenhagen"); + assertThat(response.getResult().getOutput().getText()).contains("Copenhagen"); }); } @@ -88,7 +88,7 @@ public class OllamaChatAutoConfigurationIT extends BaseOllamaIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); assertThat(stitchedResponseContent).contains("Copenhagen"); @@ -107,7 +107,7 @@ public class OllamaChatAutoConfigurationIT extends BaseOllamaIT { OllamaChatModel chatModel = context.getBean(OllamaChatModel.class); ChatResponse response = chatModel.call(new Prompt(this.userMessage)); - assertThat(response.getResult().getOutput().getContent()).contains("Copenhagen"); + assertThat(response.getResult().getOutput().getText()).contains("Copenhagen"); modelManager.deleteModel(model); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackInPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackInPromptIT.java index d93692837..02cadcdec 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackInPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackInPromptIT.java @@ -82,7 +82,7 @@ public class FunctionCallbackInPromptIT extends BaseOllamaIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -112,7 +112,7 @@ public class FunctionCallbackInPromptIT extends BaseOllamaIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/OllamaFunctionCallbackIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/OllamaFunctionCallbackIT.java index 50c8d78b0..716e6bcc0 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/OllamaFunctionCallbackIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/ollama/tool/OllamaFunctionCallbackIT.java @@ -80,7 +80,7 @@ public class OllamaFunctionCallbackIT extends BaseOllamaIT { logger.info("Response: " + response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -102,7 +102,7 @@ public class OllamaFunctionCallbackIT extends BaseOllamaIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: " + content); @@ -126,9 +126,9 @@ public class OllamaFunctionCallbackIT extends BaseOllamaIT { ChatResponse response = chatModel.call(new Prompt(List.of(userMessage), functionOptions)); - logger.info("Response: " + response.getResult().getOutput().getContent()); + logger.info("Response: " + response.getResult().getOutput().getText()); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfigurationIT.java index c72052920..6ab471eec 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfigurationIT.java @@ -129,7 +129,7 @@ public class OpenAiAutoConfigurationIT { String response = responseFlux.collectList() .block() .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); @@ -147,7 +147,7 @@ public class OpenAiAutoConfigurationIT { Usage[] streamingTokenUsage = new Usage[1]; String response = responseFlux.collectList().block().stream().map(chatResponse -> { streamingTokenUsage[0] = chatResponse.getMetadata().getUsage(); - return (chatResponse.getResult() != null) ? chatResponse.getResult().getOutput().getContent() : ""; + return (chatResponse.getResult() != null) ? chatResponse.getResult().getOutput().getText() : ""; }).collect(Collectors.joining()); assertThat(streamingTokenUsage[0].getPromptTokens()).isGreaterThan(0); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackInPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackInPromptIT.java index 9526c00f9..f3e0d085d 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackInPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackInPromptIT.java @@ -73,7 +73,7 @@ public class FunctionCallbackInPromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -106,7 +106,7 @@ public class FunctionCallbackInPromptIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWithPlainFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWithPlainFunctionBeanIT.java index a4628f4d2..fb02d9bf6 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWithPlainFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWithPlainFunctionBeanIT.java @@ -162,7 +162,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { ChatResponse response = chatModel.call(new Prompt(List.of(userMessage), functionOptions)); - logger.info("Response: {}", response.getResult().getOutput().getContent()); + logger.info("Response: {}", response.getResult().getOutput().getText()); }); } @@ -193,7 +193,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -225,7 +225,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -245,7 +245,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); // Test weatherFunctionTwo response = chatModel.call(new Prompt(List.of(userMessage), @@ -253,7 +253,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -273,9 +273,9 @@ class FunctionCallbackWithPlainFunctionBeanIT { ChatResponse response = chatModel.call(new Prompt(List.of(userMessage), functionOptions)); - logger.info("Response: {}", response.getResult().getOutput().getContent()); + logger.info("Response: {}", response.getResult().getOutput().getText()); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -298,7 +298,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -314,7 +314,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/OpenAiFunctionCallbackIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/OpenAiFunctionCallbackIT.java index 1337eadb1..03b3489c5 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/OpenAiFunctionCallbackIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/OpenAiFunctionCallbackIT.java @@ -66,7 +66,7 @@ public class OpenAiFunctionCallbackIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -89,7 +89,7 @@ public class OpenAiFunctionCallbackIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/qianfan/QianFanAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/qianfan/QianFanAutoConfigurationIT.java index 9e5b082c3..788429912 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/qianfan/QianFanAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/qianfan/QianFanAutoConfigurationIT.java @@ -75,7 +75,7 @@ public class QianFanAutoConfigurationIT { Flux responseFlux = client.stream(new Prompt(new UserMessage("Hello"))); String response = Objects.requireNonNull(responseFlux.collectList().block()) .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); logger.info("Response: " + response); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfigurationIT.java index d2888269c..ca2cdeb3a 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfigurationIT.java @@ -62,7 +62,7 @@ public class VertexAiGeminiAutoConfigurationIT { String response = responseFlux.collectList() .block() .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionBeanIT.java index b65315a74..530e564eb 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionBeanIT.java @@ -73,21 +73,21 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel.call(new Prompt(List.of(userMessage), VertexAiGeminiChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel .call(new Prompt(List.of(userMessage), VertexAiGeminiChatOptions.builder().build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).doesNotContain("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).doesNotContain("30", "10", "15"); }); } @@ -113,14 +113,14 @@ class FunctionCallWithFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); response = chatModel.call(new Prompt(List.of(userMessage), VertexAiGeminiChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionWrapperIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionWrapperIT.java index 79272be73..111cc1db6 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionWrapperIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithFunctionWrapperIT.java @@ -69,7 +69,7 @@ public class FunctionCallWithFunctionWrapperIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithPromptFunctionIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithPromptFunctionIT.java index d051490ed..388622f09 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithPromptFunctionIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/gemini/tool/FunctionCallWithPromptFunctionIT.java @@ -80,7 +80,7 @@ public class FunctionCallWithPromptFunctionIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); // Verify that no function call is made. response = chatModel @@ -88,7 +88,7 @@ public class FunctionCallWithPromptFunctionIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).doesNotContain("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).doesNotContain("30", "10", "15"); }); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/ZhiPuAiAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/ZhiPuAiAutoConfigurationIT.java index 992af8875..f60814cb4 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/ZhiPuAiAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/ZhiPuAiAutoConfigurationIT.java @@ -72,7 +72,7 @@ public class ZhiPuAiAutoConfigurationIT { String response = responseFlux.collectList() .block() .stream() - .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getContent()) + .map(chatResponse -> chatResponse.getResults().get(0).getOutput().getText()) .collect(Collectors.joining()); assertThat(response).isNotEmpty(); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackInPromptIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackInPromptIT.java index f3d39a0a7..7bea61c1c 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackInPromptIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackInPromptIT.java @@ -77,7 +77,7 @@ public class FunctionCallbackInPromptIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -107,7 +107,7 @@ public class FunctionCallbackInPromptIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackWithPlainFunctionBeanIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackWithPlainFunctionBeanIT.java index 8c5fcb525..a83c29c65 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackWithPlainFunctionBeanIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/FunctionCallbackWithPlainFunctionBeanIT.java @@ -75,7 +75,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); // Test weatherFunctionTwo response = chatModel.call(new Prompt(List.of(userMessage), @@ -83,7 +83,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -127,7 +127,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); @@ -145,7 +145,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/ZhipuAiFunctionCallbackIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/ZhipuAiFunctionCallbackIT.java index d22c745ea..db3a177f4 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/ZhipuAiFunctionCallbackIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/zhipuai/tool/ZhipuAiFunctionCallbackIT.java @@ -71,7 +71,7 @@ public class ZhipuAiFunctionCallbackIT { logger.info("Response: {}", response); - assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); + assertThat(response.getResult().getOutput().getText()).contains("30", "10", "15"); }); } @@ -94,7 +94,7 @@ public class ZhipuAiFunctionCallbackIT { .map(ChatResponse::getResults) .flatMap(List::stream) .map(Generation::getOutput) - .map(AssistantMessage::getContent) + .map(AssistantMessage::getText) .collect(Collectors.joining()); logger.info("Response: {}", content); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackContextKotlinIT.kt b/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackContextKotlinIT.kt index 3e1d45ec9..0d171acc2 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackContextKotlinIT.kt +++ b/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackContextKotlinIT.kt @@ -74,7 +74,7 @@ class FunctionCallbackResolverKotlinIT : BaseOllamaIT() { logger.info("Response: " + response) - assertThat(response.getResult().output.content).contains("30", "10", "15") + assertThat(response.getResult().output.text).contains("30", "10", "15") } } @@ -94,9 +94,9 @@ class FunctionCallbackResolverKotlinIT : BaseOllamaIT() { val response = chatModel.call(Prompt(listOf(userMessage), functionOptions)); - logger.info("Response: " + response.getResult().getOutput().getContent()); + logger.info("Response: " + response.getResult().getOutput().getText()); - assertThat(response.getResult().output.content).contains("30", "10", "15"); + assertThat(response.getResult().output.text).contains("30", "10", "15"); } } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackKotlinIT.kt b/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackKotlinIT.kt index c5d7d300a..3376f24c0 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackKotlinIT.kt +++ b/spring-ai-spring-boot-autoconfigure/src/test/kotlin/org/springframework/ai/autoconfigure/ollama/tool/FunctionCallbackKotlinIT.kt @@ -74,7 +74,7 @@ class FunctionCallbackKotlinIT : BaseOllamaIT() { logger.info("Response: " + response) - assertThat(response.getResult().output.content).contains("30", "10", "15") + assertThat(response.getResult().output.text).contains("30", "10", "15") } } @@ -94,9 +94,9 @@ class FunctionCallbackKotlinIT : BaseOllamaIT() { val response = chatModel.call(Prompt(listOf(userMessage), functionOptions)); - logger.info("Response: " + response.getResult().getOutput().getContent()); + logger.info("Response: " + response.getResult().getOutput().getText()); - assertThat(response.getResult().output.content).contains("30", "10", "15"); + assertThat(response.getResult().output.text).contains("30", "10", "15"); } } diff --git a/spring-ai-test/src/main/java/org/springframework/ai/evaluation/BasicEvaluationTest.java b/spring-ai-test/src/main/java/org/springframework/ai/evaluation/BasicEvaluationTest.java index ea056cca3..69e50493c 100644 --- a/spring-ai-test/src/main/java/org/springframework/ai/evaluation/BasicEvaluationTest.java +++ b/spring-ai-test/src/main/java/org/springframework/ai/evaluation/BasicEvaluationTest.java @@ -69,12 +69,12 @@ public class BasicEvaluationTest { } Message userMessage = userPromptTemplate.createMessage(); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - String yesOrNo = this.openAiChatModel.call(prompt).getResult().getOutput().getContent(); + String yesOrNo = this.openAiChatModel.call(prompt).getResult().getOutput().getText(); logger.info("Is Answer related to question: " + yesOrNo); if (yesOrNo.equalsIgnoreCase("no")) { SystemMessage notRelatedSystemMessage = new SystemMessage(this.qaEvaluatorNotRelatedResource); prompt = new Prompt(List.of(userMessage, notRelatedSystemMessage)); - String reasonForFailure = this.openAiChatModel.call(prompt).getResult().getOutput().getContent(); + String reasonForFailure = this.openAiChatModel.call(prompt).getResult().getOutput().getText(); fail(reasonForFailure); } else { diff --git a/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/CosmosDBVectorStore.java b/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/CosmosDBVectorStore.java index eb3fba4b3..bde2eea62 100644 --- a/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/CosmosDBVectorStore.java +++ b/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/CosmosDBVectorStore.java @@ -340,7 +340,7 @@ public class CosmosDBVectorStore extends AbstractObservationVectorStore implemen .block(); // Convert JsonNode to Document List docs = documents.stream() - .map(doc -> Document.builder().id(doc.get("id").asText()).content(doc.get("content").asText()).build()) + .map(doc -> Document.builder().id(doc.get("id").asText()).text(doc.get("content").asText()).build()) .collect(Collectors.toList()); return docs != null ? docs : List.of(); diff --git a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java index f48f7dca6..6931adea5 100644 --- a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java +++ b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java @@ -325,7 +325,7 @@ public class AzureVectorStore extends AbstractObservationVectorStore implements return Document.builder() .id(entry.id()) - .content(entry.content) + .text(entry.content) .metadata(metadata) .score(result.getScore()) .build(); diff --git a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/chat/memory/CassandraChatMemory.java b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/chat/memory/CassandraChatMemory.java index 854afa52b..c6453de5b 100644 --- a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/chat/memory/CassandraChatMemory.java +++ b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/chat/memory/CassandraChatMemory.java @@ -108,7 +108,7 @@ public final class CassandraChatMemory implements ChatMemory { Instant instant = (Instant) msg.getMetadata().get(CONVERSATION_TS); builder = builder.setInstant(CassandraChatMemoryConfig.DEFAULT_EXCHANGE_ID_NAME, instant) - .setString("message", msg.getContent()); + .setString("message", msg.getText()); this.conf.session.execute(builder.build()); } diff --git a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/CassandraVectorStore.java b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/CassandraVectorStore.java index 109541f25..c4799f9a4 100644 --- a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/CassandraVectorStore.java +++ b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/CassandraVectorStore.java @@ -262,7 +262,7 @@ public class CassandraVectorStore extends AbstractObservationVectorStore impleme } Document doc = Document.builder() .id(getDocumentId(row)) - .content(row.getString(this.conf.schema.content())) + .text(row.getString(this.conf.schema.content())) .metadata(docFields) .score((double) score) .build(); diff --git a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java index 003cc9386..f1827162f 100644 --- a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java +++ b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java @@ -218,7 +218,7 @@ public class ChromaVectorStore extends AbstractObservationVectorStore implements metadata.put(DocumentMetadata.DISTANCE.value(), distance); Document document = Document.builder() .id(id) - .content(content) + .text(content) .metadata(metadata) .score(1.0 - distance) .build(); diff --git a/vector-stores/spring-ai-chroma-store/src/test/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStoreIT.java b/vector-stores/spring-ai-chroma-store/src/test/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStoreIT.java index ee9689950..74ab85f5e 100644 --- a/vector-stores/spring-ai-chroma-store/src/test/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStoreIT.java +++ b/vector-stores/spring-ai-chroma-store/src/test/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStoreIT.java @@ -102,7 +102,7 @@ public class ChromaVectorStoreIT { var document = Document.builder() .id("simpleDoc") - .content("The sky is blue because of Rayleigh scattering.") + .text("The sky is blue because of Rayleigh scattering.") .build(); vectorStore.add(List.of(document)); diff --git a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java index 3bd9ddc4f..ea065a7d4 100644 --- a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java +++ b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java @@ -216,7 +216,7 @@ public class CoherenceVectorStore implements VectorStore, InitializingBean { chunk.metadata().put(DocumentMetadata.DISTANCE.value(), r.getDistance()); documents.add(Document.builder() .id(id.docId()) - .content(chunk.text()) + .text(chunk.text()) .metadata(chunk.metadata()) .score(1 - r.getDistance()) .build()); diff --git a/vector-stores/spring-ai-gemfire-store/src/main/java/org/springframework/ai/vectorstore/GemFireVectorStore.java b/vector-stores/spring-ai-gemfire-store/src/main/java/org/springframework/ai/vectorstore/GemFireVectorStore.java index 494794ea6..76deb5af0 100644 --- a/vector-stores/spring-ai-gemfire-store/src/main/java/org/springframework/ai/vectorstore/GemFireVectorStore.java +++ b/vector-stores/spring-ai-gemfire-store/src/main/java/org/springframework/ai/vectorstore/GemFireVectorStore.java @@ -273,7 +273,7 @@ public class GemFireVectorStore extends AbstractObservationVectorStore implement } metadata.put(DocumentMetadata.DISTANCE.value(), 1 - r.score); String content = (String) metadata.remove(DOCUMENT_FIELD); - return Document.builder().id(r.key).content(content).metadata(metadata).score((double) r.score).build(); + return Document.builder().id(r.key).text(content).metadata(metadata).score((double) r.score).build(); }) .collectList() .onErrorMap(WebClientException.class, this::handleHttpClientException) diff --git a/vector-stores/spring-ai-hanadb-store/src/test/java/org/springframework/ai/vectorstore/CricketWorldCupHanaController.java b/vector-stores/spring-ai-hanadb-store/src/test/java/org/springframework/ai/vectorstore/CricketWorldCupHanaController.java index 3a1099532..7be97d1a9 100644 --- a/vector-stores/spring-ai-hanadb-store/src/test/java/org/springframework/ai/vectorstore/CricketWorldCupHanaController.java +++ b/vector-stores/spring-ai-hanadb-store/src/test/java/org/springframework/ai/vectorstore/CricketWorldCupHanaController.java @@ -90,7 +90,7 @@ public class CricketWorldCupHanaController { var userMessage = new UserMessage(message); Prompt prompt = new Prompt(List.of(similarDocsMessage, userMessage)); - String generation = this.chatModel.call(prompt).getResult().getOutput().getContent(); + String generation = this.chatModel.call(prompt).getResult().getOutput().getText(); logger.info("Generation: {}", generation); return Map.of("generation", generation); } diff --git a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java index e586797dc..57704b420 100644 --- a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java +++ b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java @@ -268,7 +268,7 @@ public class MilvusVectorStore extends AbstractObservationVectorStore implements } return Document.builder() .id(docId) - .content(content) + .text(content) .metadata((metadata != null) ? metadata.getInnerMap() : Map.of()) .score((double) getResultSimilarity(rowRecord)) .build(); diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStore.java b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStore.java index 1ea36cb13..96fec6223 100644 --- a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStore.java +++ b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStore.java @@ -182,7 +182,7 @@ public class MongoDBAtlasVectorStore extends AbstractObservationVectorStore impl // @formatter:off return Document.builder() .id(id) - .content(content) + .text(content) .metadata(metadata) .score(score) .build(); // @formatter:on diff --git a/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/Neo4jVectorStore.java b/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/Neo4jVectorStore.java index 1a64f952d..989084504 100644 --- a/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/Neo4jVectorStore.java +++ b/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/Neo4jVectorStore.java @@ -236,7 +236,7 @@ public class Neo4jVectorStore extends AbstractObservationVectorStore implements return Document.builder() .id(node.get(this.config.idProperty).asString()) - .content(node.get("text").asString()) + .text(node.get("text").asString()) .metadata(Map.copyOf(metaData)) .score((double) score) .build(); diff --git a/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/OracleVectorStore.java b/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/OracleVectorStore.java index 0f20d9a98..08d8e227e 100644 --- a/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/OracleVectorStore.java +++ b/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/OracleVectorStore.java @@ -656,7 +656,7 @@ public class OracleVectorStore extends AbstractObservationVectorStore implements return Document.builder() .id(rs.getString(1)) - .content(rs.getString(2)) + .text(rs.getString(2)) .metadata(metadata) .score(1 - rs.getDouble(5)) .build(); diff --git a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java index a8a057c8d..f721a5cff 100644 --- a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java +++ b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java @@ -508,7 +508,7 @@ public class PgVectorStore extends AbstractObservationVectorStore implements Ini // @formatter:off return Document.builder() .id(id) - .content(content) + .text(content) .metadata(metadata) .score(1.0 - distance) .build(); // @formatter:on diff --git a/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/PgVectorStoreWithChatMemoryAdvisorIT.java b/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/PgVectorStoreWithChatMemoryAdvisorIT.java index 6325ac718..0765e9cab 100644 --- a/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/PgVectorStoreWithChatMemoryAdvisorIT.java +++ b/vector-stores/spring-ai-pgvector-store/src/test/java/org/springframework/ai/vectorstore/PgVectorStoreWithChatMemoryAdvisorIT.java @@ -104,7 +104,7 @@ class PgVectorStoreWithChatMemoryAdvisorIT { ArgumentCaptor promptCaptor = ArgumentCaptor.forClass(Prompt.class); verify(chatModel).call(promptCaptor.capture()); assertThat(promptCaptor.getValue().getInstructions().get(0)).isInstanceOf(SystemMessage.class); - assertThat(promptCaptor.getValue().getInstructions().get(0).getContent()).isEqualTo(""" + assertThat(promptCaptor.getValue().getInstructions().get(0).getText()).isEqualTo(""" Use the long term conversation memory from the LONG_TERM_MEMORY section to provide accurate answers. diff --git a/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java b/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java index b973ae448..dbd312f57 100644 --- a/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java +++ b/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java @@ -239,7 +239,7 @@ public class PineconeVectorStore extends AbstractObservationVectorStore { metadata.put(this.pineconeDistanceMetadataFieldName, 1 - scoredVector.getScore()); return Document.builder() .id(id) - .content(content) + .text(content) .metadata(metadata) .score((double) scoredVector.getScore()) .build(); diff --git a/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java b/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java index 98c3a5c8b..a5d5ec748 100644 --- a/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java +++ b/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java @@ -214,12 +214,7 @@ public class QdrantVectorStore extends AbstractObservationVectorStore implements var content = (String) metadata.remove(CONTENT_FIELD_NAME); - return Document.builder() - .id(id) - .content(content) - .metadata(metadata) - .score((double) point.getScore()) - .build(); + return Document.builder().id(id).text(content).metadata(metadata).score((double) point.getScore()).build(); } catch (Exception e) { throw new RuntimeException(e); diff --git a/vector-stores/spring-ai-redis-store/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java b/vector-stores/spring-ai-redis-store/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java index 1397585d3..8415f8dfa 100644 --- a/vector-stores/spring-ai-redis-store/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java +++ b/vector-stores/spring-ai-redis-store/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java @@ -250,12 +250,7 @@ public class RedisVectorStore extends AbstractObservationVectorStore implements // distance. Can we remove this after standardizing the metadata? metadata.put(DISTANCE_FIELD_NAME, 1 - similarityScore(doc)); metadata.put(DocumentMetadata.DISTANCE.value(), 1 - similarityScore(doc)); - return Document.builder() - .id(id) - .content(content) - .metadata(metadata) - .score((double) similarityScore(doc)) - .build(); + return Document.builder().id(id).text(content).metadata(metadata).score((double) similarityScore(doc)).build(); } private float similarityScore(redis.clients.jedis.search.Document doc) { diff --git a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/TypesenseVectorStore.java b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/TypesenseVectorStore.java index 514364f2d..9bcfaa5ed 100644 --- a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/TypesenseVectorStore.java +++ b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/TypesenseVectorStore.java @@ -218,7 +218,7 @@ public class TypesenseVectorStore extends AbstractObservationVectorStore impleme metadata.put(DocumentMetadata.DISTANCE.value(), hit.getVectorDistance()); return Document.builder() .id(docId) - .content(content) + .text(content) .metadata(metadata) .score(1.0 - hit.getVectorDistance()) .build(); diff --git a/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/WeaviateVectorStore.java b/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/WeaviateVectorStore.java index 00a4a3520..cd2110f4f 100644 --- a/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/WeaviateVectorStore.java +++ b/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/WeaviateVectorStore.java @@ -387,7 +387,7 @@ public class WeaviateVectorStore extends AbstractObservationVectorStore { // @formatter:off return Document.builder() .id(id) - .content(content) + .text(content) .metadata(metadata) .score(certainty) .build(); // @formatter:on