Vector store impls: code cleanup and checkstyle fixes
Signed-off-by: Soby Chacko <soby.chacko@broadcom.com>
This commit is contained in:
@@ -57,7 +57,6 @@ import org.slf4j.LoggerFactory;
|
||||
import reactor.core.publisher.Flux;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.springframework.ai.chroma.vectorstore;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@@ -26,7 +26,6 @@ import java.util.stream.Collectors;
|
||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||
import co.elastic.clients.elasticsearch.core.BulkRequest;
|
||||
import co.elastic.clients.elasticsearch.core.BulkResponse;
|
||||
import co.elastic.clients.elasticsearch.core.DeleteByQueryResponse;
|
||||
import co.elastic.clients.elasticsearch.core.SearchResponse;
|
||||
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
|
||||
import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
@@ -41,10 +40,8 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.document.DocumentMetadata;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
|
||||
import org.springframework.ai.model.EmbeddingUtils;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreSimilarityMetric;
|
||||
|
||||
@@ -54,7 +54,6 @@ import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.openai.OpenAiEmbeddingModel;
|
||||
import org.springframework.ai.openai.api.OpenAiApi;
|
||||
import org.springframework.ai.vectorstore.SearchRequest;
|
||||
import org.springframework.ai.vectorstore.filter.Filter;
|
||||
import org.springframework.ai.vectorstore.filter.Filter.Expression;
|
||||
import org.springframework.ai.vectorstore.filter.Filter.ExpressionType;
|
||||
import org.springframework.ai.vectorstore.filter.Filter.Key;
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.springframework.ai.vectorstore.gemfire;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
@@ -32,10 +31,8 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.document.DocumentMetadata;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
import org.springframework.ai.util.JacksonUtils;
|
||||
import org.springframework.ai.vectorstore.AbstractVectorStoreBuilder;
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.springframework.ai.vectorstore.hanadb;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
|
||||
@@ -32,10 +32,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreSimilarityMetric;
|
||||
import org.springframework.ai.util.JacksonUtils;
|
||||
|
||||
@@ -54,10 +54,8 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.document.DocumentMetadata;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
|
||||
import org.springframework.ai.model.EmbeddingUtils;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreSimilarityMetric;
|
||||
|
||||
@@ -19,14 +19,12 @@ package org.springframework.ai.vectorstore.opensearch;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.TimeZone;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -39,10 +39,8 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.document.DocumentMetadata;
|
||||
import org.springframework.ai.embedding.BatchingStrategy;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.embedding.EmbeddingOptionsBuilder;
|
||||
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreProvider;
|
||||
import org.springframework.ai.observation.conventions.VectorStoreSimilarityMetric;
|
||||
import org.springframework.ai.vectorstore.AbstractVectorStoreBuilder;
|
||||
|
||||
@@ -47,12 +47,12 @@ import org.springframework.ai.document.id.RandomIdGenerator;
|
||||
import org.springframework.ai.embedding.EmbeddingModel;
|
||||
import org.springframework.ai.openai.OpenAiEmbeddingModel;
|
||||
import org.springframework.ai.openai.api.OpenAiApi;
|
||||
import org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIdType;
|
||||
import org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType;
|
||||
import org.springframework.ai.vectorstore.SearchRequest;
|
||||
import org.springframework.ai.vectorstore.VectorStore;
|
||||
import org.springframework.ai.vectorstore.filter.Filter;
|
||||
import org.springframework.ai.vectorstore.filter.FilterExpressionTextParser.FilterExpressionParseException;
|
||||
import org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIdType;
|
||||
import org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
@@ -560,9 +560,9 @@ public class PgVectorStoreIT {
|
||||
public VectorStore vectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) {
|
||||
return PgVectorStore.builder(jdbcTemplate, embeddingModel)
|
||||
.dimensions(PgVectorStore.INVALID_EMBEDDING_DIMENSION)
|
||||
.idType(idType)
|
||||
.idType(this.idType)
|
||||
.distanceType(this.distanceType)
|
||||
.initializeSchema(initializeSchema)
|
||||
.initializeSchema(this.initializeSchema)
|
||||
.indexType(PgIndexType.HNSW)
|
||||
.removeExistingVectorStoreTable(true)
|
||||
.build();
|
||||
|
||||
@@ -419,6 +419,58 @@ public class PineconeVectorStore extends AbstractObservationVectorStore {
|
||||
this.indexName = indexName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Pinecone namespace. Note: The free-tier (gcp-starter) doesn't support
|
||||
* Namespaces.
|
||||
* @param namespace The namespace to use (leave empty for free tier)
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder namespace(@Nullable String namespace) {
|
||||
this.namespace = namespace != null ? namespace : "";
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the content field name.
|
||||
* @param contentFieldName The content field name to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder contentFieldName(@Nullable String contentFieldName) {
|
||||
this.contentFieldName = contentFieldName != null ? contentFieldName : CONTENT_FIELD_NAME;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the distance metadata field name.
|
||||
* @param distanceMetadataFieldName The distance metadata field name to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder distanceMetadataFieldName(@Nullable String distanceMetadataFieldName) {
|
||||
this.distanceMetadataFieldName = distanceMetadataFieldName != null ? distanceMetadataFieldName
|
||||
: DocumentMetadata.DISTANCE.value();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the server-side timeout.
|
||||
* @param serverSideTimeout The timeout duration to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder serverSideTimeout(@Nullable Duration serverSideTimeout) {
|
||||
this.serverSideTimeout = serverSideTimeout != null ? serverSideTimeout : Duration.ofSeconds(20);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a new PineconeVectorStore instance with the configured properties.
|
||||
* @return A new PineconeVectorStore instance
|
||||
* @throws IllegalStateException if the builder is in an invalid state
|
||||
*/
|
||||
@Override
|
||||
public PineconeVectorStore build() {
|
||||
return new PineconeVectorStore(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* First step interface requiring API key configuration.
|
||||
*/
|
||||
@@ -487,40 +539,6 @@ public class PineconeVectorStore extends AbstractObservationVectorStore {
|
||||
*/
|
||||
public static class StepBuilder {
|
||||
|
||||
private record ApiKeyStep(EmbeddingModel embeddingModel) implements BuilderWithApiKey {
|
||||
@Override
|
||||
public BuilderWithProjectId apiKey(String apiKey) {
|
||||
Assert.hasText(apiKey, "ApiKey must not be null or empty");
|
||||
return new ProjectIdStep(embeddingModel, apiKey);
|
||||
}
|
||||
}
|
||||
|
||||
private record ProjectIdStep(EmbeddingModel embeddingModel, String apiKey) implements BuilderWithProjectId {
|
||||
@Override
|
||||
public BuilderWithEnvironment projectId(String projectId) {
|
||||
Assert.hasText(projectId, "ProjectId must not be null or empty");
|
||||
return new EnvironmentStep(embeddingModel, apiKey, projectId);
|
||||
}
|
||||
}
|
||||
|
||||
private record EnvironmentStep(EmbeddingModel embeddingModel, String apiKey,
|
||||
String projectId) implements BuilderWithEnvironment {
|
||||
@Override
|
||||
public BuilderWithIndexName environment(String environment) {
|
||||
Assert.hasText(environment, "Environment must not be null or empty");
|
||||
return new IndexNameStep(embeddingModel, apiKey, projectId, environment);
|
||||
}
|
||||
}
|
||||
|
||||
private record IndexNameStep(EmbeddingModel embeddingModel, String apiKey, String projectId,
|
||||
String environment) implements BuilderWithIndexName {
|
||||
@Override
|
||||
public Builder indexName(String indexName) {
|
||||
Assert.hasText(indexName, "IndexName must not be null or empty");
|
||||
return new Builder(embeddingModel, apiKey, projectId, environment, indexName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the step builder sequence with the embedding model.
|
||||
* @param embeddingModel The embedding model to use
|
||||
@@ -532,58 +550,40 @@ public class PineconeVectorStore extends AbstractObservationVectorStore {
|
||||
return new ApiKeyStep(embeddingModel);
|
||||
}
|
||||
|
||||
}
|
||||
private record ApiKeyStep(EmbeddingModel embeddingModel) implements BuilderWithApiKey {
|
||||
@Override
|
||||
public BuilderWithProjectId apiKey(String apiKey) {
|
||||
Assert.hasText(apiKey, "ApiKey must not be null or empty");
|
||||
return new ProjectIdStep(this.embeddingModel, apiKey);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Pinecone namespace. Note: The free-tier (gcp-starter) doesn't support
|
||||
* Namespaces.
|
||||
* @param namespace The namespace to use (leave empty for free tier)
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder namespace(@Nullable String namespace) {
|
||||
this.namespace = namespace != null ? namespace : "";
|
||||
return this;
|
||||
}
|
||||
private record ProjectIdStep(EmbeddingModel embeddingModel, String apiKey) implements BuilderWithProjectId {
|
||||
@Override
|
||||
public BuilderWithEnvironment projectId(String projectId) {
|
||||
Assert.hasText(projectId, "ProjectId must not be null or empty");
|
||||
return new EnvironmentStep(this.embeddingModel, this.apiKey, projectId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the content field name.
|
||||
* @param contentFieldName The content field name to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder contentFieldName(@Nullable String contentFieldName) {
|
||||
this.contentFieldName = contentFieldName != null ? contentFieldName : CONTENT_FIELD_NAME;
|
||||
return this;
|
||||
}
|
||||
private record EnvironmentStep(EmbeddingModel embeddingModel, String apiKey,
|
||||
String projectId) implements BuilderWithEnvironment {
|
||||
@Override
|
||||
public BuilderWithIndexName environment(String environment) {
|
||||
Assert.hasText(environment, "Environment must not be null or empty");
|
||||
return new IndexNameStep(this.embeddingModel, this.apiKey, this.projectId, environment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the distance metadata field name.
|
||||
* @param distanceMetadataFieldName The distance metadata field name to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder distanceMetadataFieldName(@Nullable String distanceMetadataFieldName) {
|
||||
this.distanceMetadataFieldName = distanceMetadataFieldName != null ? distanceMetadataFieldName
|
||||
: DocumentMetadata.DISTANCE.value();
|
||||
return this;
|
||||
}
|
||||
private record IndexNameStep(EmbeddingModel embeddingModel, String apiKey, String projectId,
|
||||
String environment) implements BuilderWithIndexName {
|
||||
@Override
|
||||
public Builder indexName(String indexName) {
|
||||
Assert.hasText(indexName, "IndexName must not be null or empty");
|
||||
return new Builder(this.embeddingModel, this.apiKey, this.projectId, this.environment, indexName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the server-side timeout.
|
||||
* @param serverSideTimeout The timeout duration to use
|
||||
* @return The builder instance
|
||||
*/
|
||||
public Builder serverSideTimeout(@Nullable Duration serverSideTimeout) {
|
||||
this.serverSideTimeout = serverSideTimeout != null ? serverSideTimeout : Duration.ofSeconds(20);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a new PineconeVectorStore instance with the configured properties.
|
||||
* @return A new PineconeVectorStore instance
|
||||
* @throws IllegalStateException if the builder is in an invalid state
|
||||
*/
|
||||
@Override
|
||||
public PineconeVectorStore build() {
|
||||
return new PineconeVectorStore(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ import io.qdrant.client.grpc.Points.PointId;
|
||||
import io.qdrant.client.grpc.Points.PointStruct;
|
||||
import io.qdrant.client.grpc.Points.ScoredPoint;
|
||||
import io.qdrant.client.grpc.Points.SearchPoints;
|
||||
import io.qdrant.client.grpc.Points.UpdateStatus;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import org.testcontainers.typesense.TypesenseContainer;
|
||||
|
||||
Reference in New Issue
Block a user