diff --git a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs index fc07e839..b92fa73a 100644 --- a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs +++ b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs @@ -197,4 +197,38 @@ public void Test_NamedVectorConfig_Has_Properties() // Assert Assert.Contains("\"properties\":[\"name\"]", json); } + + /// + /// Tests that Multi2MultiVecWeaviate serializes imageFields correctly + /// + [Fact] + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Performance", + "CA1869:Cache and reuse 'JsonSerializerOptions' instances", + Justification = "" + )] + public void Test_Multi2MultiVecWeaviate_Serializes_ImageFields() + { + // Arrange + var vc = Configure.MultiVector( + "default", + v => v.Multi2MultiVecWeaviate(imageFields: new[] { "image" }, model: "my-model") + ); + + // Act + var dto = vc.Vectorizer?.ToDto() ?? default; + var json = JsonSerializer.Serialize( + dto, + new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = false, + } + ); + + // Assert + Assert.Contains("\"imageFields\"", json); + Assert.Contains("\"image\"", json); + Assert.Contains("\"my-model\"", json); + } } diff --git a/src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs b/src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs index 5373ebb5..1da60991 100644 --- a/src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs +++ b/src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs @@ -95,5 +95,24 @@ public VectorizerConfig Multi2MultiVecJinaAI( VectorizeCollectionName = vectorizeCollectionName, Weights = VectorizerWeights.FromWeightedFields(imageFields, textFields), }; + + /// + /// Creates a multi2multivec-weaviate vectorizer configuration + /// + /// The image fields to vectorize + /// The base url + /// The model + /// The vectorizer config + public VectorizerConfig Multi2MultiVecWeaviate( + string[]? imageFields = null, + string? baseURL = null, + string? model = null + ) => + new Multi2MultiVecWeaviate + { + BaseURL = baseURL, + Model = model, + ImageFields = imageFields, + }; #pragma warning restore CA1822 // Mark members as static } diff --git a/src/Weaviate.Client/Models/Vectorizer.cs b/src/Weaviate.Client/Models/Vectorizer.cs index d3a8f5a8..2c720d7f 100644 --- a/src/Weaviate.Client/Models/Vectorizer.cs +++ b/src/Weaviate.Client/Models/Vectorizer.cs @@ -499,6 +499,36 @@ internal Multi2MultiVecJinaAI() { } public bool? VectorizeCollectionName { get; set; } = null; } + /// + /// The configuration for multi-media multi-vector vectorization using the Weaviate module. + /// Accepts only image fields. See the documentation for detailed usage. + /// + [Vectorizer("multi2multivec-weaviate", VectorType.MultiVector)] + public record Multi2MultiVecWeaviate : VectorizerConfig + { + /// + /// Initializes a new instance of the class + /// + [JsonConstructor] + internal Multi2MultiVecWeaviate() { } + + /// + /// Gets or sets the value of the base url + /// + [JsonPropertyName("baseUrl")] + public string? BaseURL { get; set; } = null; + + /// + /// Gets or sets the value of the model + /// + public string? Model { get; set; } = null; + + /// + /// Gets or sets the image fields for vectorization + /// + public string[]? ImageFields { get; set; } = null; + } + /// /// The configuration for multi-media vectorization using the VoyageAI module. /// See the documentation for detailed usage. diff --git a/src/Weaviate.Client/PublicAPI.Unshipped.txt b/src/Weaviate.Client/PublicAPI.Unshipped.txt index 4e2c5678..f0a3350a 100644 --- a/src/Weaviate.Client/PublicAPI.Unshipped.txt +++ b/src/Weaviate.Client/PublicAPI.Unshipped.txt @@ -6595,6 +6595,25 @@ Weaviate.Client.WeaviateUnprocessableEntityException.WeaviateUnprocessableEntity ~Weaviate.Client.Models.Typed.WeaviateGroup.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup! original) -> void ~Weaviate.Client.Models.Typed.WeaviateGroup.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup! original) -> void ~Weaviate.Client.Models.Typed.WeaviateObject.WeaviateObject(Weaviate.Client.Models.Typed.WeaviateObject! original) -> void +override sealed Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(Weaviate.Client.Models.VectorizerConfig? other) -> bool +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.$() -> Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate! +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.EqualityContract.get -> System.Type! +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(object? obj) -> bool +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.GetHashCode() -> int +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.PrintMembers(System.Text.StringBuilder! builder) -> bool +override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ToString() -> string! +static Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.operator !=(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? left, Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? right) -> bool +static Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.operator ==(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? left, Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? right) -> bool +virtual Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? other) -> bool +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.BaseURL.get -> string? +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.BaseURL.set -> void +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ImageFields.get -> string![]? +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ImageFields.set -> void +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Model.get -> string? +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Model.set -> void +Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Multi2MultiVecWeaviate(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate! original) -> void +Weaviate.Client.VectorizerFactoryMulti.Multi2MultiVecWeaviate(string![]? imageFields = null, string? baseURL = null, string? model = null) -> Weaviate.Client.Models.VectorizerConfig! Weaviate.Client.RequiresWeaviateVersionAttribute Weaviate.Client.RequiresWeaviateVersionAttribute.MinimumVersion.get -> System.Version! Weaviate.Client.RequiresWeaviateVersionAttribute.RequiresWeaviateVersionAttribute(int major, int minor, int patch = 0) -> void