VINFO: use a single field for random projection info.

This commit is contained in:
antirez 2025-03-23 14:49:52 +01:00
parent 8f479b22b9
commit aa92b37589
1 changed files with 7 additions and 17 deletions

24
vset.c
View File

@ -538,7 +538,7 @@ int VADD_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
"ERR Input dimension mismatch for projection - got %d but projection expects %d", "ERR Input dimension mismatch for projection - got %d but projection expects %d",
(int)dim, (int)vset->proj_input_size); (int)dim, (int)vset->proj_input_size);
} }
float *projected = applyProjection(vec, vset->proj_matrix, float *projected = applyProjection(vec, vset->proj_matrix,
vset->proj_input_size, dim); vset->proj_input_size, dim);
RedisModule_Free(vec); RedisModule_Free(vec);
@ -780,7 +780,7 @@ int VSIM_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
"ERR Input dimension mismatch for projection - got %d but projection expects %d", "ERR Input dimension mismatch for projection - got %d but projection expects %d",
(int)dim, (int)vset->proj_input_size); (int)dim, (int)vset->proj_input_size);
} }
float *projected = applyProjection(vec, vset->proj_matrix, float *projected = applyProjection(vec, vset->proj_matrix,
vset->proj_input_size, dim); vset->proj_input_size, dim);
RedisModule_Free(vec); RedisModule_Free(vec);
@ -1268,12 +1268,8 @@ int VINFO_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
struct vsetObject *vset = RedisModule_ModuleTypeGetValue(key); struct vsetObject *vset = RedisModule_ModuleTypeGetValue(key);
/* Calculate map size based on projection presence */
int map_size = 8; /* Base fields */
if (vset->proj_matrix) map_size += 2; /* Additional fields for projection */
/* Reply with hash */ /* Reply with hash */
RedisModule_ReplyWithMap(ctx, map_size); RedisModule_ReplyWithMap(ctx, 9);
/* Quantization type */ /* Quantization type */
RedisModule_ReplyWithSimpleString(ctx, "quant-type"); RedisModule_ReplyWithSimpleString(ctx, "quant-type");
@ -1287,16 +1283,10 @@ int VINFO_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
RedisModule_ReplyWithSimpleString(ctx, "vector-dim"); RedisModule_ReplyWithSimpleString(ctx, "vector-dim");
RedisModule_ReplyWithLongLong(ctx, vset->hnsw->vector_dim); RedisModule_ReplyWithLongLong(ctx, vset->hnsw->vector_dim);
/* Add projection information if present */ /* Original input dimension before projection.
if (vset->proj_matrix) { * This is zero for vector sets without a random projection matrix. */
/* Original input dimension before projection */ RedisModule_ReplyWithSimpleString(ctx, "projection-input-dim");
RedisModule_ReplyWithSimpleString(ctx, "projection-input-dim"); RedisModule_ReplyWithLongLong(ctx, vset->proj_input_size);
RedisModule_ReplyWithLongLong(ctx, vset->proj_input_size);
/* Projection enabled flag */
RedisModule_ReplyWithSimpleString(ctx, "projection-enabled");
RedisModule_ReplyWithBool(ctx, 1);
}
/* Number of elements. */ /* Number of elements. */
RedisModule_ReplyWithSimpleString(ctx, "size"); RedisModule_ReplyWithSimpleString(ctx, "size");