Skip to content

Commit 43bbb92

Browse files
committed
Make fixes in response to user feedback
1 parent 25d0f81 commit 43bbb92

File tree

7 files changed

+96
-14
lines changed

7 files changed

+96
-14
lines changed

.github/workflows/main.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ env:
1313
WEAVIATE_127: 1.27.15
1414
WEAVIATE_128: 1.28.11
1515
WEAVIATE_129: 1.29.1
16-
WEAVIATE_130: 1.30.0-dev-9df35ca
16+
WEAVIATE_130: 1.30.0-rc.0-6b9a01c
1717

1818
concurrency:
1919
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}

src/collections/deserialize/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ export class Deserialize {
226226
debug: result.generative.values[0].debug,
227227
metadata: result.generative.values[0].metadata as GenerativeMetadata<C>,
228228
}
229+
: result.metadata?.generativePresent
230+
? {
231+
text: result.metadata?.generative,
232+
}
229233
: undefined,
230234
metadata: Deserialize.metadata(result.metadata),
231235
properties: this.properties(result.properties),
@@ -245,6 +249,10 @@ export class Deserialize {
245249
text: reply.generativeGroupedResults?.values[0].result,
246250
metadata: reply.generativeGroupedResults?.values[0].metadata as GenerativeMetadata<C>,
247251
}
252+
: reply.generativeGroupedResult !== ''
253+
? {
254+
text: reply.generativeGroupedResult,
255+
}
248256
: undefined,
249257
};
250258
}

