Skip to content

Commit 65efb51

Browse files
committed
refactor VADD API:
- new abstract VectorSetAddRequest with core props - VectorSetAddRequest.Member for adding single element - change VectorSetAdd[Async] to take VectorSetAddRequest
1 parent a53365b commit 65efb51

File tree

11 files changed

+296
-176
lines changed

11 files changed

+296
-176
lines changed

src/StackExchange.Redis/Interfaces/IDatabase.VectorSets.cs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,14 @@ public partial interface IDatabase
1515
/// Add a vector to a vectorset.
1616
/// </summary>
1717
/// <param name="key">The key of the vectorset.</param>
18-
/// <param name="element">The element name.</param>
19-
/// <param name="values">The vector data.</param>
20-
/// <param name="reducedDimensions">Optional dimension reduction using random projection (REDUCE parameter).</param>
21-
/// <param name="quantization">Quantization type - Int8 (Q8), None (NOQUANT), or Binary (BIN). Default: Int8.</param>
22-
/// <param name="buildExplorationFactor">Optional HNSW build exploration factor (EF parameter, default: 200).</param>
23-
/// <param name="maxConnections">Optional maximum connections per HNSW node (M parameter, default: 16).</param>
24-
/// <param name="useCheckAndSet">Optional check-and-set mode for partial threading (CAS parameter).</param>
25-
/// <param name="attributesJson">Optional JSON attributes for the element (SETATTR parameter).</param>
18+
/// <param name="request">The data to add.</param>
2619
/// <param name="flags">The flags to use for this operation.</param>
2720
/// <returns><see langword="true"/> if the element was added; <see langword="false"/> if it already existed.</returns>
2821
/// <remarks><seealso href="https://redis.io/commands/vadd"/></remarks>
2922
[Experimental(Experiments.VectorSets, UrlFormat = Experiments.UrlFormat)]
3023
bool VectorSetAdd(
3124
RedisKey key,
32-
RedisValue element,
33-
ReadOnlyMemory<float> values,
34-
int? reducedDimensions = null,
35-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
36-
int? buildExplorationFactor = null,
37-
int? maxConnections = null,
38-
bool useCheckAndSet = false,
39-
string? attributesJson = null,
25+
VectorSetAddRequest request,
4026
CommandFlags flags = CommandFlags.None);
4127

4228
/// <summary>

