From 981ea68b0057c5b3e28caedcecbae208928475a2 Mon Sep 17 00:00:00 2001 From: Josh Long Date: Fri, 17 May 2024 19:40:29 +0200 Subject: [PATCH] chatclient --- .../ai/anthropic/AnthropicChatConnector.java | 6 +- .../anthropic/AnthropicChatConnectorIT.java | 14 +- .../openai/AzureOpenAiChatConnector.java | 4 +- .../openai/AzureOpenAiChatConnectorIT.java | 10 +- .../MockAzureOpenAiTestConfiguration.java | 2 +- ...zureOpenAiChatConnectorFunctionCallIT.java | 6 +- ...AzureOpenAiChatConnectorMetadataTests.java | 2 +- .../BedrockAnthropicChatConnector.java | 2 +- .../BedrockAnthropic3ChatConnector.java | 2 +- .../cohere/BedrockCohereChatConnector.java | 2 +- .../BedrockAi21Jurassic2ChatConnector.java | 4 +- .../llama/BedrockLlamaChatConnector.java | 2 +- .../titan/BedrockTitanChatConnector.java | 2 +- .../BedrockAnthropicChatConnectorIT.java | 8 +- .../BedrockAnthropic3ChatConnectorIT.java | 10 +- .../cohere/BedrockCohereChatConnectorIT.java | 8 +- .../BedrockAi21Jurassic2ChatConnectorIT.java | 10 +- .../llama/BedrockLlamaChatConnectorIT.java | 8 +- .../titan/BedrockTitanChatConnectorIT.java | 8 +- .../huggingface/HuggingfaceChatConnector.java | 2 +- .../ai/huggingface/client/ClientIT.java | 2 +- .../ai/mistralai/MistralAiChatConnector.java | 4 +- .../mistralai/MistralAiChatConnectorIT.java | 16 +- .../ai/mistralai/MistralAiRetryTests.java | 4 +- .../ai/ollama/OllamaChatConnector.java | 4 +- .../ai/ollama/OllamaChatConnectorIT.java | 12 +- .../OllamaChatConnectorMultimodalIT.java | 2 +- .../ai/openai/OpenAiChatConnector.java | 4 +- ...ClientTest.java => ChatConnectorTest.java} | 4 +- .../ai/openai/acme/AcmeIT.java | 2 +- ...atClientWithChatResponseMetadataTests.java | 2 +- .../openai/chat/OpenAiChatConnector2IT.java | 2 +- .../ai/openai/chat/OpenAiChatConnectorIT.java | 20 +- .../ai/openai/chat/OpenAiRetryTests.java | 12 +- .../ChatMemoryLongTermSystemPromptIT.java | 4 +- .../ChatMemoryShortTermMessageListIT.java | 4 +- .../ChatMemoryShortTermSystemPromptIT.java | 4 +- .../LongShortTermChatMemoryWithRagIT.java | 4 +- ...OpenAiPromptTransformingChatServiceIT.java | 2 +- .../ai/openai/testutils/AbstractIT.java | 4 +- .../gemini/VertexAiGeminiChatConnector.java | 4 +- .../gemini/VertexAiGeminiChatConnectorIT.java | 10 +- ...iGeminiChatConnectorFunctionCallingIT.java | 12 +- .../palm2/VertexAiPaLm2ChatConnector.java | 2 +- .../VertexAiPaLm2ChatGenerationClientIT.java | 8 +- .../ai/watsonx/WatsonxAiChatConnector.java | 4 +- .../watsonx/WatsonxAiChatConnectorTest.java | 4 +- .../springframework/ai/chat/ChatClient.java | 193 ++++++++++++++---- .../ai/chat/DefaultChatClient.java | 57 ++++++ .../ai/chat/connector/ChatConnector.java | 2 +- .../PromptTransformingChatService.java | 6 +- .../ai/evaluation/RelevancyEvaluator.java | 2 +- .../transformer/KeywordMetadataEnricher.java | 2 +- .../transformer/SummaryMetadataEnricher.java | 4 +- .../ai/chat/ChatConnectorTests.java | 10 +- .../ai/chat/memory/ChatMemoryTests.java | 4 +- .../anthropic/AnthropicAutoConfiguration.java | 4 +- .../openai/AzureOpenAiAutoConfiguration.java | 4 +- ...BedrockAnthropicChatAutoConfiguration.java | 2 +- ...edrockAnthropic3ChatAutoConfiguration.java | 2 +- .../BedrockCohereChatAutoConfiguration.java | 2 +- .../BedrockLlamaChatAutoConfiguration.java | 2 +- .../BedrockTitanChatAutoConfiguration.java | 2 +- .../mistralai/MistralAiAutoConfiguration.java | 6 +- .../openai/OpenAiAutoConfiguration.java | 6 +- .../VertexAiGeminiAutoConfiguration.java | 4 +- .../palm2/VertexAiPalm2AutoConfiguration.java | 2 +- .../AnthropicAutoConfigurationIT.java | 2 +- .../tool/FunctionCallWithFunctionBeanIT.java | 4 +- .../FunctionCallWithPromptFunctionIT.java | 2 +- .../azure/AzureOpenAiAutoConfigurationIT.java | 4 +- .../tool/FunctionCallWithFunctionBeanIT.java | 4 +- .../FunctionCallWithFunctionWrapperIT.java | 2 +- .../FunctionCallWithPromptFunctionIT.java | 2 +- ...drockAnthropicChatAutoConfigurationIT.java | 2 +- ...rockAnthropic3ChatAutoConfigurationIT.java | 2 +- .../BedrockCohereChatAutoConfigurationIT.java | 2 +- ...kAi21Jurassic2ChatAutoConfigurationIT.java | 2 +- .../BedrockLlamaChatAutoConfigurationIT.java | 2 +- .../BedrockTitanChatAutoConfigurationIT.java | 2 +- .../MistralAiAutoConfigurationIT.java | 2 +- .../mistralai/tool/PaymentStatusBeanIT.java | 2 +- .../tool/PaymentStatusBeanOpenAiIT.java | 2 +- .../mistralai/tool/PaymentStatusPromptIT.java | 2 +- .../tool/WeatherServicePromptIT.java | 2 +- .../ollama/OllamaChatAutoConfigurationIT.java | 2 +- .../openai/OpenAiAutoConfigurationIT.java | 2 +- .../tool/FunctionCallbackInPromptIT.java | 2 +- ...nctionCallbackWithPlainFunctionBeanIT.java | 6 +- .../tool/FunctionCallbackWrapperIT.java | 2 +- .../VertexAiGeminiAutoConfigurationIT.java | 2 +- .../tool/FunctionCallWithFunctionBeanIT.java | 6 +- .../FunctionCallWithFunctionWrapperIT.java | 2 +- .../FunctionCallWithPromptFunctionIT.java | 4 +- .../VertexAiPaLm2AutoConfigurationIT.java | 2 +- .../ai/evaluation/BasicEvaluationTest.java | 4 +- .../CricketWorldCupHanaController.java | 2 +- 97 files changed, 409 insertions(+), 253 deletions(-) rename models/spring-ai-openai/src/test/java/org/springframework/ai/openai/{ChatClientTest.java => ChatConnectorTest.java} (94%) create mode 100644 spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java diff --git a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatConnector.java b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatConnector.java index e123d336d..c05ee47a2 100644 --- a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatConnector.java +++ b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/AnthropicChatConnector.java @@ -117,7 +117,7 @@ public class AnthropicChatConnector extends * @param retryTemplate the retry template used to retry the Anthropic API calls. */ public AnthropicChatConnector(AnthropicApi anthropicApi, AnthropicChatOptions defaultOptions, - RetryTemplate retryTemplate) { + RetryTemplate retryTemplate) { this(anthropicApi, defaultOptions, retryTemplate, null); } @@ -130,7 +130,7 @@ public class AnthropicChatConnector extends * state of the function calls. */ public AnthropicChatConnector(AnthropicApi anthropicApi, AnthropicChatOptions defaultOptions, - RetryTemplate retryTemplate, FunctionCallbackContext functionCallbackContext) { + RetryTemplate retryTemplate, FunctionCallbackContext functionCallbackContext) { super(functionCallbackContext); @@ -144,7 +144,7 @@ public class AnthropicChatConnector extends } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { ChatCompletionRequest request = createRequest(prompt, false); diff --git a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatConnectorIT.java b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatConnectorIT.java index c8dff1c4b..b69e9f824 100644 --- a/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatConnectorIT.java +++ b/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatConnectorIT.java @@ -76,7 +76,7 @@ class AnthropicChatConnectorIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", "Bob", "voice", "pirate")); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = chatConnector.execute(prompt); + ChatResponse response = chatConnector.call(prompt); assertThat(response.getResults()).hasSize(1); assertThat(response.getMetadata().getUsage().getGenerationTokens()).isGreaterThan(0); assertThat(response.getMetadata().getUsage().getPromptTokens()).isGreaterThan(0); @@ -102,7 +102,7 @@ class AnthropicChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.chatConnector.execute(prompt).getResult(); + Generation generation = this.chatConnector.call(prompt).getResult(); List list = listOutputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -120,7 +120,7 @@ class AnthropicChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); Map result = mapOutputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -142,7 +142,7 @@ class AnthropicChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = beanOutputConverter.convert(generation.getOutput().getContent()); logger.info("" + actorsFilms); @@ -187,14 +187,14 @@ class AnthropicChatConnectorIT { var userMessage = new UserMessage("Explain what do you see on this picture?", List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); - var response = chatConnector.execute(new Prompt(List.of(userMessage))); + var response = chatConnector.call(new Prompt(List.of(userMessage))); logger.info(response.getResult().getOutput().getContent()); assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket"); } @Test - void functionExecuteTest() { + void functionCallTest() { UserMessage userMessage = new UserMessage( "What's the weather like in San Francisco, Tokyo and Paris? Return the result in Celsius."); @@ -209,7 +209,7 @@ class AnthropicChatConnectorIT { .build())) .build(); - ChatResponse response = chatConnector.execute(new Prompt(messages, promptOptions)); + ChatResponse response = chatConnector.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); diff --git a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnector.java b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnector.java index e2fd74d6c..70fb062e1 100644 --- a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnector.java +++ b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnector.java @@ -107,7 +107,7 @@ public class AzureOpenAiChatConnector } public AzureOpenAiChatConnector(OpenAIClient microsoftOpenAiClient, AzureOpenAiChatOptions options, - FunctionCallbackContext functionCallbackContext) { + FunctionCallbackContext functionCallbackContext) { super(functionCallbackContext); Assert.notNull(microsoftOpenAiClient, "com.azure.ai.openai.OpenAIClient must not be null"); Assert.notNull(options, "AzureOpenAiChatOptions must not be null"); @@ -131,7 +131,7 @@ public class AzureOpenAiChatConnector } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { ChatCompletionsOptions options = toAzureChatCompletionsOptions(prompt); options.setStream(false); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnectorIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnectorIT.java index e52439722..f333f0fe7 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnectorIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatConnectorIT.java @@ -69,7 +69,7 @@ class AzureOpenAiChatConnectorIT { UserMessage userMessage = new UserMessage("Generate the names of 5 famous pirates."); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = chatClient.execute(prompt); + ChatResponse response = chatClient.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -86,7 +86,7 @@ class AzureOpenAiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatClient.execute(prompt).getResult(); + Generation generation = chatClient.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -105,7 +105,7 @@ class AzureOpenAiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatClient.execute(prompt).getResult(); + Generation generation = chatClient.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -124,7 +124,7 @@ class AzureOpenAiChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatClient.execute(prompt).getResult(); + Generation generation = chatClient.call(prompt).getResult(); ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isNotNull(); @@ -145,7 +145,7 @@ class AzureOpenAiChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatClient.execute(prompt).getResult(); + Generation generation = chatClient.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); System.out.println(actorsFilms); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/MockAzureOpenAiTestConfiguration.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/MockAzureOpenAiTestConfiguration.java index f96328b4b..3ec66d35b 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/MockAzureOpenAiTestConfiguration.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/MockAzureOpenAiTestConfiguration.java @@ -59,7 +59,7 @@ public class MockAzureOpenAiTestConfiguration { } @Bean - AzureOpenAiChatConnector azureOpenAiChatClient(OpenAIClient microsoftAzureOpenAiClient) { + AzureOpenAiChatConnector azureOpenAiChatClient(OpenAIClient microsoftAzureOpenAiClient) { return new AzureOpenAiChatConnector(microsoftAzureOpenAiClient); } diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatConnectorFunctionCallIT.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatConnectorFunctionCallIT.java index 32a02f077..34ac44aee 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatConnectorFunctionCallIT.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/function/AzureOpenAiChatConnectorFunctionCallIT.java @@ -60,7 +60,7 @@ class AzureOpenAiChatConnectorFunctionCallIT { private AzureOpenAiChatConnector chatClient; @Test - void functionExecuteTest() { + void functionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, in Tokyo, and in Paris?"); @@ -75,7 +75,7 @@ class AzureOpenAiChatConnectorFunctionCallIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(messages, promptOptions)); + ChatResponse response = chatClient.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); @@ -85,7 +85,7 @@ class AzureOpenAiChatConnectorFunctionCallIT { } @Test - void streamFunctionExecuteTest() { + void streamFunctionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, Tokyo, and Paris?"); List messages = new ArrayList<>(List.of(userMessage)); diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatConnectorMetadataTests.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatConnectorMetadataTests.java index ca8fddc53..cd42cda3f 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatConnectorMetadataTests.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatConnectorMetadataTests.java @@ -75,7 +75,7 @@ class AzureOpenAiChatConnectorMetadataTests { Prompt prompt = new Prompt("Can I fly like a bird?"); - ChatResponse response = this.aiClient.execute(prompt); + ChatResponse response = this.aiClient.call(prompt); assertThat(response).isNotNull(); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnector.java index e80201bc2..36e2c932f 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnector.java @@ -61,7 +61,7 @@ public class BedrockAnthropicChatConnector implements ChatConnector, StreamingCh } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { AnthropicChatRequest request = createRequest(prompt); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnector.java index 12805f5b7..e01c5b0a3 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnector.java @@ -72,7 +72,7 @@ public class BedrockAnthropic3ChatConnector implements ChatConnector, StreamingC } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { AnthropicChatRequest request = createRequest(prompt); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnector.java index a2e84923b..c1566aff3 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnector.java @@ -58,7 +58,7 @@ public class BedrockCohereChatConnector implements ChatConnector, StreamingChatC } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { CohereChatResponse response = this.chatApi.chatCompletion(this.createRequest(prompt, false)); List generations = response.generations().stream().map(g -> { return new Generation(g.text()); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnector.java index e820a8a51..079629ce2 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnector.java @@ -41,7 +41,7 @@ public class BedrockAi21Jurassic2ChatConnector implements ChatConnector { private final BedrockAi21Jurassic2ChatOptions defaultOptions; public BedrockAi21Jurassic2ChatConnector(Ai21Jurassic2ChatBedrockApi chatApi, - BedrockAi21Jurassic2ChatOptions options) { + BedrockAi21Jurassic2ChatOptions options) { Assert.notNull(chatApi, "Ai21Jurassic2ChatBedrockApi must not be null"); Assert.notNull(options, "BedrockAi21Jurassic2ChatOptions must not be null"); @@ -59,7 +59,7 @@ public class BedrockAi21Jurassic2ChatConnector implements ChatConnector { } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { var request = createRequest(prompt); var response = this.chatApi.chatCompletion(request); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnector.java index 0598c4db9..c91b765d7 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnector.java @@ -62,7 +62,7 @@ public class BedrockLlamaChatConnector implements ChatConnector, StreamingChatCl } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { var request = createRequest(prompt); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnector.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnector.java index 17fc4ce9a..e70708938 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnector.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnector.java @@ -57,7 +57,7 @@ public class BedrockTitanChatConnector implements ChatConnector, StreamingChatCl } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { TitanChatResponse response = this.chatApi.chatCompletion(this.createRequest(prompt)); List generations = response.results().stream().map(result -> { return new Generation(result.outputText()); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnectorIT.java index 3e6259be5..f456cde22 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatConnectorIT.java @@ -101,7 +101,7 @@ class BedrockAnthropicChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -119,7 +119,7 @@ class BedrockAnthropicChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputParser.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -137,7 +137,7 @@ class BedrockAnthropicChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -161,7 +161,7 @@ class BedrockAnthropicChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnectorIT.java index 03badfd6e..73d27e7a7 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatConnectorIT.java @@ -105,7 +105,7 @@ class BedrockAnthropic3ChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -123,7 +123,7 @@ class BedrockAnthropic3ChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -142,7 +142,7 @@ class BedrockAnthropic3ChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -166,7 +166,7 @@ class BedrockAnthropic3ChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); @@ -211,7 +211,7 @@ class BedrockAnthropic3ChatConnectorIT { var userMessage = new UserMessage("Explain what do you see o this picture?", List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); - var response = client.execute(new Prompt(List.of(userMessage))); + var response = client.call(new Prompt(List.of(userMessage))); logger.info(response.getResult().getOutput().getContent()); assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket"); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnectorIT.java index f4f66e951..9cba1f9b9 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatConnectorIT.java @@ -98,7 +98,7 @@ class BedrockCohereChatConnectorIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -115,7 +115,7 @@ class BedrockCohereChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -134,7 +134,7 @@ class BedrockCohereChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -157,7 +157,7 @@ class BedrockCohereChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnectorIT.java index 1c8700046..fb72d48d8 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatConnectorIT.java @@ -66,7 +66,7 @@ class BedrockAi21Jurassic2ChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -83,7 +83,7 @@ class BedrockAi21Jurassic2ChatConnectorIT { UserMessage userMessage = new UserMessage("Can you express happiness using an emoji like 😄 ?"); Prompt prompt = new Prompt(List.of(userMessage), options); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).matches(content -> content.contains("😄")); } @@ -103,7 +103,7 @@ class BedrockAi21Jurassic2ChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage), options); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).doesNotContain("😄"); } @@ -120,7 +120,7 @@ class BedrockAi21Jurassic2ChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -135,7 +135,7 @@ class BedrockAi21Jurassic2ChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("AI"); } diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnectorIT.java index 0bbde7d08..5a9d56560 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatConnectorIT.java @@ -98,7 +98,7 @@ class BedrockLlamaChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -116,7 +116,7 @@ class BedrockLlamaChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -134,7 +134,7 @@ class BedrockLlamaChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -158,7 +158,7 @@ class BedrockLlamaChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnectorIT.java b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnectorIT.java index b6e3f7af2..a9ccb2830 100644 --- a/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnectorIT.java +++ b/models/spring-ai-bedrock/src/test/java/org/springframework/ai/bedrock/titan/BedrockTitanChatConnectorIT.java @@ -99,7 +99,7 @@ class BedrockTitanChatConnectorIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -117,7 +117,7 @@ class BedrockTitanChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -138,7 +138,7 @@ class BedrockTitanChatConnectorIT { Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -162,7 +162,7 @@ class BedrockTitanChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatConnector.java b/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatConnector.java index d3ddbe9bd..d81242aaa 100644 --- a/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatConnector.java +++ b/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatConnector.java @@ -86,7 +86,7 @@ public class HuggingfaceChatConnector implements ChatConnector { * @return ChatResponse containing the generated text and other related details. */ @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { GenerateRequest generateRequest = new GenerateRequest(); generateRequest.setInputs(prompt.getContents()); GenerateParameters generateParameters = new GenerateParameters(); 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 0d8653373..1d7961e50 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 @@ -46,7 +46,7 @@ public class ClientIT { [/INST] """; Prompt prompt = new Prompt(mistral7bInstruct); - ChatResponse chatResponse = huggingfaceChatClient.execute(prompt); + ChatResponse chatResponse = huggingfaceChatClient.call(prompt); assertThat(chatResponse.getResult().getOutput().getContent()).isNotEmpty(); String expectedResponse = """ ```json diff --git a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatConnector.java b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatConnector.java index 9475414cb..082eee1e5 100644 --- a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatConnector.java +++ b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatConnector.java @@ -83,7 +83,7 @@ public class MistralAiChatConnector extends } public MistralAiChatConnector(MistralAiApi mistralAiApi, MistralAiChatOptions options, - FunctionCallbackContext functionCallbackContext, RetryTemplate retryTemplate) { + FunctionCallbackContext functionCallbackContext, RetryTemplate retryTemplate) { super(functionCallbackContext); Assert.notNull(mistralAiApi, "MistralAiApi must not be null"); Assert.notNull(options, "Options must not be null"); @@ -94,7 +94,7 @@ public class MistralAiChatConnector extends } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { var request = createRequest(prompt, false); return retryTemplate.execute(ctx -> { diff --git a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatConnectorIT.java b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatConnectorIT.java index c2e075833..aba78431d 100644 --- a/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatConnectorIT.java +++ b/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/MistralAiChatConnectorIT.java @@ -25,9 +25,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.ai.chat.connector.ChatConnector; import reactor.core.publisher.Flux; -import org.springframework.ai.chat.connector.ChatConnector; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; @@ -90,7 +90,7 @@ class MistralAiChatConnectorIT { // NOTE: Mistral expects the system message to be before the user message or will // fail with 400 error. Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); - ChatResponse response = chatConnector.execute(prompt); + ChatResponse response = chatConnector.call(prompt); assertThat(response.getResults()).hasSize(1); assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); } @@ -108,7 +108,7 @@ class MistralAiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.chatConnector.execute(prompt).getResult(); + Generation generation = this.chatConnector.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -126,7 +126,7 @@ class MistralAiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -148,7 +148,7 @@ class MistralAiChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); logger.info("" + actorsFilms); @@ -186,7 +186,7 @@ class MistralAiChatConnectorIT { } @Test - void functionExecuteTest() { + void functionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco?"); @@ -201,7 +201,7 @@ class MistralAiChatConnectorIT { .build())) .build(); - ChatResponse response = chatConnector.execute(new Prompt(messages, promptOptions)); + ChatResponse response = chatConnector.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); @@ -209,7 +209,7 @@ class MistralAiChatConnectorIT { } @Test - void streamFunctionExecuteTest() { + void streamFunctionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in Tokyo, Japan?"); 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 e163610c9..0919a585f 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 @@ -118,7 +118,7 @@ public class MistralAiRetryTests { .thenThrow(new TransientAiException("Transient Error 2")) .thenReturn(ResponseEntity.of(Optional.of(expectedChatCompletion))); - var result = chatClient.execute(new Prompt("text")); + var result = chatClient.call(new Prompt("text")); assertThat(result).isNotNull(); assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); @@ -130,7 +130,7 @@ public class MistralAiRetryTests { public void mistralAiChatNonTransientError() { when(mistralAiApi.chatCompletionEntity(isA(ChatCompletionRequest.class))) .thenThrow(new RuntimeException("Non Transient Error")); - assertThrows(RuntimeException.class, () -> chatClient.execute(new Prompt("text"))); + assertThrows(RuntimeException.class, () -> chatClient.call(new Prompt("text"))); } @Test diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatConnector.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatConnector.java index 81bf2e40e..03b306845 100644 --- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatConnector.java +++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatConnector.java @@ -18,10 +18,10 @@ package org.springframework.ai.ollama; import java.util.Base64; import java.util.List; +import org.springframework.ai.chat.connector.ChatConnector; import org.springframework.ai.ollama.metadata.OllamaChatResponseMetadata; import reactor.core.publisher.Flux; -import org.springframework.ai.chat.connector.ChatConnector; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; @@ -94,7 +94,7 @@ public class OllamaChatConnector implements ChatConnector, StreamingChatClient { } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { OllamaApi.ChatResponse response = this.chatApi.chat(ollamaChatRequest(prompt, false)); diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorIT.java index 676da0f7e..05a6c7f15 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorIT.java @@ -95,13 +95,13 @@ class OllamaChatConnectorIT { Prompt prompt = new Prompt(List.of(userMessage, systemMessage), portableOptions); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); // ollama specific options var ollamaOptions = new OllamaOptions().withLowVRAM(true); - response = client.execute(new Prompt(List.of(userMessage, systemMessage), ollamaOptions)); + response = client.call(new Prompt(List.of(userMessage, systemMessage), ollamaOptions)); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -109,7 +109,7 @@ class OllamaChatConnectorIT { @Test void usageTest() { Prompt prompt = new Prompt("Tell me a joke"); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); Usage usage = response.getMetadata().getUsage(); assertThat(usage).isNotNull(); @@ -131,7 +131,7 @@ class OllamaChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -151,7 +151,7 @@ class OllamaChatConnectorIT { Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -173,7 +173,7 @@ class OllamaChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorMultimodalIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorMultimodalIT.java index d8c354b22..8967c442d 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorMultimodalIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatConnectorMultimodalIT.java @@ -75,7 +75,7 @@ class OllamaChatConnectorMultimodalIT { var userMessage = new UserMessage("Explain what do you see on this picture?", List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); - var response = client.execute(new Prompt(List.of(userMessage))); + var response = client.call(new Prompt(List.of(userMessage))); logger.info(response.getResult().getOutput().getContent()); assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket"); diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatConnector.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatConnector.java index f3bc4cdec..ba76c1d52 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatConnector.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatConnector.java @@ -123,7 +123,7 @@ public class OpenAiChatConnector extends * @param retryTemplate The retry template. */ public OpenAiChatConnector(OpenAiApi openAiApi, OpenAiChatOptions options, - FunctionCallbackContext functionCallbackContext, RetryTemplate retryTemplate) { + FunctionCallbackContext functionCallbackContext, RetryTemplate retryTemplate) { super(functionCallbackContext); Assert.notNull(openAiApi, "OpenAiApi must not be null"); Assert.notNull(options, "Options must not be null"); @@ -134,7 +134,7 @@ public class OpenAiChatConnector extends } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { ChatCompletionRequest request = createRequest(prompt, false); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatClientTest.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatConnectorTest.java similarity index 94% rename from models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatClientTest.java rename to models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatConnectorTest.java index c4214ed01..0d689332f 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatClientTest.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/ChatConnectorTest.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration; import java.util.Map; -class ChatClientTest { +class ChatConnectorTest { @Configuration static class ChatClientTestConfiguration { @@ -28,7 +28,7 @@ class ChatClientTest { private final ChatClient singularity; - ChatClientTest(@Autowired ChatClient singularity) { + ChatConnectorTest(@Autowired ChatClient singularity) { this.singularity = singularity; } diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/acme/AcmeIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/acme/AcmeIT.java index f79c478e8..0b247edf0 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/acme/AcmeIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/acme/AcmeIT.java @@ -108,7 +108,7 @@ public class AcmeIT extends AbstractIT { logger.info("Asking AI generative to reply to question."); Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); logger.info("AI responded."); - ChatResponse response = chatClient.execute(prompt); + ChatResponse response = chatClient.call(prompt); evaluateQuestionAndAnswer(userQuery, response, true); } diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientWithChatResponseMetadataTests.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientWithChatResponseMetadataTests.java index 198cfdde8..a997b7616 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientWithChatResponseMetadataTests.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientWithChatResponseMetadataTests.java @@ -74,7 +74,7 @@ public class OpenAiChatClientWithChatResponseMetadataTests { Prompt prompt = new Prompt("Reach for the sky."); - ChatResponse response = this.openAiChatClient.execute(prompt); + ChatResponse response = this.openAiChatClient.call(prompt); assertThat(response).isNotNull(); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnector2IT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnector2IT.java index 9a256d820..87246ee53 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnector2IT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnector2IT.java @@ -67,7 +67,7 @@ public class OpenAiChatConnector2IT { .withResponseFormat(new ChatCompletionRequest.ResponseFormat("json_object")) .build()); - ChatResponse response = this.openAiChatClient.execute(prompt); + ChatResponse response = this.openAiChatClient.call(prompt); assertThat(response).isNotNull(); diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnectorIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnectorIT.java index f2c5bfd34..801831d43 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnectorIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatConnectorIT.java @@ -74,7 +74,7 @@ class OpenAiChatConnectorIT extends AbstractIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", "Bob", "voice", "pirate")); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = chatConnector.execute(prompt); + ChatResponse response = chatConnector.call(prompt); assertThat(response.getResults()).hasSize(1); assertThat(response.getResults().get(0).getOutput().getContent()).contains("Blackbeard"); // needs fine tuning... evaluateQuestionAndAnswer(request, response, false); @@ -93,7 +93,7 @@ class OpenAiChatConnectorIT extends AbstractIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.chatConnector.execute(prompt).getResult(); + Generation generation = this.chatConnector.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -112,7 +112,7 @@ class OpenAiChatConnectorIT extends AbstractIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -131,7 +131,7 @@ class OpenAiChatConnectorIT extends AbstractIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); ActorsFilms actorsFilms = outputConverter.convert(generation.getOutput().getContent()); } @@ -151,7 +151,7 @@ class OpenAiChatConnectorIT extends AbstractIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = chatConnector.execute(prompt).getResult(); + Generation generation = chatConnector.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); logger.info("" + actorsFilms); @@ -189,7 +189,7 @@ class OpenAiChatConnectorIT extends AbstractIT { } @Test - void functionExecuteTest() { + void functionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, Tokyo, and Paris?"); @@ -204,7 +204,7 @@ class OpenAiChatConnectorIT extends AbstractIT { .build())) .build(); - ChatResponse response = chatConnector.execute(new Prompt(messages, promptOptions)); + ChatResponse response = chatConnector.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); @@ -214,7 +214,7 @@ class OpenAiChatConnectorIT extends AbstractIT { } @Test - void streamFunctionExecuteTest() { + void streamFunctionCallTest() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, Tokyo, and Paris?"); @@ -256,7 +256,7 @@ class OpenAiChatConnectorIT extends AbstractIT { List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); var response = chatConnector - .execute(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); + .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"); @@ -272,7 +272,7 @@ class OpenAiChatConnectorIT extends AbstractIT { new URL("https://docs.spring.io/spring-ai/reference/1.0-SNAPSHOT/_images/multimodal.test.png")))); ChatResponse response = chatConnector - .execute(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withModel(modelName).build())); + .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"); 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 a3ee313b1..83da2bb6e 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 @@ -23,20 +23,14 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.ai.openai.*; import reactor.core.publisher.Flux; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.document.MetadataMode; import org.springframework.ai.image.ImageMessage; import org.springframework.ai.image.ImagePrompt; -import org.springframework.ai.openai.OpenAiAudioTranscriptionClient; -import org.springframework.ai.openai.OpenAiAudioTranscriptionOptions; import org.springframework.ai.openai.OpenAiChatConnector; -import org.springframework.ai.openai.OpenAiChatOptions; -import org.springframework.ai.openai.OpenAiEmbeddingClient; -import org.springframework.ai.openai.OpenAiEmbeddingOptions; -import org.springframework.ai.openai.OpenAiImageClient; -import org.springframework.ai.openai.OpenAiImageOptions; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.ai.openai.api.OpenAiApi.ChatCompletion; import org.springframework.ai.openai.api.OpenAiApi.ChatCompletionChunk; @@ -146,7 +140,7 @@ public class OpenAiRetryTests { .thenThrow(new TransientAiException("Transient Error 2")) .thenReturn(ResponseEntity.of(Optional.of(expectedChatCompletion))); - var result = chatClient.execute(new Prompt("text")); + var result = chatClient.call(new Prompt("text")); assertThat(result).isNotNull(); assertThat(result.getResult().getOutput().getContent()).isSameAs("Response"); @@ -158,7 +152,7 @@ public class OpenAiRetryTests { public void openAiChatNonTransientError() { when(openAiApi.chatCompletionEntity(isA(ChatCompletionRequest.class))) .thenThrow(new RuntimeException("Non Transient Error")); - assertThrows(RuntimeException.class, () -> chatClient.execute(new Prompt("text"))); + assertThrows(RuntimeException.class, () -> chatClient.call(new Prompt("text"))); } @Test diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryLongTermSystemPromptIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryLongTermSystemPromptIT.java index cdac0c599..b2e3e3a30 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryLongTermSystemPromptIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryLongTermSystemPromptIT.java @@ -99,7 +99,7 @@ public class ChatMemoryLongTermSystemPromptIT extends BaseMemoryTest { @Bean public ChatService memoryChatService(OpenAiChatConnector chatClient, VectorStore vectorStore, - TokenCountEstimator tokenCountEstimator) { + TokenCountEstimator tokenCountEstimator) { return PromptTransformingChatService.builder(chatClient) .withRetrievers(List.of(new VectorStoreChatMemoryRetriever(vectorStore, 10))) @@ -111,7 +111,7 @@ public class ChatMemoryLongTermSystemPromptIT extends BaseMemoryTest { @Bean public StreamingChatService memoryStreamingChatService(OpenAiChatConnector streamingChatClient, - VectorStore vectorStore, TokenCountEstimator tokenCountEstimator) { + VectorStore vectorStore, TokenCountEstimator tokenCountEstimator) { return StreamingPromptTransformingChatService.builder(streamingChatClient) .withRetrievers(List.of(new VectorStoreChatMemoryRetriever(vectorStore, 10))) diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermMessageListIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermMessageListIT.java index 2bf642da2..e07516e11 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermMessageListIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermMessageListIT.java @@ -75,7 +75,7 @@ public class ChatMemoryShortTermMessageListIT extends BaseMemoryTest { @Bean public ChatService memoryChatService(OpenAiChatConnector chatClient, ChatMemory chatHistory, - TokenCountEstimator tokenCountEstimator) { + TokenCountEstimator tokenCountEstimator) { return PromptTransformingChatService.builder(chatClient) .withRetrievers(List.of(new ChatMemoryRetriever(chatHistory))) @@ -87,7 +87,7 @@ public class ChatMemoryShortTermMessageListIT extends BaseMemoryTest { @Bean public StreamingChatService memoryStreamingChatService(OpenAiChatConnector streamingChatClient, - ChatMemory chatHistory, TokenCountEstimator tokenCountEstimator) { + ChatMemory chatHistory, TokenCountEstimator tokenCountEstimator) { return StreamingPromptTransformingChatService.builder(streamingChatClient) .withRetrievers(List.of(new ChatMemoryRetriever(chatHistory))) diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermSystemPromptIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermSystemPromptIT.java index ea9707848..30a2e299e 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermSystemPromptIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/ChatMemoryShortTermSystemPromptIT.java @@ -76,7 +76,7 @@ public class ChatMemoryShortTermSystemPromptIT extends BaseMemoryTest { @Bean public ChatService memoryChatService(OpenAiChatConnector chatClient, ChatMemory chatHistory, - TokenCountEstimator tokenCountEstimator) { + TokenCountEstimator tokenCountEstimator) { return PromptTransformingChatService.builder(chatClient) .withRetrievers(List.of(new ChatMemoryRetriever(chatHistory))) @@ -88,7 +88,7 @@ public class ChatMemoryShortTermSystemPromptIT extends BaseMemoryTest { @Bean public StreamingChatService memoryStreamingChatService(OpenAiChatConnector streamingChatClient, - ChatMemory chatHistory, TokenCountEstimator tokenCountEstimator) { + ChatMemory chatHistory, TokenCountEstimator tokenCountEstimator) { return StreamingPromptTransformingChatService.builder(streamingChatClient) .withRetrievers(List.of(new ChatMemoryRetriever(chatHistory))) diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/LongShortTermChatMemoryWithRagIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/LongShortTermChatMemoryWithRagIT.java index 87779e194..d74ef885b 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/LongShortTermChatMemoryWithRagIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/LongShortTermChatMemoryWithRagIT.java @@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory; import org.springframework.ai.chat.prompt.transformer.ChatServiceContext; import org.springframework.ai.chat.service.ChatService; import org.springframework.ai.chat.service.PromptTransformingChatService; +import org.springframework.ai.openai.OpenAiChatConnector; import org.springframework.ai.openai.OpenAiChatOptions; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -52,7 +53,6 @@ import org.springframework.ai.document.DocumentTransformer; import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.evaluation.EvaluationResponse; import org.springframework.ai.evaluation.RelevancyEvaluator; -import org.springframework.ai.openai.OpenAiChatConnector; import org.springframework.ai.openai.OpenAiEmbeddingClient; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.ai.reader.JsonReader; @@ -187,7 +187,7 @@ public class LongShortTermChatMemoryWithRagIT { @Bean public ChatService memoryChatService(OpenAiChatConnector chatClient, VectorStore vectorStore, - TokenCountEstimator tokenCountEstimator, ChatMemory chatHistory) { + TokenCountEstimator tokenCountEstimator, ChatMemory chatHistory) { return PromptTransformingChatService.builder(chatClient) .withRetrievers(List.of(new VectorStoreRetriever(vectorStore, SearchRequest.defaults()), diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/OpenAiPromptTransformingChatServiceIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/OpenAiPromptTransformingChatServiceIT.java index 18c00ad32..24db3e336 100644 --- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/OpenAiPromptTransformingChatServiceIT.java +++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/service/OpenAiPromptTransformingChatServiceIT.java @@ -82,7 +82,7 @@ public class OpenAiPromptTransformingChatServiceIT { @Autowired public OpenAiPromptTransformingChatServiceIT(ChatConnector chatConnector, ChatService chatService, - VectorStore vectorStore) { + VectorStore vectorStore) { this.chatConnector = chatConnector; this.chatService = chatService; this.vectorStore = vectorStore; 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 74b49a618..1b009f690 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 @@ -85,12 +85,12 @@ public abstract class AbstractIT { } Message userMessage = userPromptTemplate.createMessage(); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - String yesOrNo = chatConnector.execute(prompt).getResult().getOutput().getContent(); + String yesOrNo = chatConnector.call(prompt).getResult().getOutput().getContent(); logger.info("Is Answer related to question: " + yesOrNo); if (yesOrNo.equalsIgnoreCase("no")) { SystemMessage notRelatedSystemMessage = new SystemMessage(qaEvaluatorNotRelatedResource); prompt = new Prompt(List.of(userMessage, notRelatedSystemMessage)); - String reasonForFailure = chatConnector.execute(prompt).getResult().getOutput().getContent(); + String reasonForFailure = chatConnector.call(prompt).getResult().getOutput().getContent(); fail(reasonForFailure); } else { diff --git a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnector.java b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnector.java index f3edd2d37..1fa8d9df3 100644 --- a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnector.java +++ b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnector.java @@ -130,7 +130,7 @@ public class VertexAiGeminiChatConnector } public VertexAiGeminiChatConnector(VertexAI vertexAI, VertexAiGeminiChatOptions options, - FunctionCallbackContext functionCallbackContext) { + FunctionCallbackContext functionCallbackContext) { super(functionCallbackContext); @@ -145,7 +145,7 @@ public class VertexAiGeminiChatConnector // https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { var geminiRequest = createGeminiRequest(prompt); diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnectorIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnectorIT.java index d22a7bc7d..5c8e49a74 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnectorIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatConnectorIT.java @@ -70,7 +70,7 @@ class VertexAiGeminiChatConnectorIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); } @@ -87,7 +87,7 @@ class VertexAiGeminiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputParser.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -106,7 +106,7 @@ class VertexAiGeminiChatConnectorIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -129,7 +129,7 @@ class VertexAiGeminiChatConnectorIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConvert.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); @@ -191,7 +191,7 @@ class VertexAiGeminiChatConnectorIT { var userMessage = new UserMessage("Explain what do you see o this picture?", List.of(new Media(MimeTypeUtils.IMAGE_PNG, data))); - var response = client.execute(new Prompt(List.of(userMessage))); + var response = client.call(new Prompt(List.of(userMessage))); // Response should contain something like: // I see a bunch of bananas in a golden basket. The bananas are ripe and yellow. diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatConnectorFunctionCallingIT.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatConnectorFunctionCallingIT.java index f993cbad8..75f950e11 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatConnectorFunctionCallingIT.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/function/VertexAiGeminiChatConnectorFunctionCallingIT.java @@ -68,7 +68,7 @@ public class VertexAiGeminiChatConnectorFunctionCallingIT { @Test // @Disabled("Google Vertex AI degraded support for parallel function calls") - public void functionExecuteExplicitOpenApiSchema() { + public void functionCallExplicitOpenApiSchema() { UserMessage userMessage = new UserMessage( "What's the weather like in San Francisco, in Paris and in Tokyo, Japan?" @@ -106,7 +106,7 @@ public class VertexAiGeminiChatConnectorFunctionCallingIT { .build())) .build(); - ChatResponse response = vertexGeminiClient.execute(new Prompt(messages, promptOptions)); + ChatResponse response = vertexGeminiClient.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); @@ -118,7 +118,7 @@ public class VertexAiGeminiChatConnectorFunctionCallingIT { } @Test - public void functionExecuteTestInferredOpenApiSchema() { + public void functionCallTestInferredOpenApiSchema() { UserMessage userMessage = new UserMessage("What's the weather like in Paris? Use Celsius units."); @@ -141,14 +141,14 @@ public class VertexAiGeminiChatConnectorFunctionCallingIT { .build())) .build(); - ChatResponse response = vertexGeminiClient.execute(new Prompt(messages, promptOptions)); + ChatResponse response = vertexGeminiClient.call(new Prompt(messages, promptOptions)); logger.info("Response: {}", response); assertThat(response.getResult().getOutput().getContent()).containsAnyOf("15.0", "15"); ChatResponse response2 = vertexGeminiClient - .execute(new Prompt("What is the payment status for transaction 696?", promptOptions)); + .call(new Prompt("What is the payment status for transaction 696?", promptOptions)); logger.info("Response: {}", response2); @@ -157,7 +157,7 @@ public class VertexAiGeminiChatConnectorFunctionCallingIT { } @Test - public void functionExecuteTestInferredOpenApiSchemaStream() { + public void functionCallTestInferredOpenApiSchemaStream() { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco in Celsius units?"); // UserMessage userMessage = new UserMessage( diff --git a/models/spring-ai-vertex-ai-palm2/src/main/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatConnector.java b/models/spring-ai-vertex-ai-palm2/src/main/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatConnector.java index 8dff115be..39c53a763 100644 --- a/models/spring-ai-vertex-ai-palm2/src/main/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatConnector.java +++ b/models/spring-ai-vertex-ai-palm2/src/main/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatConnector.java @@ -55,7 +55,7 @@ public class VertexAiPaLm2ChatConnector implements ChatConnector { } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { GenerateMessageRequest request = createRequest(prompt); diff --git a/models/spring-ai-vertex-ai-palm2/src/test/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatGenerationClientIT.java b/models/spring-ai-vertex-ai-palm2/src/test/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatGenerationClientIT.java index f924cb86e..95066caec 100644 --- a/models/spring-ai-vertex-ai-palm2/src/test/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatGenerationClientIT.java +++ b/models/spring-ai-vertex-ai-palm2/src/test/java/org/springframework/ai/vertexai/palm2/VertexAiPaLm2ChatGenerationClientIT.java @@ -62,7 +62,7 @@ class VertexAiPaLm2ChatGenerationClientIT { SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource); Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice)); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); assertThat(response.getResult().getOutput().getContent()).contains("Bartholomew"); } @@ -79,7 +79,7 @@ class VertexAiPaLm2ChatGenerationClientIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "ice cream flavors.", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = this.client.execute(prompt).getResult(); + Generation generation = this.client.call(prompt).getResult(); List list = outputConverter.convert(generation.getOutput().getContent()); assertThat(list).hasSize(5); @@ -98,7 +98,7 @@ class VertexAiPaLm2ChatGenerationClientIT { PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("subject", "an array of numbers from 1 to 9 under they key name 'numbers'", "format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); Map result = outputConverter.convert(generation.getOutput().getContent()); assertThat(result.get("numbers")).isEqualTo(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); @@ -120,7 +120,7 @@ class VertexAiPaLm2ChatGenerationClientIT { """; PromptTemplate promptTemplate = new PromptTemplate(template, Map.of("format", format)); Prompt prompt = new Prompt(promptTemplate.createMessage()); - Generation generation = client.execute(prompt).getResult(); + Generation generation = client.call(prompt).getResult(); ActorsFilmsRecord actorsFilms = outputConverter.convert(generation.getOutput().getContent()); assertThat(actorsFilms.actor()).isEqualTo("Tom Hanks"); diff --git a/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/WatsonxAiChatConnector.java b/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/WatsonxAiChatConnector.java index a8306585e..70913cd25 100644 --- a/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/WatsonxAiChatConnector.java +++ b/models/spring-ai-watsonx-ai/src/main/java/org/springframework/ai/watsonx/WatsonxAiChatConnector.java @@ -18,9 +18,9 @@ package org.springframework.ai.watsonx; import java.util.List; import java.util.Map; +import org.springframework.ai.chat.connector.ChatConnector; import reactor.core.publisher.Flux; -import org.springframework.ai.chat.connector.ChatConnector; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; @@ -76,7 +76,7 @@ public class WatsonxAiChatConnector implements ChatConnector, StreamingChatClien } @Override - public ChatResponse execute(Prompt prompt) { + public ChatResponse call(Prompt prompt) { WatsonxAiRequest request = request(prompt); diff --git a/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatConnectorTest.java b/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatConnectorTest.java index 153c45937..026a52fa3 100644 --- a/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatConnectorTest.java +++ b/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatConnectorTest.java @@ -155,7 +155,7 @@ public class WatsonxAiChatConnectorTest { } @Test - public void testExecuteMethod() { + public void testCallMethod() { WatsonxAiApi mockChatApi = mock(WatsonxAiApi.class); WatsonxAiChatConnector client = new WatsonxAiChatConnector(mockChatApi); @@ -177,7 +177,7 @@ public class WatsonxAiChatConnectorTest { Map.of("warnings", List.of(Map.of("message", "the message", "id", "disclaimer_warning"))))); ChatResponse expectedResponse = new ChatResponse(List.of(expectedGenerator)); - ChatResponse response = client.execute(prompt); + ChatResponse response = client.call(prompt); Assert.assertEquals(expectedResponse.getResults().size(), response.getResults().size()); Assert.assertEquals(expectedResponse.getResult().getOutput(), response.getResult().getOutput()); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java index 400cda614..cbf5ee451 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java @@ -2,16 +2,28 @@ package org.springframework.ai.chat; import org.springframework.ai.chat.connector.ChatConnector; import org.springframework.ai.chat.messages.Media; +import org.springframework.ai.chat.messages.Message; +import org.springframework.ai.chat.prompt.ChatOptions; +import org.springframework.ai.chat.prompt.Prompt; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.Resource; +import org.springframework.util.MimeType; +import reactor.core.publisher.Flux; +import java.net.URL; import java.util.*; +import java.util.function.Consumer; /** + * todo follow WebClient -> DefaultWebClient + * todo make sure ChatConnector also supports call(Prompt) and then mark as deprecated + * * @author Mark Pollack - * @author Christian Tsolov + * @author Christian Tzolov * @author Josh Long */ + public class ChatClient { private final ChatConnector connector; @@ -23,7 +35,7 @@ public class ChatClient { private final List media; public ChatClient(ChatConnector connector, String defaultSystemPrompt, String defaultUserPrompt, - List defaultFunctions, List defaultMedia) { + List defaultFunctions, List defaultMedia) { this.connector = connector; this.userPrompt = defaultUserPrompt; this.systemPrompt = defaultSystemPrompt; @@ -36,14 +48,41 @@ public class ChatClient { return new ChatClientRequest(this.userPrompt, this.systemPrompt, this.functions, this.media); } - public ChatClientRequest userPrompt(String userPrompt, Map params) { - var ccr = new ChatClientRequest(userPrompt, this.systemPrompt, this.functions, this.media); - ccr.userPromptParams(params); - return ccr; + public ChatResponse call(Prompt prompt) { + return null; } - public ChatClientRequest userPrompt(String userPrompt) { - return new ChatClientRequest(userPrompt, this.systemPrompt, this.functions, this.media); + public static class UserSpec { + + + public UserSpec media(List media) { + return this; + } + + public UserSpec media(URL url, MimeType mimeType) { + return this; + } + + public UserSpec media(Resource resource, MimeType type) { + return this; + } + + public UserSpec media(Media... m) { + return this; + } + + public UserSpec params(Map p) { + return this; + } + + public UserSpec param(String k, String v) { + return this; + } + } + + + public ChatClientRequest user(Consumer consumer) { + return null; } public static class ChatClientRequest { @@ -60,15 +99,15 @@ public class ChatClient { private final Map systemPromptParams = new HashMap<>(); - List media() { + List userMedia() { return this.media; } - String systemPrompt() { + String systemText() { return this.systemPrompt; } - String userPrompt() { + String userText() { return this.userPrompt; } @@ -83,53 +122,119 @@ public class ChatClient { this.media.addAll(media); } - public ChatClientRequest userPromptParam(String key, String value) { - this.userPromptParams.put(key, value); - return this; + public ChatClientRequest messages(Message... messages) { + return null; } +// +// public ChatClientRequest userParam(String key, String value) { +// this.userPromptParams.put(key, value); +// return this; +// } +// +// public ChatClientRequest systemParam(String key, String value) { +// this.systemPromptParams.put(key, value); +// return this; +// } - public ChatClientRequest systemPromptParam(String key, String value) { - this.systemPromptParams.put(key, value); + public ChatClientRequest options(T options) { return this; } +// +// public ChatClientRequest systemParams(Map systemPromptParams) { +// this.systemPromptParams.putAll(systemPromptParams); +// return this; +// } +// +// public ChatClientRequest userParams(Map userPromptParams) { +// this.userPromptParams.putAll(userPromptParams); +// return this; +// } +// +// public ChatClientRequest userText(Resource resource) { +// return userText(resource, Charset.defaultCharset()); +// } - public ChatClientRequest systemPromptParams(Map systemPromptParams) { - this.systemPromptParams.putAll(systemPromptParams); - return this; - } - - public ChatClientRequest userPromptParams(Map userPromptParams) { - this.userPromptParams.putAll(userPromptParams); - return this; - } - - public ChatClientRequest userPrompt(String userPrompt) { - this.userPrompt = userPrompt; - return this; - } - - public ChatClientRequest systemPrompt(String systemPrompt) { - this.systemPrompt = systemPrompt; - return this; - } - - public ChatClientRequest media(Media... media) { - this.media.addAll(Arrays.asList(media)); - return this; - } +// public ChatClientRequest userText(Resource resource, Charset charset) { +// try { +// this.userText(resource.getContentAsString(charset)); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return this; +// } +// +// +// public ChatClientRequest userText(String userPrompt) { +// this.userPrompt = userPrompt; +// return this; +// } +// +// public ChatClientRequest systemText(Resource systemPrompt) { +// return systemText(systemPrompt, Charset.defaultCharset()); +// } +// +// public ChatClientRequest systemText(Resource systemPrompt, Charset charset) { +// try { +// this.systemText(systemPrompt.getContentAsString(charset)); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return this; +// } +// +// public ChatClientRequest systemText(String systemPrompt) { +// this.systemPrompt = systemPrompt; +// return this; +// } +// +// public ChatClientRequest userMedia(Media... media) { +// this.media.addAll(Arrays.asList(media)); +// return this; +// } public ChatClientRequest functions(String... functions) { this.functions.addAll(Arrays.asList(functions)); return this; } - public T chat(Class clzz) { + + public static class ChatResponseSpec { + + public T single(ParameterizedTypeReference t) { + return null; + } + + + public T single(Class clzz) { + return null; + } + + public ChatResponse chatResponse() { + return null; + } + + public Flux stream(Class t) { + return null; + } + + public Flux stream(ParameterizedTypeReference t) { + return Flux.empty(); + } + + public Collection list(Class clzz) { + return null; + } + + public Collection list(ParameterizedTypeReference> ptr) { + return List.of(); + } + + } + + public ChatResponseSpec chat() { return null; } - public T chat(ParameterizedTypeReference clzz) { - return null; - } } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java new file mode 100644 index 000000000..7737e311a --- /dev/null +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java @@ -0,0 +1,57 @@ +package org.springframework.ai.chat; + + +import org.springframework.ai.chat.connector.ChatConnector; +import org.springframework.ai.chat.messages.Media; +import org.springframework.ai.chat.prompt.Prompt; + +import java.util.List; +import java.util.function.Consumer; + +public class DefaultChatClient implements ChatClient { + + private final ChatConnector connector; + + private final String userPrompt, systemPrompt; + + private final List functions; + + private final List media; + + public DefaultChatClient(ChatConnector connector, String defaultSystemPrompt, String defaultUserPrompt, + List defaultFunctions, List defaultMedia) { + this.connector = connector; + this.userPrompt = defaultUserPrompt; + this.systemPrompt = defaultSystemPrompt; + this.functions = defaultFunctions; + this.media = defaultMedia; + + } + + @Override + public ChatClientRequest build() { + return new ChatClientRequest(this.userPrompt, this.systemPrompt, this.functions, this.media); + } + + @Override + public ChatResponse call(Prompt prompt) { + return null; + } + + @Override + public ChatResponseSpec chat() { + return null; + } + + + public ChatClientRequest user(Consumer consumer) { + return null; + } + + public static ChatClientBuilder builder(ChatConnector connector) { + return new ChatClientBuilder(connector); + } + +} + + diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/connector/ChatConnector.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/connector/ChatConnector.java index 0af5bb033..b83ae1b95 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/connector/ChatConnector.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/connector/ChatConnector.java @@ -30,6 +30,6 @@ public interface ChatConnector { * return (generation != null) ? generation.getOutput().getContent() : ""; } */ - ChatResponse execute(Prompt prompt); + ChatResponse call(Prompt prompt); } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/service/PromptTransformingChatService.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/service/PromptTransformingChatService.java index c7fc3b73a..4b324afa4 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/service/PromptTransformingChatService.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/service/PromptTransformingChatService.java @@ -46,8 +46,8 @@ public class PromptTransformingChatService implements ChatService { private List chatServiceListeners; public PromptTransformingChatService(ChatConnector chatConnector, List retrievers, - List documentPostProcessors, List augmentors, - List chatServiceListeners) { + List documentPostProcessors, List augmentors, + List chatServiceListeners) { Objects.requireNonNull(chatConnector, "chatConnector must not be null"); this.chatConnector = chatConnector; this.retrievers = retrievers; @@ -86,7 +86,7 @@ public class PromptTransformingChatService implements ChatService { } // Perform generation - ChatResponse chatResponse = this.chatConnector.execute(chatServiceContext.getPrompt()); + ChatResponse chatResponse = this.chatConnector.call(chatServiceContext.getPrompt()); // Invoke Listeners onComplete ChatServiceResponse chatServiceResponse = new ChatServiceResponse(chatServiceContext, chatResponse); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java index e6d898b08..6b0d567b5 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/evaluation/RelevancyEvaluator.java @@ -52,7 +52,7 @@ public class RelevancyEvaluator implements Evaluator { Message message = promptTemplate .createMessage(Map.of("query", query, "response", response, "context", context)); - ChatResponse chatResponse = this.chatConnector.execute(new Prompt(message, this.chatOptions)); + ChatResponse chatResponse = this.chatConnector.call(new Prompt(message, this.chatOptions)); var evaluationResponse = chatResponse.getResult().getOutput().getContent(); boolean passing = false; 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 7b695ca32..58bc2a852 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 @@ -64,7 +64,7 @@ public class KeywordMetadataEnricher implements DocumentTransformer { var template = new PromptTemplate(String.format(KEYWORDS_TEMPLATE, keywordCount)); Prompt prompt = template.create(Map.of(CONTEXT_STR_PLACEHOLDER, document.getContent())); - String keywords = this.chatConnector.execute(prompt).getResult().getOutput().getContent(); + String keywords = this.chatConnector.call(prompt).getResult().getOutput().getContent(); 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 f50aaf543..020252d0c 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 @@ -81,7 +81,7 @@ public class SummaryMetadataEnricher implements DocumentTransformer { } public SummaryMetadataEnricher(ChatConnector chatConnector, List summaryTypes, String summaryTemplate, - MetadataMode metadataMode) { + MetadataMode metadataMode) { Assert.notNull(chatConnector, "ChatConnector must not be null"); Assert.hasText(summaryTemplate, "Summary template must not be empty"); @@ -101,7 +101,7 @@ public class SummaryMetadataEnricher implements DocumentTransformer { Prompt prompt = new PromptTemplate(this.summaryTemplate) .create(Map.of(CONTEXT_STR_PLACEHOLDER, documentContext)); - documentSummaries.add(this.chatConnector.execute(prompt).getResult().getOutput().getContent()); + documentSummaries.add(this.chatConnector.call(prompt).getResult().getOutput().getContent()); } for (int i = 0; i < documentSummaries.size(); i++) { diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatConnectorTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatConnectorTests.java index 9083c4c75..b50390aad 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatConnectorTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/ChatConnectorTests.java @@ -65,7 +65,7 @@ class ChatConnectorTests { // ChatResponse response = spy(new // ChatResponse(Collections.singletonList(generation))); - doCallRealMethod().when(mockClient).execute(anyString()); + doCallRealMethod().when(mockClient).call(anyString()); doAnswer(invocationOnMock -> { @@ -76,12 +76,12 @@ class ChatConnectorTests { return response; - }).when(mockClient).execute(any(Prompt.class)); + }).when(mockClient).call(any(Prompt.class)); - assertThat(mockClient.execute(userMessage)).isEqualTo(responseMessage); + assertThat(mockClient.call(userMessage)).isEqualTo(responseMessage); - verify(mockClient, times(1)).execute(eq(userMessage)); - verify(mockClient, times(1)).execute(isA(Prompt.class)); + verify(mockClient, times(1)).call(eq(userMessage)); + verify(mockClient, times(1)).call(isA(Prompt.class)); verify(response, times(1)).getResult(); verify(generation, times(1)).getOutput(); verify(mockAssistantMessage, times(1)).getContent(); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/memory/ChatMemoryTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/memory/ChatMemoryTests.java index 557619610..1715121cc 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/memory/ChatMemoryTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/memory/ChatMemoryTests.java @@ -48,7 +48,7 @@ import static org.mockito.Mockito.when; public class ChatMemoryTests { @Mock - ChatConnector chatConnector; + ChatConnector chatConnector; @Mock StreamingChatClient streamingChatClient; @@ -90,7 +90,7 @@ public class ChatMemoryTests { public void chatClientUserMessages(PromptTransformingChatService chatService, ChatMemory chatHistory) { - when(chatConnector.execute(promptCaptor.capture())) + when(chatConnector.call(promptCaptor.capture())) .thenReturn(new ChatResponse(List.of(new Generation("assistant:1")))) .thenReturn(new ChatResponse(List.of(new Generation("assistant:2")))) .thenReturn(new ChatResponse(List.of(new Generation("assistant:3")))); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfiguration.java index 5d1a6d0d1..ba4bee195 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/anthropic/AnthropicAutoConfiguration.java @@ -58,8 +58,8 @@ public class AnthropicAutoConfiguration { @Bean @ConditionalOnMissingBean public AnthropicChatConnector anthropicChatClient(AnthropicApi anthropicApi, AnthropicChatProperties chatProperties, - RetryTemplate retryTemplate, FunctionCallbackContext functionCallbackContext, - List toolFunctionCallbacks) { + RetryTemplate retryTemplate, FunctionCallbackContext functionCallbackContext, + List toolFunctionCallbacks) { if (!CollectionUtils.isEmpty(toolFunctionCallbacks)) { chatProperties.getOptions().getFunctionCallbacks().addAll(toolFunctionCallbacks); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/azure/openai/AzureOpenAiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/azure/openai/AzureOpenAiAutoConfiguration.java index f994191c1..2c78dc45a 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/azure/openai/AzureOpenAiAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/azure/openai/AzureOpenAiAutoConfiguration.java @@ -59,8 +59,8 @@ public class AzureOpenAiAutoConfiguration { @ConditionalOnProperty(prefix = AzureOpenAiChatProperties.CONFIG_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) public AzureOpenAiChatConnector azureOpenAiChatClient(OpenAIClient openAIClient, - AzureOpenAiChatProperties chatProperties, List toolFunctionCallbacks, - FunctionCallbackContext functionCallbackContext) { + AzureOpenAiChatProperties chatProperties, List toolFunctionCallbacks, + FunctionCallbackContext functionCallbackContext) { if (!CollectionUtils.isEmpty(toolFunctionCallbacks)) { chatProperties.getOptions().getFunctionCallbacks().addAll(toolFunctionCallbacks); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfiguration.java index 54cfbbd21..42a985ddb 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic/BedrockAnthropicChatAutoConfiguration.java @@ -60,7 +60,7 @@ public class BedrockAnthropicChatAutoConfiguration { @Bean @ConditionalOnBean(AnthropicChatBedrockApi.class) public BedrockAnthropicChatConnector anthropicChatClient(AnthropicChatBedrockApi anthropicApi, - BedrockAnthropicChatProperties properties) { + BedrockAnthropicChatProperties properties) { return new BedrockAnthropicChatConnector(anthropicApi, properties.getOptions()); } diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfiguration.java index 70d985107..ad0eae187 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/anthropic3/BedrockAnthropic3ChatAutoConfiguration.java @@ -60,7 +60,7 @@ public class BedrockAnthropic3ChatAutoConfiguration { @Bean @ConditionalOnBean(Anthropic3ChatBedrockApi.class) public BedrockAnthropic3ChatConnector anthropic3ChatClient(Anthropic3ChatBedrockApi anthropicApi, - BedrockAnthropic3ChatProperties properties) { + BedrockAnthropic3ChatProperties properties) { return new BedrockAnthropic3ChatConnector(anthropicApi, properties.getOptions()); } diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfiguration.java index b9d392c68..911119a8d 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/cohere/BedrockCohereChatAutoConfiguration.java @@ -58,7 +58,7 @@ public class BedrockCohereChatAutoConfiguration { @Bean @ConditionalOnBean(CohereChatBedrockApi.class) public BedrockCohereChatConnector cohereChatClient(CohereChatBedrockApi cohereChatApi, - BedrockCohereChatProperties properties) { + BedrockCohereChatProperties properties) { return new BedrockCohereChatConnector(cohereChatApi, properties.getOptions()); } diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfiguration.java index aa13ec0de..9ab781038 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/llama/BedrockLlamaChatAutoConfiguration.java @@ -60,7 +60,7 @@ public class BedrockLlamaChatAutoConfiguration { @Bean @ConditionalOnBean(LlamaChatBedrockApi.class) public BedrockLlamaChatConnector llamaChatClient(LlamaChatBedrockApi llamaApi, - BedrockLlamaChatProperties properties) { + BedrockLlamaChatProperties properties) { return new BedrockLlamaChatConnector(llamaApi, properties.getOptions()); } diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfiguration.java index 3fdd4b8d1..842897d73 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/bedrock/titan/BedrockTitanChatAutoConfiguration.java @@ -58,7 +58,7 @@ public class BedrockTitanChatAutoConfiguration { @Bean @ConditionalOnBean(TitanChatBedrockApi.class) public BedrockTitanChatConnector titanChatClient(TitanChatBedrockApi titanChatApi, - BedrockTitanChatProperties properties) { + BedrockTitanChatProperties properties) { return new BedrockTitanChatConnector(titanChatApi, properties.getOptions()); } diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfiguration.java index a6480ec50..fb622f713 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/mistralai/MistralAiAutoConfiguration.java @@ -70,9 +70,9 @@ public class MistralAiAutoConfiguration { @ConditionalOnProperty(prefix = MistralAiChatProperties.CONFIG_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) public MistralAiChatConnector mistralAiChatClient(MistralAiCommonProperties commonProperties, - MistralAiChatProperties chatProperties, RestClient.Builder restClientBuilder, - List toolFunctionCallbacks, FunctionCallbackContext functionCallbackContext, - RetryTemplate retryTemplate, ResponseErrorHandler responseErrorHandler) { + MistralAiChatProperties chatProperties, RestClient.Builder restClientBuilder, + List toolFunctionCallbacks, FunctionCallbackContext functionCallbackContext, + RetryTemplate retryTemplate, ResponseErrorHandler responseErrorHandler) { var mistralAiApi = mistralAiApi(chatProperties.getApiKey(), commonProperties.getApiKey(), chatProperties.getBaseUrl(), commonProperties.getBaseUrl(), restClientBuilder, responseErrorHandler); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java index 644f182bc..93dd8e71e 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.java @@ -55,9 +55,9 @@ public class OpenAiAutoConfiguration { @ConditionalOnProperty(prefix = OpenAiChatProperties.CONFIG_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) public OpenAiChatConnector openAiChatClient(OpenAiConnectionProperties commonProperties, - OpenAiChatProperties chatProperties, RestClient.Builder restClientBuilder, - List toolFunctionCallbacks, FunctionCallbackContext functionCallbackContext, - RetryTemplate retryTemplate, ResponseErrorHandler responseErrorHandler) { + OpenAiChatProperties chatProperties, RestClient.Builder restClientBuilder, + List toolFunctionCallbacks, FunctionCallbackContext functionCallbackContext, + RetryTemplate retryTemplate, ResponseErrorHandler responseErrorHandler) { var openAiApi = openAiApi(chatProperties.getBaseUrl(), commonProperties.getBaseUrl(), chatProperties.getApiKey(), commonProperties.getApiKey(), restClientBuilder, responseErrorHandler); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java index 0ac36e124..6874b04bf 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java @@ -75,8 +75,8 @@ public class VertexAiGeminiAutoConfiguration { @Bean @ConditionalOnMissingBean public VertexAiGeminiChatConnector vertexAiGeminiChat(VertexAI vertexAi, - VertexAiGeminiChatProperties chatProperties, List toolFunctionCallbacks, - ApplicationContext context) { + VertexAiGeminiChatProperties chatProperties, List toolFunctionCallbacks, + ApplicationContext context) { FunctionCallbackContext functionCallbackContext = springAiFunctionManager(context); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPalm2AutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPalm2AutoConfiguration.java index 6005087b9..f80e846d4 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPalm2AutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPalm2AutoConfiguration.java @@ -48,7 +48,7 @@ public class VertexAiPalm2AutoConfiguration { @ConditionalOnProperty(prefix = VertexAiPlam2ChatProperties.CONFIG_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) public VertexAiPaLm2ChatConnector vertexAiChatClient(VertexAiPaLm2Api vertexAiApi, - VertexAiPlam2ChatProperties chatProperties) { + VertexAiPlam2ChatProperties chatProperties) { return new VertexAiPaLm2ChatConnector(vertexAiApi, chatProperties.getOptions()); } 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 c0f51dd41..911d16fca 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 @@ -51,7 +51,7 @@ public class AnthropicAutoConfigurationIT { void generate() { contextRunner.run(context -> { AnthropicChatConnector chatClient = context.getBean(AnthropicChatConnector.class); - String response = chatClient.execute("Hello"); + String response = chatClient.call("Hello"); assertThat(response).isNotEmpty(); logger.info("Response: " + response); }); 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 5ec8fa185..2e5c10e52 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 @@ -66,14 +66,14 @@ class FunctionCallWithFunctionBeanIT { var userMessage = new UserMessage( "What's the weather like in San Francisco, in Paris, France and in Tokyo, Japan? Return the temperature in Celsius."); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), AnthropicChatOptions.builder().withFunction("weatherFunction").build())); logger.info("Response: {}", response); assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); - response = chatClient.execute(new Prompt(List.of(userMessage), + response = chatClient.call(new Prompt(List.of(userMessage), AnthropicChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); 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 76f5d1b4c..c0f568f2f 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 @@ -66,7 +66,7 @@ public class FunctionCallWithPromptFunctionIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions)); logger.info("Response: {}", response); 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 f1185b713..56f6ab5a4 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 @@ -21,11 +21,11 @@ import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.springframework.ai.azure.openai.AzureOpenAiChatConnector; import org.springframework.ai.chat.messages.AssistantMessage; import reactor.core.publisher.Flux; import org.springframework.ai.autoconfigure.azure.openai.AzureOpenAiAutoConfiguration; -import org.springframework.ai.azure.openai.AzureOpenAiChatConnector; import org.springframework.ai.azure.openai.AzureOpenAiEmbeddingClient; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; @@ -78,7 +78,7 @@ public class AzureOpenAiAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { AzureOpenAiChatConnector chatClient = context.getBean(AzureOpenAiChatConnector.class); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).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 656c71586..d8be10bf6 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 @@ -62,14 +62,14 @@ class FunctionCallWithFunctionBeanIT { UserMessage userMessage = new UserMessage( "What's the weather like in San Francisco, Paris and in Tokyo? Use Multi-turn function calling."); - ChatResponse response = chatConnector.execute(new Prompt(List.of(userMessage), + ChatResponse response = chatConnector.call(new Prompt(List.of(userMessage), AzureOpenAiChatOptions.builder().withFunction("weatherFunction").build())); logger.info("Response: {}", response); assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); - response = chatConnector.execute(new Prompt(List.of(userMessage), + response = chatConnector.call(new Prompt(List.of(userMessage), AzureOpenAiChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); 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 90b1b075a..12dd068ce 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 @@ -61,7 +61,7 @@ public class FunctionCallWithFunctionWrapperIT { UserMessage userMessage = new UserMessage( "What's the weather like in San Francisco, Paris and in Tokyo?"); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), AzureOpenAiChatOptions.builder().withFunction("WeatherInfo").build())); logger.info("Response: {}", response); 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 e8c026e27..4bdd1b2a9 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 @@ -64,7 +64,7 @@ public class FunctionCallWithPromptFunctionIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions)); logger.info("Response: {}", response); 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 19769c5f1..1c9157c8a 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 @@ -70,7 +70,7 @@ public class BedrockAnthropicChatAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { BedrockAnthropicChatConnector anthropicChatClient = context.getBean(BedrockAnthropicChatConnector.class); - ChatResponse response = anthropicChatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = anthropicChatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).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 a57c659c7..20fcef58c 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 { public void chatCompletion() { contextRunner.run(context -> { BedrockAnthropic3ChatConnector anthropicChatClient = context.getBean(BedrockAnthropic3ChatConnector.class); - ChatResponse response = anthropicChatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = anthropicChatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).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 3f0b5a244..c52e48604 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 @@ -73,7 +73,7 @@ public class BedrockCohereChatAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { BedrockCohereChatConnector cohereChatClient = context.getBean(BedrockCohereChatConnector.class); - ChatResponse response = cohereChatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = cohereChatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); }); } 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 217693d53..5e948e620 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 { contextRunner.run(context -> { BedrockAi21Jurassic2ChatConnector ai21Jurassic2ChatClient = context .getBean(BedrockAi21Jurassic2ChatConnector.class); - ChatResponse response = ai21Jurassic2ChatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = ai21Jurassic2ChatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).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 8a54a129f..971f8fe5f 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 @@ -72,7 +72,7 @@ public class BedrockLlamaChatAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { BedrockLlamaChatConnector llamaChatClient = context.getBean(BedrockLlamaChatConnector.class); - ChatResponse response = llamaChatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = llamaChatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).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 c8b813d14..776214789 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 @@ -71,7 +71,7 @@ public class BedrockTitanChatAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { BedrockTitanChatConnector chatClient = context.getBean(BedrockTitanChatConnector.class); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); }); } 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 c403d092c..282cd8e23 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 @@ -55,7 +55,7 @@ public class MistralAiAutoConfigurationIT { void generate() { contextRunner.run(context -> { MistralAiChatConnector client = context.getBean(MistralAiChatConnector.class); - String response = client.execute("Hello"); + String response = client.call("Hello"); assertThat(response).isNotEmpty(); logger.info("Response: " + response); }); 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 cdc2cab93..50d00d3d1 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 @@ -63,7 +63,7 @@ class PaymentStatusBeanIT { MistralAiChatConnector chatClient = context.getBean(MistralAiChatConnector.class); ChatResponse response = chatClient - .execute(new Prompt(List.of(new UserMessage("What's the status of my transaction with id T1001?")), + .call(new Prompt(List.of(new UserMessage("What's the status of my transaction with id T1001?")), MistralAiChatOptions.builder() .withFunction("retrievePaymentStatus") .withFunction("retrievePaymentDate") 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 deb2d0c14..cad3ebeb7 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 @@ -70,7 +70,7 @@ class PaymentStatusBeanOpenAiIT { OpenAiChatConnector chatClient = context.getBean(OpenAiChatConnector.class); ChatResponse response = chatClient - .execute(new Prompt(List.of(new UserMessage("What's the status of my transaction with id T1001?")), + .call(new Prompt(List.of(new UserMessage("What's the status of my transaction with id T1001?")), OpenAiChatOptions.builder() .withFunction("retrievePaymentStatus") .withFunction("retrievePaymentDate") 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 63f55f3f0..8b9ff3676 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 @@ -86,7 +86,7 @@ public class PaymentStatusPromptIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions)); logger.info("Response: {}", response); 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 207cfd097..46353ad6c 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 @@ -79,7 +79,7 @@ public class WeatherServicePromptIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions)); logger.info("Response: {}", response); 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 e796fba7b..593732551 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 @@ -105,7 +105,7 @@ public class OllamaChatAutoConfigurationIT { public void chatCompletion() { contextRunner.run(context -> { OllamaChatConnector chatClient = context.getBean(OllamaChatConnector.class); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage, systemMessage))); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage, systemMessage))); assertThat(response.getResult().getOutput().getContent()).contains("Blackbeard"); }); } 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 a5410ff7d..741d98bb2 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 @@ -56,7 +56,7 @@ public class OpenAiAutoConfigurationIT { void generate() { contextRunner.run(context -> { OpenAiChatConnector client = context.getBean(OpenAiChatConnector.class); - String response = client.execute("Hello"); + String response = client.call("Hello"); assertThat(response).isNotEmpty(); logger.info("Response: " + response); }); 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 79c9cb51b..501d82db8 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 @@ -66,7 +66,7 @@ public class FunctionCallbackInPromptIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions)); logger.info("Response: {}", response); 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 d0844f60d..dd81f4c1e 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 @@ -65,7 +65,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { // Test weatherFunction UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, Tokyo, and Paris?"); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withFunction("weatherFunction").build())); logger.info("Response: {}", response); @@ -73,7 +73,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); // Test weatherFunctionTwo - response = chatClient.execute(new Prompt(List.of(userMessage), + response = chatClient.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withFunction("weatherFunctionTwo").build())); logger.info("Response: {}", response); @@ -96,7 +96,7 @@ class FunctionCallbackWithPlainFunctionBeanIT { .withFunction("weatherFunction") .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(userMessage), functionOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), functionOptions)); logger.info("Response: {}", response); }); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWrapperIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWrapperIT.java index f03ef598c..d4d1b40c6 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWrapperIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/openai/tool/FunctionCallbackWrapperIT.java @@ -62,7 +62,7 @@ public class FunctionCallbackWrapperIT { UserMessage userMessage = new UserMessage("What's the weather like in San Francisco, Tokyo, and Paris?"); - ChatResponse response = chatClient.execute( + ChatResponse response = chatClient.call( new Prompt(List.of(userMessage), OpenAiChatOptions.builder().withFunction("WeatherInfo").build())); 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 955b43a1b..16f073bb8 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 @@ -47,7 +47,7 @@ public class VertexAiGeminiAutoConfigurationIT { void generate() { contextRunner.run(context -> { VertexAiGeminiChatConnector client = context.getBean(VertexAiGeminiChatConnector.class); - String response = client.execute("Hello"); + String response = client.call("Hello"); assertThat(response).isNotEmpty(); logger.info("Response: " + response); }); 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 028fd45c8..eb84abaab 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 @@ -72,7 +72,7 @@ class FunctionCallWithFunctionBeanIT { // Please let me know how many function calls you've preformed."); "What's the weather like in San Francisco, Paris and in Tokyo?"); - ChatResponse response = chatClient.execute(new Prompt(List.of(systemMessage, userMessage), + ChatResponse response = chatClient.call(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().withFunction("weatherFunction").build())); // ChatResponse response = chatConnector.call(new // Prompt(List.of(userMessage), @@ -84,7 +84,7 @@ class FunctionCallWithFunctionBeanIT { Thread.sleep(10000); - response = chatClient.execute(new Prompt(List.of(systemMessage, userMessage), + response = chatClient.call(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().withFunction("weatherFunction3").build())); logger.info("Response: {}", response); @@ -92,7 +92,7 @@ class FunctionCallWithFunctionBeanIT { assertThat(response.getResult().getOutput().getContent()).contains("30", "10", "15"); response = chatClient - .execute(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().build())); + .call(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().build())); logger.info("Response: {}", response); 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 67df3f88e..3410f73ff 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 @@ -67,7 +67,7 @@ public class FunctionCallWithFunctionWrapperIT { """); var userMessage = new UserMessage("What's the weather like in San Francisco, Paris and in Tokyo?"); - ChatResponse response = chatClient.execute(new Prompt(List.of(systemMessage, userMessage), + ChatResponse response = chatClient.call(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().withFunction("WeatherInfo").build())); logger.info("Response: {}", response); 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 259732523..daa4bdaf0 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 @@ -72,7 +72,7 @@ public class FunctionCallWithPromptFunctionIT { .build())) .build(); - ChatResponse response = chatClient.execute(new Prompt(List.of(systemMessage, userMessage), promptOptions)); + ChatResponse response = chatClient.call(new Prompt(List.of(systemMessage, userMessage), promptOptions)); logger.info("Response: {}", response); @@ -80,7 +80,7 @@ public class FunctionCallWithPromptFunctionIT { // Verify that no function call is made. response = chatClient - .execute(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().build())); + .call(new Prompt(List.of(systemMessage, userMessage), VertexAiGeminiChatOptions.builder().build())); logger.info("Response: {}", response); diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPaLm2AutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPaLm2AutoConfigurationIT.java index b7c079b06..c9fdef90e 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPaLm2AutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vertexai/palm2/VertexAiPaLm2AutoConfigurationIT.java @@ -50,7 +50,7 @@ public class VertexAiPaLm2AutoConfigurationIT { contextRunner.run(context -> { VertexAiPaLm2ChatConnector client = context.getBean(VertexAiPaLm2ChatConnector.class); - String response = client.execute("Hello"); + String response = client.call("Hello"); assertThat(response).isNotEmpty(); logger.info("Response: " + response); 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 9ac424dcf..191eab350 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 @@ -68,12 +68,12 @@ public class BasicEvaluationTest { } Message userMessage = userPromptTemplate.createMessage(); Prompt prompt = new Prompt(List.of(userMessage, systemMessage)); - String yesOrNo = openAiChatConnector.execute(prompt).getResult().getOutput().getContent(); + String yesOrNo = openAiChatConnector.call(prompt).getResult().getOutput().getContent(); logger.info("Is Answer related to question: " + yesOrNo); if (yesOrNo.equalsIgnoreCase("no")) { SystemMessage notRelatedSystemMessage = new SystemMessage(qaEvaluatorNotRelatedResource); prompt = new Prompt(List.of(userMessage, notRelatedSystemMessage)); - String reasonForFailure = openAiChatConnector.execute(prompt).getResult().getOutput().getContent(); + String reasonForFailure = openAiChatConnector.call(prompt).getResult().getOutput().getContent(); fail(reasonForFailure); } else { 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 2ef86212e..66b4369a9 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 @@ -88,7 +88,7 @@ public class CricketWorldCupHanaController { var userMessage = new UserMessage(message); Prompt prompt = new Prompt(List.of(similarDocsMessage, userMessage)); - String generation = chatConnector.execute(prompt).getResult().getOutput().getContent(); + String generation = chatConnector.call(prompt).getResult().getOutput().getContent(); logger.info("Generation: {}", generation); return Map.of("generation", generation); }