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
2 changes: 1 addition & 1 deletion src/it/java/io/weaviate/integration/AggregationITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static void beforeAll() throws IOException {
.properties(
Property.text("category"),
Property.integer("price"))
.vectors(Vectorizers.none()));
.vectors(Vectorizers.selfProvided()));

var things = client.collections.use(COLLECTION);
for (var category : List.of("Shoes", "Hat", "Jacket")) {
Expand Down
6 changes: 3 additions & 3 deletions src/it/java/io/weaviate/integration/CollectionsITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import io.weaviate.client6.v1.api.collections.config.Shard;
import io.weaviate.client6.v1.api.collections.config.ShardStatus;
import io.weaviate.client6.v1.api.collections.vectorindex.Hnsw;
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
import io.weaviate.containers.Container;

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

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

Expand All @@ -40,7 +40,7 @@ public void testCreateGetDelete() throws IOException {
.as("default vector").extractingByKey("default")
.satisfies(defaultVector -> {
Assertions.assertThat(defaultVector)
.as("has none vectorizer").isInstanceOf(NoneVectorizer.class);
.as("has none vectorizer").isInstanceOf(SelfProvidedVectorizer.class);
Assertions.assertThat(defaultVector).extracting(Vectorizer::vectorIndex)
.isInstanceOf(Hnsw.class);
});
Expand Down
4 changes: 2 additions & 2 deletions src/it/java/io/weaviate/integration/DataITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ private static void createTestCollections() throws IOException {
Property.integer("age"))
.references(
Property.reference("hasAwards", awardsGrammy, awardsOscar))
.vectors(Vectorizers.none(VECTOR_INDEX)));
.vectors(Vectorizers.selfProvided(VECTOR_INDEX)));
}

@Test
Expand Down Expand Up @@ -233,7 +233,7 @@ public void testUpdate() throws IOException {
collection -> collection
.properties(Property.text("title"), Property.integer("year"))
.references(Property.reference("writtenBy", nsAuthors))
.vectors(Vectorizers.none()));
.vectors(Vectorizers.selfProvided()));

