Skip to content

Commit d215a66

Browse files
authored
Merge pull request #450 from weaviate/v6-vectorizers-source-properties
2 parents 937f95c + fcbaaea commit d215a66

18 files changed

Lines changed: 274 additions & 75 deletions

src/it/java/io/weaviate/integration/AggregationITest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static void beforeAll() throws IOException {
3535
.properties(
3636
Property.text("category"),
3737
Property.integer("price"))
38-
.vectors(Vectorizers.none()));
38+
.vectors(Vectorizers.selfProvided()));
3939

4040
var things = client.collections.use(COLLECTION);
4141
for (var category : List.of("Shoes", "Hat", "Jacket")) {

src/it/java/io/weaviate/integration/CollectionsITest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import io.weaviate.client6.v1.api.collections.config.Shard;
1919
import io.weaviate.client6.v1.api.collections.config.ShardStatus;
2020
import io.weaviate.client6.v1.api.collections.vectorindex.Hnsw;
21-
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
21+
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
2222
import io.weaviate.containers.Container;
2323

2424
public class CollectionsITest extends ConcurrentTest {
@@ -30,7 +30,7 @@ public void testCreateGetDelete() throws IOException {
3030
client.collections.create(collectionName,
3131
col -> col
3232
.properties(Property.text("username"), Property.integer("age"))
33-
.vectors(Vectorizers.none()));
33+
.vectors(Vectorizers.selfProvided()));
3434

3535
var thingsCollection = client.collections.getConfig(collectionName);
3636

@@ -40,7 +40,7 @@ public void testCreateGetDelete() throws IOException {
4040
.as("default vector").extractingByKey("default")
4141
.satisfies(defaultVector -> {
4242
Assertions.assertThat(defaultVector)
43-
.as("has none vectorizer").isInstanceOf(NoneVectorizer.class);
43+
.as("has none vectorizer").isInstanceOf(SelfProvidedVectorizer.class);
4444
Assertions.assertThat(defaultVector).extracting(Vectorizer::vectorIndex)
4545
.isInstanceOf(Hnsw.class);
4646
});

src/it/java/io/weaviate/integration/DataITest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ private static void createTestCollections() throws IOException {
117117
Property.integer("age"))
118118
.references(
119119
Property.reference("hasAwards", awardsGrammy, awardsOscar))
120-
.vectors(Vectorizers.none(VECTOR_INDEX)));
120+
.vectors(Vectorizers.selfProvided(VECTOR_INDEX)));
121121
}
122122

123123
@Test
@@ -233,7 +233,7 @@ public void testUpdate() throws IOException {
233233
collection -> collection
234234
.properties(Property.text("title"), Property.integer("year"))
235235
.references(Property.reference("writtenBy", nsAuthors))
236-
.vectors(Vectorizers.none()));
236+
.vectors(Vectorizers.selfProvided()));
237237

238238
var authors = client.collections.use(nsAuthors);
239239
var walter = authors.data.insert(Map.of("name", "walter scott"));

src/it/java/io/weaviate/integration/SearchITest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ private static Map<String, float[]> populateTest(int n) throws IOException {
132132
private static void createTestCollection() throws IOException {
133133
client.collections.create(COLLECTION, cfg -> cfg
134134
.properties(Property.text("category"))
135-
.vectors(Vectorizers.none(VECTOR_INDEX)));
135+
.vectors(Vectorizers.selfProvided(VECTOR_INDEX)));
136136
}
137137

