Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/Weaviate.Client.Tests/Unit/TestVectorizers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,4 +197,38 @@ public void Test_NamedVectorConfig_Has_Properties()
// Assert
Assert.Contains("\"properties\":[\"name\"]", json);
}

/// <summary>
/// Tests that Multi2MultiVecWeaviate serializes imageFields correctly
/// </summary>
[Fact]
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Performance",
"CA1869:Cache and reuse 'JsonSerializerOptions' instances",
Justification = "<Pending>"
)]
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);
}
}
19 changes: 19 additions & 0 deletions src/Weaviate.Client/Configure/VectorizerFactoryMulti.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,5 +95,24 @@ public VectorizerConfig Multi2MultiVecJinaAI(
VectorizeCollectionName = vectorizeCollectionName,
Weights = VectorizerWeights.FromWeightedFields(imageFields, textFields),
};

/// <summary>
/// Creates a multi2multivec-weaviate vectorizer configuration
/// </summary>
/// <param name="imageFields">The image fields to vectorize</param>
/// <param name="baseURL">The base url</param>
/// <param name="model">The model</param>
/// <returns>The vectorizer config</returns>
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
}
30 changes: 30 additions & 0 deletions src/Weaviate.Client/Models/Vectorizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,36 @@ internal Multi2MultiVecJinaAI() { }
public bool? VectorizeCollectionName { get; set; } = null;
}

/// <summary>
/// The configuration for multi-media multi-vector vectorization using the Weaviate module.
/// Accepts only image fields. See the documentation for detailed usage.
/// </summary>
[Vectorizer("multi2multivec-weaviate", VectorType.MultiVector)]
public record Multi2MultiVecWeaviate : VectorizerConfig
{
/// <summary>
/// Initializes a new instance of the <see cref="Multi2MultiVecWeaviate"/> class
/// </summary>
[JsonConstructor]
internal Multi2MultiVecWeaviate() { }

/// <summary>
/// Gets or sets the value of the base url
/// </summary>
[JsonPropertyName("baseUrl")]
public string? BaseURL { get; set; } = null;

/// <summary>
/// Gets or sets the value of the model
/// </summary>
public string? Model { get; set; } = null;

/// <summary>
/// Gets or sets the image fields for vectorization
/// </summary>
public string[]? ImageFields { get; set; } = null;
}

/// <summary>
/// The configuration for multi-media vectorization using the VoyageAI module.
/// See the documentation for detailed usage.
Expand Down
19 changes: 19 additions & 0 deletions src/Weaviate.Client/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6595,6 +6595,25 @@ Weaviate.Client.WeaviateUnprocessableEntityException.WeaviateUnprocessableEntity
~Weaviate.Client.Models.Typed.WeaviateGroup<T, TObject>.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup<T, TObject>! original) -> void
~Weaviate.Client.Models.Typed.WeaviateGroup<T>.WeaviateGroup(Weaviate.Client.Models.Typed.WeaviateGroup<T>! original) -> void
~Weaviate.Client.Models.Typed.WeaviateObject<T>.WeaviateObject(Weaviate.Client.Models.Typed.WeaviateObject<T>! original) -> void
override sealed Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.Equals(Weaviate.Client.Models.VectorizerConfig? other) -> bool
override Weaviate.Client.Models.Vectorizer.Multi2MultiVecWeaviate.<Clone>$() -> 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
Expand Down
Loading