@@ -28,7 +28,12 @@ public record CollectionConfig(
2828 @ SerializedName ("properties" ) List <Property > properties ,
2929 List <ReferenceProperty > references ,
3030 @ SerializedName ("vectorConfig" ) Map <String , VectorIndex > vectors ,
31- @ SerializedName ("invertedIndexConfig" ) InvertedIndex invertedIndex ) {
31+ @ SerializedName ("multiTenancyConfig" ) MultiTenancy multiTenancy ,
32+ @ SerializedName ("shardingConfig" ) Sharding sharding ,
33+ @ SerializedName ("replicationConfig" ) Replication replication ,
34+ @ SerializedName ("invertedIndexConfig" ) InvertedIndex invertedIndex ,
35+ List <Reranker > rerankerModules ,
36+ List <Generative > generativeModules ) {
3237
3338 public static CollectionConfig of (String collectionName ) {
3439 return of (collectionName , ObjectBuilder .identity ());
@@ -47,7 +52,13 @@ public Builder edit() {
4752 .description (description )
4853 .properties (properties )
4954 .references (references )
50- .vectors (vectors );
55+ .vectors (vectors )
56+ .multiTenancy (multiTenancy )
57+ .sharding (sharding )
58+ .replication (replication )
59+ .invertedIndex (invertedIndex )
60+ .rerankerModules (rerankerModules != null ? rerankerModules : new ArrayList <>())
61+ .generativeModules (generativeModules != null ? generativeModules : new ArrayList <>());
5162 }
5263
5364 /** Create a copy of this {@code WeaviateCollection} and edit parts of it. */
@@ -62,7 +73,12 @@ public CollectionConfig(Builder builder) {
6273 builder .properties ,
6374 builder .references ,
6475 builder .vectors ,
65- builder .invertedIndex );
76+ builder .multiTenancy ,
77+ builder .sharding ,
78+ builder .replication ,
79+ builder .invertedIndex ,
80+ builder .rerankerModules ,
81+ builder .generativeModules );
6682 }
6783
6884 public static class Builder implements ObjectBuilder <CollectionConfig > {
@@ -73,7 +89,12 @@ public static class Builder implements ObjectBuilder<CollectionConfig> {
7389 private List <Property > properties = new ArrayList <>();
7490 private List <ReferenceProperty > references = new ArrayList <>();
7591 private Map <String , VectorIndex > vectors = new HashMap <>();
92+ private MultiTenancy multiTenancy ;
93+ private Sharding sharding ;
94+ private Replication replication ;
7695 private InvertedIndex invertedIndex ;
96+ private List <Reranker > rerankerModules = new ArrayList <>();
97+ private List <Generative > generativeModules = new ArrayList <>();
7798
7899 public Builder (String collectionName ) {
79100 this .collectionName = collectionName ;
@@ -136,11 +157,64 @@ public Map<String, VectorIndex> build() {
136157 }
137158 }
138159
160+ public Builder sharding (Sharding sharding ) {
161+ this .sharding = sharding ;
162+ return this ;
163+ }
164+
165+ public Builder sharding (Function <Sharding .Builder , ObjectBuilder <Sharding >> fn ) {
166+ this .sharding = Sharding .of (fn );
167+ return this ;
168+ }
169+
170+ public Builder multiTenancy (MultiTenancy multiTenancy ) {
171+ this .multiTenancy = multiTenancy ;
172+ return this ;
173+ }
174+
175+ public Builder multiTenancy (Function <MultiTenancy .Builder , ObjectBuilder <MultiTenancy >> fn ) {
176+ this .multiTenancy = MultiTenancy .of (fn );
177+ return this ;
178+ }
179+
180+ public Builder replication (Replication replication ) {
181+ this .replication = replication ;
182+ return this ;
183+ }
184+
185+ public Builder replication (Function <Replication .Builder , ObjectBuilder <Replication >> fn ) {
186+ this .replication = Replication .of (fn );
187+ return this ;
188+ }
189+
190+ public Builder invertedIndex (InvertedIndex invertedIndex ) {
191+ this .invertedIndex = invertedIndex ;
192+ return this ;
193+ }
194+
139195 public Builder invertedIndex (Function <InvertedIndex .Builder , ObjectBuilder <InvertedIndex >> fn ) {
140196 this .invertedIndex = InvertedIndex .of (fn );
141197 return this ;
142198 }
143199
200+ public Builder rerankerModules (Reranker ... rerankerModules ) {
201+ return rerankerModules (Arrays .asList (rerankerModules ));
202+ }
203+
204+ public Builder rerankerModules (List <Reranker > rerankerModules ) {
205+ this .rerankerModules .addAll (rerankerModules );
206+ return this ;
207+ }
208+
209+ public Builder generativeModules (Generative ... generativeModules ) {
210+ return generativeModules (Arrays .asList (generativeModules ));
211+ }
212+
213+ public Builder generativeModules (List <Generative > generativeModules ) {
214+ this .generativeModules .addAll (generativeModules );
215+ return this ;
216+ }
217+
144218 @ Override
145219 public CollectionConfig build () {
146220 return new CollectionConfig (this );
@@ -164,10 +238,32 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
164238 public void write (JsonWriter out , CollectionConfig value ) throws IOException {
165239 var jsonObject = delegate .toJsonTree (value ).getAsJsonObject ();
166240
241+ // References must be merged with properties.
167242 var references = jsonObject .remove ("references" ).getAsJsonArray ();
168243 var properties = jsonObject .get ("properties" ).getAsJsonArray ();
169244 properties .addAll (references );
170245
246+ // Reranker and Generative module configs belong to the "moduleConfig".
247+ var rerankerModules = jsonObject .remove ("rerankerModules" ).getAsJsonArray ();
248+ var generativeModules = jsonObject .remove ("generativeModules" ).getAsJsonArray ();
249+ if (!rerankerModules .isEmpty () && !generativeModules .isEmpty ()) {
250+ var modules = new JsonObject ();
251+
252+ // Copy configuration for each reranker module.
253+ rerankerModules .forEach (reranker -> {
254+ reranker .getAsJsonObject ().entrySet ()
255+ .stream ().forEach (entry -> modules .add (entry .getKey (), entry .getValue ()));
256+ });
257+
258+ // Copy configuration for each generative module.
259+ generativeModules .forEach (generative -> {
260+ generative .getAsJsonObject ().entrySet ()
261+ .stream ().forEach (entry -> modules .add (entry .getKey (), entry .getValue ()));
262+ });
263+
264+ jsonObject .add ("moduleConfig" , modules );
265+ }
266+
171267 Streams .write (jsonObject , out );
172268 }
173269
@@ -195,6 +291,28 @@ public CollectionConfig read(JsonReader in) throws IOException {
195291 jsonObject .add ("vectorConfig" , new JsonObject ());
196292 }
197293
294+ // Separate modules into reranker- and generative- modules.
295+ var rerankerModules = new JsonArray ();
296+ var generativeModules = new JsonArray ();
297+ if (jsonObject .has ("moduleConfig" )) {
298+ var moduleConfig = jsonObject .remove ("moduleConfig" ).getAsJsonObject ();
299+
300+ moduleConfig .entrySet ().stream ()
301+ .forEach (entry -> {
302+ var module = new JsonObject ();
303+ var name = entry .getKey ();
304+ module .add (name , entry .getValue ());
305+
306+ if (name .startsWith ("reranker-" )) {
307+ rerankerModules .add (module );
308+ } else if (name .startsWith ("generative-" )) {
309+ generativeModules .add (module );
310+ }
311+ });
312+ }
313+ jsonObject .add ("rerankerModules" , rerankerModules );
314+ jsonObject .add ("generativeModules" , generativeModules );
315+
198316 return delegate .fromJsonTree (jsonObject );
199317 }
200318 }.nullSafe ();
0 commit comments