MongoDB Atlas get rid of lombok (#1806)
## Issue #1636 ## Change 1. Bump `mongodb-driver-sync` from `4.11.1` to `4.11.4` 2. Get rid of lombok ## General checklist - [x] There are no breaking changes - [ ] I have added unit and integration tests for my change - [x] I have manually run all the unit and integration tests in the module I have added/changed, and they are all green - [x] I have manually run all the unit and integration tests in the [core](https://github.com/langchain4j/langchain4j/tree/main/langchain4j-core) and [main](https://github.com/langchain4j/langchain4j/tree/main/langchain4j) modules, and they are all green <!-- Before adding documentation and example(s) (below), please wait until the PR is reviewed and approved. --> - [ ] I have added/updated the [documentation](https://github.com/langchain4j/langchain4j/tree/main/docs/docs) - [ ] I have added an example in the [examples repo](https://github.com/langchain4j/langchain4j-examples) (only for "big" features) - [ ] I have added/updated [Spring Boot starter(s)](https://github.com/langchain4j/langchain4j-spring) (if applicable)
This commit is contained in:
parent
abd98a8b0b
commit
5de2ee47d0
|
@ -26,13 +26,7 @@
|
|||
<dependency>
|
||||
<groupId>org.mongodb</groupId>
|
||||
<artifactId>mongodb-driver-sync</artifactId>
|
||||
<version>4.11.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<scope>provided</scope>
|
||||
<version>4.11.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
|
@ -1,21 +1,17 @@
|
|||
package dev.langchain4j.store.embedding.mongodb;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class IndexMapping {
|
||||
|
||||
private int dimension;
|
||||
private Set<String> metadataFieldNames;
|
||||
private final int dimension;
|
||||
private final Set<String> metadataFieldNames;
|
||||
|
||||
public IndexMapping(int dimension, Set<String> metadataFieldNames) {
|
||||
this.dimension = dimension;
|
||||
this.metadataFieldNames = new HashSet<>(metadataFieldNames);
|
||||
}
|
||||
|
||||
public static IndexMapping defaultIndexMapping() {
|
||||
return IndexMapping.builder()
|
||||
|
@ -23,4 +19,36 @@ public class IndexMapping {
|
|||
.metadataFieldNames(new HashSet<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
public int getDimension() {
|
||||
return dimension;
|
||||
}
|
||||
|
||||
public Set<String> getMetadataFieldNames() {
|
||||
return metadataFieldNames;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private int dimension;
|
||||
private Set<String> metadataFieldNames;
|
||||
|
||||
public Builder dimension(int dimension) {
|
||||
this.dimension = dimension;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder metadataFieldNames(Set<String> metadataFieldNames) {
|
||||
this.metadataFieldNames = metadataFieldNames;
|
||||
return this;
|
||||
}
|
||||
|
||||
public IndexMapping build() {
|
||||
return new IndexMapping(dimension, metadataFieldNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,14 +11,19 @@ import java.util.Set;
|
|||
class MappingUtils {
|
||||
|
||||
private MappingUtils() throws InstantiationException {
|
||||
throw new InstantiationException("can't instantiate this class");
|
||||
throw new InstantiationException("Can't instantiate this class");
|
||||
}
|
||||
|
||||
static MongoDbDocument toMongoDbDocument(String id, Embedding embedding, TextSegment textSegment) {
|
||||
if (textSegment == null) {
|
||||
return new MongoDbDocument(id, embedding.vectorAsList(), null, null);
|
||||
}
|
||||
return new MongoDbDocument(id, embedding.vectorAsList(), textSegment.text(), textSegment.metadata().asMap());
|
||||
boolean hasTextSegment = textSegment != null;
|
||||
|
||||
return MongoDbDocument.builder()
|
||||
.id(id)
|
||||
.embedding(embedding.vectorAsList())
|
||||
.text(hasTextSegment ? textSegment.text() : null)
|
||||
// TODO: change to using Metadata.toMap()
|
||||
.metadata(hasTextSegment ? textSegment.metadata().asMap() : null)
|
||||
.build();
|
||||
}
|
||||
|
||||
static EmbeddingMatch<TextSegment> toEmbeddingMatch(MongoDbMatchedDocument matchedDocument) {
|
||||
|
|
|
@ -1,18 +1,10 @@
|
|||
package dev.langchain4j.store.embedding.mongodb;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.bson.codecs.pojo.annotations.BsonId;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class MongoDbDocument {
|
||||
|
||||
@BsonId
|
||||
|
@ -20,4 +12,83 @@ public class MongoDbDocument {
|
|||
private List<Float> embedding;
|
||||
private String text;
|
||||
private Map<String, String> metadata;
|
||||
|
||||
public MongoDbDocument() {
|
||||
}
|
||||
|
||||
public MongoDbDocument(String id, List<Float> embedding, String text, Map<String, String> metadata) {
|
||||
this.id = id;
|
||||
this.embedding = embedding;
|
||||
this.text = text;
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public List<Float> getEmbedding() {
|
||||
return embedding;
|
||||
}
|
||||
|
||||
public void setEmbedding(List<Float> embedding) {
|
||||
this.embedding = embedding;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Map<String, String> getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
public void setMetadata(Map<String, String> metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private String id;
|
||||
private List<Float> embedding;
|
||||
private String text;
|
||||
private Map<String, String> metadata;
|
||||
|
||||
public Builder id(String id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder embedding(List<Float> embedding) {
|
||||
this.embedding = embedding;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder text(String text) {
|
||||
this.text = text;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder metadata(Map<String, String> metadata) {
|
||||
this.metadata = metadata;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MongoDbDocument build() {
|
||||
return new MongoDbDocument(id, embedding, text, metadata);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
package dev.langchain4j.store.embedding.mongodb;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MongoDbMatchedDocument {
|
||||
|
||||
private String id;
|
||||
|
@ -17,4 +11,55 @@ public class MongoDbMatchedDocument {
|
|||
private String text;
|
||||
private Map<String, String> metadata;
|
||||
private Double score;
|
||||
|
||||
public MongoDbMatchedDocument() {
|
||||
}
|
||||
|
||||
public MongoDbMatchedDocument(String id, List<Float> embedding, String text, Map<String, String> metadata, Double score) {
|
||||
this.id = id;
|
||||
this.embedding = embedding;
|
||||
this.text = text;
|
||||
this.metadata = new HashMap<>(metadata);
|
||||
this.score = score;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public List<Float> getEmbedding() {
|
||||
return embedding;
|
||||
}
|
||||
|
||||
public void setEmbedding(List<Float> embedding) {
|
||||
this.embedding = embedding;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Map<String, String> getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
public void setMetadata(Map<String, String> metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
public Double getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
public void setScore(Double score) {
|
||||
this.score = score;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,12 +16,17 @@ import org.bson.conversions.Bson;
|
|||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
|
||||
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables;
|
||||
|
||||
import static java.lang.String.format;
|
||||
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
|
||||
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
|
||||
|
||||
@EnabledIfEnvironmentVariable(named = "MONGODB_ATLAS_USERNAME", matches = ".+")
|
||||
@EnabledIfEnvironmentVariables({
|
||||
@EnabledIfEnvironmentVariable(named = "MONGODB_ATLAS_USERNAME", matches = ".+"),
|
||||
@EnabledIfEnvironmentVariable(named = "MONGODB_ATLAS_PASSWORD", matches = ".+"),
|
||||
@EnabledIfEnvironmentVariable(named = "MONGODB_ATLAS_HOST", matches = ".+")
|
||||
})
|
||||
class MongoDbEmbeddingStoreCloudIT extends EmbeddingStoreIT {
|
||||
|
||||
private static final String DATABASE_NAME = "test_database";
|
||||
|
|
|
@ -10,7 +10,6 @@ import dev.langchain4j.model.embedding.EmbeddingModel;
|
|||
import dev.langchain4j.model.embedding.onnx.allminilml6v2q.AllMiniLmL6V2QuantizedEmbeddingModel;
|
||||
import dev.langchain4j.store.embedding.EmbeddingStore;
|
||||
import dev.langchain4j.store.embedding.EmbeddingStoreIT;
|
||||
import lombok.SneakyThrows;
|
||||
import org.bson.codecs.configuration.CodecRegistry;
|
||||
import org.bson.codecs.pojo.PojoCodecProvider;
|
||||
import org.bson.conversions.Bson;
|
||||
|
@ -49,7 +48,6 @@ class MongoDbEmbeddingStoreLocalIT extends EmbeddingStoreIT {
|
|||
.build();
|
||||
|
||||
@BeforeAll
|
||||
@SneakyThrows
|
||||
static void start() {
|
||||
mongodb.start();
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import dev.langchain4j.model.embedding.onnx.allminilml6v2q.AllMiniLmL6V2Quantize
|
|||
import dev.langchain4j.store.embedding.EmbeddingMatch;
|
||||
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
|
||||
import dev.langchain4j.store.embedding.EmbeddingStore;
|
||||
import lombok.SneakyThrows;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
|
@ -52,7 +51,6 @@ class MongoDbEmbeddingStoreNativeFilterIT {
|
|||
.build();
|
||||
|
||||
@BeforeAll
|
||||
@SneakyThrows
|
||||
static void start() {
|
||||
mongodb.start();
|
||||
|
||||
|
@ -86,7 +84,7 @@ class MongoDbEmbeddingStoreNativeFilterIT {
|
|||
}
|
||||
|
||||
@Test
|
||||
void should_find_relevant_with_filter() {
|
||||
void should_find_relevant_with_filter() throws Exception {
|
||||
|
||||
// given
|
||||
TextSegment segment = TextSegment.from("this segment should be found", Metadata.from("test-key", "test-value"));
|
||||
|
@ -115,8 +113,7 @@ class MongoDbEmbeddingStoreNativeFilterIT {
|
|||
assertThat(match.embedded()).isEqualTo(segment);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private void awaitUntilPersisted() {
|
||||
private void awaitUntilPersisted() throws Exception {
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue