(improvement)(chat) Add support for milvus metastore in spring way (#1200)

This commit is contained in:
lexluo09
2024-06-23 22:25:37 +08:00
committed by GitHub
parent 871c88d167
commit 15ceca3102
4 changed files with 96 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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;
}