From a107e313fc6260fc7d9d15524789b9b66489accc Mon Sep 17 00:00:00 2001 From: Mark Pollack Date: Mon, 19 Feb 2024 12:24:16 -0500 Subject: [PATCH] Fixes #219 - Remove dependency cycles --- .../azure/openai/AzureOpenAiChatClient.java | 3 +- .../azure/openai/AzureOpenAiChatOptions.java | 2 +- .../AzureOpenAiChatClientMetadataTests.java | 10 ++--- .../anthropic/AnthropicChatOptions.java | 2 +- .../anthropic/BedrockAnthropicChatClient.java | 2 +- .../cohere/BedrockCohereChatClient.java | 2 +- .../cohere/BedrockCohereChatOptions.java | 2 +- .../llama2/BedrockLlama2ChatClient.java | 2 +- .../llama2/BedrockLlama2ChatOptions.java | 2 +- .../bedrock/titan/BedrockTitanChatClient.java | 2 +- .../titan/BedrockTitanChatOptions.java | 2 +- .../ai/ollama/OllamaChatClient.java | 2 +- .../ai/ollama/api/OllamaOptions.java | 2 +- .../ai/ollama/OllamaChatClientIT.java | 2 +- .../ai/ollama/OllamaChatRequestTests.java | 4 +- .../ai/openai/OpenAiChatClient.java | 2 +- .../ai/openai/OpenAiChatOptions.java | 2 +- .../metadata/OpenAiChatResponseMetadata.java | 8 ++-- .../ai/vertex/VertexAiChatClient.java | 2 +- .../ai/vertex/VertexAiChatOptions.java | 2 +- .../ai/vertex/VertexAiChatRequestTests.java | 4 +- .../chat/metadata/ChatResponseMetadata.java | 4 +- ...ractRateLimit.java => EmptyRateLimit.java} | 4 +- .../{AbstractUsage.java => EmptyUsage.java} | 4 +- .../ai/chat/metadata/RateLimit.java | 3 -- .../ai/chat/metadata/Usage.java | 3 -- .../ai/chat/{ => prompt}/ChatOptions.java | 2 +- .../chat/{ => prompt}/ChatOptionsBuilder.java | 2 +- .../ai/chat/prompt/Prompt.java | 1 - .../function/AbstractFunctionCallback.java | 12 ------ .../ai/vectorstore/SearchRequest.java | 3 +- .../ai/vectorstore/filter/Filter.java | 19 +--------- .../FilterExpressionConverter.java | 2 +- .../ai/vectorstore/filter/FilterHelper.java | 1 - .../AbstractFilterExpressionConverter.java | 1 + .../vectorstore/filter/FilterHelperTests.java | 38 +++++++++---------- .../filter/SearchRequestTests.java | 2 +- .../MilvusFilterExpressionConverterTests.java | 1 + ...gVectorFilterExpressionConverterTests.java | 1 + ...ineconeFilterExpressionConverterTests.java | 1 + .../ROOT/pages/api/vectordbs/azure.adoc | 2 +- .../ROOT/pages/api/vectordbs/redis.adoc | 2 +- .../ROOT/pages/api/vectordbs/weaviate.adoc | 2 +- .../vectorstore/azure/AzureVectorStore.java | 2 +- ...iSearchFilterExpressionConverterTests.java | 2 +- .../ai/vectorsore/ChromaVectorStore.java | 2 +- .../ai/vectorstore/MilvusVectorStore.java | 2 +- ...jVectorFilterExpressionConverterTests.java | 4 +- .../ai/vectorstore/PgVectorStore.java | 2 +- .../ai/vectorstore/PineconeVectorStore.java | 2 +- .../ai/vectorstore/RedisVectorStore.java | 2 +- ...eaviateFilterExpressionConverterTests.java | 2 +- 52 files changed, 77 insertions(+), 114 deletions(-) rename spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/{AbstractRateLimit.java => EmptyRateLimit.java} (88%) rename spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/{AbstractUsage.java => EmptyUsage.java} (86%) rename spring-ai-core/src/main/java/org/springframework/ai/chat/{ => prompt}/ChatOptions.java (95%) rename spring-ai-core/src/main/java/org/springframework/ai/chat/{ => prompt}/ChatOptionsBuilder.java (97%) rename spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/{converter => }/FilterExpressionConverter.java (94%) diff --git a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatClient.java b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatClient.java index 22562a285..2dcaafc1e 100644 --- a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatClient.java +++ b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatClient.java @@ -18,7 +18,6 @@ package org.springframework.ai.azure.openai; import java.util.Collections; import java.util.List; -import java.util.Objects; import com.azure.ai.openai.OpenAIClient; import com.azure.ai.openai.models.ChatChoice; @@ -36,7 +35,7 @@ import reactor.core.publisher.Flux; import org.springframework.ai.azure.openai.metadata.AzureOpenAiChatResponseMetadata; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptions.java b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptions.java index 4b1878def..9115edfb2 100644 --- a/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptions.java +++ b/models/spring-ai-azure-openai/src/main/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptions.java @@ -24,7 +24,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; /** * The configuration information for a chat completions request. Completions support a diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatClientMetadataTests.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatClientMetadataTests.java index 8974540dc..e4cc08d31 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatClientMetadataTests.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/metadata/AzureOpenAiChatClientMetadataTests.java @@ -29,11 +29,7 @@ import org.springframework.ai.azure.openai.MockAzureOpenAiTestConfiguration; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.messages.AssistantMessage; -import org.springframework.ai.chat.metadata.ChatGenerationMetadata; -import org.springframework.ai.chat.metadata.ChatResponseMetadata; -import org.springframework.ai.chat.metadata.PromptMetadata; -import org.springframework.ai.chat.metadata.RateLimit; -import org.springframework.ai.chat.metadata.Usage; +import org.springframework.ai.chat.metadata.*; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; @@ -111,12 +107,12 @@ class AzureOpenAiChatClientMetadataTests { ChatResponseMetadata chatResponseMetadata = response.getMetadata(); assertThat(chatResponseMetadata).isNotNull(); - assertThat(chatResponseMetadata.getRateLimit()).isEqualTo(RateLimit.NULL); + assertThat(chatResponseMetadata.getRateLimit().getRequestsLimit()) + .isEqualTo(new EmptyRateLimit().getRequestsLimit()); Usage usage = chatResponseMetadata.getUsage(); assertThat(usage).isNotNull(); - assertThat(usage).isNotEqualTo(Usage.NULL); assertThat(usage.getPromptTokens()).isEqualTo(58); assertThat(usage.getGenerationTokens()).isEqualTo(68); assertThat(usage.getTotalTokens()).isEqualTo(126); diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/AnthropicChatOptions.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/AnthropicChatOptions.java index 3c4000c78..75e209b6a 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/AnthropicChatOptions.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/AnthropicChatOptions.java @@ -21,7 +21,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java index 2a681e073..79782d429 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java @@ -19,7 +19,7 @@ package org.springframework.ai.bedrock.anthropic; import java.util.List; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import reactor.core.publisher.Flux; diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatClient.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatClient.java index f5bd76dbe..7a9a752bf 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatClient.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatClient.java @@ -26,7 +26,7 @@ import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatResponse; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatOptions.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatOptions.java index 786658f24..d1db43ac7 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatOptions.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatOptions.java @@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest.LogitBias; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest.ReturnLikelihoods; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest.Truncate; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; /** * @author Christian Tzolov diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatClient.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatClient.java index e427459b6..b6aa40715 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatClient.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatClient.java @@ -25,7 +25,7 @@ import org.springframework.ai.bedrock.llama2.api.Llama2ChatBedrockApi; import org.springframework.ai.bedrock.llama2.api.Llama2ChatBedrockApi.Llama2ChatRequest; import org.springframework.ai.bedrock.llama2.api.Llama2ChatBedrockApi.Llama2ChatResponse; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatOptions.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatOptions.java index c968b7577..5c2bed1ef 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatOptions.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatOptions.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; /** * @author Christian Tzolov diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatClient.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatClient.java index 93ea54105..091eaa5bb 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatClient.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatClient.java @@ -26,7 +26,7 @@ import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatReq import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponse; import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponseChunk; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatOptions.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatOptions.java index 8c834705f..86d93fd76 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatOptions.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatOptions.java @@ -21,7 +21,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatClient.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatClient.java index 55b25e377..9a5adb8a7 100644 --- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatClient.java +++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatClient.java @@ -21,7 +21,7 @@ import java.util.List; import reactor.core.publisher.Flux; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaOptions.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaOptions.java index 3e62801b9..a6dcc8b67 100644 --- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaOptions.java +++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaOptions.java @@ -27,7 +27,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.embedding.EmbeddingOptions; /** diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatClientIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatClientIT.java index 2ce99408c..8e1d34b40 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatClientIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatClientIT.java @@ -26,7 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.springframework.ai.chat.ChatOptionsBuilder; +import org.springframework.ai.chat.prompt.ChatOptionsBuilder; import org.springframework.ai.chat.messages.AssistantMessage; import org.testcontainers.containers.GenericContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatRequestTests.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatRequestTests.java index 9b6bf9bf4..66eec8267 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatRequestTests.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/OllamaChatRequestTests.java @@ -18,8 +18,8 @@ package org.springframework.ai.ollama; import org.junit.jupiter.api.Test; -import org.springframework.ai.chat.ChatOptions; -import org.springframework.ai.chat.ChatOptionsBuilder; +import org.springframework.ai.chat.prompt.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptionsBuilder; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.ollama.api.OllamaApi; import org.springframework.ai.ollama.api.OllamaOptions; diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatClient.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatClient.java index 942b2ead6..27af24df8 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatClient.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatClient.java @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.StreamingChatClient; diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatOptions.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatOptions.java index 82ceaee28..64ffda51f 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatOptions.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiChatOptions.java @@ -27,7 +27,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.model.function.FunctionCallback; import org.springframework.ai.openai.api.OpenAiApi.ChatCompletionRequest.ResponseFormat; import org.springframework.ai.openai.api.OpenAiApi.ChatCompletionRequest.ToolChoice; diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/OpenAiChatResponseMetadata.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/OpenAiChatResponseMetadata.java index ad797df51..75ef7a395 100644 --- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/OpenAiChatResponseMetadata.java +++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/OpenAiChatResponseMetadata.java @@ -16,9 +16,7 @@ package org.springframework.ai.openai.metadata; -import org.springframework.ai.chat.metadata.ChatResponseMetadata; -import org.springframework.ai.chat.metadata.RateLimit; -import org.springframework.ai.chat.metadata.Usage; +import org.springframework.ai.chat.metadata.*; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -68,13 +66,13 @@ public class OpenAiChatResponseMetadata implements ChatResponseMetadata { @Nullable public RateLimit getRateLimit() { RateLimit rateLimit = this.rateLimit; - return rateLimit != null ? rateLimit : RateLimit.NULL; + return rateLimit != null ? rateLimit : new EmptyRateLimit(); } @Override public Usage getUsage() { Usage usage = this.usage; - return usage != null ? usage : Usage.NULL; + return usage != null ? usage : new EmptyUsage(); } public OpenAiChatResponseMetadata withRateLimit(RateLimit rateLimit) { diff --git a/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatClient.java b/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatClient.java index 02e3cef35..d20e8f31d 100644 --- a/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatClient.java +++ b/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatClient.java @@ -20,7 +20,7 @@ import java.util.List; import java.util.stream.Collectors; import org.springframework.ai.chat.ChatClient; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.prompt.Prompt; diff --git a/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatOptions.java b/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatOptions.java index c2e4c54fa..fb17a36ba 100644 --- a/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatOptions.java +++ b/models/spring-ai-vertex-ai/src/main/java/org/springframework/ai/vertex/VertexAiChatOptions.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import org.springframework.ai.chat.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptions; /** * @author Christian Tzolov diff --git a/models/spring-ai-vertex-ai/src/test/java/org/springframework/ai/vertex/VertexAiChatRequestTests.java b/models/spring-ai-vertex-ai/src/test/java/org/springframework/ai/vertex/VertexAiChatRequestTests.java index 336a8c2b3..0db25e494 100644 --- a/models/spring-ai-vertex-ai/src/test/java/org/springframework/ai/vertex/VertexAiChatRequestTests.java +++ b/models/spring-ai-vertex-ai/src/test/java/org/springframework/ai/vertex/VertexAiChatRequestTests.java @@ -18,8 +18,8 @@ package org.springframework.ai.vertex; import org.junit.jupiter.api.Test; -import org.springframework.ai.chat.ChatOptions; -import org.springframework.ai.chat.ChatOptionsBuilder; +import org.springframework.ai.chat.prompt.ChatOptions; +import org.springframework.ai.chat.prompt.ChatOptionsBuilder; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.vertex.api.VertexAiApi; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/ChatResponseMetadata.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/ChatResponseMetadata.java index 12c9d0b5c..b4525a6ab 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/ChatResponseMetadata.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/ChatResponseMetadata.java @@ -36,7 +36,7 @@ public interface ChatResponseMetadata extends ResponseMetadata { * @see RateLimit */ default RateLimit getRateLimit() { - return RateLimit.NULL; + return new EmptyRateLimit(); } /** @@ -45,7 +45,7 @@ public interface ChatResponseMetadata extends ResponseMetadata { * @see Usage */ default Usage getUsage() { - return Usage.NULL; + return new EmptyUsage(); } default PromptMetadata getPromptMetadata() { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractRateLimit.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyRateLimit.java similarity index 88% rename from spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractRateLimit.java rename to spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyRateLimit.java index f485c7a29..480a94d3e 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractRateLimit.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyRateLimit.java @@ -19,12 +19,12 @@ package org.springframework.ai.chat.metadata; import java.time.Duration; /** - * Abstract base class used as a foundation for implementing {@link RateLimit}. + * A RateLimit implementation that returns zero for all property getters * * @author John Blum * @since 0.7.0 */ -public abstract class AbstractRateLimit implements RateLimit { +public class EmptyRateLimit implements RateLimit { @Override public Long getRequestsLimit() { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractUsage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyUsage.java similarity index 86% rename from spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractUsage.java rename to spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyUsage.java index edec477ab..027e30279 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/AbstractUsage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/EmptyUsage.java @@ -17,12 +17,12 @@ package org.springframework.ai.chat.metadata; /** - * Abstract base class used as a foundation for implementing {@link Usage}. + * A EmpytUsage implementation that returns zero for all property getters * * @author John Blum * @since 0.7.0 */ -public abstract class AbstractUsage implements Usage { +public class EmptyUsage implements Usage { @Override public Long getPromptTokens() { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/RateLimit.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/RateLimit.java index 66bdebd2b..22dd64b18 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/RateLimit.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/RateLimit.java @@ -27,9 +27,6 @@ import java.time.Duration; */ public interface RateLimit { - RateLimit NULL = new AbstractRateLimit() { - }; - /** * Returns the maximum number of requests that are permitted before exhausting the * rate limit. diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/Usage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/Usage.java index 9cc1dbb71..0ea42e624 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/Usage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/metadata/Usage.java @@ -25,9 +25,6 @@ package org.springframework.ai.chat.metadata; */ public interface Usage { - Usage NULL = new AbstractUsage() { - }; - /** * Returns the number of tokens used in the {@literal prompt} of the AI request. * @return an {@link Long} with the number of tokens used in the {@literal prompt} of diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptions.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptions.java similarity index 95% rename from spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptions.java rename to spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptions.java index 3e27fc4ca..5d91bbd02 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptions.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptions.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.chat; +package org.springframework.ai.chat.prompt; import org.springframework.ai.model.ModelOptions; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptionsBuilder.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptionsBuilder.java similarity index 97% rename from spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptionsBuilder.java rename to spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptionsBuilder.java index 60c729872..f702f6350 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptionsBuilder.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/ChatOptionsBuilder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.chat; +package org.springframework.ai.chat.prompt; public class ChatOptionsBuilder { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java index 76c749140..b82bcb05e 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/prompt/Prompt.java @@ -18,7 +18,6 @@ package org.springframework.ai.chat.prompt; import org.springframework.ai.model.ModelOptions; import org.springframework.ai.model.ModelRequest; -import org.springframework.ai.chat.ChatOptions; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.UserMessage; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/model/function/AbstractFunctionCallback.java b/spring-ai-core/src/main/java/org/springframework/ai/model/function/AbstractFunctionCallback.java index 6714b7d86..fd05ddfd2 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/model/function/AbstractFunctionCallback.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/model/function/AbstractFunctionCallback.java @@ -113,18 +113,6 @@ abstract class AbstractFunctionCallback implements Function, Functio this.objectMapper = objectMapper; } - public static AbstractFunctionCallback of(String name, String description, Function function) { - Assert.notNull(name, "Name must not be null"); - Assert.notNull(description, "Description must not be null"); - Assert.notNull(function, "Function must not be null"); - - @SuppressWarnings("unchecked") - final Class inputClassType = (Class) TypeResolverHelper - .getFunctionInputClass((Class>) function.getClass()); - - return new FunctionCallbackWrapper(name, description, inputClassType, function); - } - @Override public String getName() { return this.name; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SearchRequest.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SearchRequest.java index 6b354ff5f..030374482 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SearchRequest.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/SearchRequest.java @@ -226,7 +226,8 @@ public class SearchRequest { * @return this.builder */ public SearchRequest withFilterExpression(String textExpression) { - this.filterExpression = (textExpression != null) ? Filter.parser().parse(textExpression) : null; + this.filterExpression = (textExpression != null) ? new FilterExpressionTextParser().parse(textExpression) + : null; return this; } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/Filter.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/Filter.java index 04f6adaec..41cf5b16e 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/Filter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/Filter.java @@ -58,28 +58,13 @@ package org.springframework.ai.vectorstore.filter; * * * Usually you will not create expression manually but use either the - * {@link Filter#builder()} DSL or the {@link Filter#parser()} for parsing generic text - * expressions. Follow the {@link FilterExpressionBuilder} and - * {@link FilterExpressionTextParser} documentation for how to use them. + * {@link FilterExpressionBuilder} DSL or the {@link FilterExpressionTextParser} for + * parsing generic text expressions. * * @author Christian Tzolov */ public class Filter { - /** - * DSL builder for creating {@link Filter.Expression} programmatically. - */ - public static FilterExpressionBuilder builder() { - return new FilterExpressionBuilder(); - } - - /** - * Parses a portable filter expression text language into {@link Filter.Expression}. - */ - public static FilterExpressionTextParser parser() { - return new FilterExpressionTextParser(); - } - /** * Mark interface representing the supported expression types: {@link Key}, * {@link Value}, {@link Expression} and {@link Group}. diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/FilterExpressionConverter.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterExpressionConverter.java similarity index 94% rename from spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/FilterExpressionConverter.java rename to spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterExpressionConverter.java index ece17dc0c..6b5a4701b 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/FilterExpressionConverter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterExpressionConverter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.vectorstore.filter.converter; +package org.springframework.ai.vectorstore.filter; import org.springframework.ai.vectorstore.filter.Filter; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterHelper.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterHelper.java index 0bf221774..48d2b79a3 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterHelper.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/FilterHelper.java @@ -23,7 +23,6 @@ import java.util.Map; import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.ExpressionType; import org.springframework.ai.vectorstore.filter.Filter.Operand; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; import org.springframework.util.Assert; /** diff --git a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/AbstractFilterExpressionConverter.java b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/AbstractFilterExpressionConverter.java index 8769d97ec..71cc25d27 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/AbstractFilterExpressionConverter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/vectorstore/filter/converter/AbstractFilterExpressionConverter.java @@ -19,6 +19,7 @@ package org.springframework.ai.vectorstore.filter.converter; import java.util.List; import org.springframework.ai.vectorstore.filter.Filter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.ai.vectorstore.filter.FilterHelper; import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.ExpressionType; diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/FilterHelperTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/FilterHelperTests.java index 154c94490..e8842a403 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/FilterHelperTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/FilterHelperTests.java @@ -35,19 +35,19 @@ public class FilterHelperTests { @Test public void negateEQ() { - assertThat(Filter.parser().parse("NOT key == 'UK' ")).isEqualTo(new Filter.Expression(ExpressionType.NOT, - new Filter.Expression(ExpressionType.EQ, new Key("key"), new Value("UK")), null)); + assertThat(new FilterExpressionTextParser().parse("NOT key == 'UK' ")).isEqualTo(new Filter.Expression( + ExpressionType.NOT, new Filter.Expression(ExpressionType.EQ, new Key("key"), new Value("UK")), null)); - assertThat(FilterHelper.negate(Filter.parser().parse("NOT key == 'UK' "))) + assertThat(FilterHelper.negate(new FilterExpressionTextParser().parse("NOT key == 'UK' "))) .isEqualTo(new Filter.Expression(ExpressionType.NE, new Key("key"), new Value("UK"))); - assertThat(FilterHelper.negate(Filter.parser().parse("NOT (key == 'UK') "))) + assertThat(FilterHelper.negate(new FilterExpressionTextParser().parse("NOT (key == 'UK') "))) .isEqualTo(new Filter.Group(new Filter.Expression(ExpressionType.NE, new Key("key"), new Value("UK")))); } @Test public void negateNE() { - var exp = Filter.parser().parse("NOT key != 'UK' "); + var exp = new FilterExpressionTextParser().parse("NOT key != 'UK' "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.EQ, new Key("key"), new Value("UK"))); @@ -55,7 +55,7 @@ public class FilterHelperTests { @Test public void negateGT() { - var exp = Filter.parser().parse("NOT key > 13 "); + var exp = new FilterExpressionTextParser().parse("NOT key > 13 "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.LTE, new Key("key"), new Value(13))); @@ -63,49 +63,49 @@ public class FilterHelperTests { @Test public void negateGTE() { - var exp = Filter.parser().parse("NOT key >= 13 "); + var exp = new FilterExpressionTextParser().parse("NOT key >= 13 "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.LT, new Key("key"), new Value(13))); } @Test public void negateLT() { - var exp = Filter.parser().parse("NOT key < 13 "); + var exp = new FilterExpressionTextParser().parse("NOT key < 13 "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.GTE, new Key("key"), new Value(13))); } @Test public void negateLTE() { - var exp = Filter.parser().parse("NOT key <= 13 "); + var exp = new FilterExpressionTextParser().parse("NOT key <= 13 "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.GT, new Key("key"), new Value(13))); } @Test public void negateIN() { - var exp = Filter.parser().parse("NOT key IN [11, 12, 13] "); + var exp = new FilterExpressionTextParser().parse("NOT key IN [11, 12, 13] "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.NIN, new Key("key"), new Value(List.of(11, 12, 13)))); } @Test public void negateNIN() { - var exp = Filter.parser().parse("NOT key NIN [11, 12, 13] "); + var exp = new FilterExpressionTextParser().parse("NOT key NIN [11, 12, 13] "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.IN, new Key("key"), new Value(List.of(11, 12, 13)))); } @Test public void negateNIN2() { - var exp = Filter.parser().parse("NOT key NOT IN [11, 12, 13] "); + var exp = new FilterExpressionTextParser().parse("NOT key NOT IN [11, 12, 13] "); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Expression(ExpressionType.IN, new Key("key"), new Value(List.of(11, 12, 13)))); } @Test public void negateAND() { - var exp = Filter.parser().parse("NOT(key >= 11 AND key < 13)"); + var exp = new FilterExpressionTextParser().parse("NOT(key >= 11 AND key < 13)"); assertThat(FilterHelper.negate(exp)).isEqualTo(new Filter.Group(new Filter.Expression(ExpressionType.OR, new Filter.Expression(ExpressionType.LT, new Key("key"), new Value(11)), new Filter.Expression(ExpressionType.GTE, new Key("key"), new Value(13))))); @@ -113,7 +113,7 @@ public class FilterHelperTests { @Test public void negateOR() { - var exp = Filter.parser().parse("NOT(key >= 11 OR key < 13)"); + var exp = new FilterExpressionTextParser().parse("NOT(key >= 11 OR key < 13)"); assertThat(FilterHelper.negate(exp)).isEqualTo(new Filter.Group(new Filter.Expression(ExpressionType.AND, new Filter.Expression(ExpressionType.LT, new Key("key"), new Value(11)), new Filter.Expression(ExpressionType.GTE, new Key("key"), new Value(13))))); @@ -121,14 +121,14 @@ public class FilterHelperTests { @Test public void negateNot() { - var exp = Filter.parser().parse("NOT NOT(key >= 11)"); + var exp = new FilterExpressionTextParser().parse("NOT NOT(key >= 11)"); assertThat(FilterHelper.negate(exp)) .isEqualTo(new Filter.Group(new Filter.Expression(ExpressionType.LT, new Key("key"), new Value(11)))); } @Test public void negateNestedNot() { - var exp = Filter.parser().parse("NOT(NOT(key >= 11))"); + var exp = new FilterExpressionTextParser().parse("NOT(NOT(key >= 11))"); assertThat(exp).isEqualTo( new Filter.Expression(ExpressionType.NOT, new Filter.Group(new Filter.Expression(ExpressionType.NOT, new Filter.Group(new Filter.Expression(ExpressionType.GTE, new Key("key"), new Value(11))))))); @@ -139,14 +139,14 @@ public class FilterHelperTests { @Test public void expandIN() { - var exp = Filter.parser().parse("key IN [11, 12, 13] "); + var exp = new FilterExpressionTextParser().parse("key IN [11, 12, 13] "); assertThat(new InNinTestConverter().convertExpression(exp)).isEqualTo("key EQ 11 OR key EQ 12 OR key EQ 13"); } @Test public void expandNIN() { - var exp1 = Filter.parser().parse("key NIN [11, 12, 13] "); - var exp2 = Filter.parser().parse("key NOT IN [11, 12, 13] "); + var exp1 = new FilterExpressionTextParser().parse("key NIN [11, 12, 13] "); + var exp2 = new FilterExpressionTextParser().parse("key NOT IN [11, 12, 13] "); assertThat(exp1).isEqualTo(exp2); assertThat(new InNinTestConverter().convertExpression(exp1)).isEqualTo("key NE 11 AND key NE 12 AND key NE 13"); } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/SearchRequestTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/SearchRequestTests.java index bbd87e06b..8c9a014a6 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/SearchRequestTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/SearchRequestTests.java @@ -116,7 +116,7 @@ public class SearchRequestTests { new Filter.Expression(Filter.ExpressionType.EQ, new Filter.Key("active"), new Filter.Value(true))); assertThat(request.hasFilterExpression()).isTrue(); - request.withFilterExpression(Filter.builder().eq("country", "NL").build()); + request.withFilterExpression(new FilterExpressionBuilder().eq("country", "NL").build()); assertThat(request.getFilterExpression()).isEqualTo( new Filter.Expression(Filter.ExpressionType.EQ, new Filter.Key("country"), new Filter.Value("NL"))); assertThat(request.hasFilterExpression()).isTrue(); diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/MilvusFilterExpressionConverterTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/MilvusFilterExpressionConverterTests.java index ab8d38cfb..3b23b430b 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/MilvusFilterExpressionConverterTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/MilvusFilterExpressionConverterTests.java @@ -24,6 +24,7 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.ai.vectorstore.filter.Filter.ExpressionType.AND; diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PgVectorFilterExpressionConverterTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PgVectorFilterExpressionConverterTests.java index cac2dd2c5..5c6049ec0 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PgVectorFilterExpressionConverterTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PgVectorFilterExpressionConverterTests.java @@ -24,6 +24,7 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.ai.vectorstore.filter.Filter.ExpressionType.AND; diff --git a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PineconeFilterExpressionConverterTests.java b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PineconeFilterExpressionConverterTests.java index 45a9277b3..a4c8fce2b 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PineconeFilterExpressionConverterTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/vectorstore/filter/converter/PineconeFilterExpressionConverterTests.java @@ -24,6 +24,7 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.ai.vectorstore.filter.Filter.ExpressionType.AND; diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure.adoc index 5aa97b368..cc71549e4 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure.adoc @@ -170,7 +170,7 @@ or programmatically using the expression DSL: [source,java] ---- -FilterExpressionBuilder b = Filter.builder(); +FilterExpressionBuilder b = new FilterExpressionBuilder(); vectorStore.similaritySearch( SearchRequest diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/redis.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/redis.adoc index 9db2e8c35..f5c6c341c 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/redis.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/redis.adoc @@ -159,7 +159,7 @@ or programmatically using the expression DSL: [source,java] ---- -FilterExpressionBuilder b = Filter.builder(); +FilterExpressionBuilder b = new FilterExpressionBuilder(); vectorStore.similaritySearch( SearchRequest diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/weaviate.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/weaviate.adoc index 30c414ced..3a8452011 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/weaviate.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/weaviate.adoc @@ -148,7 +148,7 @@ or programmatically using the expression DSL: [source,java] ---- -FilterExpressionBuilder b = Filter.builder(); +FilterExpressionBuilder b = new FilterExpressionBuilder(); vectorStore.similaritySearch( SearchRequest diff --git a/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java b/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java index a6ddadd17..89353e664 100644 --- a/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java +++ b/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java @@ -49,7 +49,7 @@ import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.VectorStore; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; diff --git a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java index a5ce35d34..3839d9370 100644 --- a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java +++ b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java @@ -26,7 +26,7 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/vector-stores/spring-ai-chroma/src/main/java/org/springframework/ai/vectorsore/ChromaVectorStore.java b/vector-stores/spring-ai-chroma/src/main/java/org/springframework/ai/vectorsore/ChromaVectorStore.java index 73be619a5..c1f5c99eb 100644 --- a/vector-stores/spring-ai-chroma/src/main/java/org/springframework/ai/vectorsore/ChromaVectorStore.java +++ b/vector-stores/spring-ai-chroma/src/main/java/org/springframework/ai/vectorsore/ChromaVectorStore.java @@ -27,7 +27,7 @@ import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.ai.vectorstore.filter.converter.ChromaFilterExpressionConverter; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.beans.factory.InitializingBean; import org.springframework.ai.chroma.ChromaApi; import org.springframework.ai.chroma.ChromaApi.AddEmbeddingsRequest; diff --git a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java index ff81cc1e4..c19ad16f1 100644 --- a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java +++ b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/MilvusVectorStore.java @@ -54,7 +54,7 @@ import org.slf4j.LoggerFactory; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.ai.vectorstore.filter.converter.MilvusFilterExpressionConverter; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; diff --git a/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/filter/Neo4jVectorFilterExpressionConverterTests.java b/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/filter/Neo4jVectorFilterExpressionConverterTests.java index c47178a0a..2b6d19f85 100644 --- a/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/filter/Neo4jVectorFilterExpressionConverterTests.java +++ b/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/filter/Neo4jVectorFilterExpressionConverterTests.java @@ -24,7 +24,6 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.ai.vectorstore.filter.Filter.ExpressionType.AND; @@ -130,7 +129,8 @@ public class Neo4jVectorFilterExpressionConverterTests { @Test public void testComplexIdentifiers2() { - Filter.Expression expr = Filter.parser().parse("author in ['john', 'jill'] && 'article_type' == 'blog'"); + Filter.Expression expr = new FilterExpressionTextParser() + .parse("author in ['john', 'jill'] && 'article_type' == 'blog'"); String vectorExpr = converter.convertExpression(expr); assertThat(vectorExpr) .isEqualTo("node.`metadata.author` IN [\"john\",\"jill\"] AND node.`metadata.'article_type'` = \"blog\""); diff --git a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java index fbba123f0..82d499e88 100644 --- a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java +++ b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java @@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.ai.vectorstore.filter.converter.PgVectorFilterExpressionConverter; import org.springframework.beans.factory.InitializingBean; import org.springframework.jdbc.core.BatchPreparedStatementSetter; diff --git a/vector-stores/spring-ai-pinecone/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java b/vector-stores/spring-ai-pinecone/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java index d48233c5e..d350032f0 100644 --- a/vector-stores/spring-ai-pinecone/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java +++ b/vector-stores/spring-ai-pinecone/src/main/java/org/springframework/ai/vectorstore/PineconeVectorStore.java @@ -36,7 +36,7 @@ import io.pinecone.proto.Vector; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.ai.vectorstore.filter.converter.PineconeFilterExpressionConverter; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/vector-stores/spring-ai-redis/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java b/vector-stores/spring-ai-redis/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java index 331c6eca2..44882e5bd 100644 --- a/vector-stores/spring-ai-redis/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java +++ b/vector-stores/spring-ai-redis/src/main/java/org/springframework/ai/vectorstore/RedisVectorStore.java @@ -31,7 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; diff --git a/vector-stores/spring-ai-weaviate/src/test/java/org/springframework/ai/vectorstore/WeaviateFilterExpressionConverterTests.java b/vector-stores/spring-ai-weaviate/src/test/java/org/springframework/ai/vectorstore/WeaviateFilterExpressionConverterTests.java index 6b3084a2c..2445766a6 100644 --- a/vector-stores/spring-ai-weaviate/src/test/java/org/springframework/ai/vectorstore/WeaviateFilterExpressionConverterTests.java +++ b/vector-stores/spring-ai-weaviate/src/test/java/org/springframework/ai/vectorstore/WeaviateFilterExpressionConverterTests.java @@ -24,7 +24,7 @@ import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; import org.springframework.ai.vectorstore.filter.Filter.Key; import org.springframework.ai.vectorstore.filter.Filter.Value; -import org.springframework.ai.vectorstore.filter.converter.FilterExpressionConverter; +import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy;