diff --git a/common/src/main/java/dev/langchain4j/milvus/spring/EmbeddingStoreProperties.java b/common/src/main/java/dev/langchain4j/milvus/spring/EmbeddingStoreProperties.java new file mode 100644 index 000000000..c65739e62 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/milvus/spring/EmbeddingStoreProperties.java @@ -0,0 +1,26 @@ +package dev.langchain4j.milvus.spring; + +import io.milvus.common.clientenum.ConsistencyLevelEnum; +import io.milvus.param.IndexType; +import io.milvus.param.MetricType; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +class EmbeddingStoreProperties { + + private String host; + private Integer port; + private String collectionName; + private Integer dimension; + private IndexType indexType; + private MetricType metricType; + private String uri; + private String token; + private String username; + private String password; + private ConsistencyLevelEnum consistencyLevel; + private Boolean retrieveEmbeddingsOnSearch; + private String databaseName; +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/milvus/spring/MilvusAutoConfig.java b/common/src/main/java/dev/langchain4j/milvus/spring/MilvusAutoConfig.java new file mode 100644 index 000000000..7f48fb1b2 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/milvus/spring/MilvusAutoConfig.java @@ -0,0 +1,20 @@ +package dev.langchain4j.milvus.spring; + +import static dev.langchain4j.milvus.spring.Properties.PREFIX; + +import dev.langchain4j.store.embedding.EmbeddingStoreFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(Properties.class) +public class MilvusAutoConfig { + + @Bean + @ConditionalOnProperty(PREFIX + ".embedding-store.base-url") + EmbeddingStoreFactory milvusChatModel(Properties properties) { + return new MilvusEmbeddingStoreFactory(properties); + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/milvus/spring/MilvusEmbeddingStoreFactory.java b/common/src/main/java/dev/langchain4j/milvus/spring/MilvusEmbeddingStoreFactory.java new file mode 100644 index 000000000..1516439c6 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/milvus/spring/MilvusEmbeddingStoreFactory.java @@ -0,0 +1,33 @@ +package dev.langchain4j.milvus.spring; + +import dev.langchain4j.store.embedding.EmbeddingStore; +import dev.langchain4j.store.embedding.EmbeddingStoreFactory; +import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore; + +public class MilvusEmbeddingStoreFactory implements EmbeddingStoreFactory { + private Properties properties; + + public MilvusEmbeddingStoreFactory(Properties properties) { + this.properties = properties; + } + + @Override + public EmbeddingStore create(String collectionName) { + EmbeddingStoreProperties embeddingStore = properties.getEmbeddingStore(); + return MilvusEmbeddingStore.builder() + .host(embeddingStore.getHost()) + .port(embeddingStore.getPort()) + .collectionName(collectionName) + .dimension(embeddingStore.getDimension()) + .indexType(embeddingStore.getIndexType()) + .metricType(embeddingStore.getMetricType()) + .uri(embeddingStore.getUri()) + .token(embeddingStore.getToken()) + .username(embeddingStore.getUsername()) + .password(embeddingStore.getPassword()) + .consistencyLevel(embeddingStore.getConsistencyLevel()) + .retrieveEmbeddingsOnSearch(embeddingStore.getRetrieveEmbeddingsOnSearch()) + .databaseName(embeddingStore.getDatabaseName()) + .build(); + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/milvus/spring/Properties.java b/common/src/main/java/dev/langchain4j/milvus/spring/Properties.java new file mode 100644 index 000000000..5c54b08d5 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/milvus/spring/Properties.java @@ -0,0 +1,17 @@ +package dev.langchain4j.milvus.spring; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +@Getter +@Setter +@ConfigurationProperties(prefix = Properties.PREFIX) +public class Properties { + + static final String PREFIX = "langchain4j.milvus"; + + @NestedConfigurationProperty + EmbeddingStoreProperties embeddingStore; +} \ No newline at end of file