diff --git a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs
index a27dfa09..4ecbb419 100644
--- a/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs
+++ b/src/Weaviate.Client.Tests/Unit/TestVectorizers.cs
@@ -413,4 +413,87 @@ public void Test_Multi2VecGoogleGemini_Serializes_AudioFields_WeightedFields()
Assert.Contains("\"textFields\"", json);
Assert.Contains("\"videoFields\"", json);
}
+
+ ///
+ /// Tests that Text2VecDigitalOcean serializes baseURL and model correctly under the
+ /// text2vec-digitalocean module key.
+ ///
+ [Fact]
+ [System.Diagnostics.CodeAnalysis.SuppressMessage(
+ "Performance",
+ "CA1869:Cache and reuse 'JsonSerializerOptions' instances",
+ Justification = ""
+ )]
+ public void Test_Text2VecDigitalOcean_Serializes_BaseURL_And_Model()
+ {
+ // Arrange
+ var vc = Configure.Vector(
+ "default",
+ v =>
+ v.Text2VecDigitalOcean(
+ model: "qwen3-embedding-0.6b",
+ baseURL: "https://inference.do-ai.run",
+ vectorizeCollectionName: false
+ )
+ );
+
+ // Act
+ var dto = vc.Vectorizer?.ToDto() ?? default;
+ var json = JsonSerializer.Serialize(
+ dto,
+ new JsonSerializerOptions
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ WriteIndented = false,
+ }
+ );
+
+ // Assert
+ Assert.Contains("\"text2vec-digitalocean\"", json);
+ Assert.Contains("\"baseURL\":\"https://inference.do-ai.run\"", json);
+ Assert.Contains("\"model\":\"qwen3-embedding-0.6b\"", json);
+ Assert.Contains("\"vectorizeClassName\":false", json);
+ }
+
+ ///
+ /// Tests that Text2VecDigitalOcean omits unset optional fields so the server can apply
+ /// its defaults (no baseURL). model is required by the factory so it is
+ /// always present.
+ ///
+ [Fact]
+ [System.Diagnostics.CodeAnalysis.SuppressMessage(
+ "Performance",
+ "CA1869:Cache and reuse 'JsonSerializerOptions' instances",
+ Justification = ""
+ )]
+ public void Test_Text2VecDigitalOcean_Omits_Unset_BaseURL()
+ {
+ // Arrange
+ var vc = Configure.Vector(
+ "default",
+ v => v.Text2VecDigitalOcean(model: "qwen3-embedding-0.6b")
+ );
+
+ // 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-digitalocean\"", json);
+ Assert.Contains("\"model\":\"qwen3-embedding-0.6b\"", json);
+ Assert.DoesNotContain("\"baseURL\"", json);
+ }
}
diff --git a/src/Weaviate.Client/Configure/VectorizerFactory.cs b/src/Weaviate.Client/Configure/VectorizerFactory.cs
index 240f3c22..c4bf056d 100644
--- a/src/Weaviate.Client/Configure/VectorizerFactory.cs
+++ b/src/Weaviate.Client/Configure/VectorizerFactory.cs
@@ -750,6 +750,27 @@ public VectorizerConfig Text2VecMistral(
VectorizeCollectionName = vectorizeCollectionName,
};
+ ///
+ /// Creates a configuration for the text2vec-digitalocean vectorizer.
+ /// See the documentation
+ /// for detailed usage.
+ ///
+ /// The model to use, e.g. qwen3-embedding-0.6b. Required by the server.
+ /// The base URL where API requests should go. Defaults to null, which uses the server-defined default of https://inference.do-ai.run.
+ /// Whether to vectorize the collection name.
+ /// The vectorizer config
+ public VectorizerConfig Text2VecDigitalOcean(
+ string model,
+ string? baseURL = null,
+ bool? vectorizeCollectionName = null
+ ) =>
+ new Text2VecDigitalOcean
+ {
+ BaseURL = baseURL,
+ Model = model,
+ VectorizeCollectionName = vectorizeCollectionName,
+ };
+
///
/// Texts the 2 vec model 2 vec using the specified inference url
///
diff --git a/src/Weaviate.Client/Models/Vectorizer.cs b/src/Weaviate.Client/Models/Vectorizer.cs
index 12510a98..e27ce4f9 100644
--- a/src/Weaviate.Client/Models/Vectorizer.cs
+++ b/src/Weaviate.Client/Models/Vectorizer.cs
@@ -1064,6 +1064,39 @@ internal Text2VecMistral() { }
public bool? VectorizeCollectionName { get; set; } = null;
}
+ ///
+ /// The configuration for text vectorization using the DigitalOcean module.
+ /// See the documentation
+ /// for detailed usage.
+ ///
+ [Vectorizer("text2vec-digitalocean")]
+ public record Text2VecDigitalOcean : VectorizerConfig
+ {
+ ///
+ /// Initializes a new instance of the class
+ ///
+ [JsonConstructor]
+ internal Text2VecDigitalOcean() { }
+
+ ///
+ /// Gets or sets the base URL where API requests should go.
+ /// Defaults to null, which uses the server-defined default of https://inference.do-ai.run.
+ ///
+ [JsonPropertyName("baseURL")]
+ public string? BaseURL { get; set; } = null;
+
+ ///
+ /// Gets or sets the model to use, e.g. qwen3-embedding-0.6b. Required by the server.
+ ///
+ public string? Model { get; set; } = null;
+
+ ///
+ /// Gets or sets the value of the vectorize collection name
+ ///
+ [JsonPropertyName("vectorizeClassName")]
+ public bool? VectorizeCollectionName { get; set; } = null;
+ }
+
///
/// The configuration for text vectorization using the Model2Vec module.
/// See the documentation for detailed usage.
diff --git a/src/Weaviate.Client/PublicAPI.Unshipped.txt b/src/Weaviate.Client/PublicAPI.Unshipped.txt
index 7dc5c581..7fae55fa 100644
--- a/src/Weaviate.Client/PublicAPI.Unshipped.txt
+++ b/src/Weaviate.Client/PublicAPI.Unshipped.txt
@@ -1 +1,20 @@
#nullable enable
+override sealed Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Equals(Weaviate.Client.Models.VectorizerConfig? other) -> bool
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.$() -> Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean!
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.EqualityContract.get -> System.Type!
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Equals(object? obj) -> bool
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.GetHashCode() -> int
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.PrintMembers(System.Text.StringBuilder! builder) -> bool
+override Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.ToString() -> string!
+static Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.operator !=(Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean? left, Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean? right) -> bool
+static Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.operator ==(Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean? left, Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean? right) -> bool
+virtual Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Equals(Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean? other) -> bool
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.BaseURL.get -> string?
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.BaseURL.set -> void
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Model.get -> string?
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Model.set -> void
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.Text2VecDigitalOcean(Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean! original) -> void
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.VectorizeCollectionName.get -> bool?
+Weaviate.Client.Models.Vectorizer.Text2VecDigitalOcean.VectorizeCollectionName.set -> void
+Weaviate.Client.VectorizerFactory.Text2VecDigitalOcean(string! model, string? baseURL = null, bool? vectorizeCollectionName = null) -> Weaviate.Client.Models.VectorizerConfig!