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:
Martin7-1 2024-09-20 16:32:20 +08:00 committed by GitHub
parent abd98a8b0b
commit 5de2ee47d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 189 additions and 46 deletions

View File

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

View File

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

View File

@ -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) {

View File

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

View File

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

View File

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

View File

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

View File

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