Skip to content

Commit d827592

Browse files
committed
Upgrade to Spring AI 1.0.0-RC1
1 parent 5981e7c commit d827592

File tree

25 files changed

+60
-74
lines changed

25 files changed

+60
-74
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ org.gradle.parallel=true
44

55
org.gradle.jvmargs=-Xmx8g
66

7-
arconiaVersion=0.10.1
8-
springAiVersion=1.0.0-M8
7+
arconiaVersion=0.10.3
8+
springAiVersion=1.0.0-RC1

models/image/image-openai/src/main/java/com/thomasvitale/ai/spring/ImageController.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ String image(String message) {
3030
@GetMapping("/image/provider-options")
3131
String imageProviderOptions(String message) {
3232
var imageResponse = imageModel.call(new ImagePrompt(message, OpenAiImageOptions.builder()
33-
.withQuality("standard")
34-
.withN(1)
35-
.withHeight(1024)
36-
.withWidth(1024)
37-
.withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
38-
.withResponseFormat("url")
33+
.quality("standard")
34+
.N(1)
35+
.height(1024)
36+
.width(1024)
37+
.model(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
38+
.responseFormat("url")
3939
.build()));
4040
return imageResponse.getResult().getOutput().getUrl();
4141
}

observability/models/observability-models-mistral-ai/src/main/resources/application.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ spring:
44
ai:
55
chat:
66
observations:
7-
include-completion: true
8-
include-prompt: true
7+
log-completion: true
8+
log-prompt: true
99
mistralai:
1010
api-key: ${MISTRALAI_API_KEY}
1111
chat:

observability/models/observability-models-ollama/src/main/resources/application.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ spring:
44
ai:
55
chat:
66
observations:
7-
include-completion: true
8-
include-prompt: true
7+
log-completion: true
8+
log-prompt: true
99
ollama:
1010
init:
1111
pull-model-strategy: when_missing

observability/models/observability-models-openai/src/main/java/com/thomasvitale/ai/spring/ImageController.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ String image(String message) {
3636
String imageProviderOptions(String message) {
3737
logger.info("Generating image with provider options: {}", message);
3838
var imageResponse = imageModel.call(new ImagePrompt(message, OpenAiImageOptions.builder()
39-
.withQuality("standard")
40-
.withN(1)
41-
.withHeight(1024)
42-
.withWidth(1024)
43-
.withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
44-
.withResponseFormat("url")
39+
.quality("standard")
40+
.N(1)
41+
.height(1024)
42+
.width(1024)
43+
.model(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
44+
.responseFormat("url")
4545
.build()));
4646
return imageResponse.getResult().getOutput().getUrl();
4747
}

observability/models/observability-models-openai/src/main/resources/application.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ spring:
44
ai:
55
chat:
66
observations:
7-
include-completion: true
8-
include-prompt: true
7+
log-completion: true
8+
log-prompt: true
99
image:
1010
observations:
11-
include-prompt: true
11+
log-prompt: true
1212
openai:
1313
api-key: ${OPENAI_API_KEY}
1414
chat:

observability/vector-stores/observability-vector-stores-pgvector/src/main/resources/application.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ spring:
55
chat:
66
client:
77
observations:
8-
include-input: true
8+
log-prompt: true
99
observations:
10-
include-completion: true
11-
include-prompt: true
10+
log-completion: true
11+
log-prompt: true
1212
ollama:
1313
init:
1414
pull-model-strategy: when_missing
@@ -21,7 +21,7 @@ spring:
2121
model: nomic-embed-text
2222
vectorstore:
2323
observations:
24-
include-query-response: true
24+
log-query-response: true
2525
pgvector:
2626
initialize-schema: true
2727
dimensions: 768

patterns/memory/memory-basics/src/main/java/com/thomasvitale/ai/spring/MemoryControllerAdvisorMessages.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.web.bind.annotation.RequestBody;
99
import org.springframework.web.bind.annotation.RestController;
1010

11-
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
11+
import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;
1212

1313
/**
1414
* Chat examples using the high-level ChatClient API.
@@ -20,15 +20,15 @@ class MemoryControllerAdvisorMessages {
2020

2121
MemoryControllerAdvisorMessages(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
2222
this.chatClient = chatClientBuilder.clone()
23-
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
23+
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
2424
.build();
2525
}
2626

2727
@PostMapping("/memory/messages/{conversationId}")
2828
String chat(@PathVariable String conversationId, @RequestBody String question) {
2929
return chatClient.prompt()
3030
.user(question)
31-
.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
31+
.advisors(a -> a.param(CONVERSATION_ID, conversationId))
3232
.call()
3333
.content();
3434
}

patterns/memory/memory-basics/src/main/java/com/thomasvitale/ai/spring/MemoryControllerAdvisorPrompt.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.web.bind.annotation.RequestBody;
99
import org.springframework.web.bind.annotation.RestController;
1010

11-
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
11+
import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;
1212

1313
/**
1414
* Chat examples using the high-level ChatClient API.
@@ -20,15 +20,15 @@ class MemoryControllerAdvisorPrompt {
2020

2121
MemoryControllerAdvisorPrompt(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
2222
this.chatClient = chatClientBuilder.clone()
23-
.defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory))
23+
.defaultAdvisors(PromptChatMemoryAdvisor.builder(chatMemory).build())
2424
.build();
2525
}
2626

2727
@PostMapping("/memory/prompt/{conversationId}")
2828
String chat(@PathVariable String conversationId, @RequestBody String question) {
2929
return chatClient.prompt()
3030
.user(question)
31-
.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
31+
.advisors(a -> a.param(CONVERSATION_ID, conversationId))
3232
.call()
3333
.content();
3434
}

patterns/memory/memory-jdbc/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ repositories {
2323
dependencies {
2424
implementation 'org.springframework.boot:spring-boot-starter-web'
2525
implementation 'org.springframework.ai:spring-ai-starter-model-ollama'
26-
implementation 'org.springframework.ai:spring-ai-starter-model-chat-memory-jdbc'
26+
implementation 'org.springframework.ai:spring-ai-starter-model-chat-memory-repository-jdbc'
2727

2828
runtimeOnly 'org.postgresql:postgresql'
2929

patterns/memory/memory-jdbc/src/main/java/com/thomasvitale/ai/spring/MemoryController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.web.bind.annotation.RequestBody;
99
import org.springframework.web.bind.annotation.RestController;
1010

11-
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
11+
import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;
1212

1313
/**
1414
* Chat examples using the high-level ChatClient API.
@@ -20,15 +20,15 @@ class MemoryController {
2020

2121
MemoryController(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
2222
this.chatClient = chatClientBuilder.clone()
23-
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
23+
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
2424
.build();
2525
}
2626

2727
@PostMapping("/memory/jdbc/{conversationId}")
2828
String chat(@PathVariable String conversationId, @RequestBody String question) {
2929
return chatClient.prompt()
3030
.user(question)
31-
.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
31+
.advisors(a -> a.param(CONVERSATION_ID, conversationId))
3232
.call()
3333
.content();
3434
}

patterns/memory/memory-jdbc/src/main/java/com/thomasvitale/ai/spring/MemoryJdbcApplication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.springframework.ai.chat.memory.ChatMemory;
44
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
5-
import org.springframework.ai.chat.memory.jdbc.JdbcChatMemoryRepository;
5+
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
66
import org.springframework.boot.SpringApplication;
77
import org.springframework.boot.autoconfigure.SpringBootApplication;
88
import org.springframework.context.annotation.Bean;

patterns/memory/memory-spring-security/src/main/java/com/thomasvitale/ai/spring/MemoryController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.springframework.web.bind.annotation.RequestBody;
1010
import org.springframework.web.bind.annotation.RestController;
1111

12-
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
12+
import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;
1313

1414
/**
1515
* Chat examples using the high-level ChatClient API.
@@ -21,7 +21,7 @@ class MemoryController {
2121

2222
MemoryController(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
2323
this.chatClient = chatClientBuilder.clone()
24-
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
24+
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
2525
.build();
2626
}
2727

@@ -30,7 +30,7 @@ String chat(@AuthenticationPrincipal User user, @RequestBody String question) {
3030
String conversationId = user.getUsername();
3131
return chatClient.prompt()
3232
.user(question)
33-
.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
33+
.advisors(a -> a.param(CONVERSATION_ID, conversationId))
3434
.call()
3535
.content();
3636
}

patterns/memory/memory-vector-store/src/main/java/com/thomasvitale/ai/spring/MemoryControllerAdvisorVectorStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.web.bind.annotation.RequestBody;
99
import org.springframework.web.bind.annotation.RestController;
1010

11-
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
11+
import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;
1212

1313
/**
1414
* Chat examples using the high-level ChatClient API.
@@ -28,7 +28,7 @@ class MemoryControllerAdvisorVectorStore {
2828
String chat(@PathVariable String conversationId, @RequestBody String question) {
2929
return chatClient.prompt()
3030
.user(question)
31-
.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
31+
.advisors(a -> a.param(CONVERSATION_ID, conversationId))
3232
.call()
3333
.content();
3434
}

patterns/multimodality/multimodality-mistral-ai/src/main/java/com/thomasvitale/ai/spring/ChatController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,10 @@ String chatImageFile(String question) {
4343
@GetMapping("/chat/image/url")
4444
String chatImageUrl(String question) throws MalformedURLException {
4545
var imageUrl = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png";
46-
var url = URI.create(imageUrl).toURL();
4746
return chatClient.prompt()
4847
.user(userSpec -> userSpec
4948
.text(question)
50-
.media(new Media(MimeTypeUtils.IMAGE_PNG, url))
49+
.media(new Media(MimeTypeUtils.IMAGE_PNG, URI.create(imageUrl)))
5150
)
5251
.call()
5352
.content();

patterns/multimodality/multimodality-mistral-ai/src/main/java/com/thomasvitale/ai/spring/model/ChatModelController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class ChatModelController {
3535

3636
@GetMapping("/chat/image/file")
3737
String chatImageFile(String question) {
38-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.IMAGE_PNG, image));
38+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.IMAGE_PNG, image)).build();
3939
var prompt = new Prompt(userMessage);
4040
var chatResponse = chatModel.call(prompt);
4141
return chatResponse.getResult().getOutput().getText();
@@ -44,9 +44,8 @@ String chatImageFile(String question) {
4444
@GetMapping("/chat/image/url")
4545
String chatImageUrl(String question) throws MalformedURLException {
4646
var imageUrl = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png";
47-
var url = URI.create(imageUrl).toURL();
4847

49-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.IMAGE_PNG, url));
48+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.IMAGE_PNG, URI.create(imageUrl))).build();
5049
var prompt = new Prompt(userMessage);
5150
var chatResponse = chatModel.call(prompt);
5251
return chatResponse.getResult().getOutput().getText();

patterns/multimodality/multimodality-ollama/src/main/java/com/thomasvitale/ai/spring/model/ChatModelController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ChatModelController {
2929

3030
@GetMapping("/chat/image/file")
3131
String chatImageFile(String question) {
32-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.IMAGE_PNG, image));
32+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.IMAGE_PNG, image)).build();
3333
var prompt = new Prompt(userMessage);
3434
var chatResponse = chatModel.call(prompt);
3535
return chatResponse.getResult().getOutput().getText();

patterns/multimodality/multimodality-openai/src/main/java/com/thomasvitale/ai/spring/ChatController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,10 @@ String chatImageFile(String question) {
4545
@GetMapping("/chat/image/url")
4646
String chatImageUrl(String question) throws MalformedURLException {
4747
var imageUrl = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png";
48-
var url = URI.create(imageUrl).toURL();
4948
return chatClient.prompt()
5049
.user(userSpec -> userSpec
5150
.text(question)
52-
.media(new Media(MimeTypeUtils.IMAGE_PNG, url))
51+
.media(new Media(MimeTypeUtils.IMAGE_PNG, URI.create(imageUrl)))
5352
)
5453
.call()
5554
.content();

patterns/multimodality/multimodality-openai/src/main/java/com/thomasvitale/ai/spring/model/ChatModelController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class ChatModelController {
3737

3838
@GetMapping("/chat/image/file")
3939
String chatImageFile(String question) {
40-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.IMAGE_PNG, image));
40+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.IMAGE_PNG, image)).build();
4141
var prompt = new Prompt(userMessage);
4242
var chatResponse = chatModel.call(prompt);
4343
return chatResponse.getResult().getOutput().getText();
@@ -46,17 +46,16 @@ String chatImageFile(String question) {
4646
@GetMapping("/chat/image/url")
4747
String chatImageUrl(String question) throws MalformedURLException {
4848
var imageUrl = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png";
49-
var url = URI.create(imageUrl).toURL();
5049

51-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.IMAGE_PNG, url));
50+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.IMAGE_PNG, URI.create(imageUrl))).build();
5251
var prompt = new Prompt(userMessage);
5352
var chatResponse = chatModel.call(prompt);
5453
return chatResponse.getResult().getOutput().getText();
5554
}
5655

5756
@GetMapping("/chat/audio/file")
5857
String chatAudioFile(String question) {
59-
var userMessage = new UserMessage(question, new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audio));
58+
var userMessage = UserMessage.builder().text(question).media(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audio)).build();
6059
var prompt = new Prompt(userMessage, OpenAiChatOptions.builder()
6160
.model(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW.getValue())
6261
.build());

rag/rag-branching/src/main/resources/application.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ spring:
44
ai:
55
chat:
66
observations:
7-
include-completion: true
8-
include-prompt: true
7+
log-completion: true
8+
log-prompt: true
99
ollama:
1010
init:
1111
pull-model-strategy: when_missing
@@ -18,7 +18,7 @@ spring:
1818
model: nomic-embed-text
1919
vectorstore:
2020
observations:
21-
include-query-response: true
21+
log-query-response: true
2222
pgvector:
2323
initialize-schema: true
2424
dimensions: 768
Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.thomasvitale.ai.spring;
22

3-
import org.springframework.ai.chat.memory.ChatMemory;
4-
import org.springframework.ai.chat.memory.InMemoryChatMemory;
53
import org.springframework.boot.SpringApplication;
64
import org.springframework.boot.autoconfigure.SpringBootApplication;
7-
import org.springframework.context.annotation.Bean;
85

96
@SpringBootApplication
107
public class RagAdvanced {
@@ -13,9 +10,4 @@ public static void main(String[] args) {
1310
SpringApplication.run(RagAdvanced.class, args);
1411
}
1512

16-
@Bean
17-
ChatMemory chatMemory() {
18-
return new InMemoryChatMemory();
19-
}
20-
2113
}

rag/rag-sequential/rag-advanced/src/main/java/com/thomasvitale/ai/spring/RagControllerCompression.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.thomasvitale.ai.spring;
22

33
import org.springframework.ai.chat.client.ChatClient;
4-
import org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor;
54
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
65
import org.springframework.ai.chat.memory.ChatMemory;
76
import org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;
@@ -46,7 +45,7 @@ String rag(@RequestBody String input, @PathVariable String conversationId) {
4645
return chatClient.prompt()
4746
.advisors(chatMemoryAdvisor, retrievalAugmentationAdvisor)
4847
.advisors(advisors -> advisors.param(
49-
AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, conversationId))
48+
ChatMemory.CONVERSATION_ID, conversationId))
5049
.user(input)
5150
.call()
5251
.content();

0 commit comments

Comments
 (0)