Skip to content

Commit 03d711f

Browse files
authored
Merge pull request #485 from weaviate/v6-generate
v6: Generative queries + Dynamic RAG
2 parents 423f2f5 + e66e304 commit 03d711f

42 files changed

Lines changed: 6913 additions & 363 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import io.weaviate.client6.v1.api.collections.WeaviateMetadata;
2828
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2929
import io.weaviate.client6.v1.api.collections.data.Reference;
30+
import io.weaviate.client6.v1.api.collections.generate.GenerativeObject;
31+
import io.weaviate.client6.v1.api.collections.generate.TaskOutput;
32+
import io.weaviate.client6.v1.api.collections.generative.DummyGenerative;
3033
import io.weaviate.client6.v1.api.collections.query.GroupBy;
3134
import io.weaviate.client6.v1.api.collections.query.Metadata;
3235
import io.weaviate.client6.v1.api.collections.query.QueryMetadata;
@@ -47,6 +50,7 @@ public class SearchITest extends ConcurrentTest {
4750
Weaviate.custom()
4851
.withContextionaryUrl(Contextionary.URL)
4952
.withImageInference(Img2VecNeural.URL, Img2VecNeural.MODULE)
53+
.addModules("generative-dummy")
5054
.build(),
5155
Container.IMG2VEC_NEURAL,
5256
Container.CONTEXTIONARY);
@@ -549,4 +553,98 @@ public void testNearVector_targetVectors() throws IOException {
549553
.hasSize(1).extracting(WeaviateObject::uuid)
550554
.containsExactly(thing456.uuids().get(0));
551555
}
556+
557+
@Test
558+
public void testGenerative_bm25() throws IOException {
559+
// Arrange
560+
var nsThings = ns("Things");
561+
562+
client.collections.create(nsThings,
563+
c -> c
564+
.properties(Property.text("title"))
565+
.generativeModule(new DummyGenerative())
566+
.vectorConfig(VectorConfig.text2vecContextionary(
567+
t2v -> t2v.sourceProperties("title"))));
568+
569+
var things = client.collections.use(nsThings);
570+
571+
things.data.insertMany(
572+
Map.of("title", "Salad Fork"),
573+
Map.of("title", "Dessert Fork"));
574+
575+
// Act
576+
var french = things.generate.bm25(
577+
"fork",
578+
bm25 -> bm25.queryProperties("title").limit(2),
579+
generate -> generate
580+
.singlePrompt("translate to French")
581+
.groupedTask("count letters R"));
582+
583+
// Assert
584+
Assertions.assertThat(french.objects())
585+
.as("individual results")
586+
.hasSize(2)
587+
.extracting(GenerativeObject::generated)
588+
.allSatisfy(generated -> {
589+
Assertions.assertThat(generated.text()).isNotBlank();
590+
});
591+
592+
Assertions.assertThat(french.generated())
593+
.as("summary")
594+
.extracting(TaskOutput::text, InstanceOfAssertFactories.STRING)
595+
.isNotBlank();
596+
}
597+
598+
@Test
599+
public void testGenerative_bm25_groupBy() throws IOException {
600+
// Arrange
601+
var nsThings = ns("Things");
602+
603+
client.collections.create(nsThings,
604+
c -> c
605+
.properties(Property.text("title"))
606+
.generativeModule(new DummyGenerative())
607+
.vectorConfig(VectorConfig.text2vecContextionary(
608+
t2v -> t2v.sourceProperties("title"))));
609+
610+
var things = client.collections.use(nsThings);
611+
612+
things.data.insertMany(
613+
Map.of("title", "Salad Fork"),
614+
Map.of("title", "Dessert Fork"));
615+
616+
// Act
617+
var french = things.generate.bm25(
618+
"fork",
619+
bm25 -> bm25.queryProperties("title").limit(2),
620+
generate -> generate
621+
.singlePrompt("translate to French")
622+
.groupedTask("count letters R"),
623+
GroupBy.property("title", 5, 5));
624+
625+
// Assert
626+
Assertions.assertThat(french.objects())
627+
.as("individual results")
628+
.hasSize(2);
629+
630+
Assertions.assertThat(french.groups())
631+
.as("grouped results")
632+
.hasSize(2)
633+
.allSatisfy((groupName, group) -> {
634+
Assertions.assertThat(group.objects())
635+
.describedAs("objects in group %s", groupName)
636+
.hasSize(1);
637+
638+
Assertions.assertThat(group.generated())
639+
.describedAs("summary group %s", groupName)
640+
.extracting(TaskOutput::text, InstanceOfAssertFactories.STRING)
641+
.isNotBlank();
642+
643+
});
644+
645+
Assertions.assertThat(french.generated())
646+
.as("summary")
647+
.extracting(TaskOutput::text, InstanceOfAssertFactories.STRING)
648+
.isNotBlank();
649+
}
552650
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.weaviate.client6.v1.api.collections.aggregate.WeaviateAggregateClient;
77
import io.weaviate.client6.v1.api.collections.config.WeaviateConfigClient;
88
import io.weaviate.client6.v1.api.collections.data.WeaviateDataClient;
9+
import io.weaviate.client6.v1.api.collections.generate.WeaviateGenerateClient;
910
import io.weaviate.client6.v1.api.collections.pagination.Paginator;
1011
import io.weaviate.client6.v1.api.collections.query.ConsistencyLevel;
1112
import io.weaviate.client6.v1.api.collections.query.WeaviateQueryClient;
@@ -20,6 +21,7 @@ public class CollectionHandle<PropertiesT> {
2021
public final WeaviateDataClient<PropertiesT> data;
2122
public final WeaviateQueryClient<PropertiesT> query;
2223
public final WeaviateAggregateClient aggregate;
24+
public final WeaviateGenerateClient<PropertiesT> generate;
2325
public final WeaviateTenantsClient tenants;
2426

2527
private final CollectionHandleDefaults defaults;
@@ -32,6 +34,7 @@ public CollectionHandle(
3234
this.config = new WeaviateConfigClient(collection, restTransport, grpcTransport, defaults);
3335
this.aggregate = new WeaviateAggregateClient(collection, grpcTransport, defaults);
3436
this.query = new WeaviateQueryClient<>(collection, grpcTransport, defaults);
37+
this.generate = new WeaviateGenerateClient<>(collection, grpcTransport, defaults);
3538
this.data = new WeaviateDataClient<>(collection, restTransport, grpcTransport, defaults);
3639
this.defaults = defaults;
3740

@@ -43,6 +46,7 @@ private CollectionHandle(CollectionHandle<PropertiesT> c, CollectionHandleDefaul
4346
this.config = new WeaviateConfigClient(c.config, defaults);
4447
this.aggregate = new WeaviateAggregateClient(c.aggregate, defaults);
4548
this.query = new WeaviateQueryClient<>(c.query, defaults);
49+
this.generate = new WeaviateGenerateClient<>(c.generate, defaults);
4650
this.data = new WeaviateDataClient<>(c.data, defaults);
4751
this.defaults = defaults;
4852

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.weaviate.client6.v1.api.collections.aggregate.WeaviateAggregateClientAsync;
99
import io.weaviate.client6.v1.api.collections.config.WeaviateConfigClientAsync;
1010
import io.weaviate.client6.v1.api.collections.data.WeaviateDataClientAsync;
11+
import io.weaviate.client6.v1.api.collections.generate.WeaviateGenerateClientAsync;
1112
import io.weaviate.client6.v1.api.collections.pagination.AsyncPaginator;
1213
import io.weaviate.client6.v1.api.collections.query.ConsistencyLevel;
1314
import io.weaviate.client6.v1.api.collections.query.WeaviateQueryClientAsync;
@@ -21,6 +22,7 @@ public class CollectionHandleAsync<PropertiesT> {
2122
public final WeaviateConfigClientAsync config;
2223
public final WeaviateDataClientAsync<PropertiesT> data;
2324
public final WeaviateQueryClientAsync<PropertiesT> query;
25+
public final WeaviateGenerateClientAsync<PropertiesT> generate;
2426
public final WeaviateAggregateClientAsync aggregate;
2527
public final WeaviateTenantsClientAsync tenants;
2628

@@ -35,6 +37,7 @@ public CollectionHandleAsync(
3537
this.config = new WeaviateConfigClientAsync(collection, restTransport, grpcTransport, defaults);
3638
this.aggregate = new WeaviateAggregateClientAsync(collection, grpcTransport, defaults);
3739
this.query = new WeaviateQueryClientAsync<>(collection, grpcTransport, defaults);
40+
this.generate = new WeaviateGenerateClientAsync<>(collection, grpcTransport, defaults);
3841
this.data = new WeaviateDataClientAsync<>(collection, restTransport, grpcTransport, defaults);
3942
this.defaults = defaults;
4043

@@ -46,6 +49,7 @@ private CollectionHandleAsync(CollectionHandleAsync<PropertiesT> c, CollectionHa
4649
this.config = new WeaviateConfigClientAsync(c.config, defaults);
4750
this.aggregate = new WeaviateAggregateClientAsync(c.aggregate, defaults);
4851
this.query = new WeaviateQueryClientAsync<>(c.query, defaults);
52+
this.generate = new WeaviateGenerateClientAsync<>(c.generate, defaults);
4953
this.data = new WeaviateDataClientAsync<>(c.data, defaults);
5054
this.defaults = defaults;
5155

0 commit comments

Comments
 (0)