Skip to content

Commit 34ae6fe

Browse files
authored
Merge pull request #570 from weaviate/text2vec-digitalocean
Add text2vec-digitalocean vectorizer module
2 parents 37f763e + c4eaf1b commit 34ae6fe

3 files changed

Lines changed: 214 additions & 0 deletions

File tree

src/main/java/io/weaviate/client6/v1/api/collections/VectorConfig.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecGoogleVectorizer;
3737
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecHuggingFaceVectorizer;
3838
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecJinaAiVectorizer;
39+
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecDigitalOceanVectorizer;
3940
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecMistralVectorizer;
4041
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecModel2VecVectorizer;
4142
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecMorphVectorizer;
@@ -59,6 +60,7 @@ public enum Kind implements JsonEnum<Kind> {
5960
TEXT2VEC_HUGGINGFACE("text2vec-huggingface"),
6061
REF2VEC_CENTROID("ref2vec-centroid"),
6162
TEXT2VEC_JINAAI("text2vec-jinaai"),
63+
TEXT2VEC_DIGITALOCEAN("text2vec-digitalocean"),
6264
TEXT2VEC_MISTRAL("text2vec-mistral"),
6365
TEXT2VEC_MORPH("text2vec-morph"),
6466
TEXT2VEC_MODEL2VEC("text2vec-model2vec"),
@@ -1053,6 +1055,41 @@ public static Map.Entry<String, VectorConfig> text2vecJinaAi(String vectorName,
10531055
return Map.entry(vectorName, Text2VecJinaAiVectorizer.of(fn));
10541056
}
10551057

1058+
/** Create a vector index with an {@code text2vec-digitalocean} vectorizer. */
1059+
public static Map.Entry<String, VectorConfig> text2vecDigitalOcean() {
1060+
return text2vecDigitalOcean(VectorIndex.DEFAULT_VECTOR_NAME);
1061+
}
1062+
1063+
/**
1064+
* Create a vector index with an {@code text2vec-digitalocean} vectorizer.
1065+
*
1066+
* @param fn Lambda expression for optional parameters.
1067+
*/
1068+
public static Map.Entry<String, VectorConfig> text2vecDigitalOcean(
1069+
Function<Text2VecDigitalOceanVectorizer.Builder, ObjectBuilder<Text2VecDigitalOceanVectorizer>> fn) {
1070+
return text2vecDigitalOcean(VectorIndex.DEFAULT_VECTOR_NAME, fn);
1071+
}
1072+
1073+
/**
1074+
* Create a named vector index with an {@code text2vec-digitalocean} vectorizer.
1075+
*
1076+
* @param vectorName Vector name.
1077+
*/
1078+
public static Map.Entry<String, VectorConfig> text2vecDigitalOcean(String vectorName) {
1079+
return Map.entry(vectorName, Text2VecDigitalOceanVectorizer.of());
1080+
}
1081+
1082+
/**
1083+
* Create a named vector index with an {@code text2vec-digitalocean} vectorizer.
1084+
*
1085+
* @param vectorName Vector name.
1086+
* @param fn Lambda expression for optional parameters.
1087+
*/
1088+
public static Map.Entry<String, VectorConfig> text2vecDigitalOcean(String vectorName,
1089+
Function<Text2VecDigitalOceanVectorizer.Builder, ObjectBuilder<Text2VecDigitalOceanVectorizer>> fn) {
1090+
return Map.entry(vectorName, Text2VecDigitalOceanVectorizer.of(fn));
1091+
}
1092+
10561093
/** Create a vector index with an {@code text2vec-mistral} vectorizer. */
10571094
public static Map.Entry<String, VectorConfig> text2vecMistral() {
10581095
return text2vecMistral(VectorIndex.DEFAULT_VECTOR_NAME);
@@ -1558,6 +1595,16 @@ default public Text2VecJinaAiVectorizer asText2VecJinaAi() {
15581595
return _as(VectorConfig.Kind.TEXT2VEC_JINAAI);
15591596
}
15601597

1598+
/** Is this an instance of {@link Text2VecDigitalOceanVectorizer}? */
1599+
default public boolean isText2VecDigitalOcean() {
1600+
return _is(VectorConfig.Kind.TEXT2VEC_DIGITALOCEAN);
1601+
}
1602+
1603+
/** Convert this instance to {@link Text2VecDigitalOceanVectorizer}. */
1604+
default public Text2VecDigitalOceanVectorizer asText2VecDigitalOcean() {
1605+
return _as(VectorConfig.Kind.TEXT2VEC_DIGITALOCEAN);
1606+
}
1607+
15611608
/** Is this an instance of {@link Text2VecMistralVectorizer}? */
15621609
default public boolean isText2VecMistral() {
15631610
return _is(VectorConfig.Kind.TEXT2VEC_MISTRAL);
@@ -1668,6 +1715,7 @@ private final void init(Gson gson) {
16681715
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_HUGGINGFACE, Text2VecHuggingFaceVectorizer.class);
16691716
addAdapter(gson, VectorConfig.Kind.REF2VEC_CENTROID, Ref2VecCentroidVectorizer.class);
16701717
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_JINAAI, Text2VecJinaAiVectorizer.class);
1718+
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_DIGITALOCEAN, Text2VecDigitalOceanVectorizer.class);
16711719
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_MISTRAL, Text2VecMistralVectorizer.class);
16721720
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_MORPH, Text2VecMorphVectorizer.class);
16731721
addAdapter(gson, VectorConfig.Kind.TEXT2VEC_MODEL2VEC, Text2VecModel2VecVectorizer.class);
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package io.weaviate.client6.v1.api.collections.vectorizers;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.function.Function;
6+
7+
import com.google.gson.annotations.SerializedName;
8+
9+
import io.weaviate.client6.v1.api.collections.Quantization;
10+
import io.weaviate.client6.v1.api.collections.VectorConfig;
11+
import io.weaviate.client6.v1.api.collections.VectorIndex;
12+
import io.weaviate.client6.v1.internal.ObjectBuilder;
13+
14+
public record Text2VecDigitalOceanVectorizer(
15+
@SerializedName("baseURL") String baseUrl,
16+
@SerializedName("model") String model,
17+
18+
/**
19+
* Weaviate defaults to {@code true} if the value is not provided.
20+
* To avoid that we send "vectorizeClassName": false all the time
21+
* and make it impossible to enable this feature, as it is deprecated.
22+
*/
23+
@Deprecated @SerializedName("vectorizeClassName") boolean vectorizeCollectionName,
24+
/** Properties included in the embedding. */
25+
@SerializedName("properties") List<String> sourceProperties,
26+
/** Vector index configuration. */
27+
VectorIndex vectorIndex,
28+
/** Vector quantization method. */
29+
Quantization quantization) implements VectorConfig {
30+
31+
@Override
32+
public VectorConfig.Kind _kind() {
33+
return VectorConfig.Kind.TEXT2VEC_DIGITALOCEAN;
34+
}
35+
36+
@Override
37+
public Object _self() {
38+
return this;
39+
}
40+
41+
public static Text2VecDigitalOceanVectorizer of() {
42+
return of(ObjectBuilder.identity());
43+
}
44+
45+
public static Text2VecDigitalOceanVectorizer of(
46+
Function<Builder, ObjectBuilder<Text2VecDigitalOceanVectorizer>> fn) {
47+
return fn.apply(new Builder()).build();
48+
}
49+
50+
/**
51+
* Canonical constructor always sets {@link #vectorizeCollectionName} to false.
52+
*/
53+
public Text2VecDigitalOceanVectorizer(
54+
String baseUrl,
55+
String model,
56+
57+
boolean vectorizeCollectionName,
58+
List<String> sourceProperties,
59+
VectorIndex vectorIndex,
60+
Quantization quantization) {
61+
this.baseUrl = baseUrl;
62+
this.model = model;
63+
64+
this.vectorizeCollectionName = false;
65+
this.sourceProperties = sourceProperties;
66+
this.vectorIndex = vectorIndex;
67+
this.quantization = quantization;
68+
}
69+
70+
public Text2VecDigitalOceanVectorizer(Builder builder) {
71+
this(
72+
builder.baseUrl,
73+
builder.model,
74+
75+
builder.vectorizeCollectionName,
76+
builder.sourceProperties,
77+
builder.vectorIndex,
78+
builder.quantization);
79+
}
80+
81+
public static class Builder implements ObjectBuilder<Text2VecDigitalOceanVectorizer> {
82+
private final boolean vectorizeCollectionName = false;
83+
private Quantization quantization;
84+
private List<String> sourceProperties;
85+
private VectorIndex vectorIndex = VectorIndex.DEFAULT_VECTOR_INDEX;
86+
87+
private String baseUrl;
88+
private String model;
89+
90+
public Builder baseUrl(String baseUrl) {
91+
this.baseUrl = baseUrl;
92+
return this;
93+
}
94+
95+
public Builder model(String model) {
96+
this.model = model;
97+
return this;
98+
}
99+
100+
/** Add properties to include in the embedding. */
101+
public Builder sourceProperties(String... properties) {
102+
return sourceProperties(Arrays.asList(properties));
103+
}
104+
105+
/** Add properties to include in the embedding. */
106+
public Builder sourceProperties(List<String> properties) {
107+
this.sourceProperties = properties;
108+
return this;
109+
}
110+
111+
/**
112+
* Override default vector index configuration.
113+
*
114+
* <a href=
115+
* "https://docs.weaviate.io/weaviate/config-refs/indexing/vector-index#hnsw-index-parameters">HNSW</a>
116+
* is the default vector index.
117+
*/
118+
public Builder vectorIndex(VectorIndex vectorIndex) {
119+
this.vectorIndex = vectorIndex;
120+
return this;
121+
}
122+
123+
public Builder quantization(Quantization quantization) {
124+
this.quantization = quantization;
125+
return this;
126+
}
127+
128+
public Text2VecDigitalOceanVectorizer build() {
129+
return new Text2VecDigitalOceanVectorizer(this);
130+
}
131+
}
132+
}

