diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/apache-cassandra.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/apache-cassandra.adoc index 88a20338d8f..8c824a31776 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/apache-cassandra.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/apache-cassandra.adoc @@ -163,9 +163,7 @@ For more complex scenarios, the builder pattern offers extensive configuration o ---- @Bean public VectorStore vectorStore(CqlSession session, EmbeddingModel embeddingModel) { - return CassandraVectorStore.builder() - .session(session) - .embeddingModel(embeddingModel) + return CassandraVectorStore.builder(embeddingModel) .keyspace("my_keyspace") .table("my_vectors") .partitionKeys(List.of(new SchemaColumn("id", DataTypes.TEXT))) diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure-cosmos-db.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure-cosmos-db.adoc index 6e1a3c03c42..71c6af02613 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure-cosmos-db.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/azure-cosmos-db.adoc @@ -203,11 +203,6 @@ public class DemoApplication implements CommandLineRunner { @Bean public VectorStore vectorStore(ObservationRegistry observationRegistry) { - CosmosDBVectorStoreConfig config = new CosmosDBVectorStoreConfig(); - config.setDatabaseName("spring-ai-sample"); - config.setContainerName("container"); - config.setMetadataFields("country,city"); - config.setVectorStoreThroughput(400); CosmosAsyncClient cosmosClient = new CosmosClientBuilder() .endpoint(System.getenv("COSMOSDB_AI_ENDPOINT")) @@ -216,7 +211,13 @@ public class DemoApplication implements CommandLineRunner { .gatewayMode() .buildAsyncClient(); - return new CosmosDBVectorStore(observationRegistry, null, cosmosClient, config, this.embeddingModel); + return CosmosDBVectorStore.builder(cosmosClient, this.embeddingModel) + .databaseName("test-database") + .containerName("test-container") + .metadataFields(List.of("country", "year", "city")) + .vectorStoreThroughput(1000) + .observationRegistry(observationRegistry) + .build(); } @Bean 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 07981981e00..fabdb70192b 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 @@ -131,12 +131,14 @@ To create a vector store, you can use the following code by injecting the `Searc ---- @Bean public VectorStore vectorStore(SearchIndexClient searchIndexClient, EmbeddingModel embeddingModel) { - return new AzureVectorStore(searchIndexClient, embeddingModel, + + return AzureVectorStore.builder(searchIndexClient, embeddingModel) + .initializeSchema(true) // Define the metadata fields to be used // in the similarity search filters. - List.of(MetadataField.text("country"), - MetadataField.int64("year"), - MetadataField.bool("active"))); + .filterMetadataFields(List.of(MetadataField.text("country"), MetadataField.int64("year"), + MetadataField.date("activationDate"))) + .build(); } ---- diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/chroma.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/chroma.adoc index 32bbab1697a..6dadb0c66e3 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/chroma.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/chroma.adoc @@ -231,7 +231,10 @@ Integrate with OpenAI's embeddings by adding the Spring Boot OpenAI starter to y ---- @Bean public VectorStore chromaVectorStore(EmbeddingModel embeddingModel, ChromaApi chromaApi) { - return new ChromaVectorStore(embeddingModel, chromaApi, "TestCollection", false); + return ChromaVectorStore.builder(chromaApi, embeddingModel) + .collectionName("TestCollection") + .initializeSchema(true) + .build(); } ---- diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/elasticsearch.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/elasticsearch.adoc index 58ce382b042..7177b06fd7e 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/elasticsearch.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/elasticsearch.adoc @@ -256,9 +256,7 @@ public VectorStore vectorStore(RestClient restClient, EmbeddingModel embeddingMo options.setSimilarity(COSINE); // Optional: defaults to COSINE options.setDimensions(1536); // Optional: defaults to model dimensions or 1536 - return ElasticsearchVectorStore.builder() - .restClient(restClient) - .embeddingModel(embeddingModel) + return ElasticsearchVectorStore.builder(restClient, embeddingModel) .options(options) // Optional: use custom options .initializeSchema(true) // Optional: defaults to false .batchingStrategy(new TokenCountBatchingStrategy()) // Optional: defaults to TokenCountBatchingStrategy diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/gemfire.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/gemfire.adoc index 08b1b974271..f6a8f9783b2 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/gemfire.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/gemfire.adoc @@ -83,10 +83,13 @@ Here is a sample that creates an instance of the `GemfireVectorStore` instead of [source,java] ---- @Bean -public VectorStore vectorStore(EmbeddingModel embeddingModel) { - return new GemFireVectorStore(new GemFireVectorStoreConfig() - .setIndexName("my-vector-index") - .setPort(7071), embeddingClient); +public GemFireVectorStore vectorStore(EmbeddingModel embeddingModel) { + return GemFireVectorStore.builder(embeddingModel) + .host("localhost") + .port(7071) + .indexName("my-vector-index") + .initializeSchema(true) + .build(); } ---- diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mariadb.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mariadb.adoc index e77a55b9d8e..c4e1d772ddb 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mariadb.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mariadb.adoc @@ -149,8 +149,7 @@ Then create the `MariaDBVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) { - return MariaDBVectorStore.builder(jdbcTemplate) - .embeddingModel(embeddingModel) + return MariaDBVectorStore.builder(jdbcTemplate, embeddingModel) .dimensions(1536) // Optional: defaults to 1536 .distanceType(MariaDBDistanceType.COSINE) // Optional: defaults to COSINE .schemaName("mydb") // Optional: defaults to null diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/milvus.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/milvus.adoc index 754349ee7d5..7e9240eb791 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/milvus.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/milvus.adoc @@ -109,13 +109,14 @@ To configure MilvusVectorStore in your application, you can use the following se ---- @Bean public VectorStore vectorStore(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) { - MilvusVectorStoreConfig config = MilvusVectorStoreConfig.builder() - .withCollectionName("test_vector_store") - .withDatabaseName("default") - .withIndexType(IndexType.IVF_FLAT) - .withMetricType(MetricType.COSINE) - .build(); - return new MilvusVectorStore(milvusClient, embeddingModel, config); + return MilvusVectorStore.builder(milvusClient, embeddingModel) + .collectionName("test_vector_store") + .databaseName("default") + .indexType(IndexType.IVF_FLAT) + .metricType(MetricType.COSINE) + .batchingStrategy(new TokenCountBatchingStrategy()) + .initializeSchema(true) + .build(); } @Bean diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mongodb.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mongodb.adoc index f27bc78feb6..d78b18112dd 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mongodb.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/mongodb.adoc @@ -146,9 +146,7 @@ Then create the `MongoDBAtlasVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(MongoTemplate mongoTemplate, EmbeddingModel embeddingModel) { - return MongoDBAtlasVectorStore.builder() - .mongoTemplate(mongoTemplate) - .embeddingModel(embeddingModel) + return MongoDBAtlasVectorStore.builder(mongoTemplate, embeddingModel) .collectionName("custom_vector_store") // Optional: defaults to "vector_store" .vectorIndexName("custom_vector_index") // Optional: defaults to "vector_index" .pathName("custom_embedding") // Optional: defaults to "embedding" diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/neo4j.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/neo4j.adoc index a86fac6e6de..7e4353f3f28 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/neo4j.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/neo4j.adoc @@ -172,9 +172,7 @@ Then create the `Neo4jVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(Driver driver, EmbeddingModel embeddingModel) { - return Neo4jVectorStore.builder() - .driver(driver) - .embeddingModel(embeddingModel) + return Neo4jVectorStore.builder(driver, embeddingModel) .databaseName("neo4j") // Optional: defaults to "neo4j" .distanceType(Neo4jDistanceType.COSINE) // Optional: defaults to COSINE .dimensions(1536) // Optional: defaults to 1536 diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/opensearch.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/opensearch.adoc index 4bb3e02da7a..3d9db84b52b 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/opensearch.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/opensearch.adoc @@ -177,9 +177,7 @@ Then create the `OpenSearchVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(OpenSearchClient openSearchClient, EmbeddingModel embeddingModel) { - return OpenSearchVectorStore.builder() - .openSearchClient(openSearchClient) - .embeddingModel(embeddingModel) + return OpenSearchVectorStore.builder(openSearchClient, embeddingModel) .index("custom-index") // Optional: defaults to "spring-ai-document-index" .similarityFunction("l2") // Optional: defaults to "cosinesimil" .initializeSchema(true) // Optional: defaults to false diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pgvector.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pgvector.adoc index 8eda3ff6e56..58d68baae0e 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pgvector.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pgvector.adoc @@ -220,9 +220,7 @@ To configure PgVector in your application, you can use the following setup: ---- @Bean public VectorStore vectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) { - return PgVectorStore.builder() - .jdbcTemplate(jdbcTemplate) - .embeddingModel(embeddingModel) + return PgVectorStore.builder(jdbcTemplate, embeddingModel) .dimensions(1536) // Optional: defaults to model dimensions or 1536 .distanceType(COSINE_DISTANCE) // Optional: defaults to COSINE_DISTANCE .indexType(HNSW) // Optional: defaults to HNSW diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pinecone.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pinecone.adoc index 3a6510e66c4..63bc853eb56 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pinecone.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/pinecone.adoc @@ -188,30 +188,15 @@ To configure Pinecone in your application, you can use the following setup: [source,java] ---- @Bean -public PineconeVectorStoreConfig pineconeVectorStoreConfig() { - - return PineconeVectorStoreConfig.builder() - .withApiKey() - .withEnvironment("gcp-starter") - .withProjectId("89309e6") - .withIndexName("spring-ai-test-index") - .withNamespace("") // the free tier doesn't support namespaces. - .withContentFieldName("my_content") // optional field to store the original content. Defaults to `document_content` +public VectorStore pineconeVectorStore(EmbeddingModel embeddingModel) { + return PineconeVectorStore + .builder(embeddingModel, PINECONE_API_KEY, PINECONE_PROJECT_ID, PINECONE_ENVIRONMENT, PINECONE_INDEX_NAME) + .namespace(PINECONE_NAMESPACE) // the free tier doesn't support namespaces. + .contentFieldName(CUSTOM_CONTENT_FIELD_NAME) // optional field to store the original content. Defaults to `document_content` .build(); } ---- -Integrate with OpenAI's embeddings by adding the Spring Boot OpenAI starter to your project. -This provides you with an implementation of the Embeddings client: - -[source,java] ----- -@Bean -public VectorStore vectorStore(PineconeVectorStoreConfig config, EmbeddingModel embeddingModel) { - return new PineconeVectorStore(config, embeddingModel); -} ----- - In your main code, create some documents: [source,java] diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/qdrant.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/qdrant.adoc index 0a484d51a99..0b27e5f74f4 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/qdrant.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/qdrant.adoc @@ -148,8 +148,7 @@ Then create the `QdrantVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(QdrantClient qdrantClient, EmbeddingModel embeddingModel) { - return QdrantVectorStore.builder(qdrantClient) - .embeddingModel(embeddingModel) + return QdrantVectorStore.builder(qdrantClient, embeddingModel) .collectionName("custom-collection") // Optional: defaults to "vector_store" .initializeSchema(true) // Optional: defaults to false .batchingStrategy(new TokenCountBatchingStrategy()) // Optional: defaults to TokenCountBatchingStrategy 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 fdd6dbd809b..10c32ca1e03 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 @@ -189,9 +189,7 @@ Then create the `RedisVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(JedisPooled jedisPooled, EmbeddingModel embeddingModel) { - return RedisVectorStore.builder() - .jedis(jedisPooled) - .embeddingModel(embeddingModel) + return RedisVectorStore.builder(jedisPooled, embeddingModel) .indexName("custom-index") // Optional: defaults to "spring-ai-index" .prefix("custom-prefix") // Optional: defaults to "embedding:" .metadataFields( // Optional: define metadata fields for filtering diff --git a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/typesense.adoc b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/typesense.adoc index f419384c27a..c22a91ee878 100644 --- a/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/typesense.adoc +++ b/spring-ai-docs/src/main/antora/modules/ROOT/pages/api/vectordbs/typesense.adoc @@ -161,9 +161,7 @@ Then create the `TypesenseVectorStore` bean using the builder pattern: ---- @Bean public VectorStore vectorStore(Client client, EmbeddingModel embeddingModel) { - return TypesenseVectorStore.builder() - .client(client) - .embeddingModel(embeddingModel) + return TypesenseVectorStore.builder(client, embeddingModel) .collectionName("custom_vectors") // Optional: defaults to "vector_store" .embeddingDimension(1536) // Optional: defaults to 1536 .initializeSchema(true) // Optional: defaults to false 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 e6493961c40..9476b859919 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 @@ -119,10 +119,8 @@ public WeaviateClient weaviateClient() { } @Bean -public VectorStore vectorStore(EmbeddingModel embeddingModel, WeaviateClient weaviateClient) { - return WeaviateVectorStore.builder() - .weaviateClient(weaviateClient) - .embeddingModel(embeddingModel) +public VectorStore vectorStore(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) { + return WeaviateVectorStore.builder(weaviateClient, embeddingModel) .objectClass("CustomClass") // Optional: defaults to "SpringAiWeaviate" .consistencyLevel(ConsistentLevel.QUORUM) // Optional: defaults to ConsistentLevel.ONE .filterMetadataFields(List.of( // Optional: fields that can be used in filters diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfiguration.java index 8bb97634695..495cc04d3f3 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfiguration.java @@ -66,7 +66,7 @@ MongoDBAtlasVectorStore vectorStore(MongoTemplate mongoTemplate, EmbeddingModel ObjectProvider customObservationConvention, BatchingStrategy batchingStrategy) { - MongoDBAtlasVectorStore.MongoDBBuilder builder = MongoDBAtlasVectorStore.builder(mongoTemplate, embeddingModel) + MongoDBAtlasVectorStore.Builder builder = MongoDBAtlasVectorStore.builder(mongoTemplate, embeddingModel) .initializeSchema(properties.isInitializeSchema()) .observationRegistry(observationRegistry.getIfUnique(() -> ObservationRegistry.NOOP)) .customObservationConvention(customObservationConvention.getIfAvailable(() -> null)) diff --git a/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/cosmosdb/CosmosDBVectorStore.java b/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/cosmosdb/CosmosDBVectorStore.java index 2a10bb1bd27..d57f4b4185a 100644 --- a/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/cosmosdb/CosmosDBVectorStore.java +++ b/vector-stores/spring-ai-azure-cosmos-db-store/src/main/java/org/springframework/ai/vectorstore/cosmosdb/CosmosDBVectorStore.java @@ -151,7 +151,7 @@ public CosmosDBVectorStore(ObservationRegistry observationRegistry, * create new CosmosDBVectorStore instances. * @param builder the configured builder instance */ - protected CosmosDBVectorStore(CosmosDBBuilder builder) { + protected CosmosDBVectorStore(Builder builder) { super(builder); Assert.notNull(builder.cosmosClient, "CosmosClient must not be null"); @@ -172,8 +172,8 @@ protected CosmosDBVectorStore(CosmosDBBuilder builder) { initializeContainer(containerName, databaseName, vectorStoreThroughput, vectorDimensions, partitionKeyPath); } - public static CosmosDBBuilder builder(CosmosAsyncClient cosmosClient, EmbeddingModel embeddingModel) { - return new CosmosDBBuilder(cosmosClient, embeddingModel); + public static Builder builder(CosmosAsyncClient cosmosClient, EmbeddingModel embeddingModel) { + return new Builder(cosmosClient, embeddingModel); } private void initializeContainer(String containerName, String databaseName, int vectorStoreThroughput, @@ -429,7 +429,7 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str * * @since 1.0.0 */ - public static class CosmosDBBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final CosmosAsyncClient cosmosClient; @@ -450,7 +450,7 @@ public static class CosmosDBBuilder extends AbstractVectorStoreBuilder 0, "Vector store throughput must be positive"); this.vectorStoreThroughput = vectorStoreThroughput; return this; @@ -510,7 +510,7 @@ public CosmosDBBuilder vectorStoreThroughput(int vectorStoreThroughput) { * @return the builder instance * @throws IllegalArgumentException if vectorDimensions is not positive */ - public CosmosDBBuilder vectorDimensions(long vectorDimensions) { + public Builder vectorDimensions(long vectorDimensions) { Assert.isTrue(vectorDimensions > 0, "Vector dimensions must be positive"); this.vectorDimensions = vectorDimensions; return this; @@ -521,7 +521,7 @@ public CosmosDBBuilder vectorDimensions(long vectorDimensions) { * @param metadataFieldsList the list of metadata fields * @return the builder instance */ - public CosmosDBBuilder metadataFields(List metadataFieldsList) { + public Builder metadataFields(List metadataFieldsList) { this.metadataFieldsList = metadataFieldsList != null ? new ArrayList<>(metadataFieldsList) : new ArrayList<>(); return this; @@ -533,7 +533,7 @@ public CosmosDBBuilder metadataFields(List metadataFieldsList) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public CosmosDBBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java index 9b75c3fb964..43b28eb28c3 100644 --- a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java +++ b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java @@ -190,7 +190,7 @@ public AzureVectorStore(SearchIndexClient searchIndexClient, EmbeddingModel embe * create new AzureVectorStore instances. * @param builder the configured builder instance */ - protected AzureVectorStore(AzureBuilder builder) { + protected AzureVectorStore(Builder builder) { super(builder); Assert.notNull(builder.searchIndexClient, "The search index client cannot be null"); @@ -206,15 +206,15 @@ protected AzureVectorStore(AzureBuilder builder) { this.filterExpressionConverter = new AzureAiSearchFilterExpressionConverter(filterMetadataFields); } - public static AzureBuilder builder(SearchIndexClient searchIndexClient, EmbeddingModel embeddingModel) { - return new AzureBuilder(searchIndexClient, embeddingModel); + public static Builder builder(SearchIndexClient searchIndexClient, EmbeddingModel embeddingModel) { + return new Builder(searchIndexClient, embeddingModel); } /** * Change the Index Name. * @param indexName The Azure VectorStore index name to use. * @deprecated Since 1.0.0-M5, use {@link #builder(SearchIndexClient, EmbeddingModel)} - * ()} with {@link AzureBuilder#indexName(String)} instead + * ()} with {@link Builder#indexName(String)} instead */ @Deprecated(since = "1.0.0-M5", forRemoval = true) public void setIndexName(String indexName) { @@ -226,7 +226,7 @@ public void setIndexName(String indexName) { * Sets the a default maximum number of similar documents returned. * @param topK The default maximum number of similar documents returned. * @deprecated Since 1.0.0-M5, use {@link #builder(SearchIndexClient, EmbeddingModel)} - * ()} with {@link AzureBuilder#indexName(String)} instead + * ()} with {@link Builder#indexName(String)} instead */ @Deprecated(since = "1.0.0-M5", forRemoval = true) public void setDefaultTopK(int topK) { @@ -239,7 +239,7 @@ public void setDefaultTopK(int topK) { * @param similarityThreshold The a default similarity threshold for returned * documents. * @deprecated Since 1.0.0-M5, use {@link #builder(SearchIndexClient, EmbeddingModel)} - * ()} with {@link AzureBuilder#indexName(String)} instead + * ()} with {@link Builder#indexName(String)} instead */ @Deprecated(since = "1.0.0-M5", forRemoval = true) public void setDefaultSimilarityThreshold(Double similarityThreshold) { @@ -472,7 +472,7 @@ private record AzureSearchDocument(String id, String content, List embedd * * @since 1.0.0 */ - public static class AzureBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final SearchIndexClient searchIndexClient; @@ -488,7 +488,7 @@ public static class AzureBuilder extends AbstractVectorStoreBuilder filterMetadataFields) { + public Builder filterMetadataFields(List filterMetadataFields) { this.filterMetadataFields = filterMetadataFields != null ? filterMetadataFields : List.of(); return this; } @@ -519,7 +519,7 @@ public AzureBuilder filterMetadataFields(List filterMetadataField * @param batchingStrategy the strategy to use * @return the builder instance */ - public AzureBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; @@ -531,7 +531,7 @@ public AzureBuilder batchingStrategy(BatchingStrategy batchingStrategy) { * @return the builder instance * @throws IllegalArgumentException if indexName is null or empty */ - public AzureBuilder indexName(String indexName) { + public Builder indexName(String indexName) { Assert.hasText(indexName, "The index name can not be empty."); this.indexName = indexName; return this; @@ -543,7 +543,7 @@ public AzureBuilder indexName(String indexName) { * @return the builder instance * @throws IllegalArgumentException if defaultTopK is negative */ - public AzureBuilder defaultTopK(int defaultTopK) { + public Builder defaultTopK(int defaultTopK) { Assert.isTrue(defaultTopK >= 0, "The topK should be positive value."); this.defaultTopK = defaultTopK; return this; @@ -557,7 +557,7 @@ public AzureBuilder defaultTopK(int defaultTopK) { * @throws IllegalArgumentException if defaultSimilarityThreshold is not between * 0.0 and 1.0 */ - public AzureBuilder defaultSimilarityThreshold(Double defaultSimilarityThreshold) { + public Builder defaultSimilarityThreshold(Double defaultSimilarityThreshold) { Assert.isTrue(defaultSimilarityThreshold >= 0.0 && defaultSimilarityThreshold <= 1.0, "The similarity threshold must be in range [0.0:1.00]."); this.defaultSimilarityThreshold = defaultSimilarityThreshold; diff --git a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStore.java b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStore.java index eabb5243efd..3f25b97ee3d 100644 --- a/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStore.java +++ b/vector-stores/spring-ai-cassandra-store/src/main/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStore.java @@ -159,14 +159,13 @@ * * When adding documents with the method {@link #add(List)} it first calls * embeddingModel to create the embeddings. This is slow. Configure - * {@link CassandraVectorStore.CassandraBuilder#fixedThreadPoolExecutorSize(int)} - * accordingly to improve performance so embeddings are created and the documents are - * added concurrently. The default concurrency is 16 - * ({@link CassandraVectorStore.CassandraBuilder#DEFAULT_ADD_CONCURRENCY}). Remote - * transformers probably want higher concurrency, and local transformers may need lower - * concurrency. This concurrency limit does not need to be higher than the max parallel - * calls made to the {@link #add(List)} method multiplied by the list size. This - * setting can also serve as a protecting throttle against your embedding model. + * {@link Builder#fixedThreadPoolExecutorSize(int)} accordingly to improve performance so + * embeddings are created and the documents are added concurrently. The default + * concurrency is 16 ({@link Builder#DEFAULT_ADD_CONCURRENCY}). Remote transformers + * probably want higher concurrency, and local transformers may need lower concurrency. + * This concurrency limit does not need to be higher than the max parallel calls made to + * the {@link #add(List)} method multiplied by the list size. This setting can + * also serve as a protecting throttle against your embedding model. * * @author Mick Semb Wever * @author Christian Tzolov @@ -255,7 +254,7 @@ public CassandraVectorStore(CassandraVectorStoreConfig conf, EmbeddingModel embe .batchingStrategy(batchingStrategy)); } - protected CassandraVectorStore(CassandraBuilder builder) { + protected CassandraVectorStore(Builder builder) { super(builder); Assert.notNull(builder.session, "Session must not be null"); @@ -288,8 +287,8 @@ protected CassandraVectorStore(CassandraBuilder builder) { this.returnEmbeddings = builder.returnEmbeddings; } - public static CassandraBuilder builder(EmbeddingModel embeddingModel) { - return new CassandraBuilder(embeddingModel); + public static Builder builder(EmbeddingModel embeddingModel) { + return new Builder(embeddingModel); } private static Float[] toFloatArray(float[] embedding) { @@ -527,7 +526,7 @@ SchemaColumn getPrimaryKeyColumn(int index) { } @VisibleForTesting - static void dropKeyspace(CassandraBuilder builder) { + static void dropKeyspace(Builder builder) { Preconditions.checkState(builder.keyspace.startsWith("test_"), "Only test keyspaces can be dropped"); builder.session.execute(SchemaBuilder.dropKeyspace(builder.keyspace).ifExists().build()); } @@ -782,7 +781,7 @@ public boolean indexed() { * https://github.com/apache/cassandra-java-driver/tree/4.x/manual/core/configuration * */ - public static class CassandraBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private CqlSession session; @@ -826,7 +825,7 @@ public static class CassandraBuilder extends AbstractVectorStoreBuilder partitionKeys) { + public Builder partitionKeys(List partitionKeys) { Assert.notEmpty(partitionKeys, "Partition keys must not be null or empty"); this.partitionKeys = partitionKeys; return this; @@ -926,7 +925,7 @@ public CassandraBuilder partitionKeys(List partitionKeys) { * @param clusteringKeys the clustering keys * @return the builder instance */ - public CassandraBuilder clusteringKeys(List clusteringKeys) { + public Builder clusteringKeys(List clusteringKeys) { this.clusteringKeys = clusteringKeys != null ? clusteringKeys : List.of(); return this; } @@ -936,7 +935,7 @@ public CassandraBuilder clusteringKeys(List clusteringKeys) { * @param indexName the index name * @return the builder instance */ - public CassandraBuilder indexName(String indexName) { + public Builder indexName(String indexName) { this.indexName = indexName; return this; } @@ -946,7 +945,7 @@ public CassandraBuilder indexName(String indexName) { * @param disallowSchemaChanges true to disallow schema changes * @return the builder instance */ - public CassandraBuilder disallowSchemaChanges(boolean disallowSchemaChanges) { + public Builder disallowSchemaChanges(boolean disallowSchemaChanges) { this.disallowSchemaChanges = disallowSchemaChanges; return this; } @@ -957,7 +956,7 @@ public CassandraBuilder disallowSchemaChanges(boolean disallowSchemaChanges) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public CassandraBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; @@ -969,7 +968,7 @@ public CassandraBuilder batchingStrategy(BatchingStrategy batchingStrategy) { * @return the builder instance * @throws IllegalArgumentException if converter is null */ - public CassandraBuilder filterExpressionConverter(FilterExpressionConverter converter) { + public Builder filterExpressionConverter(FilterExpressionConverter converter) { Assert.notNull(converter, "FilterExpressionConverter must not be null"); this.filterExpressionConverter = converter; return this; @@ -981,37 +980,37 @@ public CassandraBuilder filterExpressionConverter(FilterExpressionConverter conv * @return the builder instance * @throws IllegalArgumentException if translator is null */ - public CassandraBuilder documentIdTranslator(DocumentIdTranslator translator) { + public Builder documentIdTranslator(DocumentIdTranslator translator) { Assert.notNull(translator, "DocumentIdTranslator must not be null"); this.documentIdTranslator = translator; return this; } - public CassandraBuilder contentColumnName(String contentColumnName) { + public Builder contentColumnName(String contentColumnName) { this.contentColumnName = contentColumnName; return this; } - public CassandraBuilder embeddingColumnName(String embeddingColumnName) { + public Builder embeddingColumnName(String embeddingColumnName) { this.embeddingColumnName = embeddingColumnName; return this; } - public CassandraBuilder addMetadataColumns(SchemaColumn... columns) { - CassandraBuilder builder = this; + public Builder addMetadataColumns(SchemaColumn... columns) { + Builder builder = this; for (SchemaColumn f : columns) { builder = builder.addMetadataColumn(f); } return builder; } - public CassandraBuilder addMetadataColumns(List columns) { - CassandraBuilder builder = this; + public Builder addMetadataColumns(List columns) { + Builder builder = this; this.metadataColumns.addAll(columns); return builder; } - public CassandraBuilder addMetadataColumn(SchemaColumn column) { + public Builder addMetadataColumn(SchemaColumn column) { Preconditions.checkArgument(this.metadataColumns.stream().noneMatch(sc -> sc.name().equals(column.name())), "A metadata column with name %s has already been added", column.name()); @@ -1026,13 +1025,13 @@ public CassandraBuilder addMetadataColumn(SchemaColumn column) { * @return the builder instance * @throws IllegalArgumentException if translator is null */ - public CassandraBuilder primaryKeyTranslator(PrimaryKeyTranslator translator) { + public Builder primaryKeyTranslator(PrimaryKeyTranslator translator) { Assert.notNull(translator, "PrimaryKeyTranslator must not be null"); this.primaryKeyTranslator = translator; return this; } - public CassandraBuilder returnEmbeddings(boolean returnEmbeddings) { + public Builder returnEmbeddings(boolean returnEmbeddings) { this.returnEmbeddings = true; return this; } diff --git a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraRichSchemaVectorStoreIT.java b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraRichSchemaVectorStoreIT.java index 7967ce3d93d..6a951f27940 100644 --- a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraRichSchemaVectorStoreIT.java +++ b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraRichSchemaVectorStoreIT.java @@ -93,7 +93,7 @@ class CassandraRichSchemaVectorStoreIT { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withUserConfiguration(TestApplication.class); - static CassandraVectorStore.CassandraBuilder storeBuilder(ApplicationContext context, + static CassandraVectorStore.Builder storeBuilder(ApplicationContext context, List columnOverrides) throws IOException { Optional wikiOverride = columnOverrides.stream() @@ -572,7 +572,7 @@ private CassandraVectorStore createStore(ApplicationContext context, boolean dis private CassandraVectorStore createStore(ApplicationContext context, List columnOverrides, boolean disallowSchemaCreation, boolean dropKeyspaceFirst) throws IOException { - CassandraVectorStore.CassandraBuilder builder = storeBuilder(context, columnOverrides); + CassandraVectorStore.Builder builder = storeBuilder(context, columnOverrides); if (disallowSchemaCreation) { builder = builder.disallowSchemaChanges(true); } @@ -584,11 +584,10 @@ private CassandraVectorStore createStore(ApplicationContext context, List columnOverrides, boolean disallowSchemaCreation, boolean dropKeyspaceFirst) - throws IOException { + private CassandraVectorStore.Builder createBuilder(ApplicationContext context, List columnOverrides, + boolean disallowSchemaCreation, boolean dropKeyspaceFirst) throws IOException { - CassandraVectorStore.CassandraBuilder builder = storeBuilder(context, columnOverrides); + CassandraVectorStore.Builder builder = storeBuilder(context, columnOverrides); if (disallowSchemaCreation) { builder = builder.disallowSchemaChanges(true); } diff --git a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreIT.java b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreIT.java index c0ab45da77d..2ecefeb33a5 100644 --- a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreIT.java +++ b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreIT.java @@ -85,15 +85,14 @@ private static String getText(String uri) { } } - private static CassandraVectorStore.CassandraBuilder storeBuilder(CqlSession cqlSession, - EmbeddingModel embeddingModel) { + private static CassandraVectorStore.Builder storeBuilder(CqlSession cqlSession, EmbeddingModel embeddingModel) { return CassandraVectorStore.builder(embeddingModel) .session(cqlSession) .keyspace("test_" + CassandraVectorStore.DEFAULT_KEYSPACE_NAME); } private static CassandraVectorStore createTestStore(ApplicationContext context, SchemaColumn... metadataFields) { - CassandraVectorStore.CassandraBuilder builder = storeBuilder(context.getBean(CqlSession.class), + CassandraVectorStore.Builder builder = storeBuilder(context.getBean(CqlSession.class), context.getBean(EmbeddingModel.class)) .addMetadataColumns(metadataFields); @@ -101,7 +100,7 @@ private static CassandraVectorStore createTestStore(ApplicationContext context, } private static CassandraVectorStore createTestStore(ApplicationContext context, - CassandraVectorStore.CassandraBuilder builder) { + CassandraVectorStore.Builder builder) { CassandraVectorStore.dropKeyspace(builder); CassandraVectorStore store = builder.build(); return store; @@ -151,7 +150,7 @@ void addAndSearch() { @Test void addAndSearchReturnEmbeddings() { this.contextRunner.run(context -> { - CassandraVectorStore.CassandraBuilder builder = storeBuilder(context.getBean(CqlSession.class), + CassandraVectorStore.Builder builder = storeBuilder(context.getBean(CqlSession.class), context.getBean(EmbeddingModel.class)) .returnEmbeddings(true); @@ -425,7 +424,7 @@ public static class TestApplication { @Bean public CassandraVectorStore store(CqlSession cqlSession, EmbeddingModel embeddingModel) { - CassandraVectorStore.CassandraBuilder builder = storeBuilder(cqlSession, embeddingModel).addMetadataColumns( + CassandraVectorStore.Builder builder = storeBuilder(cqlSession, embeddingModel).addMetadataColumns( new CassandraVectorStore.SchemaColumn("meta1", DataTypes.TEXT), new CassandraVectorStore.SchemaColumn("meta2", DataTypes.TEXT), new CassandraVectorStore.SchemaColumn("country", DataTypes.TEXT), diff --git a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreObservationIT.java b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreObservationIT.java index e9645bdc0b6..101a347827f 100644 --- a/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreObservationIT.java +++ b/vector-stores/spring-ai-cassandra-store/src/test/java/org/springframework/ai/vectorstore/cassandra/CassandraVectorStoreObservationIT.java @@ -172,7 +172,7 @@ public EmbeddingModel embeddingModel() { public CassandraVectorStore store(CqlSession cqlSession, EmbeddingModel embeddingModel, ObservationRegistry observationRegistry) { - CassandraVectorStore.CassandraBuilder builder = CassandraVectorStore.builder(embeddingModel) + CassandraVectorStore.Builder builder = CassandraVectorStore.builder(embeddingModel) .session(cqlSession) .session(cqlSession) .keyspace("test_" + CassandraVectorStore.DEFAULT_KEYSPACE_NAME) diff --git a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java index bed32ec933d..768d39bd2e3 100644 --- a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java +++ b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java @@ -110,9 +110,9 @@ public ChromaVectorStore(EmbeddingModel embeddingModel, ChromaApi chromaApi, Str } /** - * @param builder {@link Builder} for chroma vector store + * @param builder {@link VectorStore.Builder} for chroma vector store */ - protected ChromaVectorStore(ChromaBuilder builder) { + protected ChromaVectorStore(Builder builder) { super(builder); this.chromaApi = builder.chromaApi; @@ -132,8 +132,8 @@ protected ChromaVectorStore(ChromaBuilder builder) { } } - public static ChromaBuilder builder(ChromaApi chromaApi, EmbeddingModel embeddingModel) { - return new ChromaBuilder(chromaApi, embeddingModel); + public static Builder builder(ChromaApi chromaApi, EmbeddingModel embeddingModel) { + return new Builder(chromaApi, embeddingModel); } @Override @@ -274,7 +274,7 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str .collectionName(this.collectionName + ":" + this.collectionId); } - public static class ChromaBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final ChromaApi chromaApi; @@ -288,7 +288,7 @@ public static class ChromaBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final Session session; @@ -347,7 +347,7 @@ public static class CoherenceBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final RestClient restClient; @@ -409,7 +409,7 @@ public static class ElasticsearchBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private String host = GemFireVectorStore.DEFAULT_HOST; @@ -849,7 +849,7 @@ public static class GemFireBuilder extends AbstractVectorStoreBuilder 0, "port must be positive"); this.port = port; return this; @@ -882,7 +882,7 @@ public GemFireBuilder port(int port) { * @param sslEnabled true to enable SSL, false otherwise * @return the builder instance */ - public GemFireBuilder sslEnabled(boolean sslEnabled) { + public Builder sslEnabled(boolean sslEnabled) { this.sslEnabled = sslEnabled; return this; } @@ -893,7 +893,7 @@ public GemFireBuilder sslEnabled(boolean sslEnabled) { * @return the builder instance * @throws IllegalArgumentException if indexName is null or empty */ - public GemFireBuilder indexName(String indexName) { + public Builder indexName(String indexName) { Assert.hasText(indexName, "indexName must have a value"); this.indexName = indexName; return this; @@ -905,7 +905,7 @@ public GemFireBuilder indexName(String indexName) { * @return the builder instance * @throws IllegalArgumentException if beamWidth is not within valid range */ - public GemFireBuilder beamWidth(int beamWidth) { + public Builder beamWidth(int beamWidth) { Assert.isTrue(beamWidth > 0, "beamWidth must be positive"); Assert.isTrue(beamWidth <= GemFireVectorStore.UPPER_BOUND_BEAM_WIDTH, "beamWidth must be less than or equal to " + GemFireVectorStore.UPPER_BOUND_BEAM_WIDTH); @@ -919,7 +919,7 @@ public GemFireBuilder beamWidth(int beamWidth) { * @return the builder instance * @throws IllegalArgumentException if maxConnections is not within valid range */ - public GemFireBuilder maxConnections(int maxConnections) { + public Builder maxConnections(int maxConnections) { Assert.isTrue(maxConnections > 0, "maxConnections must be positive"); Assert.isTrue(maxConnections <= GemFireVectorStore.UPPER_BOUND_MAX_CONNECTIONS, "maxConnections must be less than or equal to " + GemFireVectorStore.UPPER_BOUND_MAX_CONNECTIONS); @@ -933,7 +933,7 @@ public GemFireBuilder maxConnections(int maxConnections) { * @return the builder instance * @throws IllegalArgumentException if buckets is negative */ - public GemFireBuilder buckets(int buckets) { + public Builder buckets(int buckets) { Assert.isTrue(buckets >= 0, "buckets must not be negative"); this.buckets = buckets; return this; @@ -945,7 +945,7 @@ public GemFireBuilder buckets(int buckets) { * @return the builder instance * @throws IllegalArgumentException if vectorSimilarityFunction is null or empty */ - public GemFireBuilder vectorSimilarityFunction(String vectorSimilarityFunction) { + public Builder vectorSimilarityFunction(String vectorSimilarityFunction) { Assert.hasText(vectorSimilarityFunction, "vectorSimilarityFunction must have a value"); this.vectorSimilarityFunction = vectorSimilarityFunction; return this; @@ -956,7 +956,7 @@ public GemFireBuilder vectorSimilarityFunction(String vectorSimilarityFunction) * @param fields the fields to use * @return the builder instance */ - public GemFireBuilder fields(String[] fields) { + public Builder fields(String[] fields) { this.fields = fields; return this; } @@ -966,7 +966,7 @@ public GemFireBuilder fields(String[] fields) { * @param initializeSchema true to initialize schema, false otherwise * @return the builder instance */ - public GemFireBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -977,7 +977,7 @@ public GemFireBuilder initializeSchema(boolean initializeSchema) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public GemFireBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-hanadb-store/src/main/java/org/springframework/ai/vectorstore/hanadb/HanaCloudVectorStore.java b/vector-stores/spring-ai-hanadb-store/src/main/java/org/springframework/ai/vectorstore/hanadb/HanaCloudVectorStore.java index af4fb94f303..1b60a801235 100644 --- a/vector-stores/spring-ai-hanadb-store/src/main/java/org/springframework/ai/vectorstore/hanadb/HanaCloudVectorStore.java +++ b/vector-stores/spring-ai-hanadb-store/src/main/java/org/springframework/ai/vectorstore/hanadb/HanaCloudVectorStore.java @@ -129,7 +129,7 @@ public HanaCloudVectorStore(HanaVectorRepository rep * create new HanaCloudVectorStore instances. * @param builder the configured builder instance */ - protected HanaCloudVectorStore(HanaCloudBuilder builder) { + protected HanaCloudVectorStore(Builder builder) { super(builder); Assert.notNull(builder.repository, "Repository must not be null"); @@ -144,9 +144,9 @@ protected HanaCloudVectorStore(HanaCloudBuilder builder) { * Creates a new builder for configuring and creating HanaCloudVectorStore instances. * @return a new builder instance */ - public static HanaCloudBuilder builder(HanaVectorRepository repository, + public static Builder builder(HanaVectorRepository repository, EmbeddingModel embeddingModel) { - return new HanaCloudBuilder(repository, embeddingModel); + return new Builder(repository, embeddingModel); } @Override @@ -233,7 +233,7 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str * * @since 1.0.0 */ - public static class HanaCloudBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final HanaVectorRepository repository; @@ -248,8 +248,7 @@ public static class HanaCloudBuilder extends AbstractVectorStoreBuilder repository, - EmbeddingModel embeddingModel) { + private Builder(HanaVectorRepository repository, EmbeddingModel embeddingModel) { super(embeddingModel); Assert.notNull(repository, "Repository must not be null"); this.repository = repository; @@ -260,7 +259,7 @@ private HanaCloudBuilder(HanaVectorRepository reposi * @param tableName the name of the table to use * @return the builder instance */ - public HanaCloudBuilder tableName(String tableName) { + public Builder tableName(String tableName) { this.tableName = tableName; return this; } @@ -270,7 +269,7 @@ public HanaCloudBuilder tableName(String tableName) { * @param topK the number of results * @return the builder instance */ - public HanaCloudBuilder topK(int topK) { + public Builder topK(int topK) { this.topK = topK; return this; } diff --git a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/milvus/vectorstore/MilvusVectorStore.java b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/milvus/vectorstore/MilvusVectorStore.java index d8a5853f690..0f670252579 100644 --- a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/milvus/vectorstore/MilvusVectorStore.java +++ b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/milvus/vectorstore/MilvusVectorStore.java @@ -64,6 +64,7 @@ import org.springframework.ai.observation.conventions.VectorStoreSimilarityMetric; import org.springframework.ai.vectorstore.AbstractVectorStoreBuilder; import org.springframework.ai.vectorstore.SearchRequest; +import org.springframework.ai.vectorstore.VectorStore; import org.springframework.ai.vectorstore.filter.FilterExpressionConverter; import org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore; import org.springframework.ai.vectorstore.observation.VectorStoreObservationContext; @@ -237,9 +238,9 @@ public MilvusVectorStore(MilvusServiceClient milvusClient, EmbeddingModel embedd } /** - * @param builder {@link Builder} for chroma vector store + * @param builder {@link VectorStore.Builder} for chroma vector store */ - protected MilvusVectorStore(MilvusBuilder builder) { + protected MilvusVectorStore(Builder builder) { super(builder); Assert.notNull(builder.milvusClient, "milvusClient must not be null"); @@ -266,8 +267,8 @@ protected MilvusVectorStore(MilvusBuilder builder) { * recommended way to instantiate a MilvusBuilder. * @return a new MilvusBuilder instance */ - public static MilvusBuilder builder(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) { - return new MilvusBuilder(milvusClient, embeddingModel); + public static Builder builder(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) { + return new Builder(milvusClient, embeddingModel); } @Override @@ -575,7 +576,7 @@ private String getSimilarityMetric() { return SIMILARITY_TYPE_MAPPING.get(this.metricType).value(); } - public static final class MilvusBuilder extends AbstractVectorStoreBuilder { + public static final class Builder extends AbstractVectorStoreBuilder { private final MilvusServiceClient milvusClient; @@ -609,7 +610,7 @@ public static final class MilvusBuilder extends AbstractVectorStoreBuilder= 1 && newEmbeddingDimension <= 32768, "Dimension has to be withing the boundaries 1 and 32768 (inclusively)"); this.embeddingDimension = newEmbeddingDimension; @@ -693,7 +694,7 @@ public MilvusBuilder embeddingDimension(int newEmbeddingDimension) { * @param idFieldName The name for the ID field (defaults to DOC_ID_FIELD_NAME) * @return this builder instance */ - public MilvusBuilder iDFieldName(String idFieldName) { + public Builder iDFieldName(String idFieldName) { this.idFieldName = idFieldName; return this; } @@ -703,7 +704,7 @@ public MilvusBuilder iDFieldName(String idFieldName) { * @param isAutoId true to enable auto-generated IDs, false to use provided IDs * @return this builder instance */ - public MilvusBuilder autoId(boolean isAutoId) { + public Builder autoId(boolean isAutoId) { this.isAutoId = isAutoId; return this; } @@ -714,7 +715,7 @@ public MilvusBuilder autoId(boolean isAutoId) { * CONTENT_FIELD_NAME) * @return this builder instance */ - public MilvusBuilder contentFieldName(String contentFieldName) { + public Builder contentFieldName(String contentFieldName) { this.contentFieldName = contentFieldName; return this; } @@ -725,7 +726,7 @@ public MilvusBuilder contentFieldName(String contentFieldName) { * METADATA_FIELD_NAME) * @return this builder instance */ - public MilvusBuilder metadataFieldName(String metadataFieldName) { + public Builder metadataFieldName(String metadataFieldName) { this.metadataFieldName = metadataFieldName; return this; } @@ -736,7 +737,7 @@ public MilvusBuilder metadataFieldName(String metadataFieldName) { * EMBEDDING_FIELD_NAME) * @return this builder instance */ - public MilvusBuilder embeddingFieldName(String embeddingFieldName) { + public Builder embeddingFieldName(String embeddingFieldName) { this.embeddingFieldName = embeddingFieldName; return this; } @@ -747,7 +748,7 @@ public MilvusBuilder embeddingFieldName(String embeddingFieldName) { * existing schema * @return this builder instance */ - public MilvusBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -758,7 +759,7 @@ public MilvusBuilder initializeSchema(boolean initializeSchema) { * @return this builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public MilvusBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "batchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java index 67b6ca4864e..852d0bea6c7 100644 --- a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java +++ b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java @@ -198,7 +198,7 @@ public MongoDBAtlasVectorStore(MongoTemplate mongoTemplate, EmbeddingModel embed .batchingStrategy(batchingStrategy)); } - protected MongoDBAtlasVectorStore(MongoDBBuilder builder) { + protected MongoDBAtlasVectorStore(Builder builder) { super(builder); Assert.notNull(builder.mongoTemplate, "MongoTemplate must not be null"); @@ -352,11 +352,11 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str * Creates a new builder instance for MongoDBAtlasVectorStore. * @return a new MongoDBBuilder instance */ - public static MongoDBBuilder builder(MongoTemplate mongoTemplate, EmbeddingModel embeddingModel) { - return new MongoDBBuilder(mongoTemplate, embeddingModel); + public static Builder builder(MongoTemplate mongoTemplate, EmbeddingModel embeddingModel) { + return new Builder(mongoTemplate, embeddingModel); } - public static class MongoDBBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final MongoTemplate mongoTemplate; @@ -379,7 +379,7 @@ public static class MongoDBBuilder extends AbstractVectorStoreBuilder metadataFieldsToFilter) { + public Builder metadataFieldsToFilter(List metadataFieldsToFilter) { Assert.notEmpty(metadataFieldsToFilter, "Fields list must not be empty"); this.metadataFieldsToFilter = metadataFieldsToFilter; return this; @@ -451,7 +451,7 @@ public MongoDBBuilder metadataFieldsToFilter(List metadataFieldsToFilter * @param initializeSchema true to initialize schema, false otherwise * @return the builder instance */ - public MongoDBBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -462,7 +462,7 @@ public MongoDBBuilder initializeSchema(boolean initializeSchema) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public MongoDBBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "batchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; @@ -474,7 +474,7 @@ public MongoDBBuilder batchingStrategy(BatchingStrategy batchingStrategy) { * @return the builder instance * @throws IllegalArgumentException if converter is null */ - public MongoDBBuilder filterExpressionConverter(MongoDBAtlasFilterExpressionConverter converter) { + public Builder filterExpressionConverter(MongoDBAtlasFilterExpressionConverter converter) { Assert.notNull(converter, "filterExpressionConverter must not be null"); this.filterExpressionConverter = converter; return this; diff --git a/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/neo4j/Neo4jVectorStore.java b/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/neo4j/Neo4jVectorStore.java index e0264b7472e..d752cd02b8a 100644 --- a/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/neo4j/Neo4jVectorStore.java +++ b/vector-stores/spring-ai-neo4j-store/src/main/java/org/springframework/ai/vectorstore/neo4j/Neo4jVectorStore.java @@ -210,7 +210,7 @@ public Neo4jVectorStore(Driver driver, EmbeddingModel embeddingModel, Neo4jVecto .batchingStrategy(batchingStrategy)); } - protected Neo4jVectorStore(Neo4jBuilder builder) { + protected Neo4jVectorStore(Builder builder) { super(builder); Assert.notNull(builder.driver, "Neo4j driver must not be null"); @@ -398,11 +398,11 @@ public enum Neo4jDistanceType { } - public static Neo4jBuilder builder(Driver driver, EmbeddingModel embeddingModel) { - return new Neo4jBuilder(driver, embeddingModel); + public static Builder builder(Driver driver, EmbeddingModel embeddingModel) { + return new Builder(driver, embeddingModel); } - public static class Neo4jBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final Driver driver; @@ -426,7 +426,7 @@ public static class Neo4jBuilder extends AbstractVectorStoreBuilder= 1, "Dimension has to be positive"); this.embeddingDimension = dimension; return this; @@ -473,7 +473,7 @@ public Neo4jBuilder embeddingDimension(int dimension) { * @return the builder instance * @throws IllegalArgumentException if distanceType is null */ - public Neo4jBuilder distanceType(Neo4jDistanceType distanceType) { + public Builder distanceType(Neo4jDistanceType distanceType) { Assert.notNull(distanceType, "Distance type may not be null"); this.distanceType = distanceType; return this; @@ -484,7 +484,7 @@ public Neo4jBuilder distanceType(Neo4jDistanceType distanceType) { * @param label the label to use * @return the builder instance */ - public Neo4jBuilder label(String label) { + public Builder label(String label) { if (StringUtils.hasText(label)) { this.label = label; } @@ -496,7 +496,7 @@ public Neo4jBuilder label(String label) { * @param embeddingProperty the property name to use * @return the builder instance */ - public Neo4jBuilder embeddingProperty(String embeddingProperty) { + public Builder embeddingProperty(String embeddingProperty) { if (StringUtils.hasText(embeddingProperty)) { this.embeddingProperty = embeddingProperty; } @@ -508,7 +508,7 @@ public Neo4jBuilder embeddingProperty(String embeddingProperty) { * @param indexName the index name to use * @return the builder instance */ - public Neo4jBuilder indexName(String indexName) { + public Builder indexName(String indexName) { if (StringUtils.hasText(indexName)) { this.indexName = indexName; } @@ -520,7 +520,7 @@ public Neo4jBuilder indexName(String indexName) { * @param idProperty the property name to use * @return the builder instance */ - public Neo4jBuilder idProperty(String idProperty) { + public Builder idProperty(String idProperty) { if (StringUtils.hasText(idProperty)) { this.idProperty = idProperty; } @@ -532,7 +532,7 @@ public Neo4jBuilder idProperty(String idProperty) { * @param constraintName the constraint name to use * @return the builder instance */ - public Neo4jBuilder constraintName(String constraintName) { + public Builder constraintName(String constraintName) { if (StringUtils.hasText(constraintName)) { this.constraintName = constraintName; } @@ -544,7 +544,7 @@ public Neo4jBuilder constraintName(String constraintName) { * @param initializeSchema true to initialize schema, false otherwise * @return the builder instance */ - public Neo4jBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -555,7 +555,7 @@ public Neo4jBuilder initializeSchema(boolean initializeSchema) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public Neo4jBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java b/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java index 86b576f66d5..22bd75856eb 100644 --- a/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java +++ b/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java @@ -250,7 +250,7 @@ public OpenSearchVectorStore(String index, OpenSearchClient openSearchClient, Em * Creates a new OpenSearchVectorStore using the builder pattern. * @param builder The configured builder instance */ - protected OpenSearchVectorStore(OpenSearchBuilder builder) { + protected OpenSearchVectorStore(Builder builder) { super(builder); Assert.notNull(builder.openSearchClient, "OpenSearchClient must not be null"); @@ -270,8 +270,8 @@ protected OpenSearchVectorStore(OpenSearchBuilder builder) { * Creates a new builder instance for configuring an OpenSearchVectorStore. * @return A new OpenSearchBuilder instance */ - public static OpenSearchBuilder builder(OpenSearchClient openSearchClient, EmbeddingModel embeddingModel) { - return new OpenSearchBuilder(openSearchClient, embeddingModel); + public static Builder builder(OpenSearchClient openSearchClient, EmbeddingModel embeddingModel) { + return new Builder(openSearchClient, embeddingModel); } public OpenSearchVectorStore withSimilarityFunction(String similarityFunction) { @@ -446,7 +446,7 @@ public record OpenSearchDocument(String id, String content, Map /** * Builder class for creating OpenSearchVectorStore instances. */ - public static class OpenSearchBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final OpenSearchClient openSearchClient; @@ -468,7 +468,7 @@ public static class OpenSearchBuilder extends AbstractVectorStoreBuilder toFloatList(final float[] embeddings) { * * @since 1.0.0 */ - public static class OracleBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final JdbcTemplate jdbcTemplate; @@ -775,7 +775,7 @@ public static class OracleBuilder extends AbstractVectorStoreBuilder 0 && dimensions <= 65535, "Number of dimensions must be between 1 and 65535"); @@ -838,7 +838,7 @@ public OracleBuilder dimensions(int dimensions) { * @return the builder instance * @throws IllegalArgumentException if searchAccuracy is not within valid range */ - public OracleBuilder searchAccuracy(int searchAccuracy) { + public Builder searchAccuracy(int searchAccuracy) { if (searchAccuracy != DEFAULT_SEARCH_ACCURACY) { Assert.isTrue(searchAccuracy >= 1 && searchAccuracy <= 100, "Search accuracy must be between 1 and 100"); @@ -852,7 +852,7 @@ public OracleBuilder searchAccuracy(int searchAccuracy) { * @param initializeSchema true to initialize schema, false otherwise * @return the builder instance */ - public OracleBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -863,7 +863,7 @@ public OracleBuilder initializeSchema(boolean initializeSchema) { * otherwise * @return the builder instance */ - public OracleBuilder removeExistingVectorStoreTable(boolean removeExistingVectorStoreTable) { + public Builder removeExistingVectorStoreTable(boolean removeExistingVectorStoreTable) { this.removeExistingVectorStoreTable = removeExistingVectorStoreTable; return this; } @@ -873,7 +873,7 @@ public OracleBuilder removeExistingVectorStoreTable(boolean removeExistingVector * @param forcedNormalization true to force normalization, false otherwise * @return the builder instance */ - public OracleBuilder forcedNormalization(boolean forcedNormalization) { + public Builder forcedNormalization(boolean forcedNormalization) { this.forcedNormalization = forcedNormalization; return this; } @@ -884,7 +884,7 @@ public OracleBuilder forcedNormalization(boolean forcedNormalization) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public OracleBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/pinecone/PineconeVectorStore.java b/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/pinecone/PineconeVectorStore.java index 518a966721c..7ed986823d4 100644 --- a/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/pinecone/PineconeVectorStore.java +++ b/vector-stores/spring-ai-pinecone-store/src/main/java/org/springframework/ai/vectorstore/pinecone/PineconeVectorStore.java @@ -127,7 +127,7 @@ public PineconeVectorStore(PineconeVectorStoreConfig config, EmbeddingModel embe * Creates a new PineconeVectorStore using the builder pattern. * @param builder The configured builder instance */ - protected PineconeVectorStore(PineconeBuilder builder) { + protected PineconeVectorStore(Builder builder) { super(builder); Assert.hasText(builder.apiKey, "ApiKey must not be null or empty"); @@ -156,9 +156,9 @@ protected PineconeVectorStore(PineconeBuilder builder) { * Creates a new builder instance for configuring a PineconeVectorStore. * @return A new PineconeBuilder instance */ - public static PineconeBuilder builder(EmbeddingModel embeddingModel, String apiKey, String projectId, - String environment, String indexName) { - return new PineconeBuilder(embeddingModel, apiKey, projectId, environment, indexName); + public static Builder builder(EmbeddingModel embeddingModel, String apiKey, String projectId, String environment, + String indexName) { + return new Builder(embeddingModel, apiKey, projectId, environment, indexName); } /** @@ -338,7 +338,7 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str /** * Builder class for creating PineconeVectorStore instances. */ - public static class PineconeBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final String apiKey; @@ -358,7 +358,7 @@ public static class PineconeBuilder extends AbstractVectorStoreBuilder { + public static final class Builder extends AbstractVectorStoreBuilder { private final QdrantClient qdrantClient; @@ -385,7 +385,7 @@ public static final class QdrantBuilder extends AbstractVectorStoreBuilder { + public static class Builder extends AbstractVectorStoreBuilder { private final JedisPooled jedis; @@ -506,7 +506,7 @@ public static class RedisBuilder extends AbstractVectorStoreBuilder fields) { + public Builder metadataFields(@Nullable List fields) { if (fields != null && !fields.isEmpty()) { this.metadataFields = new ArrayList<>(fields); } @@ -598,7 +598,7 @@ public RedisBuilder metadataFields(@Nullable List fields) { * @param initializeSchema true to initialize schema, false otherwise * @return the builder instance */ - public RedisBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -609,7 +609,7 @@ public RedisBuilder initializeSchema(boolean initializeSchema) { * @return the builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public RedisBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "BatchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java index 590adddce44..053f7da8cb0 100644 --- a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java +++ b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java @@ -207,13 +207,13 @@ public TypesenseVectorStore(Client client, EmbeddingModel embeddingModel, Typese * Protected constructor for creating a TypesenseVectorStore instance using the * builder pattern. This constructor initializes the vector store with the configured * settings from the builder and performs necessary validations. - * @param builder the {@link TypesenseBuilder} containing all configuration settings + * @param builder the {@link Builder} containing all configuration settings * @throws IllegalArgumentException if the client is null * @throws IllegalArgumentException if the embeddingModel is null - * @see TypesenseBuilder + * @see Builder * @since 1.0.0 */ - protected TypesenseVectorStore(TypesenseBuilder builder) { + protected TypesenseVectorStore(Builder builder) { super(builder); Assert.notNull(builder.client, "Typesense must not be null"); @@ -231,8 +231,8 @@ protected TypesenseVectorStore(TypesenseBuilder builder) { * a TypesenseVectorStore. * @return a new TypesenseBuilder instance */ - public static TypesenseBuilder builder(Client client, EmbeddingModel embeddingModel) { - return new TypesenseBuilder(client, embeddingModel); + public static Builder builder(Client client, EmbeddingModel embeddingModel) { + return new Builder(client, embeddingModel); } @Override @@ -449,7 +449,7 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str .similarityMetric(VectorStoreSimilarityMetric.COSINE.value()); } - public static final class TypesenseBuilder extends AbstractVectorStoreBuilder { + public static final class Builder extends AbstractVectorStoreBuilder { private String collectionName = DEFAULT_COLLECTION_NAME; @@ -468,7 +468,7 @@ public static final class TypesenseBuilder extends AbstractVectorStoreBuilder 0, "Embedding dimension must be greater than 0"); this.embeddingDimension = embeddingDimension; return this; @@ -503,7 +503,7 @@ public TypesenseBuilder embeddingDimension(int embeddingDimension) { * @param initializeSchema true to initialize schema automatically * @return this builder instance */ - public TypesenseBuilder initializeSchema(boolean initializeSchema) { + public Builder initializeSchema(boolean initializeSchema) { this.initializeSchema = initializeSchema; return this; } @@ -514,7 +514,7 @@ public TypesenseBuilder initializeSchema(boolean initializeSchema) { * @return this builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public TypesenseBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "batchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; diff --git a/vector-stores/spring-ai-typesense-store/src/test/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStoreBuilderTests.java b/vector-stores/spring-ai-typesense-store/src/test/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStoreBuilderTests.java index 4e1bde08a6d..4282d1e5699 100644 --- a/vector-stores/spring-ai-typesense-store/src/test/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStoreBuilderTests.java +++ b/vector-stores/spring-ai-typesense-store/src/test/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStoreBuilderTests.java @@ -32,7 +32,7 @@ import static org.mockito.Mockito.mock; /** - * Tests for {@link TypesenseVectorStore.TypesenseBuilder}. + * Tests for {@link TypesenseVectorStore.Builder}. * * @author Mark Pollack */ diff --git a/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStore.java b/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStore.java index ae1c50d012e..c7827ce0d0e 100644 --- a/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStore.java +++ b/vector-stores/spring-ai-weaviate-store/src/main/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStore.java @@ -193,12 +193,12 @@ public WeaviateVectorStore(WeaviateVectorStoreConfig vectorStoreConfig, Embeddin * Protected constructor for creating a WeaviateVectorStore instance using the builder * pattern. This constructor initializes the vector store with the configured settings * from the builder and performs necessary validations. - * @param builder the {@link WeaviateBuilder} containing all configuration settings + * @param builder the {@link Builder} containing all configuration settings * @throws IllegalArgumentException if the weaviateClient is null - * @see WeaviateBuilder + * @see Builder * @since 1.0.0 */ - protected WeaviateVectorStore(WeaviateBuilder builder) { + protected WeaviateVectorStore(Builder builder) { super(builder); Assert.notNull(builder.weaviateClient, "WeaviateClient must not be null"); @@ -218,8 +218,8 @@ protected WeaviateVectorStore(WeaviateBuilder builder) { * a WeaviateVectorStore. * @return a new WeaviateBuilder instance */ - public static WeaviateBuilder builder(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) { - return new WeaviateBuilder(weaviateClient, embeddingModel); + public static Builder builder(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) { + return new Builder(weaviateClient, embeddingModel); } private Field[] buildWeaviateSimilaritySearchFields() { @@ -533,7 +533,7 @@ public enum Type { } } - public static final class WeaviateBuilder extends AbstractVectorStoreBuilder { + public static final class Builder extends AbstractVectorStoreBuilder { private String weaviateObjectClass = "SpringAiWeaviate"; @@ -552,7 +552,7 @@ public static final class WeaviateBuilder extends AbstractVectorStoreBuilder filterMetadataFields) { + public Builder filterMetadataFields(List filterMetadataFields) { Assert.notNull(filterMetadataFields, "filterMetadataFields must not be null"); this.filterMetadataFields = filterMetadataFields; return this; @@ -600,7 +600,7 @@ public WeaviateBuilder filterMetadataFields(List filterMetadataFi * @return this builder instance * @throws IllegalArgumentException if batchingStrategy is null */ - public WeaviateBuilder batchingStrategy(BatchingStrategy batchingStrategy) { + public Builder batchingStrategy(BatchingStrategy batchingStrategy) { Assert.notNull(batchingStrategy, "batchingStrategy must not be null"); this.batchingStrategy = batchingStrategy; return this; @@ -833,8 +833,7 @@ private Builder() { * @return this builder * @throws IllegalArgumentException if filterMetadataFields is null * @deprecated Use - * {@link WeaviateVectorStore.WeaviateBuilder#filterMetadataFields(List)} - * instead + * {@link WeaviateVectorStore.Builder#filterMetadataFields(List)} instead */ @Deprecated(forRemoval = true, since = "1.0.0-M5") public Builder withFilterableMetadataFields(List filterMetadataFields) { @@ -863,8 +862,8 @@ public Builder withHeaders(Map headers) { * @param objectClass objectClass to use * @return this builder * @throws IllegalArgumentException if objectClass is empty or null - * @deprecated Use - * {@link WeaviateVectorStore.WeaviateBuilder#objectClass(String)} instead + * @deprecated Use {@link WeaviateVectorStore.Builder#objectClass(String)} + * instead */ @Deprecated(forRemoval = true, since = "1.0.0-M5") public Builder withObjectClass(String objectClass) { @@ -879,7 +878,7 @@ public Builder withObjectClass(String objectClass) { * @return this builder * @throws IllegalArgumentException if consistencyLevel is null * @deprecated Use - * {@link WeaviateVectorStore.WeaviateBuilder#consistencyLevel(WeaviateVectorStore.ConsistentLevel)} + * {@link WeaviateVectorStore.Builder#consistencyLevel(WeaviateVectorStore.ConsistentLevel)} * instead */ @Deprecated(forRemoval = true, since = "1.0.0-M5") diff --git a/vector-stores/spring-ai-weaviate-store/src/test/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStoreBuilderTests.java b/vector-stores/spring-ai-weaviate-store/src/test/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStoreBuilderTests.java index 03986de31d2..e1c6c89e212 100644 --- a/vector-stores/spring-ai-weaviate-store/src/test/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStoreBuilderTests.java +++ b/vector-stores/spring-ai-weaviate-store/src/test/java/org/springframework/ai/vectorstore/weaviate/WeaviateVectorStoreBuilderTests.java @@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Tests for {@link WeaviateVectorStore.WeaviateBuilder}. + * Tests for {@link WeaviateVectorStore.Builder}. * * @author Mark Pollack */