diff --git a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs index feb90929..a502c6fb 100644 --- a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs +++ b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs @@ -497,6 +497,43 @@ public void Test_Text2VecDigitalOcean_Omits_Unset_BaseURL() Assert.DoesNotContain("\"baseURL\"", json); } + /// + /// Tests that Text2VecGoogle omits location when unset so the server can apply its + /// default. + /// + [Fact] + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Performance", + "CA1869:Cache and reuse 'JsonSerializerOptions' instances", + Justification = "" + )] + public void Test_Text2VecGoogle_Omits_Unset_Location() + { + // Arrange + var vc = Configure.Vector("default", v => v.Text2VecGoogleVertex(projectId: "my-project")); + + // 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-google\"", json); + Assert.DoesNotContain("\"location\"", json); + } + /// /// Tests that Text2VecAWS serializes dimensions as a JSON number (not a string) when it /// is set via the Bedrock factory. diff --git a/src/Weaviate.Client/Configure/VectorizerFactory.cs b/src/Weaviate.Client/Configure/VectorizerFactory.cs index 79b30cb2..70eb6e63 100644 --- a/src/Weaviate.Client/Configure/VectorizerFactory.cs +++ b/src/Weaviate.Client/Configure/VectorizerFactory.cs @@ -869,6 +869,7 @@ public VectorizerConfig Text2VecOpenAI( /// The dimensions /// The task type /// The vectorize collection name + /// The Google Vertex AI region; optional, server-defaulted when null /// The vectorizer config public VectorizerConfig Text2VecGoogleVertex( string? apiEndpoint = null, @@ -877,7 +878,8 @@ public VectorizerConfig Text2VecGoogleVertex( string? titleProperty = null, int? dimensions = null, string? taskType = null, - bool? vectorizeCollectionName = null + bool? vectorizeCollectionName = null, + string? location = null ) => new Text2VecGoogle { @@ -888,6 +890,7 @@ public VectorizerConfig Text2VecGoogleVertex( Dimensions = dimensions, TaskType = taskType, VectorizeCollectionName = vectorizeCollectionName, + Location = location, }; /// @@ -915,6 +918,9 @@ public VectorizerConfig Text2VecGoogleGemini( Dimensions = dimensions, TaskType = taskType, VectorizeCollectionName = vectorizeCollectionName, + // Location (Vertex AI region) is not applicable to the Gemini + // (generative-language) API; left null so it is omitted on the wire. + Location = null, }; /// diff --git a/src/Weaviate.Client/Models/Vectorizer.cs b/src/Weaviate.Client/Models/Vectorizer.cs index 2a3ea405..92326145 100644 --- a/src/Weaviate.Client/Models/Vectorizer.cs +++ b/src/Weaviate.Client/Models/Vectorizer.cs @@ -1277,6 +1277,13 @@ internal Text2VecGoogle() { } /// public string? TaskType { get; set; } = null; + /// + /// Gets or sets the Google Vertex AI region. + /// Optional; when omitted the server applies its default. + /// Serialized as the lowercase location module-config key. + /// + public string? Location { 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 e320f869..09359d23 100644 --- a/src/Weaviate.Client/PublicAPI.Unshipped.txt +++ b/src/Weaviate.Client/PublicAPI.Unshipped.txt @@ -1,7 +1,11 @@ #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! +*REMOVED*Weaviate.Client.VectorizerFactory.Text2VecGoogleVertex(string? apiEndpoint = null, string? model = null, string? projectId = null, string? titleProperty = null, int? dimensions = null, string? taskType = 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.Models.Vectorizer.Text2VecGoogle.Location.get -> string? +Weaviate.Client.Models.Vectorizer.Text2VecGoogle.Location.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! +Weaviate.Client.VectorizerFactory.Text2VecGoogleVertex(string? apiEndpoint = null, string? model = null, string? projectId = null, string? titleProperty = null, int? dimensions = null, string? taskType = null, bool? vectorizeCollectionName = null, string? location = null) -> Weaviate.Client.Models.VectorizerConfig!