From aa333c16ebbf40e40f1f17a7f7278656e0a68402 Mon Sep 17 00:00:00 2001 From: Ivan Despot <66276597+g-despot@users.noreply.github.com> Date: Mon, 22 Jun 2026 09:56:21 +0200 Subject: [PATCH] feat: add optional dimensions to text2vec-aws vectorizer --- .../Unit/TestVectorizers.cs | 86 +++++++++++++++++++ .../Configure/VectorizerFactory.cs | 6 ++ src/Weaviate.Client/Models/Vectorizer.cs | 5 ++ src/Weaviate.Client/PublicAPI.Unshipped.txt | 6 ++ 4 files changed, 103 insertions(+) diff --git a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs index 4ecbb419..feb90929 100644 --- a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs +++ b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs @@ -496,4 +496,90 @@ public void Test_Text2VecDigitalOcean_Omits_Unset_BaseURL() Assert.Contains("\"model\":\"qwen3-embedding-0.6b\"", json); Assert.DoesNotContain("\"baseURL\"", json); } + + /// + /// Tests that Text2VecAWS serializes dimensions as a JSON number (not a string) when it + /// is set via the Bedrock factory. + /// + [Fact] + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Performance", + "CA1869:Cache and reuse 'JsonSerializerOptions' instances", + Justification = "" + )] + public void Test_Text2VecAWS_Serializes_Dimensions_When_Set() + { + // Arrange + var vc = Configure.Vector( + "default", + v => + v.Text2VecAWSBedrock( + region: "us-east-1", + model: "amazon.titan-embed-text-v2:0", + dimensions: 1024 + ) + ); + + // Act + var dto = vc.Vectorizer?.ToDto() ?? default; + var json = JsonSerializer.Serialize( + dto, + new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + DefaultIgnoreCondition = System + .Text + .Json + .Serialization + .JsonIgnoreCondition + .WhenWritingNull, + WriteIndented = false, + } + ); + + // Assert + Assert.Contains("\"text2vec-aws\"", json); + Assert.Contains("\"dimensions\":1024", json); + Assert.DoesNotContain("\"dimensions\":\"1024\"", json); + } + + /// + /// Tests that Text2VecAWS omits dimensions when it is unset so the server can apply its + /// default. + /// + [Fact] + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Performance", + "CA1869:Cache and reuse 'JsonSerializerOptions' instances", + Justification = "" + )] + public void Test_Text2VecAWS_Omits_Unset_Dimensions() + { + // Arrange + var vc = Configure.Vector( + "default", + v => v.Text2VecAWSSagemaker(region: "us-east-1", endpoint: "my-endpoint") + ); + + // Act + var dto = vc.Vectorizer?.ToDto() ?? default; + var json = JsonSerializer.Serialize( + dto, + new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + DefaultIgnoreCondition = System + .Text + .Json + .Serialization + .JsonIgnoreCondition + .WhenWritingNull, + WriteIndented = false, + } + ); + + // Assert + Assert.Contains("\"text2vec-aws\"", json); + Assert.DoesNotContain("\"dimensions\"", json); + } } diff --git a/src/Weaviate.Client/Configure/VectorizerFactory.cs b/src/Weaviate.Client/Configure/VectorizerFactory.cs index c4bf056d..79b30cb2 100644 --- a/src/Weaviate.Client/Configure/VectorizerFactory.cs +++ b/src/Weaviate.Client/Configure/VectorizerFactory.cs @@ -536,11 +536,13 @@ public VectorizerConfig Ref2VecCentroid(string[] referenceProperties, string met /// /// The region /// The model + /// Number of vector dimensions. /// The vectorize collection name /// The vectorizer config public VectorizerConfig Text2VecAWSBedrock( string region, string model, + int? dimensions = null, bool? vectorizeCollectionName = null ) => new Text2VecAWS @@ -551,6 +553,7 @@ public VectorizerConfig Text2VecAWSBedrock( Model = model, TargetModel = null, TargetVariant = null, + Dimensions = dimensions, VectorizeCollectionName = vectorizeCollectionName, }; @@ -561,6 +564,7 @@ public VectorizerConfig Text2VecAWSBedrock( /// The endpoint /// The target model /// The target variant + /// Number of vector dimensions. /// The vectorize collection name /// The vectorizer config public VectorizerConfig Text2VecAWSSagemaker( @@ -568,6 +572,7 @@ public VectorizerConfig Text2VecAWSSagemaker( string endpoint, string? targetModel = null, string? targetVariant = null, + int? dimensions = null, bool? vectorizeCollectionName = null ) => new Text2VecAWS @@ -578,6 +583,7 @@ public VectorizerConfig Text2VecAWSSagemaker( Model = null, TargetModel = targetModel, TargetVariant = targetVariant, + Dimensions = dimensions, VectorizeCollectionName = vectorizeCollectionName, }; diff --git a/src/Weaviate.Client/Models/Vectorizer.cs b/src/Weaviate.Client/Models/Vectorizer.cs index e27ce4f9..2a3ea405 100644 --- a/src/Weaviate.Client/Models/Vectorizer.cs +++ b/src/Weaviate.Client/Models/Vectorizer.cs @@ -717,6 +717,11 @@ internal Text2VecAWS() { } /// public string? TargetVariant { get; set; } = null; + /// + /// Gets or sets the value of the dimensions + /// + public int? Dimensions { get; set; } = null; + /// /// Gets or sets the value of the vectorize collection name /// diff --git a/src/Weaviate.Client/PublicAPI.Unshipped.txt b/src/Weaviate.Client/PublicAPI.Unshipped.txt index 7dc5c581..e320f869 100644 --- a/src/Weaviate.Client/PublicAPI.Unshipped.txt +++ b/src/Weaviate.Client/PublicAPI.Unshipped.txt @@ -1 +1,7 @@ #nullable enable +*REMOVED*Weaviate.Client.VectorizerFactory.Text2VecAWSBedrock(string! region, string! model, bool? vectorizeCollectionName = null) -> Weaviate.Client.Models.VectorizerConfig! +*REMOVED*Weaviate.Client.VectorizerFactory.Text2VecAWSSagemaker(string! region, string! endpoint, string? targetModel = null, string? targetVariant = null, bool? vectorizeCollectionName = null) -> Weaviate.Client.Models.VectorizerConfig! +Weaviate.Client.Models.Vectorizer.Text2VecAWS.Dimensions.get -> int? +Weaviate.Client.Models.Vectorizer.Text2VecAWS.Dimensions.set -> void +Weaviate.Client.VectorizerFactory.Text2VecAWSBedrock(string! region, string! model, int? dimensions = null, bool? vectorizeCollectionName = null) -> Weaviate.Client.Models.VectorizerConfig! +Weaviate.Client.VectorizerFactory.Text2VecAWSSagemaker(string! region, string! endpoint, string? targetModel = null, string? targetVariant = null, int? dimensions = null, bool? vectorizeCollectionName = null) -> Weaviate.Client.Models.VectorizerConfig!