src/collections/generate/index.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ class GenerateManager<T> implements Generate<T> {
7272
generate: GenerateOptions<T, C>,
7373
opts?: FetchObjectsOptions<T>
7474
): Promise<GenerativeReturn<T, C>> {
75-
return Promise.all([this.check.fetchObjects(opts), this.check.supportForSingleGroupedGenerative()])
75+
return Promise.all([
76+
this.check.fetchObjects(opts),
77+
this.check.supportForSingleGroupedGenerative(),
78+
this.check.supportForGenerativeConfigRuntime(generate.config),
79+
])
7680
.then(async ([{ search }, supportsSingleGrouped]) =>
7781
search.withFetch({
7882
...Serialize.search.fetchObjects(opts),
@@ -97,7 +101,11 @@ class GenerateManager<T> implements Generate<T> {
97101
generate: GenerateOptions<T, C>,
98102
opts?: Bm25Options<T>
99103
): GenerateReturn<T, C> {
100-
return Promise.all([this.check.bm25(opts), this.check.supportForSingleGroupedGenerative()])
104+
return Promise.all([
105+
this.check.bm25(opts),
106+
this.check.supportForSingleGroupedGenerative(),
107+
this.check.supportForGenerativeConfigRuntime(generate.config),
108+
])
101109
.then(async ([{ search }, supportsSingleGrouped]) =>
102110
search.withBm25({
103111
...Serialize.search.bm25(query, opts),
@@ -122,7 +130,11 @@ class GenerateManager<T> implements Generate<T> {
122130
generate: GenerateOptions<T, C>,
123131
opts?: HybridOptions<T>
124132
): GenerateReturn<T, C> {
125-
return Promise.all([this.check.hybridSearch(opts), this.check.supportForSingleGroupedGenerative()])
133+
return Promise.all([
134+
this.check.hybridSearch(opts),
135+
this.check.supportForSingleGroupedGenerative(),
136+
this.check.supportForGenerativeConfigRuntime(generate.config),
137+
])
126138
.then(
127139
async ([
128140
{ search, supportsTargets, supportsVectorsForTargets, supportsWeightsForTargets },
@@ -159,7 +171,11 @@ class GenerateManager<T> implements Generate<T> {
159171
generate: GenerateOptions<T, C>,
160172
opts?: NearOptions<T>
161173
): GenerateReturn<T, C> {
162-
return Promise.all([this.check.nearSearch(opts), this.check.supportForSingleGroupedGenerative()])
174+
return Promise.all([
175+
this.check.nearSearch(opts),
176+
this.check.supportForSingleGroupedGenerative(),
177+
this.check.supportForGenerativeConfigRuntime(generate.config),
178+
])
163179
.then(([{ search, supportsTargets, supportsWeightsForTargets }, supportsSingleGrouped]) =>
164180
Promise.all([
165181
toBase64FromMedia(image),
@@ -196,7 +212,11 @@ class GenerateManager<T> implements Generate<T> {
196212
generate: GenerateOptions<T, C>,
197213
opts?: NearOptions<T>
198214
): GenerateReturn<T, C> {
199-
return Promise.all([this.check.nearSearch(opts), this.check.supportForSingleGroupedGenerative()])
215+
return Promise.all([
216+
this.check.nearSearch(opts),
217+
this.check.supportForSingleGroupedGenerative(),
218+
this.check.supportForGenerativeConfigRuntime(generate.config),
219+
])
200220
.then(async ([{ search, supportsTargets, supportsWeightsForTargets }, supportsSingleGrouped]) =>
201221
search.withNearObject({
202222
...Serialize.search.nearObject(
@@ -228,7 +248,11 @@ class GenerateManager<T> implements Generate<T> {
228248
generate: GenerateOptions<T, C>,
229249
opts?: NearOptions<T>
230250
): GenerateReturn<T, C> {
231-
return Promise.all([this.check.nearSearch(opts), this.check.supportForSingleGroupedGenerative()])
251+
return Promise.all([
252+
this.check.nearSearch(opts),
253+
this.check.supportForSingleGroupedGenerative(),
254+
this.check.supportForGenerativeConfigRuntime(generate.config),
255+
])
232256
.then(async ([{ search, supportsTargets, supportsWeightsForTargets }, supportsSingleGrouped]) =>
233257
search.withNearText({
234258
...Serialize.search.nearText(
@@ -260,7 +284,11 @@ class GenerateManager<T> implements Generate<T> {
260284
generate: GenerateOptions<T, C>,
261285
opts?: NearOptions<T>
262286
): GenerateReturn<T, C> {
263-
return Promise.all([this.check.nearVector(vector, opts), this.check.supportForSingleGroupedGenerative()])
287+
return Promise.all([
288+
this.check.nearVector(vector, opts),
289+
this.check.supportForSingleGroupedGenerative(),
290+
this.check.supportForGenerativeConfigRuntime(generate.config),
291+
])
264292
.then(
265293
async ([
266294
{ search, supportsTargets, supportsVectorsForTargets, supportsWeightsForTargets },
@@ -300,7 +328,11 @@ class GenerateManager<T> implements Generate<T> {
300328
generate: GenerateOptions<T, C>,
301329
opts?: NearOptions<T>
302330
): GenerateReturn<T, C> {
303-
return Promise.all([this.check.nearSearch(opts), this.check.supportForSingleGroupedGenerative()])
331+
return Promise.all([
332+
this.check.nearSearch(opts),
333+
this.check.supportForSingleGroupedGenerative(),
334+
this.check.supportForGenerativeConfigRuntime(generate.config),
335+
])
304336
.then(([{ search, supportsTargets, supportsWeightsForTargets }, supportsSingleGrouped]) => {
305337
const args = {
306338
supportsTargets,

src/collections/generate/integration.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,26 @@ maybe('Testing of the collection.generate methods with a simple collection', ()
148148
expect(ret.objects[0].uuid).toEqual(id);
149149
expect(ret.objects[0].generated).toBeDefined();
150150
});
151+
152+
it('should generate in a BC-compatible way', async () => {
153+
const query = () => collection.generate.fetchObjects(generateOpts);
154+
155+
const res = await query();
156+
expect(res.objects.length).toEqual(1);
157+
expect(res.generated).toBeDefined();
158+
expect(res.generated).not.toEqual('');
159+
expect(res.generative?.text).toBeDefined();
160+
expect(res.generative?.text).not.toEqual('');
161+
expect(res.generative?.metadata).toBeUndefined();
162+
res.objects.forEach((obj) => {
163+
expect(obj.generated).toBeDefined();
164+
expect(obj.generated).not.toEqual('');
165+
expect(obj.generative?.text).toBeDefined();
166+
expect(obj.generative?.text).not.toEqual('');
167+
expect(obj.generative?.metadata).toBeUndefined();
168+
expect(obj.generative?.debug).toBeUndefined();
169+
});
170+
});
151171
});
152172
});
153173

@@ -486,7 +506,9 @@ maybe('Testing of the collection.generate methods with runtime generative config
486506
const res = await query();
487507
expect(res.objects.length).toEqual(1);
488508
expect(res.generated).toBeDefined();
509+
expect(res.generated).not.toEqual('');
489510
expect(res.generative?.text).toBeDefined();
511+
expect(res.generative?.text).not.toEqual('');
490512
expect(res.generative?.metadata).toBeDefined();
491513
res.objects.forEach((obj) => {
492514
expect(obj.generated).toBeDefined();
@@ -518,11 +540,15 @@ maybe('Testing of the collection.generate methods with runtime generative config
518540
const res = await query();
519541
expect(res.objects.length).toEqual(1);
520542
expect(res.generated).toBeDefined();
543+
expect(res.generated).not.toEqual('');
521544
expect(res.generative?.text).toBeDefined();
545+
expect(res.generative?.text).not.toEqual('');
522546
expect(res.generative?.metadata).toBeUndefined();
523547
res.objects.forEach((obj) => {
524548
expect(obj.generated).toBeDefined();
549+
expect(obj.generated).not.toEqual('');
525550
expect(obj.generative?.text).toBeDefined();
551+
expect(obj.generative?.text).not.toEqual('');
526552
expect(obj.generative?.metadata).toBeUndefined();
527553
expect(obj.generative?.debug).toBeUndefined();
528554
});

src/collections/query/check.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Connection from '../../connection/grpc.js';
22
import { WeaviateUnsupportedFeatureError } from '../../errors.js';
33
import { ConsistencyLevel } from '../../index.js';
44
import { DbVersionSupport } from '../../utils/dbVersion.js';
5-
import { GroupByOptions } from '../index.js';
5+
import { GenerativeConfigRuntime, GroupByOptions } from '../index.js';
66
import { Serialize } from '../serialize/index.js';
77
import {
88
BaseBm25Options,
@@ -104,6 +104,13 @@ export class Check<T> {
104104
return check.supports;
105105
};
106106

107+
public supportForGenerativeConfigRuntime = async (generativeConfig?: GenerativeConfigRuntime) => {
108+
if (generativeConfig === undefined) return true;
109+
const check = await this.dbVersionSupport.supportsGenerativeConfigRuntime();
110+
if (!check.supports) throw new WeaviateUnsupportedFeatureError(check.message);
111+
return check.supports;
112+
};
113+
107114
public nearSearch = (opts?: BaseNearOptions<T>) => {
108115
return Promise.all([
109116
this.getSearcher(),

src/roles/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,16 @@ const roles = (connection: ConnectionREST): Roles => {
9090
byName: (roleName: string) =>
9191
connection.get<WeaviateRole>(`/authz/roles/${roleName}`).then(Map.roleFromWeaviate),
9292
assignedUserIds: (roleName: string) => connection.get<string[]>(`/authz/roles/${roleName}/users`),
93-
create: (roleName: string, permissions: PermissionsInput) => {
94-
const perms = Map.flattenPermissions(permissions).flatMap(Map.permissionToWeaviate);
93+
create: (roleName: string, permissions?: PermissionsInput) => {
94+
const perms = permissions
95+
? Map.flattenPermissions(permissions).flatMap(Map.permissionToWeaviate)
96+
: undefined;
9597
return connection
96-
.postEmpty<WeaviateRole>('/authz/roles', {
98+
.postEmpty('/authz/roles', {
9799
name: roleName,
98100
permissions: perms,
99101
})
100-
.then(() => Map.roleFromWeaviate({ name: roleName, permissions: perms }));
102+
.then(() => Map.roleFromWeaviate({ name: roleName, permissions: perms || [] }));
101103
},
102104
delete: (roleName: string) => connection.delete(`/authz/roles/${roleName}`, null),
103105
exists: (roleName: string) =>

src/utils/dbVersion.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ export class DbVersionSupport {
230230
version.isAtLeast(1, 30, 0),
231231
message: this.errorMessage('Single/Grouped fields in gRPC', version.show(), '1.30.0'),
232232
}));
233+
234+
supportsGenerativeConfigRuntime = () =>
235+
this.dbVersionProvider.getVersion().then((version) => ({
236+
version,
237+
supports: version.isAtLeast(1, 30, 0),
238+
message: this.errorMessage('Generative config runtime', version.show(), '1.30.0'),
239+
}));
233240
}
234241

235242
const EMPTY_VERSION = '';

0 commit comments

Comments
 (0)