Skip to content

Commit 78bd2dc

Browse files
authored
Merge pull request #291 from weaviate/feature/multi2multivec-weaviate
2 parents 2d2ddf0 + 850e92a commit 78bd2dc

4 files changed

Lines changed: 102 additions & 0 deletions

File tree

src/Weaviate.Client.Tests/Unit/TestVectorizers.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,38 @@ public void Test_NamedVectorConfig_Has_Properties()
197197
// Assert
198198
Assert.Contains("\"properties\":[\"name\"]", json);
199199
}
200+
201+
/// <summary>
202+
/// Tests that Multi2MultiVecWeaviate serializes imageFields correctly
203+
/// </summary>
204+
[Fact]
205+
[System.Diagnostics.CodeAnalysis.SuppressMessage(
206+
"Performance",
207+
"CA1869:Cache and reuse 'JsonSerializerOptions' instances",
208+
Justification = "<Pending>"
209+
)]
210+
public void Test_Multi2MultiVecWeaviate_Serializes_ImageFields()
211+
{
212+
// Arrange
213+
var vc = Configure.MultiVector(
214+
"default",
215+
v => v.Multi2MultiVecWeaviate(imageFields: new[] { "image" }, model: "my-model")
216+
);
217+
218+
// Act
219+
var dto = vc.Vectorizer?.ToDto() ?? default;
220+
var json = JsonSerializer.Serialize(
221+
dto,
222+
new JsonSerializerOptions
223+
{
224+
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
225+
WriteIndented = false,
226+
}
227+
);
228+
229+
// Assert
230+
Assert.Contains("\"imageFields\"", json);
231+
Assert.Contains("\"image\"", json);
232+
Assert.Contains("\"my-model\"", json);
233+
}
200234
}

src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,24 @@ public VectorizerConfig Multi2MultiVecJinaAI(
9595
VectorizeCollectionName = vectorizeCollectionName,
9696
Weights = VectorizerWeights.FromWeightedFields(imageFields, textFields),
9797
};
98+
99+
/// <summary>
100+
/// Creates a multi2multivec-weaviate vectorizer configuration
101+
/// </summary>
102+
/// <param name="imageFields">The image fields to vectorize</param>
103+
/// <param name="baseURL">The base url</param>
104+
/// <param name="model">The model</param>
105+
/// <returns>The vectorizer config</returns>
106+
public VectorizerConfig Multi2MultiVecWeaviate(
107+
string[]? imageFields = null,
108+
string? baseURL = null,
109+
string? model = null
110+
) =>
111+
new Multi2MultiVecWeaviate
112+
{
113+
BaseURL = baseURL,
114+
Model = model,
115+
ImageFields = imageFields,
116+
};
98117
#pragma warning restore CA1822 // Mark members as static
99118
}

src/Weaviate.Client/Models/Vectorizer.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,36 @@ internal Multi2MultiVecJinaAI() { }
499499
public bool? VectorizeCollectionName { get; set; } = null;
500500
}
501501

502+
/// <summary>
503+
/// The configuration for multi-media multi-vector vectorization using the Weaviate module.
504+
/// Accepts only image fields. See the documentation for detailed usage.
505+
/// </summary>
506+
[Vectorizer("multi2multivec-weaviate", VectorType.MultiVector)]
507+
public record Multi2MultiVecWeaviate : VectorizerConfig
508+
{
509+
/// <summary>
510+
/// Initializes a new instance of the <see cref="Multi2MultiVecWeaviate"/> class
511+
/// </summary>
512+
[JsonConstructor]
513+
internal Multi2MultiVecWeaviate() { }
514+
515+
/// <summary>
516+
/// Gets or sets the value of the base url
517+
/// </summary>
518+
[JsonPropertyName("baseUrl")]
519+
public string? BaseURL { get; set; } = null;
520+
521+
/// <summary>
522+
/// Gets or sets the value of the model
523+
/// </summary>
524+
public string? Model { get; set; } = null;
525+
526+
/// <summary>
527+
/// Gets or sets the image fields for vectorization
528+
/// </summary>
529+
public string[]? ImageFields { get; set; } = null;
530+
}
531+
502532
/// <summary>
503533
/// The configuration for multi-media vectorization using the VoyageAI module.
504534
/// See the documentation for detailed usage.

src/Weaviate.Client/PublicAPI.Unshipped.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6595,6 +6595,25 @@ Weaviate.Client.WeaviateUnprocessableEntityException.WeaviateUnprocessableEntity
65956595
~Weaviate.Client.Models.Typed.WeaviateGroup<T, TObject>.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup<T, TObject>! original) -> void
65966596
~Weaviate.Client.Models.Typed.WeaviateGroup<T>.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup<T>! original) -> void
65976597
~Weaviate.Client.Models.Typed.WeaviateObject<T>.WeaviateObject(Weaviate.Client.Models.Typed.WeaviateObject<T>! original) -> void
6598+
override sealed Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(Weaviate.Client.Models.VectorizerConfig? other) -> bool
6599+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.<Clone>$() -> Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate!
6600+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.EqualityContract.get -> System.Type!
6601+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(object? obj) -> bool
6602+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.GetHashCode() -> int
6603+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.PrintMembers(System.Text.StringBuilder! builder) -> bool
6604+
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ToString() -> string!
6605+
static Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.operator !=(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? left, Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? right) -> bool
6606+
static Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.operator ==(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? left, Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? right) -> bool
6607+
virtual Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate? other) -> bool
6608+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate
6609+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.BaseURL.get -> string?
6610+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.BaseURL.set -> void
6611+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ImageFields.get -> string![]?
6612+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.ImageFields.set -> void
6613+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Model.get -> string?
6614+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Model.set -> void
6615+
Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Multi2MultiVecWeaviate(Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate! original) -> void
6616+
Weaviate.Client.VectorizerFactoryMulti.Multi2MultiVecWeaviate(string![]? imageFields = null, string? baseURL = null, string? model = null) -> Weaviate.Client.Models.VectorizerConfig!
65986617
Weaviate.Client.RequiresWeaviateVersionAttribute
65996618
Weaviate.Client.RequiresWeaviateVersionAttribute.MinimumVersion.get -> System.Version!
66006619
Weaviate.Client.RequiresWeaviateVersionAttribute.RequiresWeaviateVersionAttribute(int major, int minor, int patch = 0) -> void

0 commit comments

Comments
 (0)