138138
@Test

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,20 @@ public static class Builder implements ObjectBuilder<ObjectMetadata> {
2525
private String uuid;
2626
private Vectors vectors;
2727

28+
/** Assign a custom UUID for the object. */
2829
public Builder uuid(UUID uuid) {
2930
return uuid(uuid.toString());
3031
}
3132

33+
/** Assign a custom UUID for the object. */
3234
public Builder uuid(String uuid) {
3335
this.uuid = uuid;
3436
return this;
3537
}
3638

37-
public Builder vectors(Vectors vectors) {
38-
this.vectors = vectors;
39+
/** Attach custom vectors to the object.. */
40+
public Builder vectors(Vectors... vectors) {
41+
this.vectors = new Vectors(vectors);
3942
return this;
4043
}
4144

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import io.weaviate.client6.v1.api.collections.vectorizers.Img2VecNeuralVectorizer;
1818
import io.weaviate.client6.v1.api.collections.vectorizers.Multi2VecClipVectorizer;
19-
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
19+
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
2020
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecContextionaryVectorizer;
2121
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecWeaviateVectorizer;
2222
import io.weaviate.client6.v1.internal.json.JsonEnum;
@@ -63,7 +63,7 @@ private final void addAdapter(Gson gson, Vectorizer.Kind kind, Class<? extends V
6363
}
6464

6565
private final void init(Gson gson) {
66-
addAdapter(gson, Vectorizer.Kind.NONE, NoneVectorizer.class);
66+
addAdapter(gson, Vectorizer.Kind.NONE, SelfProvidedVectorizer.class);
6767
addAdapter(gson, Vectorizer.Kind.IMG2VEC_NEURAL, Img2VecNeuralVectorizer.class);
6868
addAdapter(gson, Vectorizer.Kind.MULTI2VEC_CLIP, Multi2VecClipVectorizer.class);
6969
addAdapter(gson, Vectorizer.Kind.TEXT2VEC_WEAVIATE, Text2VecWeaviateVectorizer.class);

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

Lines changed: 102 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,99 +5,189 @@
55

66
import io.weaviate.client6.v1.api.collections.vectorizers.Img2VecNeuralVectorizer;
77
import io.weaviate.client6.v1.api.collections.vectorizers.Multi2VecClipVectorizer;
8-
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
8+
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
99
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecContextionaryVectorizer;
1010
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecWeaviateVectorizer;
1111
import io.weaviate.client6.v1.internal.ObjectBuilder;
1212

13-
/** Static methods for creating instances of {@link Vectorizer}. */
13+
/** Static factories for creating instances of {@link Vectorizer}. */
1414
public final class Vectorizers {
15+
/** Prevent public initialization. */
16+
private Vectorizers() {
17+
}
1518

16-
public static Map.Entry<String, Vectorizer> none() {
17-
return none(VectorIndex.DEFAULT_VECTOR_NAME);
19+
/** Create a bring-your-own-vector vector index. */
20+
public static Map.Entry<String, Vectorizer> selfProvided() {
21+
return selfProvided(VectorIndex.DEFAULT_VECTOR_NAME);
1822
}
1923

20-
public static Map.Entry<String, Vectorizer> none(
21-
Function<NoneVectorizer.Builder, ObjectBuilder<NoneVectorizer>> fn) {
22-
return none(VectorIndex.DEFAULT_VECTOR_NAME, fn);
24+
/**
25+
* Create a bring-your-own-vector vector index.
26+
*
27+
* @param fn Lambda expression for optional parameters.
28+
*/
29+
public static Map.Entry<String, Vectorizer> selfProvided(
30+
Function<SelfProvidedVectorizer.Builder, ObjectBuilder<SelfProvidedVectorizer>> fn) {
31+
return selfProvided(VectorIndex.DEFAULT_VECTOR_NAME, fn);
2332
}
2433

25-
public static Map.Entry<String, Vectorizer> none(String vectorName) {
26-
return Map.entry(vectorName, NoneVectorizer.of());
34+
/**
35+
* Create a named bring-your-own-vector vector index.
36+
*
37+
* @param vectorName Vector name.
38+
*/
39+
public static Map.Entry<String, Vectorizer> selfProvided(String vectorName) {
40+
return Map.entry(vectorName, SelfProvidedVectorizer.of());
2741
}
2842

29-
public static Map.Entry<String, Vectorizer> none(String vectorName,
30-
Function<NoneVectorizer.Builder, ObjectBuilder<NoneVectorizer>> fn) {
31-
return Map.entry(vectorName, NoneVectorizer.of(fn));
43+
/**
44+
* Create a named bring-your-own-vector vector index.
45+
*
46+
* @param vectorName Vector name.
47+
* @param fn Lambda expression for optional parameters.
48+
*/
49+
public static Map.Entry<String, Vectorizer> selfProvided(String vectorName,
50+
Function<SelfProvidedVectorizer.Builder, ObjectBuilder<SelfProvidedVectorizer>> fn) {
51+
return Map.entry(vectorName, SelfProvidedVectorizer.of(fn));
3252
}
3353

54+
/** Create a vector index with an {@code img2vec-neural} vectorizer. */
3455
public static Map.Entry<String, Vectorizer> img2vecNeural() {
3556
return img2vecNeural(VectorIndex.DEFAULT_VECTOR_NAME);
3657
}
3758

59+
/**
60+
* Create a vector index with an {@code img2vec-neural} vectorizer.
61+
*
62+
* @param fn Lambda expression for optional parameters.
63+
*/
3864
public static Map.Entry<String, Vectorizer> img2vecNeural(
3965
Function<Img2VecNeuralVectorizer.Builder, ObjectBuilder<Img2VecNeuralVectorizer>> fn) {
4066
return img2vecNeural(VectorIndex.DEFAULT_VECTOR_NAME, fn);
4167
}
4268

69+
/**
70+
* Create a named vector index with an {@code img2vec-neural} vectorizer.
71+
*
72+
* @param vectorName Vector name.
73+
*/
4374
public static Map.Entry<String, Vectorizer> img2vecNeural(String vectorName) {
4475
return Map.entry(vectorName, Img2VecNeuralVectorizer.of());
4576
}
4677

78+
/**
79+
* Create a vector index with an {@code img2vec-neural} vectorizer.
80+
*
81+
* @param vectorName Vector name.
82+
* @param fn Lambda expression for optional parameters.
83+
*/
4784
public static Map.Entry<String, Vectorizer> img2vecNeural(String vectorName,
4885
Function<Img2VecNeuralVectorizer.Builder, ObjectBuilder<Img2VecNeuralVectorizer>> fn) {
4986
return Map.entry(vectorName, Img2VecNeuralVectorizer.of(fn));
5087
}
5188

89+
/** Create a vector index with an {@code multi2vec-clip} vectorizer. */
5290
public static Map.Entry<String, Vectorizer> multi2vecClip() {
5391
return multi2vecClip(VectorIndex.DEFAULT_VECTOR_NAME);
5492
}
5593

94+
/**
95+
* Create a vector index with an {@code multi2vec-clip} vectorizer.
96+
*
97+
* @param fn Lambda expression for optional parameters.
98+
*/
5699
public static Map.Entry<String, Vectorizer> multi2vecClip(
57100
Function<Multi2VecClipVectorizer.Builder, ObjectBuilder<Multi2VecClipVectorizer>> fn) {
58101
return multi2vecClip(VectorIndex.DEFAULT_VECTOR_NAME, fn);
59102
}
60103

104+
/**
105+
* Create a named vector index with an {@code multi2vec-clip} vectorizer.
106+
*
107+
* @param vectorName Vector name.
108+
*/
61109
public static Map.Entry<String, Vectorizer> multi2vecClip(String vectorName) {
62110
return Map.entry(vectorName, Multi2VecClipVectorizer.of());
63111
}
64112

113+
/**
114+
* Create a named vector index with an {@code multi2vec-clip} vectorizer.
115+
*
116+
* @param vectorName Vector name.
117+
* @param fn Lambda expression for optional parameters.
118+
*/
65119
public static Map.Entry<String, Vectorizer> multi2vecClip(String vectorName,
66120
Function<Multi2VecClipVectorizer.Builder, ObjectBuilder<Multi2VecClipVectorizer>> fn) {
67121
return Map.entry(vectorName, Multi2VecClipVectorizer.of(fn));
68122
}
69123

124+
/** Create a vector index with an {@code text2vec-contextionary} vectorizer. */
70125
public static Map.Entry<String, Vectorizer> text2vecContextionary() {
71126
return text2vecContextionary(VectorIndex.DEFAULT_VECTOR_NAME);
72127
}
73128

129+
/**
130+
* Create a vector index with an {@code text2vec-contextionary} vectorizer.
131+
*
132+
* @param fn Lambda expression for optional parameters.
133+
*/
74134
public static Map.Entry<String, Vectorizer> text2vecContextionary(
75135
Function<Text2VecContextionaryVectorizer.Builder, ObjectBuilder<Text2VecContextionaryVectorizer>> fn) {
76136
return text2vecContextionary(VectorIndex.DEFAULT_VECTOR_NAME, fn);
77137
}
78138

139+
/**
140+
* Create a named vector index with an {@code text2vec-contextionary}
141+
* vectorizer.
142+
*
143+
* @param vectorName Vector name.
144+
*/
79145
public static Map.Entry<String, Vectorizer> text2vecContextionary(String vectorName) {
80146
return Map.entry(vectorName, Text2VecContextionaryVectorizer.of());
81147
}
82148

149+
/**
150+
* Create a named vector index with an {@code text2vec-contextionary}
151+
* vectorizer.
152+
*
153+
* @param vectorName Vector name.
154+
* @param fn Lambda expression for optional parameters.
155+
*/
83156
public static Map.Entry<String, Vectorizer> text2vecContextionary(String vectorName,
84157
Function<Text2VecContextionaryVectorizer.Builder, ObjectBuilder<Text2VecContextionaryVectorizer>> fn) {
85158
return Map.entry(vectorName, Text2VecContextionaryVectorizer.of(fn));
86159
}
87160

161+
/** Create a vector index with an {@code text2vec-weaviate} vectorizer. */
88162
public static Map.Entry<String, Vectorizer> text2VecWeaviate() {
89163
return text2VecWeaviate(VectorIndex.DEFAULT_VECTOR_NAME);
90164
}
91165

166+
/**
167+
* Create a vector index with an {@code text2vec-weaviate} vectorizer.
168+
*
169+
* @param fn Lambda expression for optional parameters.
170+
*/
92171
public static Map.Entry<String, Vectorizer> text2VecWeaviate(
93172
Function<Text2VecWeaviateVectorizer.Builder, ObjectBuilder<Text2VecWeaviateVectorizer>> fn) {
94173
return text2VecWeaviate(VectorIndex.DEFAULT_VECTOR_NAME, fn);
95174
}
96175

176+
/**
177+
* Create a named vector index with an {@code text2vec-weaviate} vectorizer.
178+
*
179+
* @param vectorName Vector name.
180+
*/
97181
public static Map.Entry<String, Vectorizer> text2VecWeaviate(String vectorName) {
98182
return Map.entry(vectorName, Text2VecWeaviateVectorizer.of());
99183
}
100184

185+
/**
186+
* Create a named vector index with an {@code text2vec-weaviate} vectorizer.
187+
*
188+
* @param vectorName Vector name.
189+
* @param fn Lambda expression for optional parameters.
190+
*/
101191
public static Map.Entry<String, Vectorizer> text2VecWeaviate(String vectorName,
102192
Function<Text2VecWeaviateVectorizer.Builder, ObjectBuilder<Text2VecWeaviateVectorizer>> fn) {
103193
return Map.entry(vectorName, Text2VecWeaviateVectorizer.of(fn));

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

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.Collections;
55
import java.util.HashMap;
66
import java.util.Map;
7-
import java.util.function.Function;
87

98
import com.google.gson.Gson;
109
import com.google.gson.JsonArray;
@@ -28,30 +27,26 @@ public class Vectors {
2827
/** Elements of this map must only be {@code float[]} or {@code float[][]}. */
2928
private final Map<String, Object> namedVectors;
3029

30+
/** Create a 1-dimensional vector. */
3131
public static Vectors of(float[] vector) {
3232
return of(VectorIndex.DEFAULT_VECTOR_NAME, vector);
3333
}
3434

35+
/** Create a named 1-dimensional vector. */
3536
public static Vectors of(String name, float[] vector) {
3637
return new Vectors(name, vector);
3738
}
3839

40+
/** Create a 2-dimensional vector. */
3941
public static Vectors of(float[][] vector) {
4042
return of(VectorIndex.DEFAULT_VECTOR_NAME, vector);
4143
}
4244

45+
/** Create a named 2-dimensional vector. */
4346
public static Vectors of(String name, float[][] vector) {
4447
return new Vectors(name, vector);
4548
}
4649

47-
public static Vectors of(Function<Builder, ObjectBuilder<Vectors>> fn) {
48-
return fn.apply(new Builder()).build();
49-
}
50-
51-
public Vectors(Builder builder) {
52-
this.namedVectors = builder.namedVectors;
53-
}
54-
5550
/**
5651
* Create a single named vector.
5752
*
@@ -80,23 +75,13 @@ private Vectors(Map<String, Object> namedVectors) {
8075
this.namedVectors = namedVectors;
8176
}
8277

83-
public static class Builder implements ObjectBuilder<Vectors> {
84-
private final Map<String, Object> namedVectors = new HashMap<>();
85-
86-
public Builder vector(String name, float[] vector) {
87-
this.namedVectors.put(name, vector);
88-
return this;
89-
}
90-
91-
public Builder vector(String name, float[][] vector) {
92-
this.namedVectors.put(name, vector);
93-
return this;
94-
}
95-
96-
@Override
97-
public Vectors build() {
98-
return new Vectors(this);
78+
/** Merge all vectors in a single vector map. */
79+
public Vectors(Vectors... vectors) {
80+
var namedVectors = new HashMap<String, Object>();
81+
for (var vec : vectors) {
82+
namedVectors.putAll(vec.asMap());
9983
}
84+
this.namedVectors = namedVectors;
10085
}
10186

10287
/**

src/main/java/io/weaviate/client6/v1/api/collections/data/InsertObjectRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public Builder<T> uuid(String uuid) {
6363
return this;
6464
}
6565

66-
public Builder<T> vectors(Vectors vectors) {
66+
public Builder<T> vectors(Vectors... vectors) {
6767
this.metadata.vectors(vectors);
6868
return this;
6969
}

src/main/java/io/weaviate/client6/v1/api/collections/data/ReplaceObjectRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public Builder<T> properties(T properties) {
5454
return this;
5555
}
5656

57-
public Builder<T> vectors(Vectors vectors) {
57+
public Builder<T> vectors(Vectors... vectors) {
5858
this.metadata.vectors(vectors);
5959
return this;
6060
}

0 commit comments

Comments
 (0)