diff --git a/langchain4j-mongodb-atlas/pom.xml b/langchain4j-mongodb-atlas/pom.xml
index 5f14acd07..9f88d24ce 100644
--- a/langchain4j-mongodb-atlas/pom.xml
+++ b/langchain4j-mongodb-atlas/pom.xml
@@ -26,13 +26,7 @@
org.mongodb
mongodb-driver-sync
- 4.11.1
-
-
-
- org.projectlombok
- lombok
- provided
+ 4.11.4
diff --git a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/IndexMapping.java b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/IndexMapping.java
index b02d9c177..a32622d13 100644
--- a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/IndexMapping.java
+++ b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/IndexMapping.java
@@ -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 metadataFieldNames;
+ private final int dimension;
+ private final Set metadataFieldNames;
+
+ public IndexMapping(int dimension, Set 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 getMetadataFieldNames() {
+ return metadataFieldNames;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+
+ private int dimension;
+ private Set metadataFieldNames;
+
+ public Builder dimension(int dimension) {
+ this.dimension = dimension;
+ return this;
+ }
+
+ public Builder metadataFieldNames(Set metadataFieldNames) {
+ this.metadataFieldNames = metadataFieldNames;
+ return this;
+ }
+
+ public IndexMapping build() {
+ return new IndexMapping(dimension, metadataFieldNames);
+ }
+ }
}
diff --git a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MappingUtils.java b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MappingUtils.java
index bc4b512bb..5ec52349e 100644
--- a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MappingUtils.java
+++ b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MappingUtils.java
@@ -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 toEmbeddingMatch(MongoDbMatchedDocument matchedDocument) {
diff --git a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbDocument.java b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbDocument.java
index 3371aa149..20bef5bf8 100644
--- a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbDocument.java
+++ b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbDocument.java
@@ -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 embedding;
private String text;
private Map metadata;
+
+ public MongoDbDocument() {
+ }
+
+ public MongoDbDocument(String id, List embedding, String text, Map 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 getEmbedding() {
+ return embedding;
+ }
+
+ public void setEmbedding(List embedding) {
+ this.embedding = embedding;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public Map getMetadata() {
+ return metadata;
+ }
+
+ public void setMetadata(Map metadata) {
+ this.metadata = metadata;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+
+ private String id;
+ private List embedding;
+ private String text;
+ private Map metadata;
+
+ public Builder id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder embedding(List embedding) {
+ this.embedding = embedding;
+ return this;
+ }
+
+ public Builder text(String text) {
+ this.text = text;
+ return this;
+ }
+
+ public Builder metadata(Map metadata) {
+ this.metadata = metadata;
+ return this;
+ }
+
+ public MongoDbDocument build() {
+ return new MongoDbDocument(id, embedding, text, metadata);
+ }
+
+ }
}
diff --git a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbMatchedDocument.java b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbMatchedDocument.java
index cb4e8a437..0d7e808d5 100644
--- a/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbMatchedDocument.java
+++ b/langchain4j-mongodb-atlas/src/main/java/dev/langchain4j/store/embedding/mongodb/MongoDbMatchedDocument.java
@@ -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 metadata;
private Double score;
+
+ public MongoDbMatchedDocument() {
+ }
+
+ public MongoDbMatchedDocument(String id, List embedding, String text, Map 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 getEmbedding() {
+ return embedding;
+ }
+
+ public void setEmbedding(List embedding) {
+ this.embedding = embedding;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public Map getMetadata() {
+ return metadata;
+ }
+
+ public void setMetadata(Map metadata) {
+ this.metadata = metadata;
+ }
+
+ public Double getScore() {
+ return score;
+ }
+
+ public void setScore(Double score) {
+ this.score = score;
+ }
}
diff --git a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreCloudIT.java b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreCloudIT.java
index 34bc4a493..d1624962d 100644
--- a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreCloudIT.java
+++ b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreCloudIT.java
@@ -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";
diff --git a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreLocalIT.java b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreLocalIT.java
index 97dbca506..49cd1c224 100644
--- a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreLocalIT.java
+++ b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreLocalIT.java
@@ -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();
diff --git a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreNativeFilterIT.java b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreNativeFilterIT.java
index 50bf0721f..495e5d95e 100644
--- a/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreNativeFilterIT.java
+++ b/langchain4j-mongodb-atlas/src/test/java/dev/langchain4j/store/embedding/mongodb/MongoDbEmbeddingStoreNativeFilterIT.java
@@ -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);
}
}