var authors = client.collections.use(nsAuthors);
var walter = authors.data.insert(Map.of("name", "walter scott"));
Expand Down
2 changes: 1 addition & 1 deletion src/it/java/io/weaviate/integration/SearchITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ private static Map<String, float[]> populateTest(int n) throws IOException {
private static void createTestCollection() throws IOException {
client.collections.create(COLLECTION, cfg -> cfg
.properties(Property.text("category"))
.vectors(Vectorizers.none(VECTOR_INDEX)));
.vectors(Vectorizers.selfProvided(VECTOR_INDEX)));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,20 @@ public static class Builder implements ObjectBuilder<ObjectMetadata> {
private String uuid;
private Vectors vectors;

/** Assign a custom UUID for the object. */
public Builder uuid(UUID uuid) {
return uuid(uuid.toString());
}

/** Assign a custom UUID for the object. */
public Builder uuid(String uuid) {
this.uuid = uuid;
return this;
}

public Builder vectors(Vectors vectors) {
this.vectors = vectors;
/** Attach custom vectors to the object.. */
public Builder vectors(Vectors... vectors) {
this.vectors = new Vectors(vectors);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import io.weaviate.client6.v1.api.collections.vectorizers.Img2VecNeuralVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Multi2VecClipVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecContextionaryVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecWeaviateVectorizer;
import io.weaviate.client6.v1.internal.json.JsonEnum;
Expand Down Expand Up @@ -63,7 +63,7 @@ private final void addAdapter(Gson gson, Vectorizer.Kind kind, Class<? extends V
}

private final void init(Gson gson) {
addAdapter(gson, Vectorizer.Kind.NONE, NoneVectorizer.class);
addAdapter(gson, Vectorizer.Kind.NONE, SelfProvidedVectorizer.class);
addAdapter(gson, Vectorizer.Kind.IMG2VEC_NEURAL, Img2VecNeuralVectorizer.class);
addAdapter(gson, Vectorizer.Kind.MULTI2VEC_CLIP, Multi2VecClipVectorizer.class);
addAdapter(gson, Vectorizer.Kind.TEXT2VEC_WEAVIATE, Text2VecWeaviateVectorizer.class);
Expand Down
114 changes: 102 additions & 12 deletions src/main/java/io/weaviate/client6/v1/api/collections/Vectorizers.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,99 +5,189 @@

import io.weaviate.client6.v1.api.collections.vectorizers.Img2VecNeuralVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Multi2VecClipVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.NoneVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecContextionaryVectorizer;
import io.weaviate.client6.v1.api.collections.vectorizers.Text2VecWeaviateVectorizer;
import io.weaviate.client6.v1.internal.ObjectBuilder;

/** Static methods for creating instances of {@link Vectorizer}. */
/** Static factories for creating instances of {@link Vectorizer}. */
public final class Vectorizers {
/** Prevent public initialization. */
private Vectorizers() {
}

public static Map.Entry<String, Vectorizer> none() {
return none(VectorIndex.DEFAULT_VECTOR_NAME);
/** Create a bring-your-own-vector vector index. */
public static Map.Entry<String, Vectorizer> selfProvided() {
return selfProvided(VectorIndex.DEFAULT_VECTOR_NAME);
}

public static Map.Entry<String, Vectorizer> none(
Function<NoneVectorizer.Builder, ObjectBuilder<NoneVectorizer>> fn) {
return none(VectorIndex.DEFAULT_VECTOR_NAME, fn);
/**
* Create a bring-your-own-vector vector index.
*
* @param fn Lambda expression for optional parameters.
*/
public static Map.Entry<String, Vectorizer> selfProvided(
Function<SelfProvidedVectorizer.Builder, ObjectBuilder<SelfProvidedVectorizer>> fn) {
return selfProvided(VectorIndex.DEFAULT_VECTOR_NAME, fn);
}

public static Map.Entry<String, Vectorizer> none(String vectorName) {
return Map.entry(vectorName, NoneVectorizer.of());
/**
* Create a named bring-your-own-vector vector index.
*
* @param vectorName Vector name.
*/
public static Map.Entry<String, Vectorizer> selfProvided(String vectorName) {
return Map.entry(vectorName, SelfProvidedVectorizer.of());
}

public static Map.Entry<String, Vectorizer> none(String vectorName,
Function<NoneVectorizer.Builder, ObjectBuilder<NoneVectorizer>> fn) {
return Map.entry(vectorName, NoneVectorizer.of(fn));
/**
* Create a named bring-your-own-vector vector index.
*
* @param vectorName Vector name.
* @param fn Lambda expression for optional parameters.
*/
public static Map.Entry<String, Vectorizer> selfProvided(String vectorName,
Function<SelfProvidedVectorizer.Builder, ObjectBuilder<SelfProvidedVectorizer>> fn) {
return Map.entry(vectorName, SelfProvidedVectorizer.of(fn));
}

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

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

/**
* Create a named vector index with an {@code img2vec-neural} vectorizer.
*
* @param vectorName Vector name.
*/
public static Map.Entry<String, Vectorizer> img2vecNeural(String vectorName) {
return Map.entry(vectorName, Img2VecNeuralVectorizer.of());
}

/**
* Create a vector index with an {@code img2vec-neural} vectorizer.
*
* @param vectorName Vector name.
* @param fn Lambda expression for optional parameters.
*/
public static Map.Entry<String, Vectorizer> img2vecNeural(String vectorName,
Function<Img2VecNeuralVectorizer.Builder, ObjectBuilder<Img2VecNeuralVectorizer>> fn) {
return Map.entry(vectorName, Img2VecNeuralVectorizer.of(fn));
}

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

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

/**
* Create a named vector index with an {@code multi2vec-clip} vectorizer.
*
* @param vectorName Vector name.
*/
public static Map.Entry<String, Vectorizer> multi2vecClip(String vectorName) {
return Map.entry(vectorName, Multi2VecClipVectorizer.of());
}

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

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

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

/**
* Create a named vector index with an {@code text2vec-contextionary}
* vectorizer.
*
* @param vectorName Vector name.
*/
public static Map.Entry<String, Vectorizer> text2vecContextionary(String vectorName) {
return Map.entry(vectorName, Text2VecContextionaryVectorizer.of());
}

/**
* Create a named vector index with an {@code text2vec-contextionary}
* vectorizer.
*
* @param vectorName Vector name.
* @param fn Lambda expression for optional parameters.
*/
public static Map.Entry<String, Vectorizer> text2vecContextionary(String vectorName,
Function<Text2VecContextionaryVectorizer.Builder, ObjectBuilder<Text2VecContextionaryVectorizer>> fn) {
return Map.entry(vectorName, Text2VecContextionaryVectorizer.of(fn));
}

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

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

/**
* Create a named vector index with an {@code text2vec-weaviate} vectorizer.
*
* @param vectorName Vector name.
*/
public static Map.Entry<String, Vectorizer> text2VecWeaviate(String vectorName) {
return Map.entry(vectorName, Text2VecWeaviateVectorizer.of());
}

/**
* Create a named vector index with an {@code text2vec-weaviate} vectorizer.
*
* @param vectorName Vector name.
* @param fn Lambda expression for optional parameters.
*/
public static Map.Entry<String, Vectorizer> text2VecWeaviate(String vectorName,
Function<Text2VecWeaviateVectorizer.Builder, ObjectBuilder<Text2VecWeaviateVectorizer>> fn) {
return Map.entry(vectorName, Text2VecWeaviateVectorizer.of(fn));
Expand Down
35 changes: 10 additions & 25 deletions src/main/java/io/weaviate/client6/v1/api/collections/Vectors.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

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

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

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

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

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

public static Vectors of(Function<Builder, ObjectBuilder<Vectors>> fn) {
return fn.apply(new Builder()).build();
}

public Vectors(Builder builder) {
this.namedVectors = builder.namedVectors;
}

/**
* Create a single named vector.
*
Expand Down Expand Up @@ -80,23 +75,13 @@ private Vectors(Map<String, Object> namedVectors) {
this.namedVectors = namedVectors;
}

public static class Builder implements ObjectBuilder<Vectors> {
private final Map<String, Object> namedVectors = new HashMap<>();

public Builder vector(String name, float[] vector) {
this.namedVectors.put(name, vector);
return this;
}

public Builder vector(String name, float[][] vector) {
this.namedVectors.put(name, vector);
return this;
}

@Override
public Vectors build() {
return new Vectors(this);
/** Merge all vectors in a single vector map. */
public Vectors(Vectors... vectors) {
var namedVectors = new HashMap<String, Object>();
for (var vec : vectors) {
namedVectors.putAll(vec.asMap());
}
this.namedVectors = namedVectors;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public Builder<T> uuid(String uuid) {
return this;
}

public Builder<T> vectors(Vectors vectors) {
public Builder<T> vectors(Vectors... vectors) {
this.metadata.vectors(vectors);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public Builder<T> properties(T properties) {
return this;
}

public Builder<T> vectors(Vectors vectors) {
public Builder<T> vectors(Vectors... vectors) {
this.metadata.vectors(vectors);
return this;
}
Expand Down
Loading