endee 1.0.3 → 1.0.4-beta.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.
- package/README.md +139 -1
- package/dist/endee.d.ts +2 -2
- package/dist/endee.d.ts.map +1 -1
- package/dist/endee.js +26 -9
- package/dist/endee.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/indexClient.d.ts +3 -1
- package/dist/indexClient.d.ts.map +1 -1
- package/dist/indexClient.js +63 -12
- package/dist/indexClient.js.map +1 -1
- package/dist/types/index.d.ts +15 -6
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,6 +7,7 @@ Endee is a TypeScript client for a vector database designed for maximum speed an
|
|
|
7
7
|
- **TypeScript First**: Full type safety and IntelliSense support
|
|
8
8
|
- **Fast ANN Searches**: Efficient similarity searches on vector data
|
|
9
9
|
- **Multiple Distance Metrics**: Support for cosine, L2, and inner product distance metrics
|
|
10
|
+
- **Hybrid Indexes**: Support for dense vectors, sparse vectors, and hybrid (dense + sparse) searches
|
|
10
11
|
- **Metadata Support**: Attach and search with metadata and filters
|
|
11
12
|
- **Client-Side Encryption**: Optional AES-256 encryption for your metadata
|
|
12
13
|
- **High Performance**: Optimized for speed and efficiency
|
|
@@ -93,7 +94,8 @@ await endee.createIndex({
|
|
|
93
94
|
spaceType: "l2", // space type (cosine, l2, ip)
|
|
94
95
|
M: 32, // M: Graph connectivity parameter
|
|
95
96
|
efCon: 256, // efCon: Construction-time parameter
|
|
96
|
-
precision: "medium" // precision: "medium" | "high" | "ultra-high"
|
|
97
|
+
precision: "medium", // precision: "medium" | "high" | "ultra-high"
|
|
98
|
+
sparseDimension: 1000 // Optional: Enable hybrid index with sparse dimension
|
|
97
99
|
});
|
|
98
100
|
|
|
99
101
|
// Delete an index
|
|
@@ -142,6 +144,142 @@ const description = await index.describe();
|
|
|
142
144
|
console.log(description);
|
|
143
145
|
```
|
|
144
146
|
|
|
147
|
+
## Hybrid Indexes
|
|
148
|
+
|
|
149
|
+
Endee supports **Hybrid Indexes** that combine dense vectors with sparse vectors, enabling powerful search capabilities. Hybrid indexes allow you to:
|
|
150
|
+
|
|
151
|
+
- Store both dense embeddings (e.g., from neural networks) and sparse features (e.g., keyword frequencies, categorical encodings)
|
|
152
|
+
- Perform dense-only searches (traditional vector similarity)
|
|
153
|
+
- Perform sparse-only searches (keyword/feature matching)
|
|
154
|
+
- Perform hybrid searches (combining both dense and sparse signals)
|
|
155
|
+
|
|
156
|
+
### Creating a Hybrid Index
|
|
157
|
+
|
|
158
|
+
To create a hybrid index, specify the `sparseDimension` parameter when creating an index:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// Create a hybrid index with dense dimension 384 and sparse dimension 10000
|
|
162
|
+
await endee.createIndex({
|
|
163
|
+
name: "hybrid_index",
|
|
164
|
+
dimension: 384, // Dense vector dimension
|
|
165
|
+
sparseDimension: 10000, // Sparse vector dimension (max index value)
|
|
166
|
+
spaceType: "cosine",
|
|
167
|
+
precision: "medium"
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// Get the hybrid index reference
|
|
171
|
+
const index = await endee.getIndex("hybrid_index");
|
|
172
|
+
|
|
173
|
+
// Check if index is hybrid
|
|
174
|
+
const description = index.describe();
|
|
175
|
+
console.log(description.isHybrid); // true
|
|
176
|
+
console.log(description.sparseDimension); // 10000
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Upserting Vectors with Sparse Data
|
|
180
|
+
|
|
181
|
+
When working with a hybrid index, you can insert vectors with both dense and sparse components:
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// Insert vectors with both dense and sparse components (hybrid index only)
|
|
185
|
+
await index.upsert([
|
|
186
|
+
{
|
|
187
|
+
id: "doc2",
|
|
188
|
+
vector: [0.2, 0.3, 0.4, /* ... 384 dimensions */], // Dense vector
|
|
189
|
+
sparseIndices: [5, 42, 100, 500], // Sparse feature indices
|
|
190
|
+
sparseValues: [0.8, 0.6, 0.9, 0.7], // Sparse feature values
|
|
191
|
+
meta: { title: "Document 2", category: "tech" }
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
id: "doc3",
|
|
195
|
+
vector: [0.3, 0.4, 0.5, /* ... 384 dimensions */],
|
|
196
|
+
sparseIndices: [10, 25, 200],
|
|
197
|
+
sparseValues: [0.5, 0.4, 0.6],
|
|
198
|
+
meta: { title: "Document 3", category: "science" }
|
|
199
|
+
}
|
|
200
|
+
]);
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Important Notes:**
|
|
204
|
+
- `sparseIndices` and `sparseValues` must have the same length
|
|
205
|
+
- Sparse indices must be in the range `[0, sparseDimension)`
|
|
206
|
+
- Both `sparseIndices` and `sparseValues` must be provided together (or both omitted)
|
|
207
|
+
- You cannot insert sparse data into a dense-only index (one created without `sparseDimension`)
|
|
208
|
+
|
|
209
|
+
### Querying Hybrid Indexes
|
|
210
|
+
|
|
211
|
+
Hybrid indexes support three types of searches:
|
|
212
|
+
|
|
213
|
+
#### 1. Dense Search (Traditional Vector Similarity)
|
|
214
|
+
|
|
215
|
+
Search using only the dense vector component:
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
const results = await index.query({
|
|
219
|
+
vector: [0.2, 0.3, 0.4, /* ... 384 dimensions */], // Query dense vector
|
|
220
|
+
topK: 10,
|
|
221
|
+
ef: 128
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Results are ranked by dense vector similarity
|
|
225
|
+
for (const item of results) {
|
|
226
|
+
console.log(`ID: ${item.id}, Similarity: ${item.similarity}`);
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### 2. Sparse Search (Keyword/Feature Matching)
|
|
231
|
+
|
|
232
|
+
Search using only the sparse component:
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
const results = await index.query({
|
|
236
|
+
sparseIndices: [5, 42, 100], // Query sparse feature indices
|
|
237
|
+
sparseValues: [0.8, 0.6, 0.9], // Query sparse feature values
|
|
238
|
+
topK: 10,
|
|
239
|
+
ef: 128
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
// Results are ranked by sparse vector similarity
|
|
243
|
+
for (const item of results) {
|
|
244
|
+
console.log(`ID: ${item.id}, Similarity: ${item.similarity}`);
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### 3. Hybrid Search (Combined Dense + Sparse)
|
|
249
|
+
|
|
250
|
+
Search using both dense and sparse components for the most powerful results:
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
const results = await index.query({
|
|
254
|
+
vector: [0.2, 0.3, 0.4, /* ... 384 dimensions */], // Dense query
|
|
255
|
+
sparseIndices: [5, 42, 100], // Sparse query indices
|
|
256
|
+
sparseValues: [0.8, 0.6, 0.9], // Sparse query values
|
|
257
|
+
topK: 10,
|
|
258
|
+
ef: 128
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Results combine both dense and sparse signals
|
|
262
|
+
for (const item of results) {
|
|
263
|
+
console.log(`ID: ${item.id}, Similarity: ${item.similarity}`);
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Use Cases for Hybrid Indexes
|
|
268
|
+
|
|
269
|
+
Hybrid indexes are ideal for scenarios where you want to combine:
|
|
270
|
+
|
|
271
|
+
- **Semantic similarity** (dense embeddings from transformers) with **keyword matching** (sparse TF-IDF or BM25 features)
|
|
272
|
+
- **Neural embeddings** with **categorical features** or **one-hot encodings**
|
|
273
|
+
- **Content-based recommendations** (dense) with **collaborative filtering signals** (sparse)
|
|
274
|
+
|
|
275
|
+
### Key Points
|
|
276
|
+
|
|
277
|
+
- **Hybrid indexes are optional**: Create them only when you need sparse vector support
|
|
278
|
+
- **Dense-only indexes**: Work with traditional dense vectors only (no sparse support)
|
|
279
|
+
- **Sparse data validation**: The system validates sparse indices are within bounds and arrays match in length
|
|
280
|
+
- **Flexible querying**: You can query with dense only, sparse only, or both on hybrid indexes
|
|
281
|
+
- **Backward compatible**: Dense-only indexes continue to work as before
|
|
282
|
+
|
|
145
283
|
## Filtering
|
|
146
284
|
|
|
147
285
|
Endee supports structured filtering using operators like `$eq`, `$in`, and `$range`. For detailed documentation on filtering, see the [official documentation](https://docs.endee.io/sdks/typescript/usage#filtered-querying).
|
package/dist/endee.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main Endee client for Endee-DB
|
|
3
3
|
*/
|
|
4
|
-
import { Index } from
|
|
5
|
-
import type { CreateIndexOptions } from
|
|
4
|
+
import { Index } from "./indexClient.js";
|
|
5
|
+
import type { CreateIndexOptions } from "./types/index.js";
|
|
6
6
|
export declare class Endee {
|
|
7
7
|
private token;
|
|
8
8
|
private baseUrl;
|
package/dist/endee.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endee.d.ts","sourceRoot":"","sources":["../src/endee.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"endee.d.ts","sourceRoot":"","sources":["../src/endee.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,kBAAkB,CAAC;AAGtE,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,KAAK,GAAE,MAAM,GAAG,IAAW;IAavC,WAAW,IAAI,MAAM;IAUf,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmEzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,KAAK,CAAC;CA8CxE"}
|
package/dist/endee.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main Endee client for Endee-DB
|
|
3
3
|
*/
|
|
4
|
-
import axios from
|
|
5
|
-
import crypto from
|
|
6
|
-
import { raiseException } from
|
|
7
|
-
import { Index } from
|
|
8
|
-
import { isValidIndexName
|
|
9
|
-
import { getChecksum } from
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import crypto from "crypto";
|
|
6
|
+
import { raiseException } from "./exceptions.js";
|
|
7
|
+
import { Index } from "./indexClient.js";
|
|
8
|
+
import { isValidIndexName } from "./utils.js";
|
|
9
|
+
import { getChecksum } from "./crypto.js";
|
|
10
10
|
export class Endee {
|
|
11
11
|
token;
|
|
12
12
|
baseUrl;
|
|
@@ -25,18 +25,21 @@ export class Endee {
|
|
|
25
25
|
}
|
|
26
26
|
generateKey() {
|
|
27
27
|
// Generate a random hex key of 32 bytes (256 bit)
|
|
28
|
-
const key = crypto.randomBytes(32).toString(
|
|
28
|
+
const key = crypto.randomBytes(32).toString("hex");
|
|
29
29
|
console.log("Store this encryption key in a secure location. Loss of the key will result in the irreversible loss of associated vector data.\nKey: ", key);
|
|
30
30
|
return key;
|
|
31
31
|
}
|
|
32
32
|
async createIndex(options) {
|
|
33
|
-
const { name, dimension, spaceType =
|
|
33
|
+
const { name, dimension, spaceType = "cosine", M = 16, efCon = 128, key = null, precision = "medium", version = null, sparseDimension = null, } = options;
|
|
34
34
|
if (!isValidIndexName(name)) {
|
|
35
35
|
throw new Error("Invalid index name. Index name must be alphanumeric and can contain underscores and less than 48 characters");
|
|
36
36
|
}
|
|
37
37
|
if (dimension > 10000) {
|
|
38
38
|
throw new Error("Dimension cannot be greater than 10000");
|
|
39
39
|
}
|
|
40
|
+
if (sparseDimension && sparseDimension < 0) {
|
|
41
|
+
throw new Error("Sparse dimension cannot be less than 0");
|
|
42
|
+
}
|
|
40
43
|
const normalizedSpaceType = spaceType.toLowerCase();
|
|
41
44
|
if (!["cosine", "l2", "ip"].includes(normalizedSpaceType)) {
|
|
42
45
|
throw new Error(`Invalid space type: ${spaceType}`);
|
|
@@ -55,6 +58,9 @@ export class Endee {
|
|
|
55
58
|
precision: precision,
|
|
56
59
|
version: version,
|
|
57
60
|
};
|
|
61
|
+
if (sparseDimension) {
|
|
62
|
+
data.sparse_dim = sparseDimension;
|
|
63
|
+
}
|
|
58
64
|
if (version !== undefined) {
|
|
59
65
|
data.version = version;
|
|
60
66
|
}
|
|
@@ -134,12 +140,23 @@ export class Endee {
|
|
|
134
140
|
throw err;
|
|
135
141
|
}
|
|
136
142
|
const data = response.data;
|
|
143
|
+
const indexInfo = {
|
|
144
|
+
name: data.index_name,
|
|
145
|
+
spaceType: data.space_type,
|
|
146
|
+
dimension: data.dimension,
|
|
147
|
+
totalElements: data.total_elements,
|
|
148
|
+
precision: data.precision,
|
|
149
|
+
M: data.M,
|
|
150
|
+
checksum: data.checksum,
|
|
151
|
+
version: data.version,
|
|
152
|
+
sparseDimension: data.sparse_dim,
|
|
153
|
+
};
|
|
137
154
|
// Raise error if checksum does not match
|
|
138
155
|
const checksum = getChecksum(key);
|
|
139
156
|
if (checksum !== data.checksum) {
|
|
140
157
|
raiseException(403, "Checksum does not match. Please check the key.");
|
|
141
158
|
}
|
|
142
|
-
const idx = new Index(name, key, this.token, this.baseUrl, this.version,
|
|
159
|
+
const idx = new Index(name, key, this.token, this.baseUrl, this.version, indexInfo);
|
|
143
160
|
return idx;
|
|
144
161
|
}
|
|
145
162
|
}
|
package/dist/endee.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endee.js","sourceRoot":"","sources":["../src/endee.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"endee.js","sourceRoot":"","sources":["../src/endee.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,KAAK;IACR,KAAK,CAAgB;IACrB,OAAO,CAAS;IAChB,OAAO,CAAS;IAExB,YAAY,QAAuB,IAAI;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC;QAC9C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,WAAW,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;gBAC1D,IAAI,CAAC,KAAK,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,WAAW;QACT,kDAAkD;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CACT,wIAAwI,EACxI,GAAG,CACJ,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA2B;QAC3C,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,GAAG,QAAQ,EACpB,CAAC,GAAG,EAAE,EACN,KAAK,GAAG,GAAG,EACX,GAAG,GAAG,IAAI,EACV,SAAS,GAAG,QAAQ,EACpB,OAAO,GAAG,IAAI,EACd,eAAe,GAAG,IAAI,GACvB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,eAAe,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,mBAAmB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;YAC9B,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,SAAS;YACd,UAAU,EAAE,mBAAmB;YAC/B,CAAC,EAAE,CAAC;YACJ,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;SACjB,CAAC;QACF,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QACD,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,eAAe,EAAE,IAAI,EAAE;gBAChE,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SAC/B,CAAC;QACF,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5C,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SAC/B,CAAC;QACF,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,IAAI,SAAS,EAAE;gBACpE,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,SAAS,IAAI,uBAAuB,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,MAAqB,IAAI;QACpD,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;YAC9B,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,IAAI,OAAO,EAAE;gBAC/D,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5C,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE3B,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,UAAU;SACjC,CAAC;QAEF,yCAAyC;QACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,cAAc,CAAC,GAAG,EAAE,gDAAgD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,IAAI,EACJ,GAAG,EACH,IAAI,CAAC,KAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EACZ,SAAS,CACV,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main export file for Endee-DB
|
|
3
3
|
*/
|
|
4
|
-
export { Endee } from
|
|
5
|
-
export { Index } from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
4
|
+
export { Endee } from "./endee.js";
|
|
5
|
+
export { Index } from "./indexClient.js";
|
|
6
|
+
export * from "./exceptions.js";
|
|
7
|
+
export * from "./types/index.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main export file for Endee-DB
|
|
3
3
|
*/
|
|
4
|
-
export { Endee } from
|
|
5
|
-
export { Index } from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
4
|
+
export { Endee } from "./endee.js";
|
|
5
|
+
export { Index } from "./indexClient.js";
|
|
6
|
+
export * from "./exceptions.js";
|
|
7
|
+
export * from "./types/index.js";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/indexClient.d.ts
CHANGED
|
@@ -8,12 +8,14 @@ export declare class Index {
|
|
|
8
8
|
private token;
|
|
9
9
|
private url;
|
|
10
10
|
private count;
|
|
11
|
-
private
|
|
11
|
+
private spaceType;
|
|
12
12
|
private dimension;
|
|
13
13
|
private precision;
|
|
14
14
|
private M;
|
|
15
|
+
private sparseDimension;
|
|
15
16
|
constructor(name: string, key: string | null, token: string, url: string, _version?: number, params?: Partial<IndexInfo>);
|
|
16
17
|
toString(): string;
|
|
18
|
+
private isHybrid;
|
|
17
19
|
private _normalizeVector;
|
|
18
20
|
upsert(inputArray: VectorItem[]): Promise<string>;
|
|
19
21
|
query(options: QueryOptions): Promise<QueryResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexClient.d.ts","sourceRoot":"","sources":["../src/indexClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"indexClient.d.ts","sourceRoot":"","sources":["../src/indexClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,CAAC,CAAS;IAClB,OAAO,CAAC,eAAe,CAAS;gBAG9B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,SAAI,EACZ,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM;IAcjC,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,gBAAgB;IAelB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA0FjD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4HpD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBnE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAuCF,QAAQ,IAAI,gBAAgB;CAY7B"}
|
package/dist/indexClient.js
CHANGED
|
@@ -11,29 +11,34 @@ export class Index {
|
|
|
11
11
|
token;
|
|
12
12
|
url;
|
|
13
13
|
count;
|
|
14
|
-
|
|
14
|
+
spaceType;
|
|
15
15
|
dimension;
|
|
16
16
|
precision;
|
|
17
17
|
M;
|
|
18
|
+
sparseDimension;
|
|
18
19
|
constructor(name, key, token, url, _version = 1, params = {}) {
|
|
19
20
|
this.name = name;
|
|
20
21
|
this.key = key;
|
|
21
22
|
this.token = token;
|
|
22
23
|
this.url = url;
|
|
23
|
-
this.count = params.
|
|
24
|
-
this.
|
|
24
|
+
this.count = params.totalElements || 0;
|
|
25
|
+
this.spaceType = params.spaceType || "cosine";
|
|
25
26
|
this.dimension = params.dimension || 0;
|
|
26
27
|
this.precision = params.precision || "medium";
|
|
27
28
|
this.M = params.M || 16;
|
|
29
|
+
this.sparseDimension = params.sparseDimension || 0;
|
|
28
30
|
}
|
|
29
31
|
toString() {
|
|
30
32
|
return this.name;
|
|
31
33
|
}
|
|
34
|
+
isHybrid() {
|
|
35
|
+
return this.sparseDimension > 0;
|
|
36
|
+
}
|
|
32
37
|
_normalizeVector(vector) {
|
|
33
38
|
if (vector.length !== this.dimension) {
|
|
34
39
|
throw new Error(`Vector dimension mismatch: expected ${this.dimension}, got ${vector.length}`);
|
|
35
40
|
}
|
|
36
|
-
if (this.
|
|
41
|
+
if (this.spaceType !== "cosine") {
|
|
37
42
|
return [vector, 1.0];
|
|
38
43
|
}
|
|
39
44
|
const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
|
|
@@ -50,6 +55,25 @@ export class Index {
|
|
|
50
55
|
for (const item of inputArray) {
|
|
51
56
|
const [vector, norm] = this._normalizeVector(item.vector);
|
|
52
57
|
const metaData = jsonZip(item.meta || {}, this.key);
|
|
58
|
+
const sparseIndices = item.sparseIndices || [];
|
|
59
|
+
const sparseValues = item.sparseValues || [];
|
|
60
|
+
if (!this.isHybrid() &&
|
|
61
|
+
(sparseIndices.length > 0 || sparseValues.length > 0)) {
|
|
62
|
+
throw new Error("Cannot insert sparse data into a dense-only index. Create index with sparseDimension > 0 for hybrid support.");
|
|
63
|
+
}
|
|
64
|
+
if (this.isHybrid()) {
|
|
65
|
+
if (sparseIndices.length == 0 || sparseValues.length == 0) {
|
|
66
|
+
throw new Error("Both sparse_indices and sparse_values must be provided for hybrid vectors.");
|
|
67
|
+
}
|
|
68
|
+
if (sparseIndices.length !== sparseValues.length) {
|
|
69
|
+
throw new Error(`sparseIndices and sparseValues must have the same length. Got ${sparseIndices.length} length indices and ${sparseValues.length} length values.`);
|
|
70
|
+
}
|
|
71
|
+
for (const idx of sparseIndices) {
|
|
72
|
+
if (idx < 0 || idx >= this.sparseDimension) {
|
|
73
|
+
throw new Error(`Sparse index ${idx} is out of bounds. Must be in range [0,${this.sparseDimension}).`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
53
77
|
const vectorObj = [
|
|
54
78
|
String(item.id || ""),
|
|
55
79
|
metaData,
|
|
@@ -57,6 +81,9 @@ export class Index {
|
|
|
57
81
|
norm,
|
|
58
82
|
vector,
|
|
59
83
|
];
|
|
84
|
+
if (this.isHybrid()) {
|
|
85
|
+
vectorObj.push(sparseIndices, sparseValues);
|
|
86
|
+
}
|
|
60
87
|
vectorBatch.push(vectorObj);
|
|
61
88
|
}
|
|
62
89
|
const serializedData = encode(vectorBatch);
|
|
@@ -76,24 +103,46 @@ export class Index {
|
|
|
76
103
|
return "Vectors inserted successfully";
|
|
77
104
|
}
|
|
78
105
|
async query(options) {
|
|
79
|
-
const { vector, topK = 10, filter = null, ef = 128, includeVectors = false, } = options;
|
|
80
|
-
if (
|
|
81
|
-
throw new Error("
|
|
82
|
-
if (topK > 200)
|
|
83
|
-
throw new Error("top_k cannot be greater than 200");
|
|
106
|
+
const { vector = null, topK = 10, filter = null, ef = 128, includeVectors = false, sparseIndices = null, sparseValues = null, } = options;
|
|
107
|
+
if (topK > 512 || topK < 0)
|
|
108
|
+
throw new Error("top_k cannot be greater than 512 and less than 0");
|
|
84
109
|
if (ef > 1024)
|
|
85
110
|
throw new Error("ef search cannot be greater than 1024");
|
|
86
|
-
const
|
|
111
|
+
const hasSparse = sparseIndices &&
|
|
112
|
+
sparseIndices.length > 0 &&
|
|
113
|
+
sparseValues &&
|
|
114
|
+
sparseIndices.length > 0;
|
|
115
|
+
var hasDense = false;
|
|
116
|
+
if (vector)
|
|
117
|
+
hasDense = true;
|
|
118
|
+
if (!hasDense && !hasSparse) {
|
|
119
|
+
throw new Error("At least one of 'vector' or 'sparseIndices'/'sparseValues' must be provided.");
|
|
120
|
+
}
|
|
121
|
+
if (hasSparse && !this.isHybrid()) {
|
|
122
|
+
throw new Error("Cannot perform sparse search on a dense-only index. Create index with sparseDimension > 0 for hybrid support.");
|
|
123
|
+
}
|
|
124
|
+
if (hasSparse) {
|
|
125
|
+
if (sparseIndices.length != sparseValues.length) {
|
|
126
|
+
throw new Error(`sparseIndices and sparseValues must have the same length. Got ${sparseIndices.length} length indices and ${sparseValues.length} length values.`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
87
129
|
const headers = {
|
|
88
130
|
Authorization: this.token,
|
|
89
131
|
"Content-Type": "application/json",
|
|
90
132
|
};
|
|
91
133
|
const data = {
|
|
92
|
-
vector: queryVector,
|
|
93
134
|
k: topK,
|
|
94
135
|
ef: ef,
|
|
95
136
|
include_vectors: includeVectors,
|
|
96
137
|
};
|
|
138
|
+
if (vector) {
|
|
139
|
+
const [queryVector] = this._normalizeVector(vector);
|
|
140
|
+
data.vector = queryVector;
|
|
141
|
+
}
|
|
142
|
+
if (hasSparse) {
|
|
143
|
+
data.sparse_indices = sparseIndices;
|
|
144
|
+
data.sparse_values = sparseValues;
|
|
145
|
+
}
|
|
97
146
|
if (filter) {
|
|
98
147
|
data.filter = JSON.stringify(filter);
|
|
99
148
|
}
|
|
@@ -205,8 +254,10 @@ export class Index {
|
|
|
205
254
|
describe() {
|
|
206
255
|
return {
|
|
207
256
|
name: this.name,
|
|
208
|
-
|
|
257
|
+
spaceType: this.spaceType,
|
|
209
258
|
dimension: this.dimension,
|
|
259
|
+
sparseDimension: this.sparseDimension,
|
|
260
|
+
isHybrid: this.isHybrid(),
|
|
210
261
|
count: this.count,
|
|
211
262
|
precision: this.precision,
|
|
212
263
|
M: this.M,
|
package/dist/indexClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexClient.js","sourceRoot":"","sources":["../src/indexClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAUjD,MAAM,OAAO,KAAK;IACR,IAAI,CAAS;IACb,GAAG,CAAgB;IACnB,KAAK,CAAS;IACd,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,
|
|
1
|
+
{"version":3,"file":"indexClient.js","sourceRoot":"","sources":["../src/indexClient.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type definitions for Endee-DB
|
|
3
3
|
*/
|
|
4
|
-
export type SpaceType =
|
|
4
|
+
export type SpaceType = "cosine" | "l2" | "ip";
|
|
5
5
|
export interface CreateIndexOptions {
|
|
6
6
|
name: string;
|
|
7
7
|
dimension: number;
|
|
@@ -11,20 +11,25 @@ export interface CreateIndexOptions {
|
|
|
11
11
|
precision?: "medium" | "high" | "ultra-high" | "fp16";
|
|
12
12
|
efCon?: number;
|
|
13
13
|
version?: number;
|
|
14
|
+
sparseDimension?: number;
|
|
14
15
|
}
|
|
15
16
|
export interface VectorItem {
|
|
16
17
|
id: string;
|
|
17
18
|
vector: number[];
|
|
19
|
+
sparseIndices?: number[];
|
|
20
|
+
sparseValues?: number[];
|
|
18
21
|
meta?: Record<string, unknown>;
|
|
19
22
|
filter?: Record<string, unknown>;
|
|
20
23
|
}
|
|
21
24
|
export interface QueryOptions {
|
|
22
|
-
vector
|
|
25
|
+
vector?: number[];
|
|
23
26
|
topK: number;
|
|
24
27
|
filter?: Array<Record<string, unknown>> | null;
|
|
25
28
|
ef?: number;
|
|
26
29
|
includeVectors?: boolean;
|
|
27
30
|
log?: boolean;
|
|
31
|
+
sparseIndices?: number[];
|
|
32
|
+
sparseValues?: number[];
|
|
28
33
|
}
|
|
29
34
|
export interface QueryResult {
|
|
30
35
|
id: string;
|
|
@@ -37,20 +42,24 @@ export interface QueryResult {
|
|
|
37
42
|
}
|
|
38
43
|
export interface IndexInfo {
|
|
39
44
|
name: string;
|
|
40
|
-
|
|
45
|
+
spaceType: SpaceType;
|
|
41
46
|
dimension: number;
|
|
42
|
-
|
|
47
|
+
totalElements?: number;
|
|
43
48
|
precision?: string;
|
|
44
49
|
M?: number;
|
|
45
50
|
checksum?: Number;
|
|
46
|
-
|
|
51
|
+
libToken?: string;
|
|
52
|
+
version?: number;
|
|
53
|
+
sparseDimension?: number;
|
|
47
54
|
}
|
|
48
55
|
export interface IndexDescription {
|
|
49
56
|
name: string;
|
|
50
|
-
|
|
57
|
+
spaceType: SpaceType;
|
|
51
58
|
dimension: number;
|
|
59
|
+
isHybrid: boolean;
|
|
52
60
|
count: number;
|
|
53
61
|
precision: string;
|
|
54
62
|
M: number;
|
|
63
|
+
sparseDimension?: number;
|
|
55
64
|
}
|
|
56
65
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|