diff --git a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceFilterExpressionConverter.java b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceFilterExpressionConverter.java similarity index 98% rename from vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceFilterExpressionConverter.java rename to vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceFilterExpressionConverter.java index 7946d7d4e..29f2f1311 100644 --- a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceFilterExpressionConverter.java +++ b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceFilterExpressionConverter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.vectorstore; +package org.springframework.ai.vectorstore.coherence; import java.util.List; diff --git a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceVectorStore.java similarity index 58% rename from vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java rename to vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceVectorStore.java index ea065a7d4..208588bed 100644 --- a/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/CoherenceVectorStore.java +++ b/vector-stores/spring-ai-coherence-store/src/main/java/org/springframework/ai/vectorstore/coherence/CoherenceVectorStore.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.vectorstore; +package org.springframework.ai.vectorstore.coherence; import java.util.ArrayList; import java.util.HashMap; @@ -39,8 +39,15 @@ import com.tangosol.util.Filter; import org.springframework.ai.document.Document; import org.springframework.ai.document.DocumentMetadata; import org.springframework.ai.embedding.EmbeddingModel; +import org.springframework.ai.observation.conventions.VectorStoreProvider; +import org.springframework.ai.vectorstore.AbstractVectorStoreBuilder; +import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.filter.Filter.Expression; +import org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore; +import org.springframework.ai.vectorstore.observation.VectorStoreObservationContext; import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** *
@@ -66,7 +73,7 @@ import org.springframework.beans.factory.InitializingBean;
* @author Thomas Vitale
* @since 1.0.0
*/
-public class CoherenceVectorStore implements VectorStore, InitializingBean {
+public class CoherenceVectorStore extends AbstractObservationVectorStore implements InitializingBean {
public enum IndexType {
@@ -112,11 +119,6 @@ public class CoherenceVectorStore implements VectorStore, InitializingBean {
public static final CoherenceFilterExpressionConverter FILTER_EXPRESSION_CONVERTER = new CoherenceFilterExpressionConverter();
- /**
- * The embedding model to use to create query embedding.
- */
- private final EmbeddingModel embeddingModel;
-
private final int dimensions;
private final Session session;
@@ -126,45 +128,92 @@ public class CoherenceVectorStore implements VectorStore, InitializingBean {
/**
* Map name where vectors will be stored.
*/
- private String mapName = DEFAULT_MAP_NAME;
+ private String mapName;
/**
* Distance type to use for computing vector distances.
*/
- private DistanceType distanceType = DEFAULT_DISTANCE_TYPE;
+ private DistanceType distanceType;
private boolean forcedNormalization;
- private IndexType indexType = IndexType.NONE;
+ private IndexType indexType;
+ /**
+ * Creates a new CoherenceVectorStore with minimal configuration.
+ * @param embeddingModel the embedding model to use
+ * @param session the Coherence session
+ * @deprecated Since 1.0.0-M5, use {@link #builder()} instead
+ */
+ @Deprecated(since = "1.0.0-M5", forRemoval = true)
public CoherenceVectorStore(EmbeddingModel embeddingModel, Session session) {
- this.embeddingModel = embeddingModel;
- this.session = session;
- this.dimensions = embeddingModel.dimensions();
+ this(builder().embeddingModel(embeddingModel).session(session));
}
+ /**
+ * Protected constructor that accepts a builder instance. This is the preferred way to
+ * create new CoherenceVectorStore instances.
+ * @param builder the configured builder instance
+ */
+ protected CoherenceVectorStore(CoherenceBuilder builder) {
+ super(builder);
+
+ Assert.notNull(builder.session, "Session must not be null");
+
+ this.session = builder.session;
+ this.dimensions = builder.getEmbeddingModel().dimensions();
+ this.mapName = builder.mapName;
+ this.distanceType = builder.distanceType;
+ this.forcedNormalization = builder.forcedNormalization;
+ this.indexType = builder.indexType;
+ }
+
+ /**
+ * Creates a new builder for configuring and creating CoherenceVectorStore instances.
+ * @return a new builder instance
+ */
+ public static CoherenceBuilder builder() {
+ return new CoherenceBuilder();
+ }
+
+ /**
+ * @deprecated Since 1.0.0-M5, use {@link #builder()} instead
+ */
+ @Deprecated(since = "1.0.0-M5", forRemoval = true)
public CoherenceVectorStore setMapName(String mapName) {
this.mapName = mapName;
return this;
}
+ /**
+ * @deprecated Since 1.0.0-M5, use {@link #builder()} instead
+ */
+ @Deprecated(since = "1.0.0-M5", forRemoval = true)
public CoherenceVectorStore setDistanceType(DistanceType distanceType) {
this.distanceType = distanceType;
return this;
}
+ /**
+ * @deprecated Since 1.0.0-M5, use {@link #builder()} instead
+ */
+ @Deprecated(since = "1.0.0-M5", forRemoval = true)
public CoherenceVectorStore setIndexType(IndexType indexType) {
this.indexType = indexType;
return this;
}
+ /**
+ * @deprecated Since 1.0.0-M5, use {@link #builder()} instead
+ */
+ @Deprecated(since = "1.0.0-M5", forRemoval = true)
public CoherenceVectorStore setForcedNormalization(boolean forcedNormalization) {
this.forcedNormalization = forcedNormalization;
return this;
}
@Override
- public void add(final List
+ * Provides a fluent API for configuring all aspects of the Coherence vector store,
+ * including map name, distance type, and indexing options.
+ *
+ * @since 1.0.0
+ */
+ public static class CoherenceBuilder extends AbstractVectorStoreBuilder