@sprucelabs/chroma-data-store 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/build/.spruce/errors/chromaDataStore/featureNotSupported.schema.d.ts +3 -0
  2. package/build/.spruce/errors/chromaDataStore/featureNotSupported.schema.js +19 -0
  3. package/build/.spruce/errors/chromaDataStore/featureNotSupported.schema.js.map +1 -0
  4. package/build/.spruce/errors/errors.types.d.ts +21 -0
  5. package/build/.spruce/errors/errors.types.js +3 -0
  6. package/build/.spruce/errors/errors.types.js.map +1 -0
  7. package/build/.spruce/errors/options.types.d.ts +7 -0
  8. package/build/.spruce/errors/options.types.js +3 -0
  9. package/build/.spruce/errors/options.types.js.map +1 -0
  10. package/build/.spruce/schemas/fields/fieldClassMap.d.ts +2 -0
  11. package/build/.spruce/schemas/fields/fieldClassMap.js +5 -0
  12. package/build/.spruce/schemas/fields/fieldClassMap.js.map +1 -0
  13. package/build/.spruce/schemas/fields/fields.types.d.ts +1 -0
  14. package/build/.spruce/schemas/fields/fields.types.js +3 -0
  15. package/build/.spruce/schemas/fields/fields.types.js.map +1 -0
  16. package/build/.spruce/schemas/spruce/v2020_07_22/choice.schema.d.ts +1 -0
  17. package/build/.spruce/schemas/spruce/v2020_07_22/choice.schema.js +6 -0
  18. package/build/.spruce/schemas/spruce/v2020_07_22/choice.schema.js.map +1 -0
  19. package/build/.spruce/schemas/spruce/v2020_07_22/link.schema.d.ts +1 -0
  20. package/build/.spruce/schemas/spruce/v2020_07_22/link.schema.js +6 -0
  21. package/build/.spruce/schemas/spruce/v2020_07_22/link.schema.js.map +1 -0
  22. package/build/.spruce/schemas/spruce/v2020_07_22/location.schema.d.ts +1 -0
  23. package/build/.spruce/schemas/spruce/v2020_07_22/location.schema.js +6 -0
  24. package/build/.spruce/schemas/spruce/v2020_07_22/location.schema.js.map +1 -0
  25. package/build/.spruce/schemas/spruce/v2020_07_22/message.schema.d.ts +1 -0
  26. package/build/.spruce/schemas/spruce/v2020_07_22/message.schema.js +6 -0
  27. package/build/.spruce/schemas/spruce/v2020_07_22/message.schema.js.map +1 -0
  28. package/build/.spruce/schemas/spruce/v2020_07_22/messageSource.schema.d.ts +1 -0
  29. package/build/.spruce/schemas/spruce/v2020_07_22/messageSource.schema.js +6 -0
  30. package/build/.spruce/schemas/spruce/v2020_07_22/messageSource.schema.js.map +1 -0
  31. package/build/.spruce/schemas/spruce/v2020_07_22/messageTarget.schema.d.ts +1 -0
  32. package/build/.spruce/schemas/spruce/v2020_07_22/messageTarget.schema.js +6 -0
  33. package/build/.spruce/schemas/spruce/v2020_07_22/messageTarget.schema.js.map +1 -0
  34. package/build/.spruce/schemas/spruce/v2020_07_22/organization.schema.d.ts +1 -0
  35. package/build/.spruce/schemas/spruce/v2020_07_22/organization.schema.js +6 -0
  36. package/build/.spruce/schemas/spruce/v2020_07_22/organization.schema.js.map +1 -0
  37. package/build/.spruce/schemas/spruce/v2020_07_22/person.schema.d.ts +1 -0
  38. package/build/.spruce/schemas/spruce/v2020_07_22/person.schema.js +6 -0
  39. package/build/.spruce/schemas/spruce/v2020_07_22/person.schema.js.map +1 -0
  40. package/build/.spruce/schemas/spruce/v2020_07_22/personLocation.schema.d.ts +1 -0
  41. package/build/.spruce/schemas/spruce/v2020_07_22/personLocation.schema.js +6 -0
  42. package/build/.spruce/schemas/spruce/v2020_07_22/personLocation.schema.js.map +1 -0
  43. package/build/.spruce/schemas/spruce/v2020_07_22/personOrganization.schema.d.ts +1 -0
  44. package/build/.spruce/schemas/spruce/v2020_07_22/personOrganization.schema.js +6 -0
  45. package/build/.spruce/schemas/spruce/v2020_07_22/personOrganization.schema.js.map +1 -0
  46. package/build/.spruce/schemas/spruce/v2020_07_22/role.schema.d.ts +1 -0
  47. package/build/.spruce/schemas/spruce/v2020_07_22/role.schema.js +6 -0
  48. package/build/.spruce/schemas/spruce/v2020_07_22/role.schema.js.map +1 -0
  49. package/build/.spruce/schemas/spruce/v2020_07_22/sendMessage.schema.d.ts +1 -0
  50. package/build/.spruce/schemas/spruce/v2020_07_22/sendMessage.schema.js +6 -0
  51. package/build/.spruce/schemas/spruce/v2020_07_22/sendMessage.schema.js.map +1 -0
  52. package/build/.spruce/schemas/spruce/v2020_07_22/skill.schema.d.ts +1 -0
  53. package/build/.spruce/schemas/spruce/v2020_07_22/skill.schema.js +6 -0
  54. package/build/.spruce/schemas/spruce/v2020_07_22/skill.schema.js.map +1 -0
  55. package/build/.spruce/schemas/spruce/v2020_07_22/skillCreator.schema.d.ts +1 -0
  56. package/build/.spruce/schemas/spruce/v2020_07_22/skillCreator.schema.js +6 -0
  57. package/build/.spruce/schemas/spruce/v2020_07_22/skillCreator.schema.js.map +1 -0
  58. package/build/.spruce/settings.json +13 -0
  59. package/build/ChromaDatabase.d.ts +46 -0
  60. package/build/ChromaDatabase.js +386 -0
  61. package/build/ChromaDatabase.js.map +1 -0
  62. package/build/__tests__/behavioral/ChromaDatabase.test.d.ts +39 -0
  63. package/build/__tests__/behavioral/ChromaDatabase.test.js +351 -0
  64. package/build/__tests__/behavioral/ChromaDatabase.test.js.map +1 -0
  65. package/build/chroma.types.d.ts +177 -0
  66. package/build/chroma.types.js +3 -0
  67. package/build/chroma.types.js.map +1 -0
  68. package/build/errors/SpruceError.d.ts +6 -0
  69. package/build/errors/SpruceError.js +26 -0
  70. package/build/errors/SpruceError.js.map +1 -0
  71. package/build/errors/featureNotSupported.builder.d.ts +11 -0
  72. package/build/errors/featureNotSupported.builder.js +14 -0
  73. package/build/errors/featureNotSupported.builder.js.map +1 -0
  74. package/build/index.d.ts +2 -0
  75. package/build/index.js +27 -0
  76. package/build/index.js.map +1 -0
  77. package/package.json +93 -0
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const data_stores_1 = require("@sprucelabs/data-stores");
7
+ const schema_1 = require("@sprucelabs/schema");
8
+ const test_utils_1 = require("@sprucelabs/test-utils");
9
+ const chromadb_1 = require("chromadb");
10
+ const SpruceError_1 = __importDefault(require("./errors/SpruceError"));
11
+ class ChromaDatabase {
12
+ constructor(connectionString) {
13
+ this._isConnected = false;
14
+ this.collections = {};
15
+ (0, schema_1.assertOptions)({ connectionString }, ['connectionString']);
16
+ this.embeddings = new chromadb_1.OllamaEmbeddingFunction({
17
+ model: 'llama3.2',
18
+ url: 'http://localhost:11434/api/embeddings',
19
+ });
20
+ if (!connectionString.startsWith('chroma://')) {
21
+ throw new data_stores_1.DataStoresError({
22
+ code: 'INVALID_DB_CONNECTION_STRING',
23
+ });
24
+ }
25
+ this.connectionString = connectionString.replace('chroma://', 'http://');
26
+ }
27
+ static setEmbeddingsFields(collectionName, fields) {
28
+ if (!this.embeddingFields) {
29
+ this.embeddingFields = {};
30
+ }
31
+ this.embeddingFields[collectionName] = fields;
32
+ }
33
+ static clearEmbeddingsFields() {
34
+ delete this.embeddingFields;
35
+ }
36
+ async syncUniqueIndexes(_collectionName, _indexes) {
37
+ throw new SpruceError_1.default({
38
+ code: 'FEATURE_NOT_SUPPORTED',
39
+ operation: 'syncUniqueIndexes',
40
+ });
41
+ }
42
+ async syncIndexes(_collectionName, _indexes) {
43
+ throw new SpruceError_1.default({
44
+ code: 'FEATURE_NOT_SUPPORTED',
45
+ operation: 'syncIndexes',
46
+ });
47
+ }
48
+ async dropIndex(_collectionName, _index) {
49
+ throw new SpruceError_1.default({
50
+ code: 'FEATURE_NOT_SUPPORTED',
51
+ operation: 'dropIndex',
52
+ });
53
+ }
54
+ async getUniqueIndexes(_collectionName) {
55
+ throw new SpruceError_1.default({
56
+ code: 'FEATURE_NOT_SUPPORTED',
57
+ operation: 'getUniqueIndexes',
58
+ });
59
+ }
60
+ async getIndexes(_collectionName) {
61
+ throw new SpruceError_1.default({
62
+ code: 'FEATURE_NOT_SUPPORTED',
63
+ operation: 'getIndexes',
64
+ });
65
+ }
66
+ isConnected() {
67
+ return this._isConnected;
68
+ }
69
+ generateId() {
70
+ return (0, data_stores_1.generateId)();
71
+ }
72
+ async connect() {
73
+ this.client = new chromadb_1.ChromaClient({ path: this.connectionString });
74
+ try {
75
+ await this.client.heartbeat();
76
+ }
77
+ catch (err) {
78
+ throw new data_stores_1.DataStoresError({
79
+ code: 'UNABLE_TO_CONNECT_TO_DB',
80
+ originalError: err,
81
+ });
82
+ }
83
+ this._isConnected = true;
84
+ }
85
+ async close() {
86
+ this._isConnected = false;
87
+ }
88
+ getShouldAutoGenerateId() {
89
+ return true;
90
+ }
91
+ async createOne(collection, values, _options) {
92
+ const results = await this.create(collection, [values]);
93
+ return results[0];
94
+ }
95
+ async getCollection(collection) {
96
+ if (!this.collections[collection]) {
97
+ this.collections[collection] =
98
+ await this.client.getOrCreateCollection({
99
+ name: collection,
100
+ embeddingFunction: this.embeddings,
101
+ });
102
+ }
103
+ return this.collections[collection];
104
+ }
105
+ buildPrompt(values, collectionName) {
106
+ const fields = ChromaDatabase.embeddingFields?.[collectionName];
107
+ if (fields?.length === 1) {
108
+ const field = fields[0];
109
+ return values[field];
110
+ }
111
+ let prompt = '';
112
+ const keys = Object.keys(values);
113
+ for (const key of keys) {
114
+ const value = values[key];
115
+ if (value && typeof value === 'object') {
116
+ prompt += `${key}:\n\t${this.buildPrompt(value, collectionName)}\n`;
117
+ }
118
+ else if (value) {
119
+ prompt += `${key}: ${value}\n`;
120
+ }
121
+ }
122
+ return prompt.trim();
123
+ }
124
+ async create(collection, values) {
125
+ const col = await this.getCollection(collection);
126
+ const { documents, ids, metadatas } = this.splitValues(values, collection);
127
+ await col.add({
128
+ documents,
129
+ ids,
130
+ metadatas,
131
+ });
132
+ return this.find(collection, { id: { $in: ids } });
133
+ }
134
+ splitValues(values, collectionName) {
135
+ const ids = [];
136
+ const documents = [];
137
+ const metadatas = [];
138
+ for (const v of values) {
139
+ const { id = this.generateId(), ...values } = v;
140
+ ids.push(id);
141
+ documents.push(this.buildPrompt(values, collectionName));
142
+ const flattened = this.flattenValues(values);
143
+ metadatas.push(flattened);
144
+ }
145
+ return { documents, ids, metadatas };
146
+ }
147
+ flattenValues(values) {
148
+ const flattened = (0, schema_1.flattenValues)(values, [
149
+ '$or',
150
+ '*.$gt',
151
+ '*.$gte',
152
+ '*.$lt',
153
+ '*.$lte',
154
+ '*.$ne',
155
+ ]);
156
+ this.dropInNullPlaceholders(flattened);
157
+ return flattened;
158
+ }
159
+ dropInNullPlaceholders(flattened) {
160
+ for (const key in flattened) {
161
+ if (flattened[key] === undefined) {
162
+ flattened[key] = null;
163
+ }
164
+ if (flattened[key] === null) {
165
+ flattened[key] = test_utils_1.NULL_PLACEHOLDER;
166
+ }
167
+ if (typeof flattened[key] === 'object') {
168
+ this.dropInNullPlaceholders(flattened[key]);
169
+ }
170
+ }
171
+ }
172
+ async dropCollection(name) {
173
+ await this.client.deleteCollection({ name });
174
+ }
175
+ async dropDatabase() {
176
+ const collections = await this.client.listCollections();
177
+ await Promise.all(collections.map((col) => this.dropCollection(col.name)));
178
+ }
179
+ async findOne(collection, query, options, dbOptions) {
180
+ const matches = await this.find(collection, query, { ...options, limit: 1 }, dbOptions);
181
+ return matches[0] ?? null;
182
+ }
183
+ async find(collection, query, options, _dbOptions) {
184
+ let { ids, where, skipIds } = this.buildQuery(query);
185
+ let matches;
186
+ const { limit, includeFields } = options ?? {};
187
+ const col = await this.getCollection(collection);
188
+ if (where?.$prompt) {
189
+ const { $prompt, ...rest } = where;
190
+ const queryResults = await col.query({
191
+ queryTexts: [$prompt],
192
+ nResults: 1,
193
+ where: Object.keys(rest).length > 0 ? rest : undefined,
194
+ });
195
+ matches = {
196
+ ids: queryResults.ids[0],
197
+ metadatas: queryResults.metadatas[0],
198
+ };
199
+ }
200
+ else {
201
+ matches = await col.get({
202
+ ids,
203
+ include: ['metadatas'],
204
+ where,
205
+ limit: limit == 0 ? 1 : limit,
206
+ });
207
+ }
208
+ if (!matches || !matches.ids[0]) {
209
+ return [];
210
+ }
211
+ let records = this.mapResultsToRecords(limit, matches, skipIds);
212
+ if (includeFields) {
213
+ records = this.filterFieldsByInclude(records, includeFields);
214
+ }
215
+ return records;
216
+ }
217
+ mapResultsToRecords(limit, matches, skipIds) {
218
+ let records = [];
219
+ const total = limit ?? matches.ids.length;
220
+ for (let i = 0; i < total; i++) {
221
+ const values = matches.metadatas[i] ?? {};
222
+ const id = matches.ids[i];
223
+ if (!skipIds.includes(id)) {
224
+ records.push({
225
+ id,
226
+ ...this.expandValues(values),
227
+ });
228
+ }
229
+ }
230
+ return records;
231
+ }
232
+ filterFieldsByInclude(records, includeFields) {
233
+ const trimmedRecords = [];
234
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
235
+ for (let c = 0; c < records.length; c++) {
236
+ const record = {};
237
+ for (const key of includeFields) {
238
+ record[key] = records[c][key];
239
+ }
240
+ trimmedRecords.push(record);
241
+ }
242
+ return trimmedRecords;
243
+ }
244
+ buildQuery(query) {
245
+ const { id, ...rest } = query ?? {};
246
+ let ids;
247
+ let where;
248
+ if (id?.$in) {
249
+ ids = id.$in;
250
+ }
251
+ else if (id) {
252
+ ids = [id];
253
+ }
254
+ else if (query) {
255
+ where = rest;
256
+ }
257
+ if (where?.$or && where.$or.length === 1) {
258
+ //@ts-ignore
259
+ where = where.$or[0];
260
+ }
261
+ if (where) {
262
+ const { $or, $prompt, ...rest } = where;
263
+ if ($or) {
264
+ where.$or = $or;
265
+ }
266
+ else {
267
+ where = this.flattenValues(rest);
268
+ if (Object.keys(where).length > 1) {
269
+ const $and = [];
270
+ for (const key in where) {
271
+ //@ts-ignore
272
+ $and.push({ [key]: where[key] });
273
+ }
274
+ where = {
275
+ $and,
276
+ };
277
+ }
278
+ }
279
+ if ($prompt) {
280
+ where.$prompt = $prompt;
281
+ }
282
+ }
283
+ const firstId = ids?.[0];
284
+ const skipIds = [];
285
+ //@ts-ignore
286
+ if (firstId?.['$ne']) {
287
+ //@ts-ignore
288
+ skipIds.push(firstId.$ne);
289
+ ids = undefined;
290
+ }
291
+ if (Object.keys(where ?? {}).length === 0) {
292
+ where = undefined;
293
+ }
294
+ return { ids, where, skipIds };
295
+ }
296
+ expandValues(values) {
297
+ const nulledValues = {};
298
+ for (const key in values) {
299
+ if (values[key] === test_utils_1.NULL_PLACEHOLDER) {
300
+ nulledValues[key] = null;
301
+ }
302
+ else {
303
+ nulledValues[key] = values[key];
304
+ }
305
+ }
306
+ return (0, schema_1.expandValues)(nulledValues);
307
+ }
308
+ async updateOne(collection, query, updates, _dbOptions) {
309
+ const col = await this.getCollection(collection);
310
+ const match = await this.findOne(collection, query);
311
+ if (!match) {
312
+ throw new data_stores_1.DataStoresError({
313
+ code: 'RECORD_NOT_FOUND',
314
+ query,
315
+ storeName: collection,
316
+ });
317
+ }
318
+ const { documents, metadatas } = this.splitValues([updates], collection);
319
+ await col.update({
320
+ ids: [match.id],
321
+ documents,
322
+ metadatas,
323
+ });
324
+ const { id, ...values } = match;
325
+ return { id, ...values, ...updates };
326
+ }
327
+ async update(collection, query, updates) {
328
+ const matches = await this.find(collection, query);
329
+ for (const match of matches) {
330
+ await this.updateOne(collection, { id: match.id }, updates);
331
+ }
332
+ return matches.length;
333
+ }
334
+ async upsertOne(collection, query, updates) {
335
+ const col = await this.getCollection(collection);
336
+ const match = await this.findOne(collection, query);
337
+ let { documents, ids, metadatas } = this.splitValues([updates], collection);
338
+ if (match?.id) {
339
+ ids = [match.id];
340
+ }
341
+ await col.upsert({
342
+ documents,
343
+ ids,
344
+ metadatas,
345
+ });
346
+ const updated = await this.findOne(collection, { id: ids[0] });
347
+ return updated;
348
+ }
349
+ async delete(collection, query) {
350
+ const matches = await this.find(collection, query);
351
+ const col = await this.getCollection(collection);
352
+ await col.delete({
353
+ ids: matches.map((m) => m.id),
354
+ });
355
+ return matches.length;
356
+ }
357
+ async deleteOne(collection, query) {
358
+ const match = await this.findOne(collection, query);
359
+ await this.delete(collection, { id: match?.id });
360
+ return match ? 1 : 0;
361
+ }
362
+ async count(collection, query) {
363
+ const matches = await this.find(collection, query);
364
+ return matches.length;
365
+ }
366
+ async createUniqueIndex(_collection, _index) {
367
+ throw new SpruceError_1.default({
368
+ code: 'FEATURE_NOT_SUPPORTED',
369
+ operation: 'createUniqueIndex',
370
+ });
371
+ }
372
+ async createIndex(_collection, _index) {
373
+ throw new SpruceError_1.default({
374
+ code: 'FEATURE_NOT_SUPPORTED',
375
+ operation: 'createIndex',
376
+ });
377
+ }
378
+ async query(_query, _params) {
379
+ throw new SpruceError_1.default({
380
+ code: 'FEATURE_NOT_SUPPORTED',
381
+ operation: 'query',
382
+ });
383
+ }
384
+ }
385
+ exports.default = ChromaDatabase;
386
+ //# sourceMappingURL=ChromaDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChromaDatabase.js","sourceRoot":"","sources":["../src/ChromaDatabase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import AbstractSpruceTest from '@sprucelabs/test-utils';
2
+ export default class ChromaDatabaseTest extends AbstractSpruceTest {
3
+ private static embedding;
4
+ private static db;
5
+ private static collectionName;
6
+ private static chroma;
7
+ private static collection;
8
+ protected static beforeEach(): Promise<void>;
9
+ protected static afterEach(): Promise<void>;
10
+ protected static throwsWithMissing(): Promise<void>;
11
+ protected static defaultsToOllamaEmbedding(): Promise<void>;
12
+ protected static embedsTheWholeDocumentByDefault(): Promise<void>;
13
+ protected static canGenerateEmbedsForNestedValues(): Promise<void>;
14
+ protected static canDoMultipleKeyValuePairsForEmbeddings(): Promise<void>;
15
+ protected static canDoMultipleNestedKeyValuePairsForEmbeddings(): Promise<void>;
16
+ protected static throwsExpectedErrorForUnsupportedFeatures(): Promise<void>;
17
+ protected static runsSuiteOfDatabaseTests(): Promise<void>;
18
+ protected static canSetSingleEmbeddingField(): Promise<void>;
19
+ protected static canSetDifferentSingleEmbeddingField(): Promise<void>;
20
+ protected static canSetMultipleFieldsOnEmbedding(): Promise<void>;
21
+ protected static embeddingFieldsHonorsCollection(): Promise<void>;
22
+ protected static dropDatabaseDeletesAllCollections(): Promise<void>;
23
+ protected static doesTextSearchWith$promptKey(): Promise<void>;
24
+ protected static canFindUsingDifferent$promptKey(): Promise<void>;
25
+ protected static canFindUsingDifferentLimit(): Promise<void>;
26
+ protected static canSearchByPromptAndDocumentFields(): Promise<void>;
27
+ protected static canSearchSamePromptAndDifferentDocumentFields(): Promise<void>;
28
+ private static findByPrompt;
29
+ private static createSearchableDocuments;
30
+ private static getOrCreateCollection;
31
+ private static setEmbedFieldsAndAssertEmbeddingsEqual;
32
+ private static assertEmbeddingsEqual;
33
+ private static setEmbeddingFields;
34
+ private static assertOperationThrowsNotSupported;
35
+ private static createOneAndAssertExpectedEmbeddings;
36
+ private static getById;
37
+ private static generateEmbeddings;
38
+ private static createOne;
39
+ }