src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecGoogleVectorizer;
5656
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecHuggingFaceVectorizer;
5757
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecJinaAiVectorizer;
58+
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecDigitalOceanVectorizer;
5859
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecMistralVectorizer;
5960
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecModel2VecVectorizer;
6061
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecMorphVectorizer;
@@ -347,6 +348,39 @@ public static Object[][] testCases() {
347348
}
348349
""",
349350
},
351+
{
352+
VectorConfig.class,
353+
Text2VecDigitalOceanVectorizer.of(),
354+
"""
355+
{
356+
"vectorIndexType": "hnsw",
357+
"vectorIndexConfig": {},
358+
"vectorizer": {
359+
"text2vec-digitalocean": {
360+
"vectorizeClassName": false
361+
}
362+
}
363+
}
364+
""",
365+
},
366+
{
367+
VectorConfig.class,
368+
Text2VecDigitalOceanVectorizer.of(v -> v.model("qwen3-embedding-0.6b").baseUrl("https://inference.do-ai.run").sourceProperties("a")),
369+
"""
370+
{
371+
"vectorIndexType": "hnsw",
372+
"vectorIndexConfig": {},
373+
"vectorizer": {
374+
"text2vec-digitalocean": {
375+
"baseURL": "https://inference.do-ai.run",
376+
"model": "qwen3-embedding-0.6b",
377+
"properties": ["a"],
378+
"vectorizeClassName": false
379+
}
380+
}
381+
}
382+
""",
383+
},
350384
{
351385
VectorConfig.class,
352386
Text2VecModel2VecVectorizer.of(),

0 commit comments

Comments
 (0)