Skip to content

Commit 5baca93

Browse files
authored
Merge pull request #172 from jmartisk/dimension-warning-redis
Warn about dimension mismatch
2 parents f1b1b25 + dec380e commit 5baca93

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

redis/runtime/src/main/java/io/quarkiverse/langchain4j/redis/RedisEmbeddingStore.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class RedisEmbeddingStore implements EmbeddingStore<TextSegment> {
4242
private final ReactiveRedisDataSource ds;
4343
private final RedisSchema schema;
4444
private final Logger LOG = Logger.getLogger(RedisEmbeddingStore.class);
45+
private final boolean indexCreated;
46+
private boolean warnedAboutWrongDimension = false;
4547

4648
private static final String SCORE_FIELD_NAME = "vector_score";
4749

@@ -52,10 +54,10 @@ public static Builder builder() {
5254
public RedisEmbeddingStore(ReactiveRedisDataSource ds, RedisSchema schema) {
5355
this.ds = ds;
5456
this.schema = schema;
55-
createIndexIfDoesNotExist();
57+
this.indexCreated = createIndexIfDoesNotExist();
5658
}
5759

58-
private void createIndexIfDoesNotExist() {
60+
private boolean createIndexIfDoesNotExist() {
5961
List<String> indexes = ds.search().ft_list()
6062
.onFailure().invoke(t -> {
6163
if (t.getMessage().contains("unknown command")) {
@@ -71,8 +73,10 @@ private void createIndexIfDoesNotExist() {
7173
schema.defineFields(indexCreateArgs);
7274
LOG.debug("Creating Redis index " + schema.getIndexName());
7375
ds.search().ftCreate(schema.getIndexName(), indexCreateArgs).await().indefinitely();
76+
return true;
7477
} else {
7578
LOG.debug("Index in Redis already exists: " + schema.getIndexName());
79+
return false;
7680
}
7781
}
7882

@@ -130,6 +134,14 @@ private void addAllInternal(List<String> ids, List<Embedding> embeddings, List<T
130134
TextSegment textSegment = embedded == null ? null : embedded.get(i);
131135
Map<String, Object> fields = new HashMap<>();
132136
fields.put(schema.getVectorFieldName(), embedding.vector());
137+
if (!warnedAboutWrongDimension && indexCreated && embedding.vector().length != schema.getDimension()) {
138+
LOG.warn("Creating an embedding with dimension " + embedding.vector().length + " but the index was " +
139+
"created with dimension " + schema.getDimension() + ". " +
140+
"This may result in embeddings not being found when they should be. " +
141+
"Please check the quarkus.langchain4j.redis.dimension property. " +
142+
"This warning will be shown only once.");
143+
warnedAboutWrongDimension = true;
144+
}
133145
if (textSegment != null) {
134146
fields.put(schema.getScalarFieldName(), textSegment.text());
135147
fields.putAll(textSegment.metadata().asMap());

0 commit comments

Comments
 (0)