src/StackExchange.Redis/Interfaces/IDatabaseAsync.VectorSets.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,11 @@ public partial interface IDatabaseAsync
1212
{
1313
// Vector Set operations
1414

15-
/// <inheritdoc cref="IDatabase.VectorSetAdd(RedisKey, RedisValue, ReadOnlyMemory{float}, int?, VectorSetQuantization, int?, int?, bool, string?, CommandFlags)"/>
15+
/// <inheritdoc cref="IDatabase.VectorSetAdd(RedisKey, VectorSetAddRequest, CommandFlags)"/>
1616
[Experimental(Experiments.VectorSets, UrlFormat = Experiments.UrlFormat)]
1717
Task<bool> VectorSetAddAsync(
1818
RedisKey key,
19-
RedisValue element,
20-
ReadOnlyMemory<float> values,
21-
int? reducedDimensions = null,
22-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
23-
int? buildExplorationFactor = null,
24-
int? maxConnections = null,
25-
bool useCheckAndSet = false,
26-
string? attributesJson = null,
19+
VectorSetAddRequest request,
2720
CommandFlags flags = CommandFlags.None);
2821

2922
/// <inheritdoc cref="IDatabase.VectorSetLength(RedisKey, CommandFlags)"/>

src/StackExchange.Redis/KeyspaceIsolation/KeyPrefixed.VectorSets.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,9 @@ internal partial class KeyPrefixed<TInner>
1111
[Experimental(Experiments.VectorSets, UrlFormat = Experiments.UrlFormat)]
1212
public Task<bool> VectorSetAddAsync(
1313
RedisKey key,
14-
RedisValue element,
15-
ReadOnlyMemory<float> values,
16-
int? reducedDimensions = null,
17-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
18-
int? buildExplorationFactor = null,
19-
int? maxConnections = null,
20-
bool useCheckAndSet = false,
21-
string? attributesJson = null,
14+
VectorSetAddRequest request,
2215
CommandFlags flags = CommandFlags.None) =>
23-
Inner.VectorSetAddAsync(ToInner(key), element, values, reducedDimensions, quantization, buildExplorationFactor, maxConnections, useCheckAndSet, attributesJson, flags);
16+
Inner.VectorSetAddAsync(ToInner(key), request, flags);
2417

2518
public Task<long> VectorSetLengthAsync(RedisKey key, CommandFlags flags = CommandFlags.None) =>
2619
Inner.VectorSetLengthAsync(ToInner(key), flags);

src/StackExchange.Redis/KeyspaceIsolation/KeyPrefixedDatabase.VectorSets.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,9 @@ internal sealed partial class KeyPrefixedDatabase
88
// Vector Set operations
99
public bool VectorSetAdd(
1010
RedisKey key,
11-
RedisValue element,
12-
ReadOnlyMemory<float> values,
13-
int? reducedDimensions = null,
14-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
15-
int? buildExplorationFactor = null,
16-
int? maxConnections = null,
17-
bool useCheckAndSet = false,
18-
string? attributesJson = null,
11+
VectorSetAddRequest request,
1912
CommandFlags flags = CommandFlags.None) =>
20-
Inner.VectorSetAdd(ToInner(key), element, values, reducedDimensions, quantization, buildExplorationFactor, maxConnections, useCheckAndSet, attributesJson, flags);
13+
Inner.VectorSetAdd(ToInner(key), request, flags);
2114

2215
public long VectorSetLength(RedisKey key, CommandFlags flags = CommandFlags.None) =>
2316
Inner.VectorSetLength(ToInner(key), flags);

src/StackExchange.Redis/PublicAPI/PublicAPI.Unshipped.txt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
11
#nullable enable
2+
[SER001]override StackExchange.Redis.VectorSetLink.ToString() -> string!
3+
[SER001]override StackExchange.Redis.VectorSetSimilaritySearchResult.ToString() -> string!
4+
[SER001]StackExchange.Redis.IDatabase.VectorSetAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.VectorSetAddRequest! request, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> bool
5+
[SER001]StackExchange.Redis.IDatabaseAsync.VectorSetAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.VectorSetAddRequest! request, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<bool>!
6+
[SER001]StackExchange.Redis.VectorSetAddRequest
7+
[SER001]StackExchange.Redis.VectorSetAddRequest.BuildExplorationFactor.get -> int?
8+
[SER001]StackExchange.Redis.VectorSetAddRequest.BuildExplorationFactor.set -> void
9+
[SER001]StackExchange.Redis.VectorSetAddRequest.MaxConnections.get -> int?
10+
[SER001]StackExchange.Redis.VectorSetAddRequest.MaxConnections.set -> void
11+
[SER001]StackExchange.Redis.VectorSetAddRequest.Quantization.get -> StackExchange.Redis.VectorSetQuantization
12+
[SER001]StackExchange.Redis.VectorSetAddRequest.Quantization.set -> void
13+
[SER001]StackExchange.Redis.VectorSetAddRequest.ReducedDimensions.get -> int?
14+
[SER001]StackExchange.Redis.VectorSetAddRequest.ReducedDimensions.set -> void
15+
[SER001]StackExchange.Redis.VectorSetAddRequest.UseCheckAndSet.get -> bool
16+
[SER001]StackExchange.Redis.VectorSetAddRequest.UseCheckAndSet.set -> void
217
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest
318
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest.Count.get -> int?
419
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest.Count.set -> void
@@ -18,9 +33,6 @@
1833
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest.WithAttributes.set -> void
1934
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest.WithScores.get -> bool
2035
[SER001]StackExchange.Redis.VectorSetSimilaritySearchRequest.WithScores.set -> void
21-
[SER001]override StackExchange.Redis.VectorSetLink.ToString() -> string!
22-
[SER001]override StackExchange.Redis.VectorSetSimilaritySearchResult.ToString() -> string!
23-
[SER001]StackExchange.Redis.IDatabase.VectorSetAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue element, System.ReadOnlyMemory<float> values, int? reducedDimensions = null, StackExchange.Redis.VectorSetQuantization quantization = StackExchange.Redis.VectorSetQuantization.Int8, int? buildExplorationFactor = null, int? maxConnections = null, bool useCheckAndSet = false, string? attributesJson = null, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> bool
2436
[SER001]StackExchange.Redis.IDatabase.VectorSetContains(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> bool
2537
[SER001]StackExchange.Redis.IDatabase.VectorSetDimension(StackExchange.Redis.RedisKey key, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> int
2638
[SER001]StackExchange.Redis.IDatabase.VectorSetGetApproximateVector(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.Lease<float>?
@@ -34,7 +46,6 @@
3446
[SER001]StackExchange.Redis.IDatabase.VectorSetRemove(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> bool
3547
[SER001]StackExchange.Redis.IDatabase.VectorSetSetAttributesJson(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, string! jsonAttributes, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> bool
3648
[SER001]StackExchange.Redis.IDatabase.VectorSetSimilaritySearch(StackExchange.Redis.RedisKey key, StackExchange.Redis.VectorSetSimilaritySearchRequest! query, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.Lease<StackExchange.Redis.VectorSetSimilaritySearchResult>?
37-
[SER001]StackExchange.Redis.IDatabaseAsync.VectorSetAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue element, System.ReadOnlyMemory<float> values, int? reducedDimensions = null, StackExchange.Redis.VectorSetQuantization quantization = StackExchange.Redis.VectorSetQuantization.Int8, int? buildExplorationFactor = null, int? maxConnections = null, bool useCheckAndSet = false, string? attributesJson = null, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<bool>!
3849
[SER001]StackExchange.Redis.IDatabaseAsync.VectorSetContainsAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<bool>!
3950
[SER001]StackExchange.Redis.IDatabaseAsync.VectorSetDimensionAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<int>!
4051
[SER001]StackExchange.Redis.IDatabaseAsync.VectorSetGetApproximateVectorAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue member, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<StackExchange.Redis.Lease<float>?>!
@@ -74,5 +85,6 @@
7485
[SER001]StackExchange.Redis.VectorSetSimilaritySearchResult.Score.get -> double
7586
[SER001]StackExchange.Redis.VectorSetSimilaritySearchResult.VectorSetSimilaritySearchResult() -> void
7687
[SER001]StackExchange.Redis.VectorSetSimilaritySearchResult.VectorSetSimilaritySearchResult(StackExchange.Redis.RedisValue member, double score = NaN, string? attributesJson = null) -> void
88+
[SER001]static StackExchange.Redis.VectorSetAddRequest.Member(StackExchange.Redis.RedisValue element, System.ReadOnlyMemory<float> values, string? attributesJson = null) -> StackExchange.Redis.VectorSetAddRequest!
7789
[SER001]static StackExchange.Redis.VectorSetSimilaritySearchRequest.ByMember(StackExchange.Redis.RedisValue member) -> StackExchange.Redis.VectorSetSimilaritySearchRequest!
7890
[SER001]static StackExchange.Redis.VectorSetSimilaritySearchRequest.ByVector(System.ReadOnlyMemory<float> vector) -> StackExchange.Redis.VectorSetSimilaritySearchRequest!

src/StackExchange.Redis/RedisDatabase.VectorSets.cs

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,10 @@ internal partial class RedisDatabase
88
{
99
public bool VectorSetAdd(
1010
RedisKey key,
11-
RedisValue element,
12-
ReadOnlyMemory<float> values,
13-
int? reducedDimensions = null,
14-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
15-
int? buildExplorationFactor = null,
16-
int? maxConnections = null,
17-
bool useCheckAndSet = false,
18-
string? attributesJson = null,
11+
VectorSetAddRequest request,
1912
CommandFlags flags = CommandFlags.None)
2013
{
21-
var msg = new VectorSetAddMessage(Database, flags, key, element, values, reducedDimensions, quantization, buildExplorationFactor, maxConnections, useCheckAndSet, attributesJson);
14+
var msg = request.ToMessage(key, Database, flags);
2215
return ExecuteSync(msg, ResultProcessor.Boolean);
2316
}
2417

@@ -107,17 +100,10 @@ public bool VectorSetSetAttributesJson(RedisKey key, RedisValue member, string j
107100
// Vector Set async operations
108101
public Task<bool> VectorSetAddAsync(
109102
RedisKey key,
110-
RedisValue element,
111-
ReadOnlyMemory<float> values,
112-
int? reducedDimensions = null,
113-
VectorSetQuantization quantization = VectorSetQuantization.Int8,
114-
int? buildExplorationFactor = null,
115-
int? maxConnections = null,
116-
bool useCheckAndSet = false,
117-
string? attributesJson = null,
103+
VectorSetAddRequest request,
118104
CommandFlags flags = CommandFlags.None)
119105
{
120-
var msg = new VectorSetAddMessage(Database, flags, key, element, values, reducedDimensions, quantization, buildExplorationFactor, maxConnections, useCheckAndSet, attributesJson);
106+
var msg = request.ToMessage(key, Database, flags);
121107
return ExecuteAsync(msg, ResultProcessor.Boolean);
122108
}
123109

0 commit comments

Comments
 (0)