Skip to content

Commit 06edee4

Browse files
committed
Remove deprecated UserMessage constructors
- Remove deprecated constructor methods - Replace them with the builder methods Signed-off-by: Ilayaperumal Gopinathan <[email protected]>
1 parent 722c77e commit 06edee4

File tree

20 files changed

+179
-145
lines changed

20 files changed

+179
-145
lines changed

advisors/spring-ai-advisors-vector-store/src/main/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private AdvisedRequest before(AdvisedRequest request) {
140140
.systemParams(advisedSystemParams)
141141
.build();
142142

143-
UserMessage userMessage = new UserMessage(request.userText(), request.media());
143+
UserMessage userMessage = UserMessage.builder().text(request.userText()).media(request.media()).build();
144144
this.getChatMemoryStore()
145145
.write(toDocuments(List.of(userMessage), this.doGetConversationId(request.adviseContext())));
146146

auto-configurations/models/chat/memory/spring-ai-autoconfigure-model-chat-memory-neo4j/src/test/java/org/springframework/ai/model/chat/memory/neo4j/autoconfigure/Neo4jChatMemoryAutoConfigurationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void addAndGet() {
101101
.data("hello".getBytes(StandardCharsets.UTF_8))
102102
.build(),
103103
Media.builder().data(URI.create("http://www.google.com").toURL()).mimeType(textPlain).build());
104-
UserMessage userMessageWithMedia = new UserMessage("Message with media", media);
104+
UserMessage userMessageWithMedia = UserMessage.builder().text("Message with media").media(media).build();
105105
memory.add(sessionId, userMessageWithMedia);
106106

107107
messages = memory.get(sessionId, Integer.MAX_VALUE);

memory/spring-ai-model-chat-memory-neo4j/src/main/java/org/springframework/ai/chat/memory/neo4j/Neo4jChatMemory.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,11 @@ private Message buildUserMessage(org.neo4j.driver.Record record, Map<String, Obj
265265
List<Media> mediaList) {
266266
Message message;
267267
Map<String, Object> metadata = record.get("metadata").asMap();
268-
message = new UserMessage(messageMap.get(MessageAttributes.TEXT_CONTENT.getValue()).toString(), mediaList,
269-
metadata);
268+
message = UserMessage.builder()
269+
.text(messageMap.get(MessageAttributes.TEXT_CONTENT.getValue()).toString())
270+
.media(mediaList)
271+
.metadata(metadata)
272+
.build();
270273
return message;
271274
}
272275

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,10 @@ void multiModalityTest() throws IOException {
247247

248248
var imageData = new ClassPathResource("/test.png");
249249

250-
var userMessage = new UserMessage("Explain what do you see on this picture?",
251-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
250+
var userMessage = UserMessage.builder()
251+
.text("Explain what do you see on this picture?")
252+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
253+
.build();
252254

253255
var response = this.chatModel.call(new Prompt(List.of(userMessage)));
254256

@@ -262,9 +264,10 @@ void multiModalityPdfTest() throws IOException {
262264

263265
var pdfData = new ClassPathResource("/spring-ai-reference-overview.pdf");
264266

265-
var userMessage = new UserMessage(
266-
"You are a very professional document summarization specialist. Please summarize the given document.",
267-
List.of(new Media(new MimeType("application", "pdf"), pdfData)));
267+
var userMessage = UserMessage.builder()
268+
.text("You are a very professional document summarization specialist. Please summarize the given document.")
269+
.media(List.of(new Media(new MimeType("application", "pdf"), pdfData)))
270+
.build();
268271

269272
var response = this.chatModel.call(new Prompt(List.of(userMessage),
270273
ToolCallingChatOptions.builder().model(AnthropicApi.ChatModel.CLAUDE_3_5_SONNET.getName()).build()));

models/spring-ai-bedrock-converse/src/test/java/org/springframework/ai/bedrock/converse/BedrockProxyChatModelIT.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,10 @@ void multiModalityTest() throws IOException {
245245

246246
var imageData = new ClassPathResource("/test.png");
247247

248-
var userMessage = new UserMessage("Explain what do you see on this picture?",
249-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
248+
var userMessage = UserMessage.builder()
249+
.text("Explain what do you see on this picture?")
250+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
251+
.build();
250252

251253
var response = this.chatModel.call(new Prompt(List.of(userMessage)));
252254

models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatModelIT.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,10 @@ void streamFunctionCallTest() {
276276
void multiModalityEmbeddedImage(String modelName) {
277277
var imageData = new ClassPathResource("/test.png");
278278

279-
var userMessage = new UserMessage("Explain what do you see on this picture?",
280-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
279+
var userMessage = UserMessage.builder()
280+
.text("Explain what do you see on this picture?")
281+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
282+
.build();
281283

282284
var response = this.chatModel
283285
.call(new Prompt(List.of(userMessage), ChatOptions.builder().model(modelName).build()));
@@ -290,11 +292,13 @@ void multiModalityEmbeddedImage(String modelName) {
290292
@ParameterizedTest(name = "{0} : {displayName} ")
291293
@ValueSource(strings = { "pixtral-large-latest" })
292294
void multiModalityImageUrl(String modelName) throws IOException {
293-
var userMessage = new UserMessage("Explain what do you see on this picture?",
294-
List.of(Media.builder()
295-
.mimeType(MimeTypeUtils.IMAGE_PNG)
296-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
297-
.build()));
295+
var userMessage = UserMessage.builder()
296+
.text("Explain what do you see on this picture?")
297+
.media(List.of(Media.builder()
298+
.mimeType(MimeTypeUtils.IMAGE_PNG)
299+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
300+
.build()))
301+
.build();
298302

299303
ChatResponse response = this.chatModel
300304
.call(new Prompt(List.of(userMessage), ChatOptions.builder().model(modelName).build()));
@@ -306,11 +310,13 @@ void multiModalityImageUrl(String modelName) throws IOException {
306310

307311
@Test
308312
void streamingMultiModalityImageUrl() throws IOException {
309-
var userMessage = new UserMessage("Explain what do you see on this picture?",
310-
List.of(Media.builder()
311-
.mimeType(MimeTypeUtils.IMAGE_PNG)
312-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
313-
.build()));
313+
var userMessage = UserMessage.builder()
314+
.text("Explain what do you see on this picture?")
315+
.media(List.of(Media.builder()
316+
.mimeType(MimeTypeUtils.IMAGE_PNG)
317+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
318+
.build()))
319+
.build();
314320

315321
Flux<ChatResponse> response = this.streamingChatModel.stream(new Prompt(List.of(userMessage),
316322
ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));

models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatModelMultimodalIT.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ class OllamaChatModelMultimodalIT extends BaseOllamaIT {
5151
void unsupportedMediaType() {
5252
var imageData = new ClassPathResource("/norway.webp");
5353

54-
var userMessage = new UserMessage("Explain what do you see in this picture?",
55-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
54+
var userMessage = UserMessage.builder()
55+
.text("Explain what do you see in this picture?")
56+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
57+
.build();
5658

5759
assertThatThrownBy(() -> this.chatModel.call(new Prompt(List.of(userMessage))))
5860
.isInstanceOf(RuntimeException.class);
@@ -62,8 +64,10 @@ void unsupportedMediaType() {
6264
void multiModalityTest() {
6365
var imageData = new ClassPathResource("/test.png");
6466

65-
var userMessage = new UserMessage("Explain what do you see in this picture?",
66-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
67+
var userMessage = UserMessage.builder()
68+
.text("Explain what do you see in this picture?")
69+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
70+
.build();
6771

6872
var response = this.chatModel.call(new Prompt(List.of(userMessage)));
6973

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/MessageTypeContentTests.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.ai.openai.chat;
1818

1919
import java.net.MalformedURLException;
20+
import java.net.URI;
2021
import java.net.URL;
2122
import java.util.List;
2223
import java.util.Map;
@@ -127,8 +128,10 @@ public void userMessageWithMediaType() throws MalformedURLException {
127128
.willReturn(Mockito.mock(ResponseEntity.class));
128129

129130
URL mediaUrl = new URL("http://test");
130-
this.chatModel.call(new Prompt(List.of(new UserMessage("test message",
131-
List.of(Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl).build())))));
131+
this.chatModel.call(new Prompt(List.of(UserMessage.builder()
132+
.text("test message")
133+
.media(List.of(Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl).build()))
134+
.build())));
132135

133136
validateComplexContent(this.pomptCaptor.getValue());
134137
}
@@ -139,10 +142,11 @@ public void streamUserMessageWithMediaType() throws MalformedURLException {
139142
given(this.openAiApi.chatCompletionStream(this.pomptCaptor.capture(), this.headersCaptor.capture()))
140143
.willReturn(this.fluxResponse);
141144

142-
URL mediaUrl = new URL("http://test");
143-
this.chatModel.stream(new Prompt(List.of(new UserMessage("test message",
144-
List.of(Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl).build())))))
145-
.subscribe();
145+
URI mediaUrl = URI.create("http://test");
146+
this.chatModel.stream(new Prompt(List.of(UserMessage.builder()
147+
.text("test message")
148+
.media(List.of(Media.builder().mimeType(MimeTypeUtils.IMAGE_JPEG).data(mediaUrl).build()))
149+
.build()))).subscribe();
146150

147151
validateComplexContent(this.pomptCaptor.getValue());
148152
}

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatModelIT.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -470,8 +470,10 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
470470

471471
var imageData = new ClassPathResource("/test.png");
472472

473-
var userMessage = new UserMessage("Explain what do you see on this picture?",
474-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
473+
var userMessage = UserMessage.builder()
474+
.text("Explain what do you see on this picture?")
475+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
476+
.build();
475477

476478
var response = this.chatModel
477479
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -485,11 +487,13 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
485487
@ValueSource(strings = { "gpt-4o" })
486488
void multiModalityImageUrl(String modelName) throws IOException {
487489

488-
var userMessage = new UserMessage("Explain what do you see on this picture?",
489-
List.of(Media.builder()
490-
.mimeType(MimeTypeUtils.IMAGE_PNG)
491-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
492-
.build()));
490+
var userMessage = UserMessage.builder()
491+
.text("Explain what do you see on this picture?")
492+
.media(List.of(Media.builder()
493+
.mimeType(MimeTypeUtils.IMAGE_PNG)
494+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
495+
.build()))
496+
.build();
493497

494498
ChatResponse response = this.chatModel
495499
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -502,11 +506,13 @@ void multiModalityImageUrl(String modelName) throws IOException {
502506
@Test
503507
void streamingMultiModalityImageUrl() throws IOException {
504508

505-
var userMessage = new UserMessage("Explain what do you see on this picture?",
506-
List.of(Media.builder()
507-
.mimeType(MimeTypeUtils.IMAGE_PNG)
508-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
509-
.build()));
509+
var userMessage = UserMessage.builder()
510+
.text("Explain what do you see on this picture?")
511+
.media(List.of(Media.builder()
512+
.mimeType(MimeTypeUtils.IMAGE_PNG)
513+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
514+
.build()))
515+
.build();
510516

511517
Flux<ChatResponse> response = this.streamingChatModel.stream(new Prompt(List.of(userMessage),
512518
OpenAiChatOptions.builder().model(OpenAiApi.ChatModel.GPT_4_O.getValue()).build()));
@@ -565,8 +571,10 @@ void streamingMultiModalityOutputAudio(String modelName) throws IOException {
565571
@ValueSource(strings = { "gpt-4o-audio-preview" })
566572
void multiModalityInputAudio(String modelName) {
567573
var audioResource = new ClassPathResource("speech1.mp3");
568-
var userMessage = new UserMessage("What is this recording about?",
569-
List.of(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource)));
574+
var userMessage = UserMessage.builder()
575+
.text("What is this recording about?")
576+
.media(List.of(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource)))
577+
.build();
570578

571579
ChatResponse response = this.chatModel
572580
.call(new Prompt(List.of(userMessage), ChatOptions.builder().model(modelName).build()));
@@ -580,8 +588,10 @@ void multiModalityInputAudio(String modelName) {
580588
@ValueSource(strings = { "gpt-4o-audio-preview" })
581589
void streamingMultiModalityInputAudio(String modelName) {
582590
var audioResource = new ClassPathResource("speech1.mp3");
583-
var userMessage = new UserMessage("What is this recording about?",
584-
List.of(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource)));
591+
var userMessage = UserMessage.builder()
592+
.text("What is this recording about?")
593+
.media(List.of(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource)))
594+
.build();
585595

586596
Flux<ChatResponse> response = this.chatModel
587597
.stream(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/GroqWithOpenAiChatModelIT.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,10 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
312312

313313
var imageData = new ClassPathResource("/test.png");
314314

315-
var userMessage = new UserMessage("Explain what do you see on this picture?",
316-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
315+
var userMessage = UserMessage.builder()
316+
.text("Explain what do you see on this picture?")
317+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
318+
.build();
317319

318320
var response = this.chatModel
319321
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -328,11 +330,13 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
328330
@ValueSource(strings = { "llama3-70b-8192" })
329331
void multiModalityImageUrl(String modelName) throws IOException {
330332

331-
var userMessage = new UserMessage("Explain what do you see on this picture?",
332-
List.of(Media.builder()
333-
.mimeType(MimeTypeUtils.IMAGE_PNG)
334-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
335-
.build()));
333+
var userMessage = UserMessage.builder()
334+
.text("Explain what do you see on this picture?")
335+
.media(List.of(Media.builder()
336+
.mimeType(MimeTypeUtils.IMAGE_PNG)
337+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
338+
.build()))
339+
.build();
336340

337341
ChatResponse response = this.chatModel
338342
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -346,11 +350,13 @@ void multiModalityImageUrl(String modelName) throws IOException {
346350
@Test
347351
void streamingMultiModalityImageUrl() throws IOException {
348352

349-
var userMessage = new UserMessage("Explain what do you see on this picture?",
350-
List.of(Media.builder()
351-
.mimeType(MimeTypeUtils.IMAGE_PNG)
352-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
353-
.build()));
353+
var userMessage = UserMessage.builder()
354+
.text("Explain what do you see on this picture?")
355+
.media(List.of(Media.builder()
356+
.mimeType(MimeTypeUtils.IMAGE_PNG)
357+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
358+
.build()))
359+
.build();
354360

355361
Flux<ChatResponse> response = this.chatModel.stream(new Prompt(List.of(userMessage)));
356362

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.ai.openai.chat.proxy;
1818

1919
import java.io.IOException;
20+
import java.net.URI;
2021
import java.net.URL;
2122
import java.util.ArrayList;
2223
import java.util.Arrays;
@@ -318,8 +319,10 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
318319

319320
var imageData = new ClassPathResource("/test.png");
320321

321-
var userMessage = new UserMessage("Explain what do you see on this picture?",
322-
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
322+
var userMessage = UserMessage.builder()
323+
.text("Explain what do you see on this picture?")
324+
.media(List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)))
325+
.build();
323326

324327
var response = this.chatModel
325328
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -334,11 +337,13 @@ void multiModalityEmbeddedImage(String modelName) throws IOException {
334337
@ValueSource(strings = { "mistral-small-latest" })
335338
void multiModalityImageUrl(String modelName) throws IOException {
336339

337-
var userMessage = new UserMessage("Explain what do you see on this picture?",
338-
List.of(Media.builder()
339-
.mimeType(MimeTypeUtils.IMAGE_PNG)
340-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
341-
.build()));
340+
var userMessage = UserMessage.builder()
341+
.text("Explain what do you see on this picture?")
342+
.media(List.of(Media.builder()
343+
.mimeType(MimeTypeUtils.IMAGE_PNG)
344+
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
345+
.build()))
346+
.build();
342347

343348
ChatResponse response = this.chatModel
344349
.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(modelName).build()));
@@ -352,11 +357,13 @@ void multiModalityImageUrl(String modelName) throws IOException {
352357
@Test
353358
void streamingMultiModalityImageUrl() throws IOException {
354359

355-
var userMessage = new UserMessage("Explain what do you see on this picture?",
356-
List.of(Media.builder()
357-
.mimeType(MimeTypeUtils.IMAGE_PNG)
358-
.data(new URL("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
359-
.build()));
360+
var userMessage = UserMessage.builder()
361+
.text("Explain what do you see on this picture?")
362+
.media(List.of(Media.builder()
363+
.mimeType(MimeTypeUtils.IMAGE_PNG)
364+
.data(URI.create("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"))
365+
.build()))
366+
.build();
360367

361368
Flux<ChatResponse> response = this.chatModel.stream(new Prompt(List.of(userMessage)));
362369

0 commit comments

Comments
 (0)