endee 1.7.1-dev.3 → 1.8.0-dev.1

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.
@@ -1,391 +0,0 @@
1
- /**
2
- * Index client for Endee-DB
3
- */
4
- import axios from 'axios';
5
- import { encode, decode } from '@msgpack/msgpack';
6
- import { jsonZip, jsonUnzip } from './crypto.js';
7
- import { raiseException } from './exceptions.js';
8
- import { Precision, } from './types/index.js';
9
- export class Index {
10
- name;
11
- token;
12
- url;
13
- count;
14
- spaceType;
15
- dimension;
16
- precision;
17
- M;
18
- efCon;
19
- sparseModel;
20
- constructor(name, token, url, _version = 1, params = {}) {
21
- this.name = name;
22
- this.token = token;
23
- this.url = url;
24
- this.count = params.total_elements || 0;
25
- this.spaceType = params.spaceType || 'cosine';
26
- this.dimension = params.dimension || 0;
27
- this.precision = params.precision || Precision.INT16;
28
- this.M = params.M || 16;
29
- this.efCon = params.efCon || 128;
30
- this.sparseModel = params.sparseModel || null;
31
- }
32
- toString() {
33
- return this.name;
34
- }
35
- isHybrid() {
36
- return this.sparseModel == 'default' || this.sparseModel == 'endee_bm25';
37
- }
38
- _normalizeVector(vector) {
39
- if (vector.length !== this.dimension) {
40
- throw new Error(`Vector dimension mismatch: expected ${this.dimension}, got ${vector.length}`);
41
- }
42
- if (this.spaceType !== 'cosine') {
43
- return [vector, 1.0];
44
- }
45
- const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
46
- if (norm === 0)
47
- return [vector, 1.0];
48
- const normalized = vector.map((v) => v / norm);
49
- return [normalized, norm];
50
- }
51
- _validateFilter(filter) {
52
- const MAX_KEY_BYTES = 128;
53
- const MAX_VALUE_BYTES = 1024;
54
- for (const [key, value] of Object.entries(filter)) {
55
- if (Buffer.byteLength(key, 'utf8') > MAX_KEY_BYTES) {
56
- throw new Error(`Filter key size must be less than ${MAX_KEY_BYTES} bytes`);
57
- }
58
- const valuesToCheck = Array.isArray(value) ? value : [value];
59
- for (const v of valuesToCheck) {
60
- if (typeof v === 'string' && Buffer.byteLength(v, 'utf8') > MAX_VALUE_BYTES) {
61
- throw new Error(`Value size must not exceed ${MAX_VALUE_BYTES} bytes`);
62
- }
63
- }
64
- }
65
- }
66
- _validateVectorIds(ids) {
67
- const seenIds = new Set();
68
- const duplicateIds = new Set();
69
- for (const id of ids) {
70
- if (!id) {
71
- throw new Error('All vectors must have a non-empty ID');
72
- }
73
- if (seenIds.has(id)) {
74
- duplicateIds.add(id);
75
- }
76
- else {
77
- seenIds.add(id);
78
- }
79
- }
80
- if (duplicateIds.size > 0) {
81
- const sortedDuplicates = [...duplicateIds].sort();
82
- throw new Error(`Duplicate IDs found in input array: ${sortedDuplicates.join(', ')}`);
83
- }
84
- }
85
- async upsert(inputArray) {
86
- if (inputArray.length > 1000) {
87
- throw new Error('Cannot insert more than 1000 vectors at a time');
88
- }
89
- const ids = inputArray.map((item) => String(item.id || ''));
90
- this._validateVectorIds(ids);
91
- const vectorBatch = [];
92
- for (const item of inputArray) {
93
- const [vector, norm] = this._normalizeVector(item.vector);
94
- const metaData = jsonZip(item.meta || {});
95
- const sparseIndices = item.sparseIndices || [];
96
- const sparseValues = item.sparseValues || [];
97
- if (item.filter) {
98
- this._validateFilter(item.filter);
99
- }
100
- const hasSparse = sparseIndices.length > 0 || sparseValues.length > 0;
101
- if (hasSparse !== this.isHybrid()) {
102
- throw new Error('Hybrid index requires sparse data (along with dense vectors), and dense-only index forbids it.');
103
- }
104
- if (hasSparse && sparseIndices.length !== sparseValues.length) {
105
- throw new Error(`sparseIndices and sparseValues must have the same length. Got ${sparseIndices.length} length indices and ${sparseValues.length} length values.`);
106
- }
107
- const vectorObj = [
108
- String(item.id || ''),
109
- metaData,
110
- JSON.stringify(item.filter || {}),
111
- norm,
112
- vector,
113
- ];
114
- if (this.isHybrid()) {
115
- vectorObj.push(sparseIndices, sparseValues);
116
- }
117
- vectorBatch.push(vectorObj);
118
- }
119
- const serializedData = encode(vectorBatch);
120
- const headers = {
121
- Authorization: this.token,
122
- 'Content-Type': 'application/msgpack',
123
- };
124
- try {
125
- await axios.post(`${this.url}/index/${this.name}/vector/insert`, serializedData, {
126
- headers,
127
- responseType: 'arraybuffer',
128
- });
129
- }
130
- catch (err) {
131
- if (axios.isAxiosError(err) && err.response) {
132
- raiseException(err.response.status, err.response.data);
133
- }
134
- throw err;
135
- }
136
- return 'Vectors inserted successfully';
137
- }
138
- async query(options) {
139
- const { vector = null, topK = 10, filter = null, ef = 128, includeVectors = false, sparseIndices = null, sparseValues = null, prefilterCardinalityThreshold = 10_000, filterBoostPercentage = 0, denseRrfWeight = 0.5, rrfRankConstant = 60, } = options;
140
- if (topK > 4096 || topK < 0)
141
- throw new Error('top_k cannot be greater than 4096 and less than 0');
142
- if (ef > 1024)
143
- throw new Error('ef search cannot be greater than 1024');
144
- if (prefilterCardinalityThreshold < 1_000 || prefilterCardinalityThreshold > 1_000_000)
145
- throw new Error('prefilterCardinalityThreshold must be between 1,000 and 1,000,000');
146
- if (filterBoostPercentage < 0 || filterBoostPercentage > 400)
147
- throw new Error('filterBoostPercentage must be between 0 and 400');
148
- const hasSparse = sparseIndices && sparseIndices.length > 0 && sparseValues && sparseIndices.length > 0;
149
- let hasDense = false;
150
- if (vector)
151
- hasDense = true;
152
- if (!hasDense && !hasSparse) {
153
- throw new Error("At least one of 'vector' or 'sparseIndices'/'sparseValues' must be provided.");
154
- }
155
- if (hasSparse && !this.isHybrid()) {
156
- throw new Error('Cannot perform sparse search on a dense-only index. Create the index with sparse support enabled for hybrid search.');
157
- }
158
- if (hasSparse) {
159
- if (sparseIndices.length != sparseValues.length) {
160
- throw new Error(`sparseIndices and sparseValues must have the same length. Got ${sparseIndices.length} length indices and ${sparseValues.length} length values.`);
161
- }
162
- }
163
- const headers = {
164
- Authorization: this.token,
165
- 'Content-Type': 'application/json',
166
- };
167
- const data = {
168
- k: topK,
169
- ef: ef,
170
- include_vectors: includeVectors,
171
- dense_rrf_weight: denseRrfWeight,
172
- rrf_rank_constant: rrfRankConstant,
173
- };
174
- if (vector) {
175
- const [queryVector] = this._normalizeVector(vector);
176
- data.vector = queryVector;
177
- }
178
- if (hasSparse) {
179
- data.sparse_indices = sparseIndices;
180
- data.sparse_values = sparseValues;
181
- }
182
- if (filter) {
183
- data.filter = JSON.stringify(filter);
184
- }
185
- data.filter_params = {
186
- prefilter_cardinality_threshold: prefilterCardinalityThreshold,
187
- filter_boost_percentage: filterBoostPercentage,
188
- };
189
- let response;
190
- try {
191
- response = await axios.post(`${this.url}/index/${this.name}/search`, data, {
192
- headers,
193
- responseType: 'arraybuffer',
194
- });
195
- }
196
- catch (err) {
197
- if (axios.isAxiosError(err) && err.response) {
198
- raiseException(err.response.status, err.response.data);
199
- }
200
- throw err;
201
- }
202
- const decoded = decode(new Uint8Array(response.data));
203
- const results = Array.isArray(decoded) ? decoded : [];
204
- const processedResults = [];
205
- for (const result of results) {
206
- const similarity = result[0];
207
- const vectorId = result[1];
208
- const metaData = result[2];
209
- const filterStr = result[3];
210
- const normValue = result[4];
211
- const vectorData = result.length > 5 ? result[5] : undefined;
212
- let meta = {};
213
- meta = jsonUnzip(metaData);
214
- const processedResult = {
215
- id: vectorId,
216
- similarity: similarity,
217
- distance: 1 - similarity,
218
- meta: meta,
219
- norm: normValue,
220
- };
221
- if (filterStr) {
222
- processedResult.filter = JSON.parse(filterStr);
223
- }
224
- if (includeVectors && vectorData) {
225
- processedResult.vector = Array.from(vectorData);
226
- }
227
- processedResults.push(processedResult);
228
- }
229
- if (!includeVectors) {
230
- for (const result of processedResults) {
231
- delete result.vector;
232
- }
233
- }
234
- return processedResults;
235
- }
236
- async updateFilters(updates) {
237
- const headers = {
238
- Authorization: this.token,
239
- };
240
- let response;
241
- try {
242
- const body = { updates: updates };
243
- response = await axios.post(`${this.url}/index/${this.name}/filters/update`, body, {
244
- headers,
245
- });
246
- }
247
- catch (err) {
248
- if (axios.isAxiosError(err) && err.response) {
249
- raiseException(err.response.status, err.response.data);
250
- }
251
- throw err;
252
- }
253
- return response.data;
254
- }
255
- async deleteVector(id) {
256
- const headers = {
257
- Authorization: this.token,
258
- };
259
- let response;
260
- try {
261
- response = await axios.delete(`${this.url}/index/${this.name}/vector/${id}/delete`, {
262
- headers,
263
- });
264
- }
265
- catch (err) {
266
- if (axios.isAxiosError(err) && err.response) {
267
- raiseException(err.response.status, err.response.data);
268
- }
269
- throw err;
270
- }
271
- return response.data + ' rows deleted';
272
- }
273
- async deleteObject(id) {
274
- const headers = {
275
- Authorization: this.token,
276
- };
277
- let response;
278
- try {
279
- response = await axios.delete(`${this.url}/index/${this.name}/vector/${id}/delete`, {
280
- headers,
281
- });
282
- }
283
- catch (err) {
284
- if (axios.isAxiosError(err) && err.response) {
285
- raiseException(err.response.status, err.response.data);
286
- }
287
- throw err;
288
- }
289
- return response.data + ' rows deleted';
290
- }
291
- // Need to test this function first.
292
- async deleteWithFilter(filter) {
293
- const headers = {
294
- Authorization: this.token,
295
- 'Content-Type': 'application/json',
296
- };
297
- const data = { filter };
298
- let response;
299
- try {
300
- response = await axios.delete(`${this.url}/index/${this.name}/vectors/delete`, {
301
- headers,
302
- data,
303
- });
304
- }
305
- catch (err) {
306
- if (axios.isAxiosError(err) && err.response) {
307
- raiseException(err.response.status, err.response.data);
308
- }
309
- throw err;
310
- }
311
- return response.data;
312
- }
313
- async getVector(id) {
314
- const headers = {
315
- Authorization: this.token,
316
- 'Content-Type': 'application/json',
317
- };
318
- let response;
319
- try {
320
- response = await axios.post(`${this.url}/index/${this.name}/vector/get`, { id }, { headers, responseType: 'arraybuffer' });
321
- }
322
- catch (err) {
323
- if (axios.isAxiosError(err) && err.response) {
324
- raiseException(err.response.status, err.response.data);
325
- }
326
- throw err;
327
- }
328
- const vectorObj = decode(new Uint8Array(response.data));
329
- const meta = jsonUnzip(vectorObj[1]);
330
- const vector = Array.from(vectorObj[4]);
331
- const parsedFilter = JSON.parse(vectorObj[2]);
332
- const result = {
333
- id: vectorObj[0],
334
- meta: meta,
335
- filter: parsedFilter,
336
- norm: vectorObj[3],
337
- vector: vector,
338
- };
339
- if (vectorObj[5] && vectorObj[5].length > 0) {
340
- result.sparseIndices = Array.from(vectorObj[5]);
341
- result.sparseValues = Array.from(vectorObj[6]);
342
- }
343
- return result;
344
- }
345
- async getObject(id) {
346
- const headers = {
347
- Authorization: this.token,
348
- 'Content-Type': 'application/json',
349
- };
350
- let response;
351
- try {
352
- response = await axios.post(`${this.url}/index/${this.name}/vector/get`, { id }, { headers, responseType: 'arraybuffer' });
353
- }
354
- catch (err) {
355
- if (axios.isAxiosError(err) && err.response) {
356
- raiseException(err.response.status, err.response.data);
357
- }
358
- throw err;
359
- }
360
- const vectorObj = decode(new Uint8Array(response.data));
361
- const meta = jsonUnzip(vectorObj[1]);
362
- const vector = Array.from(vectorObj[4]);
363
- const parsedFilter = JSON.parse(vectorObj[2]);
364
- const result = {
365
- id: vectorObj[0],
366
- meta: meta,
367
- filter: parsedFilter,
368
- norm: vectorObj[3],
369
- vector: vector,
370
- };
371
- if (vectorObj[5] && vectorObj[5].length > 0) {
372
- result.sparseIndices = Array.from(vectorObj[5]);
373
- result.sparseValues = Array.from(vectorObj[6]);
374
- }
375
- return result;
376
- }
377
- describe() {
378
- return {
379
- name: this.name,
380
- spaceType: this.spaceType,
381
- dimension: this.dimension,
382
- isHybrid: this.isHybrid(),
383
- count: this.count,
384
- precision: this.precision,
385
- M: this.M,
386
- efCon: this.efCon,
387
- sparseModel: this.sparseModel,
388
- };
389
- }
390
- }
391
- //# sourceMappingURL=index.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.class.js","sourceRoot":"","sources":["../src/index.class.ts"],"names":[],"mappings":"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"}