Skip to content

Commit 5f47690

Browse files
committed
[ENH] Add collection config to js client
1 parent 7329be6 commit 5f47690

File tree

9 files changed

+582
-11
lines changed

9 files changed

+582
-11
lines changed

clients/js/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,15 @@
6565
},
6666
"dependencies": {
6767
"cliui": "^8.0.1",
68-
"isomorphic-fetch": "^3.0.0"
68+
"isomorphic-fetch": "^3.0.0",
69+
"os": "^0.1.2"
6970
},
7071
"peerDependencies": {
7172
"@google/generative-ai": "^0.1.1",
7273
"cohere-ai": "^5.0.0 || ^6.0.0 || ^7.0.0",
74+
"ollama": "^0.5.0",
7375
"openai": "^3.0.0 || ^4.0.0",
74-
"voyageai": "^0.0.3-1",
75-
"ollama": "^0.5.0"
76+
"voyageai": "^0.0.3-1"
7677
},
7778
"peerDependenciesMeta": {
7879
"@google/generative-ai": {

clients/js/packages/chromadb-core/src/ChromaClient.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { authOptionsToAuthProvider, ClientAuthProvider } from "./auth";
44
import { chromaFetch } from "./ChromaFetch";
55
import { Collection } from "./Collection";
66
import { DefaultEmbeddingFunction } from "./embeddings/DefaultEmbeddingFunction";
7-
import { Configuration, ApiApi as DefaultApi } from "./generated";
7+
import { Configuration, ApiApi as DefaultApi, Api } from "./generated";
88
import type {
99
ChromaClientParams,
1010
CollectionMetadata,
@@ -18,7 +18,7 @@ import type {
1818
UserIdentity,
1919
} from "./types";
2020
import { validateTenantDatabase, wrapCollection } from "./utils";
21-
21+
import { loadApiCollectionConfigurationFromCreateCollectionConfiguration } from "./CollectionConfiguration";
2222
const DEFAULT_TENANT = "default_tenant";
2323
const DEFAULT_DATABASE = "default_database";
2424

@@ -224,25 +224,39 @@ export class ChromaClient {
224224
name,
225225
metadata,
226226
embeddingFunction = new DefaultEmbeddingFunction(),
227+
configuration,
227228
}: CreateCollectionParams): Promise<Collection> {
228229
await this.init();
230+
let collectionConfiguration: Api.CollectionConfiguration | undefined =
231+
undefined;
232+
if (configuration) {
233+
collectionConfiguration =
234+
loadApiCollectionConfigurationFromCreateCollectionConfiguration(
235+
configuration,
236+
);
237+
}
229238
const newCollection = await this.api.createCollection(
230239
this.tenant,
231240
this.database,
232241
{
233242
name,
234-
// @ts-ignore: we need to generate the client libraries again
235-
configuration: null, //TODO: Configuration type in JavaScript
243+
configuration: collectionConfiguration,
236244
metadata: metadata,
237245
},
238246
this.api.options,
239247
);
240248

249+
console.log(
250+
"NEW CREATE COLLECTION CONFIGURATION: ",
251+
newCollection.configuration_json,
252+
);
253+
241254
return wrapCollection(this, {
242255
name: newCollection.name,
243256
id: newCollection.id,
244257
metadata: newCollection.metadata as CollectionMetadata | undefined,
245258
embeddingFunction,
259+
configuration: newCollection.configuration_json,
246260
});
247261
}
248262

@@ -286,11 +300,18 @@ export class ChromaClient {
286300
this.api.options,
287301
);
288302

303+
console.log(
304+
"NEW GET_OR_CREATE COLLECTION CONFIGURATION: ",
305+
newCollection.configuration_json,
306+
);
307+
289308
return wrapCollection(this, {
290309
name: newCollection.name,
291310
id: newCollection.id,
292311
metadata: newCollection.metadata as CollectionMetadata | undefined,
293312
embeddingFunction,
313+
// TODO: once server returns configuration, add it here
314+
configuration: newCollection.configuration_json,
294315
});
295316
}
296317

@@ -412,6 +433,7 @@ export class ChromaClient {
412433
this.api.options,
413434
);
414435

436+
console.log("GET COLLECTION CONFIGURATION: ", response.configuration_json);
415437
return wrapCollection(this, {
416438
id: response.id,
417439
name: response.name,
@@ -420,6 +442,7 @@ export class ChromaClient {
420442
embeddingFunction !== undefined
421443
? embeddingFunction
422444
: new DefaultEmbeddingFunction(),
445+
configuration: response.configuration_json,
423446
});
424447
}
425448

clients/js/packages/chromadb-core/src/Collection.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ import {
1616
CollectionParams,
1717
} from "./types";
1818
import { prepareRecordRequest, toArray, toArrayOfArrays } from "./utils";
19-
import { Api as GeneratedApi } from "./generated";
19+
import { Api as GeneratedApi, Api } from "./generated";
20+
import {
21+
UpdateCollectionConfiguration,
22+
loadApiUpdateCollectionConfigurationFromUpdateCollectionConfiguration,
23+
} from "./CollectionConfiguration";
2024

2125
export class Collection {
2226
public name: string;
@@ -31,6 +35,8 @@ export class Collection {
3135
*/
3236
public embeddingFunction: IEmbeddingFunction;
3337

38+
public configuration: Api.CollectionConfiguration | undefined;
39+
3440
/**
3541
* @ignore
3642
*/
@@ -40,12 +46,14 @@ export class Collection {
4046
client: ChromaClient,
4147
embeddingFunction: IEmbeddingFunction,
4248
metadata?: CollectionMetadata,
49+
configuration?: Api.CollectionConfiguration,
4350
) {
4451
this.name = name;
4552
this.id = id;
4653
this.metadata = metadata;
4754
this.client = client;
4855
this.embeddingFunction = embeddingFunction;
56+
this.configuration = configuration;
4957
}
5058

5159
/**
@@ -318,19 +326,30 @@ export class Collection {
318326
async modify({
319327
name,
320328
metadata,
329+
configuration,
321330
}: {
322331
name?: string;
323332
metadata?: CollectionMetadata;
333+
configuration?: UpdateCollectionConfiguration;
324334
}): Promise<CollectionParams> {
325335
await this.client.init();
326-
336+
let updateCollectionConfiguration:
337+
| Api.UpdateCollectionConfiguration
338+
| undefined = undefined;
339+
if (configuration) {
340+
updateCollectionConfiguration =
341+
loadApiUpdateCollectionConfigurationFromUpdateCollectionConfiguration(
342+
configuration,
343+
);
344+
}
327345
const resp = (await this.client.api.updateCollection(
328346
this.client.tenant,
329347
this.client.database,
330348
this.id,
331349
{
332350
new_name: name,
333351
new_metadata: metadata,
352+
new_configuration: updateCollectionConfiguration,
334353
},
335354
this.client.api.options,
336355
)) as CollectionParams;

0 commit comments

Comments
 (0)