From 16f60dbef9e730181a9f7fb488708b28770db86d Mon Sep 17 00:00:00 2001 From: deep-learning-dynamo Date: Sat, 18 Nov 2023 16:23:10 +0100 Subject: [PATCH] reducing duplication of *EmbeddingStoreIT --- langchain4j-bedrock/pom.xml | 1 - langchain4j-cassandra/pom.xml | 1 - langchain4j-chroma/pom.xml | 9 +- .../chroma/ChromaEmbeddingStoreIT.java | 212 +---------------- langchain4j-core/pom.xml | 18 ++ .../embedding/AbstractEmbeddingStoreIT.java | 220 ++++++++++++++++++ langchain4j-dashscope/pom.xml | 1 - langchain4j-elasticsearch/pom.xml | 1 - langchain4j-hugging-face/pom.xml | 1 - langchain4j-milvus/pom.xml | 1 - langchain4j-ollama/pom.xml | 1 - langchain4j-open-ai/pom.xml | 1 - langchain4j-opensearch/pom.xml | 1 - langchain4j-parent/pom.xml | 26 ++- langchain4j-pgvector/pom.xml | 1 - langchain4j-pinecone/pom.xml | 1 - langchain4j-redis/pom.xml | 1 - langchain4j-vertex-ai/pom.xml | 1 - langchain4j-vespa/pom.xml | 1 - langchain4j-weaviate/pom.xml | 1 - langchain4j/pom.xml | 1 - 21 files changed, 274 insertions(+), 227 deletions(-) create mode 100644 langchain4j-core/src/test/java/dev/langchain4j/store/embedding/AbstractEmbeddingStoreIT.java diff --git a/langchain4j-bedrock/pom.xml b/langchain4j-bedrock/pom.xml index af2dd5137c8..dc1195ce20b 100644 --- a/langchain4j-bedrock/pom.xml +++ b/langchain4j-bedrock/pom.xml @@ -19,7 +19,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-cassandra/pom.xml b/langchain4j-cassandra/pom.xml index 4f68f0688fa..372b806a541 100644 --- a/langchain4j-cassandra/pom.xml +++ b/langchain4j-cassandra/pom.xml @@ -23,7 +23,6 @@ dev.langchain4j langchain4j-core - ${parent.version} diff --git a/langchain4j-chroma/pom.xml b/langchain4j-chroma/pom.xml index eedc039108b..4e9a14a0f20 100644 --- a/langchain4j-chroma/pom.xml +++ b/langchain4j-chroma/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} @@ -39,6 +38,14 @@ okhttp + + dev.langchain4j + langchain4j-core + tests + test-jar + test + + org.junit.jupiter junit-jupiter-engine diff --git a/langchain4j-chroma/src/test/java/dev/langchain4j/store/embedding/chroma/ChromaEmbeddingStoreIT.java b/langchain4j-chroma/src/test/java/dev/langchain4j/store/embedding/chroma/ChromaEmbeddingStoreIT.java index b772a024509..cb982b744cd 100644 --- a/langchain4j-chroma/src/test/java/dev/langchain4j/store/embedding/chroma/ChromaEmbeddingStoreIT.java +++ b/langchain4j-chroma/src/test/java/dev/langchain4j/store/embedding/chroma/ChromaEmbeddingStoreIT.java @@ -1,26 +1,16 @@ package dev.langchain4j.store.embedding.chroma; -import dev.langchain4j.data.document.Metadata; -import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.AllMiniLmL6V2QuantizedEmbeddingModel; import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.store.embedding.CosineSimilarity; -import dev.langchain4j.store.embedding.EmbeddingMatch; +import dev.langchain4j.store.embedding.AbstractEmbeddingStoreIT; import dev.langchain4j.store.embedding.EmbeddingStore; -import dev.langchain4j.store.embedding.RelevanceScore; import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import java.util.List; import static dev.langchain4j.internal.Utils.randomUUID; -import static java.util.Arrays.asList; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.data.Percentage.withPercentage; @Disabled("needs Chroma running locally") -class ChromaEmbeddingStoreIT { +class ChromaEmbeddingStoreIT extends AbstractEmbeddingStoreIT { /** * First ensure you have Chroma running locally. If not, then: @@ -36,199 +26,13 @@ class ChromaEmbeddingStoreIT { private final EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel(); - @Test - void should_add_embedding() { - - Embedding embedding = embeddingModel.embed(randomUUID()).content(); - - String id = embeddingStore.add(embedding); - assertThat(id).isNotNull(); - - List> relevant = embeddingStore.findRelevant(embedding, 10); - assertThat(relevant).hasSize(1); - - EmbeddingMatch match = relevant.get(0); - assertThat(match.score()).isCloseTo(1, withPercentage(1)); - assertThat(match.embeddingId()).isEqualTo(id); - assertThat(match.embedding()).isEqualTo(embedding); - assertThat(match.embedded()).isNull(); - } - - @Test - void should_add_embedding_with_id() { - - String id = randomUUID(); - Embedding embedding = embeddingModel.embed(randomUUID()).content(); - - embeddingStore.add(id, embedding); - - List> relevant = embeddingStore.findRelevant(embedding, 10); - assertThat(relevant).hasSize(1); - - EmbeddingMatch match = relevant.get(0); - assertThat(match.score()).isCloseTo(1, withPercentage(1)); - assertThat(match.embeddingId()).isEqualTo(id); - assertThat(match.embedding()).isEqualTo(embedding); - assertThat(match.embedded()).isNull(); - } - - @Test - void should_add_embedding_with_segment() { - - TextSegment segment = TextSegment.from(randomUUID()); - Embedding embedding = embeddingModel.embed(segment.text()).content(); - - String id = embeddingStore.add(embedding, segment); - assertThat(id).isNotNull(); - - List> relevant = embeddingStore.findRelevant(embedding, 10); - assertThat(relevant).hasSize(1); - - EmbeddingMatch match = relevant.get(0); - assertThat(match.score()).isCloseTo(1, withPercentage(1)); - assertThat(match.embeddingId()).isEqualTo(id); - assertThat(match.embedding()).isEqualTo(embedding); - assertThat(match.embedded()).isEqualTo(segment); - } - - @Test - void should_add_embedding_with_segment_with_metadata() { - - TextSegment segment = TextSegment.from(randomUUID(), Metadata.from("test-key", "test-value")); - Embedding embedding = embeddingModel.embed(segment.text()).content(); - - String id = embeddingStore.add(embedding, segment); - assertThat(id).isNotNull(); - - List> relevant = embeddingStore.findRelevant(embedding, 10); - assertThat(relevant).hasSize(1); - - EmbeddingMatch match = relevant.get(0); - assertThat(match.score()).isCloseTo(1, withPercentage(1)); - assertThat(match.embeddingId()).isEqualTo(id); - assertThat(match.embedding()).isEqualTo(embedding); - assertThat(match.embedded()).isEqualTo(segment); - } - - @Test - void should_add_multiple_embeddings() { - - Embedding firstEmbedding = embeddingModel.embed(randomUUID()).content(); - Embedding secondEmbedding = embeddingModel.embed(randomUUID()).content(); - - List ids = embeddingStore.addAll(asList(firstEmbedding, secondEmbedding)); - assertThat(ids).hasSize(2); - - List> relevant = embeddingStore.findRelevant(firstEmbedding, 10); - assertThat(relevant).hasSize(2); - - EmbeddingMatch firstMatch = relevant.get(0); - assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); - assertThat(firstMatch.embeddingId()).isEqualTo(ids.get(0)); - assertThat(firstMatch.embedding()).isEqualTo(firstEmbedding); - assertThat(firstMatch.embedded()).isNull(); - - EmbeddingMatch secondMatch = relevant.get(1); - assertThat(secondMatch.score()).isBetween(0d, 1d); - assertThat(secondMatch.embeddingId()).isEqualTo(ids.get(1)); - assertThat(secondMatch.embedding()).isEqualTo(secondEmbedding); - assertThat(secondMatch.embedded()).isNull(); + @Override + protected EmbeddingStore embeddingStore() { + return embeddingStore; } - @Test - void should_add_multiple_embeddings_with_segments() { - - TextSegment firstSegment = TextSegment.from(randomUUID()); - Embedding firstEmbedding = embeddingModel.embed(firstSegment.text()).content(); - TextSegment secondSegment = TextSegment.from(randomUUID()); - Embedding secondEmbedding = embeddingModel.embed(secondSegment.text()).content(); - - List ids = embeddingStore.addAll( - asList(firstEmbedding, secondEmbedding), - asList(firstSegment, secondSegment) - ); - assertThat(ids).hasSize(2); - - List> relevant = embeddingStore.findRelevant(firstEmbedding, 10); - assertThat(relevant).hasSize(2); - - EmbeddingMatch firstMatch = relevant.get(0); - assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); - assertThat(firstMatch.embeddingId()).isEqualTo(ids.get(0)); - assertThat(firstMatch.embedding()).isEqualTo(firstEmbedding); - assertThat(firstMatch.embedded()).isEqualTo(firstSegment); - - EmbeddingMatch secondMatch = relevant.get(1); - assertThat(secondMatch.score()).isBetween(0d, 1d); - assertThat(secondMatch.embeddingId()).isEqualTo(ids.get(1)); - assertThat(secondMatch.embedding()).isEqualTo(secondEmbedding); - assertThat(secondMatch.embedded()).isEqualTo(secondSegment); - } - - @Test - void should_find_with_min_score() { - - String firstId = randomUUID(); - Embedding firstEmbedding = embeddingModel.embed(randomUUID()).content(); - embeddingStore.add(firstId, firstEmbedding); - - String secondId = randomUUID(); - Embedding secondEmbedding = embeddingModel.embed(randomUUID()).content(); - embeddingStore.add(secondId, secondEmbedding); - - List> relevant = embeddingStore.findRelevant(firstEmbedding, 10); - assertThat(relevant).hasSize(2); - EmbeddingMatch firstMatch = relevant.get(0); - assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); - assertThat(firstMatch.embeddingId()).isEqualTo(firstId); - EmbeddingMatch secondMatch = relevant.get(1); - assertThat(secondMatch.score()).isBetween(0d, 1d); - assertThat(secondMatch.embeddingId()).isEqualTo(secondId); - - List> relevant2 = embeddingStore.findRelevant( - firstEmbedding, - 10, - secondMatch.score() - 0.01 - ); - assertThat(relevant2).hasSize(2); - assertThat(relevant2.get(0).embeddingId()).isEqualTo(firstId); - assertThat(relevant2.get(1).embeddingId()).isEqualTo(secondId); - - List> relevant3 = embeddingStore.findRelevant( - firstEmbedding, - 10, - secondMatch.score() - ); - assertThat(relevant3).hasSize(2); - assertThat(relevant3.get(0).embeddingId()).isEqualTo(firstId); - assertThat(relevant3.get(1).embeddingId()).isEqualTo(secondId); - - List> relevant4 = embeddingStore.findRelevant( - firstEmbedding, - 10, - secondMatch.score() + 0.01 - ); - assertThat(relevant4).hasSize(1); - assertThat(relevant4.get(0).embeddingId()).isEqualTo(firstId); - } - - @Test - void should_return_correct_score() { - - Embedding embedding = embeddingModel.embed("hello").content(); - - String id = embeddingStore.add(embedding); - assertThat(id).isNotNull(); - - Embedding referenceEmbedding = embeddingModel.embed("hi").content(); - - List> relevant = embeddingStore.findRelevant(referenceEmbedding, 1); - assertThat(relevant).hasSize(1); - - EmbeddingMatch match = relevant.get(0); - assertThat(match.score()).isCloseTo( - RelevanceScore.fromCosineSimilarity(CosineSimilarity.between(embedding, referenceEmbedding)), - withPercentage(1) - ); + @Override + protected EmbeddingModel embeddingModel() { + return embeddingModel; } } \ No newline at end of file diff --git a/langchain4j-core/pom.xml b/langchain4j-core/pom.xml index 21590747ead..3cba5b34da5 100644 --- a/langchain4j-core/pom.xml +++ b/langchain4j-core/pom.xml @@ -54,6 +54,24 @@ + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + test-jar + + + + + + + Apache License, Version 2.0 diff --git a/langchain4j-core/src/test/java/dev/langchain4j/store/embedding/AbstractEmbeddingStoreIT.java b/langchain4j-core/src/test/java/dev/langchain4j/store/embedding/AbstractEmbeddingStoreIT.java new file mode 100644 index 00000000000..29d21b3f900 --- /dev/null +++ b/langchain4j-core/src/test/java/dev/langchain4j/store/embedding/AbstractEmbeddingStoreIT.java @@ -0,0 +1,220 @@ +package dev.langchain4j.store.embedding; + +import dev.langchain4j.data.document.Metadata; +import dev.langchain4j.data.embedding.Embedding; +import dev.langchain4j.data.segment.TextSegment; +import dev.langchain4j.model.embedding.EmbeddingModel; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static dev.langchain4j.internal.Utils.randomUUID; +import static java.util.Arrays.asList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Percentage.withPercentage; + +/** + * A minimum set of tests that each implementation of {@link EmbeddingStore} must pass. + */ +public abstract class AbstractEmbeddingStoreIT { + + protected abstract EmbeddingStore embeddingStore(); + + protected abstract EmbeddingModel embeddingModel(); + + @Test + void should_add_embedding() { + + Embedding embedding = embeddingModel().embed(randomUUID()).content(); + + String id = embeddingStore().add(embedding); + assertThat(id).isNotNull(); + + List> relevant = embeddingStore().findRelevant(embedding, 10); + assertThat(relevant).hasSize(1); + + EmbeddingMatch match = relevant.get(0); + assertThat(match.score()).isCloseTo(1, withPercentage(1)); + assertThat(match.embeddingId()).isEqualTo(id); + assertThat(match.embedding()).isEqualTo(embedding); + assertThat(match.embedded()).isNull(); + } + + @Test + void should_add_embedding_with_id() { + + String id = randomUUID(); + Embedding embedding = embeddingModel().embed(randomUUID()).content(); + + embeddingStore().add(id, embedding); + + List> relevant = embeddingStore().findRelevant(embedding, 10); + assertThat(relevant).hasSize(1); + + EmbeddingMatch match = relevant.get(0); + assertThat(match.score()).isCloseTo(1, withPercentage(1)); + assertThat(match.embeddingId()).isEqualTo(id); + assertThat(match.embedding()).isEqualTo(embedding); + assertThat(match.embedded()).isNull(); + } + + @Test + void should_add_embedding_with_segment() { + + TextSegment segment = TextSegment.from(randomUUID()); + Embedding embedding = embeddingModel().embed(segment.text()).content(); + + String id = embeddingStore().add(embedding, segment); + assertThat(id).isNotNull(); + + List> relevant = embeddingStore().findRelevant(embedding, 10); + assertThat(relevant).hasSize(1); + + EmbeddingMatch match = relevant.get(0); + assertThat(match.score()).isCloseTo(1, withPercentage(1)); + assertThat(match.embeddingId()).isEqualTo(id); + assertThat(match.embedding()).isEqualTo(embedding); + assertThat(match.embedded()).isEqualTo(segment); + } + + @Test + void should_add_embedding_with_segment_with_metadata() { + + TextSegment segment = TextSegment.from(randomUUID(), Metadata.from("test-key", "test-value")); + Embedding embedding = embeddingModel().embed(segment.text()).content(); + + String id = embeddingStore().add(embedding, segment); + assertThat(id).isNotNull(); + + List> relevant = embeddingStore().findRelevant(embedding, 10); + assertThat(relevant).hasSize(1); + + EmbeddingMatch match = relevant.get(0); + assertThat(match.score()).isCloseTo(1, withPercentage(1)); + assertThat(match.embeddingId()).isEqualTo(id); + assertThat(match.embedding()).isEqualTo(embedding); + assertThat(match.embedded()).isEqualTo(segment); + } + + @Test + void should_add_multiple_embeddings() { + + Embedding firstEmbedding = embeddingModel().embed(randomUUID()).content(); + Embedding secondEmbedding = embeddingModel().embed(randomUUID()).content(); + + List ids = embeddingStore().addAll(asList(firstEmbedding, secondEmbedding)); + assertThat(ids).hasSize(2); + + List> relevant = embeddingStore().findRelevant(firstEmbedding, 10); + assertThat(relevant).hasSize(2); + + EmbeddingMatch firstMatch = relevant.get(0); + assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); + assertThat(firstMatch.embeddingId()).isEqualTo(ids.get(0)); + assertThat(firstMatch.embedding()).isEqualTo(firstEmbedding); + assertThat(firstMatch.embedded()).isNull(); + + EmbeddingMatch secondMatch = relevant.get(1); + assertThat(secondMatch.score()).isBetween(0d, 1d); + assertThat(secondMatch.embeddingId()).isEqualTo(ids.get(1)); + assertThat(secondMatch.embedding()).isEqualTo(secondEmbedding); + assertThat(secondMatch.embedded()).isNull(); + } + + @Test + void should_add_multiple_embeddings_with_segments() { + + TextSegment firstSegment = TextSegment.from(randomUUID()); + Embedding firstEmbedding = embeddingModel().embed(firstSegment.text()).content(); + TextSegment secondSegment = TextSegment.from(randomUUID()); + Embedding secondEmbedding = embeddingModel().embed(secondSegment.text()).content(); + + List ids = embeddingStore().addAll( + asList(firstEmbedding, secondEmbedding), + asList(firstSegment, secondSegment) + ); + assertThat(ids).hasSize(2); + + List> relevant = embeddingStore().findRelevant(firstEmbedding, 10); + assertThat(relevant).hasSize(2); + + EmbeddingMatch firstMatch = relevant.get(0); + assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); + assertThat(firstMatch.embeddingId()).isEqualTo(ids.get(0)); + assertThat(firstMatch.embedding()).isEqualTo(firstEmbedding); + assertThat(firstMatch.embedded()).isEqualTo(firstSegment); + + EmbeddingMatch secondMatch = relevant.get(1); + assertThat(secondMatch.score()).isBetween(0d, 1d); + assertThat(secondMatch.embeddingId()).isEqualTo(ids.get(1)); + assertThat(secondMatch.embedding()).isEqualTo(secondEmbedding); + assertThat(secondMatch.embedded()).isEqualTo(secondSegment); + } + + @Test + void should_find_with_min_score() { + + String firstId = randomUUID(); + Embedding firstEmbedding = embeddingModel().embed(randomUUID()).content(); + embeddingStore().add(firstId, firstEmbedding); + + String secondId = randomUUID(); + Embedding secondEmbedding = embeddingModel().embed(randomUUID()).content(); + embeddingStore().add(secondId, secondEmbedding); + + List> relevant = embeddingStore().findRelevant(firstEmbedding, 10); + assertThat(relevant).hasSize(2); + EmbeddingMatch firstMatch = relevant.get(0); + assertThat(firstMatch.score()).isCloseTo(1, withPercentage(1)); + assertThat(firstMatch.embeddingId()).isEqualTo(firstId); + EmbeddingMatch secondMatch = relevant.get(1); + assertThat(secondMatch.score()).isBetween(0d, 1d); + assertThat(secondMatch.embeddingId()).isEqualTo(secondId); + + List> relevant2 = embeddingStore().findRelevant( + firstEmbedding, + 10, + secondMatch.score() - 0.01 + ); + assertThat(relevant2).hasSize(2); + assertThat(relevant2.get(0).embeddingId()).isEqualTo(firstId); + assertThat(relevant2.get(1).embeddingId()).isEqualTo(secondId); + + List> relevant3 = embeddingStore().findRelevant( + firstEmbedding, + 10, + secondMatch.score() + ); + assertThat(relevant3).hasSize(2); + assertThat(relevant3.get(0).embeddingId()).isEqualTo(firstId); + assertThat(relevant3.get(1).embeddingId()).isEqualTo(secondId); + + List> relevant4 = embeddingStore().findRelevant( + firstEmbedding, + 10, + secondMatch.score() + 0.01 + ); + assertThat(relevant4).hasSize(1); + assertThat(relevant4.get(0).embeddingId()).isEqualTo(firstId); + } + + @Test + void should_return_correct_score() { + + Embedding embedding = embeddingModel().embed("hello").content(); + + String id = embeddingStore().add(embedding); + assertThat(id).isNotNull(); + + Embedding referenceEmbedding = embeddingModel().embed("hi").content(); + + List> relevant = embeddingStore().findRelevant(referenceEmbedding, 1); + assertThat(relevant).hasSize(1); + + EmbeddingMatch match = relevant.get(0); + assertThat(match.score()).isCloseTo( + RelevanceScore.fromCosineSimilarity(CosineSimilarity.between(embedding, referenceEmbedding)), + withPercentage(1) + ); + } +} diff --git a/langchain4j-dashscope/pom.xml b/langchain4j-dashscope/pom.xml index 82d6ae0f3f3..4bce06664d6 100644 --- a/langchain4j-dashscope/pom.xml +++ b/langchain4j-dashscope/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-elasticsearch/pom.xml b/langchain4j-elasticsearch/pom.xml index cac7f353363..5698ba0abd4 100644 --- a/langchain4j-elasticsearch/pom.xml +++ b/langchain4j-elasticsearch/pom.xml @@ -20,7 +20,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-hugging-face/pom.xml b/langchain4j-hugging-face/pom.xml index 38efdd80afa..e89382dcbe6 100644 --- a/langchain4j-hugging-face/pom.xml +++ b/langchain4j-hugging-face/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-milvus/pom.xml b/langchain4j-milvus/pom.xml index 0aba3aec307..6539d257c29 100644 --- a/langchain4j-milvus/pom.xml +++ b/langchain4j-milvus/pom.xml @@ -19,7 +19,6 @@ dev.langchain4j langchain4j-core - ${parent.version} diff --git a/langchain4j-ollama/pom.xml b/langchain4j-ollama/pom.xml index f5cf66832a8..fc0065b344c 100644 --- a/langchain4j-ollama/pom.xml +++ b/langchain4j-ollama/pom.xml @@ -19,7 +19,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-open-ai/pom.xml b/langchain4j-open-ai/pom.xml index 54348c16b97..7c622bcba0b 100644 --- a/langchain4j-open-ai/pom.xml +++ b/langchain4j-open-ai/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-opensearch/pom.xml b/langchain4j-opensearch/pom.xml index 51f1bb1811f..8dfd228bc6f 100644 --- a/langchain4j-opensearch/pom.xml +++ b/langchain4j-opensearch/pom.xml @@ -26,7 +26,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-parent/pom.xml b/langchain4j-parent/pom.xml index a0e8e751e48..f0fd4148045 100644 --- a/langchain4j-parent/pom.xml +++ b/langchain4j-parent/pom.xml @@ -49,12 +49,32 @@ + + dev.langchain4j + langchain4j-core + ${project.version} + + + + dev.langchain4j + langchain4j-core + ${project.version} + tests + test-jar + + dev.ai4j openai4j ${openai4j.version} + + dev.langchain4j + langchain4j-embeddings-all-minilm-l6-v2-q + ${project.version} + + com.squareup.retrofit2 retrofit @@ -248,12 +268,6 @@ 1.9.4 - - dev.langchain4j - langchain4j-embeddings-all-minilm-l6-v2-q - ${project.version} - - redis.clients jedis diff --git a/langchain4j-pgvector/pom.xml b/langchain4j-pgvector/pom.xml index 45ee7db21bb..4f96de7f898 100644 --- a/langchain4j-pgvector/pom.xml +++ b/langchain4j-pgvector/pom.xml @@ -28,7 +28,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-pinecone/pom.xml b/langchain4j-pinecone/pom.xml index c4533a726e1..e0571b5c1f8 100644 --- a/langchain4j-pinecone/pom.xml +++ b/langchain4j-pinecone/pom.xml @@ -22,7 +22,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-redis/pom.xml b/langchain4j-redis/pom.xml index c9999daa2a9..48b199d6437 100644 --- a/langchain4j-redis/pom.xml +++ b/langchain4j-redis/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-vertex-ai/pom.xml b/langchain4j-vertex-ai/pom.xml index a719fee7139..c07478a8246 100644 --- a/langchain4j-vertex-ai/pom.xml +++ b/langchain4j-vertex-ai/pom.xml @@ -21,7 +21,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-vespa/pom.xml b/langchain4j-vespa/pom.xml index b13fe57cad3..37a876d444e 100644 --- a/langchain4j-vespa/pom.xml +++ b/langchain4j-vespa/pom.xml @@ -33,7 +33,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j-weaviate/pom.xml b/langchain4j-weaviate/pom.xml index 899d7245154..474222e5a82 100644 --- a/langchain4j-weaviate/pom.xml +++ b/langchain4j-weaviate/pom.xml @@ -24,7 +24,6 @@ dev.langchain4j langchain4j-core - ${project.version} diff --git a/langchain4j/pom.xml b/langchain4j/pom.xml index 5f2a561bbd1..80d8d132682 100644 --- a/langchain4j/pom.xml +++ b/langchain4j/pom.xml @@ -24,7 +24,6 @@ dev.langchain4j langchain4j-core - ${project.version}