(improvement)(chat) It supports successful startup using Docker, local, and other methods. If the Chroma store creation fails, it will be replaced with in-memory (#1301)

This commit is contained in:
lexluo09
2024-06-30 20:15:46 +08:00
committed by GitHub
parent b56abd7348
commit c8b6af4887
8 changed files with 14391 additions and 16488 deletions

View File

@@ -1,9 +1,13 @@
package dev.langchain4j.chroma.spring;
import dev.langchain4j.inmemory.spring.InMemoryEmbeddingStoreFactory;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreFactory;
import dev.langchain4j.store.embedding.chroma.ChromaEmbeddingStore;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ChromaEmbeddingStoreFactory implements EmbeddingStoreFactory {
private Properties properties;
@@ -14,11 +18,30 @@ public class ChromaEmbeddingStoreFactory implements EmbeddingStoreFactory {
@Override
public EmbeddingStore create(String collectionName) {
EmbeddingStoreProperties embeddingStore = properties.getEmbeddingStore();
return ChromaEmbeddingStore.builder()
.baseUrl(embeddingStore.getBaseUrl())
.collectionName(collectionName)
.timeout(embeddingStore.getTimeout())
.build();
EmbeddingStoreProperties storeProperties = properties.getEmbeddingStore();
EmbeddingStore embeddingStore = null;
try {
embeddingStore = ChromaEmbeddingStore.builder()
.baseUrl(storeProperties.getBaseUrl())
.collectionName(collectionName)
.timeout(storeProperties.getTimeout())
.build();
} catch (Exception e) {
log.error("Failed to create ChromaEmbeddingStore,collectionName:{}"
+ ", fallback to the default InMemoryEmbeddingStore method。",
collectionName, e.getMessage());
}
if (Objects.isNull(embeddingStore)) {
embeddingStore = createInMemoryEmbeddingStore(collectionName);
}
return embeddingStore;
}
private EmbeddingStore createInMemoryEmbeddingStore(String collectionName) {
dev.langchain4j.inmemory.spring.Properties properties = new dev.langchain4j.inmemory.spring.Properties();
dev.langchain4j.inmemory.spring.EmbeddingStoreProperties embeddingStoreProperties =
new dev.langchain4j.inmemory.spring.EmbeddingStoreProperties();
properties.setEmbeddingStore(embeddingStoreProperties);
return new InMemoryEmbeddingStoreFactory(properties).create(collectionName);
}
}

View File

@@ -5,7 +5,7 @@ import lombok.Setter;
@Getter
@Setter
class EmbeddingStoreProperties {
public class EmbeddingStoreProperties {
private String persistPath;
}