@mastra/couchbase 1.0.0-beta.1 → 1.0.0-beta.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.
- package/CHANGELOG.md +18 -0
- package/README.md +5 -4
- package/dist/index.cjs +35 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +35 -13
- package/dist/index.js.map +1 -1
- package/dist/vector/index.d.ts +2 -1
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @mastra/couchbase
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Standardize error IDs across all storage and vector stores using centralized helper functions (`createStorageErrorId` and `createVectorErrorId`). This ensures consistent error ID patterns (`MASTRA_STORAGE_{STORE}_{OPERATION}_{STATUS}` and `MASTRA_VECTOR_{STORE}_{OPERATION}_{STATUS}`) across the codebase for better error tracking and debugging. ([#10913](https://github.com/mastra-ai/mastra/pull/10913))
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`3076c67`](https://github.com/mastra-ai/mastra/commit/3076c6778b18988ae7d5c4c5c466366974b2d63f), [`85d7ee1`](https://github.com/mastra-ai/mastra/commit/85d7ee18ff4e14d625a8a30ec6656bb49804989b), [`c6c1092`](https://github.com/mastra-ai/mastra/commit/c6c1092f8fbf76109303f69e000e96fd1960c4ce), [`81dc110`](https://github.com/mastra-ai/mastra/commit/81dc11008d147cf5bdc8996ead1aa61dbdebb6fc), [`7aedb74`](https://github.com/mastra-ai/mastra/commit/7aedb74883adf66af38e270e4068fd42e7a37036), [`8f02d80`](https://github.com/mastra-ai/mastra/commit/8f02d800777397e4b45d7f1ad041988a8b0c6630), [`d7aad50`](https://github.com/mastra-ai/mastra/commit/d7aad501ce61646b76b4b511e558ac4eea9884d0), [`ce0a73a`](https://github.com/mastra-ai/mastra/commit/ce0a73abeaa75b10ca38f9e40a255a645d50ebfb), [`a02e542`](https://github.com/mastra-ai/mastra/commit/a02e542d23179bad250b044b17ff023caa61739f), [`a372c64`](https://github.com/mastra-ai/mastra/commit/a372c640ad1fd12e8f0613cebdc682fc156b4d95), [`8846867`](https://github.com/mastra-ai/mastra/commit/8846867ffa9a3746767618e314bebac08eb77d87), [`42a42cf`](https://github.com/mastra-ai/mastra/commit/42a42cf3132b9786feecbb8c13c583dce5b0e198), [`ae08bf0`](https://github.com/mastra-ai/mastra/commit/ae08bf0ebc6a4e4da992b711c4a389c32ba84cf4), [`21735a7`](https://github.com/mastra-ai/mastra/commit/21735a7ef306963554a69a89b44f06c3bcd85141), [`1d877b8`](https://github.com/mastra-ai/mastra/commit/1d877b8d7b536a251c1a7a18db7ddcf4f68d6f8b)]:
|
|
10
|
+
- @mastra/core@1.0.0-beta.7
|
|
11
|
+
|
|
12
|
+
## 1.0.0-beta.2
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Add new deleteVectors, updateVector by filter ([#10408](https://github.com/mastra-ai/mastra/pull/10408))
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [[`21a15de`](https://github.com/mastra-ai/mastra/commit/21a15de369fe82aac26bb642ed7be73505475e8b), [`feb7ee4`](https://github.com/mastra-ai/mastra/commit/feb7ee4d09a75edb46c6669a3beaceec78811747), [`b0e2ea5`](https://github.com/mastra-ai/mastra/commit/b0e2ea5b52c40fae438b9e2f7baee6f0f89c5442), [`c456e01`](https://github.com/mastra-ai/mastra/commit/c456e0149e3c176afcefdbd9bb1d2c5917723725), [`ab035c2`](https://github.com/mastra-ai/mastra/commit/ab035c2ef6d8cc7bb25f06f1a38508bd9e6f126b), [`1a46a56`](https://github.com/mastra-ai/mastra/commit/1a46a566f45a3fcbadc1cf36bf86d351f264bfa3), [`3cf540b`](https://github.com/mastra-ai/mastra/commit/3cf540b9fbfea8f4fc8d3a2319a4e6c0b0cbfd52), [`1c6ce51`](https://github.com/mastra-ai/mastra/commit/1c6ce51f875915ab57fd36873623013699a2a65d), [`898a972`](https://github.com/mastra-ai/mastra/commit/898a9727d286c2510d6b702dfd367e6aaf5c6b0f), [`a97003a`](https://github.com/mastra-ai/mastra/commit/a97003aa1cf2f4022a41912324a1e77263b326b8), [`ccc141e`](https://github.com/mastra-ai/mastra/commit/ccc141ed27da0abc3a3fc28e9e5128152e8e37f4), [`fe3b897`](https://github.com/mastra-ai/mastra/commit/fe3b897c2ccbcd2b10e81b099438c7337feddf89), [`00123ba`](https://github.com/mastra-ai/mastra/commit/00123ba96dc9e5cd0b110420ebdba56d8f237b25), [`29c4309`](https://github.com/mastra-ai/mastra/commit/29c4309f818b24304c041bcb4a8f19b5f13f6b62), [`16785ce`](https://github.com/mastra-ai/mastra/commit/16785ced928f6f22638f4488cf8a125d99211799), [`de8239b`](https://github.com/mastra-ai/mastra/commit/de8239bdcb1d8c0cfa06da21f1569912a66bbc8a), [`b5e6cd7`](https://github.com/mastra-ai/mastra/commit/b5e6cd77fc8c8e64e0494c1d06cee3d84e795d1e), [`3759cb0`](https://github.com/mastra-ai/mastra/commit/3759cb064935b5f74c65ac2f52a1145f7352899d), [`651e772`](https://github.com/mastra-ai/mastra/commit/651e772eb1475fb13e126d3fcc01751297a88214), [`b61b93f`](https://github.com/mastra-ai/mastra/commit/b61b93f9e058b11dd2eec169853175d31dbdd567), [`bae33d9`](https://github.com/mastra-ai/mastra/commit/bae33d91a63fbb64d1e80519e1fc1acaed1e9013), [`c0b731f`](https://github.com/mastra-ai/mastra/commit/c0b731fb27d712dc8582e846df5c0332a6a0c5ba), [`43ca8f2`](https://github.com/mastra-ai/mastra/commit/43ca8f2c7334851cc7b4d3d2f037d8784bfbdd5f), [`2ca67cc`](https://github.com/mastra-ai/mastra/commit/2ca67cc3bb1f6a617353fdcab197d9efebe60d6f), [`9e67002`](https://github.com/mastra-ai/mastra/commit/9e67002b52c9be19936c420a489dbee9c5fd6a78), [`35edc49`](https://github.com/mastra-ai/mastra/commit/35edc49ac0556db609189641d6341e76771b81fc)]:
|
|
19
|
+
- @mastra/core@1.0.0-beta.5
|
|
20
|
+
|
|
3
21
|
## 1.0.0-beta.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -218,11 +218,12 @@ _Note_: Deleting Index does NOT delete the vectors in the associated Couchbase C
|
|
|
218
218
|
- `createIndex({ indexName, dimension, metric? })`: Creates or updates a Couchbase Search Index configured for vector search on the collection.
|
|
219
219
|
- `upsert({ indexName, vectors, metadata?, ids? })`: Upserts documents containing vectors and metadata into the Couchbase collection. Returns the document IDs used.
|
|
220
220
|
- `query({ indexName, queryVector, topK?, filter?, includeVector? })`: Queries the specified Search Index for similar vectors using Couchbase Vector Search. **Note:** `filter` and `includeVector` options are **not currently supported**.
|
|
221
|
+
- `updateVector({ indexName, id, update })`: Updates a specific vector entry by its ID with new vector data and/or metadata. **Note:** Filter-based updates are not yet implemented.
|
|
222
|
+
- `deleteVector({ indexName, id })`: Deletes a single vector by its ID.
|
|
223
|
+
- `deleteVectors({ indexName, ids })`: Deletes multiple vectors by their IDs. **Note:** Filter-based deletion is not yet implemented.
|
|
221
224
|
- `listIndexes()`: Lists the names of all Search Indexes in the cluster. Returns fully qualified names (e.g., `bucket.scope.index`).
|
|
222
|
-
- `describeIndex(indexName)`: Gets the configured dimension, metric (Mastra name), and document count
|
|
223
|
-
- `deleteIndex(indexName)`: Deletes a Search Index (using its short name).
|
|
224
|
-
- `deleteVector(indexName, id)`: Deletes a specific vector entry from an index by its ID.
|
|
225
|
-
- `updateVector(indexName, id, update)`: Updates a specific vector entry by its ID with new vector data and/or metadata.
|
|
225
|
+
- `describeIndex({ indexName })`: Gets the configured dimension, metric (Mastra name), and document count for a specific Search Index (using its short name).
|
|
226
|
+
- `deleteIndex({ indexName })`: Deletes a Search Index (using its short name).
|
|
226
227
|
- `disconnect()`: Closes the Couchbase client connection. Should be called when done using the store.
|
|
227
228
|
|
|
228
229
|
## Configuration Details
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var error = require('@mastra/core/error');
|
|
4
|
+
var storage = require('@mastra/core/storage');
|
|
4
5
|
var vector = require('@mastra/core/vector');
|
|
5
6
|
var couchbase = require('couchbase');
|
|
6
7
|
|
|
@@ -47,13 +48,12 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
47
48
|
} catch (error$1) {
|
|
48
49
|
throw new error.MastraError(
|
|
49
50
|
{
|
|
50
|
-
id: "
|
|
51
|
+
id: storage.createVectorErrorId("COUCHBASE", "INITIALIZE", "FAILED"),
|
|
51
52
|
domain: error.ErrorDomain.STORAGE,
|
|
52
53
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
53
54
|
details: {
|
|
54
55
|
connectionString,
|
|
55
56
|
username,
|
|
56
|
-
password,
|
|
57
57
|
bucketName,
|
|
58
58
|
scopeName,
|
|
59
59
|
collectionName
|
|
@@ -168,7 +168,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
168
168
|
}
|
|
169
169
|
throw new error.MastraError(
|
|
170
170
|
{
|
|
171
|
-
id: "
|
|
171
|
+
id: storage.createVectorErrorId("COUCHBASE", "CREATE_INDEX", "FAILED"),
|
|
172
172
|
domain: error.ErrorDomain.STORAGE,
|
|
173
173
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
174
174
|
details: {
|
|
@@ -215,7 +215,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
215
215
|
} catch (error$1) {
|
|
216
216
|
throw new error.MastraError(
|
|
217
217
|
{
|
|
218
|
-
id: "
|
|
218
|
+
id: storage.createVectorErrorId("COUCHBASE", "UPSERT", "FAILED"),
|
|
219
219
|
domain: error.ErrorDomain.STORAGE,
|
|
220
220
|
category: error.ErrorCategory.THIRD_PARTY
|
|
221
221
|
},
|
|
@@ -262,7 +262,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
262
262
|
} catch (error$1) {
|
|
263
263
|
throw new error.MastraError(
|
|
264
264
|
{
|
|
265
|
-
id: "
|
|
265
|
+
id: storage.createVectorErrorId("COUCHBASE", "QUERY", "FAILED"),
|
|
266
266
|
domain: error.ErrorDomain.STORAGE,
|
|
267
267
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
268
268
|
details: {
|
|
@@ -282,7 +282,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
282
282
|
} catch (error$1) {
|
|
283
283
|
throw new error.MastraError(
|
|
284
284
|
{
|
|
285
|
-
id: "
|
|
285
|
+
id: storage.createVectorErrorId("COUCHBASE", "LIST_INDEXES", "FAILED"),
|
|
286
286
|
domain: error.ErrorDomain.STORAGE,
|
|
287
287
|
category: error.ErrorCategory.THIRD_PARTY
|
|
288
288
|
},
|
|
@@ -316,7 +316,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
316
316
|
} catch (error$1) {
|
|
317
317
|
throw new error.MastraError(
|
|
318
318
|
{
|
|
319
|
-
id: "
|
|
319
|
+
id: storage.createVectorErrorId("COUCHBASE", "DESCRIBE_INDEX", "FAILED"),
|
|
320
320
|
domain: error.ErrorDomain.STORAGE,
|
|
321
321
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
322
322
|
details: {
|
|
@@ -341,7 +341,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
341
341
|
}
|
|
342
342
|
throw new error.MastraError(
|
|
343
343
|
{
|
|
344
|
-
id: "
|
|
344
|
+
id: storage.createVectorErrorId("COUCHBASE", "DELETE_INDEX", "FAILED"),
|
|
345
345
|
domain: error.ErrorDomain.STORAGE,
|
|
346
346
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
347
347
|
details: {
|
|
@@ -363,6 +363,15 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
363
363
|
* @throws Will throw an error if no updates are provided or if the update operation fails.
|
|
364
364
|
*/
|
|
365
365
|
async updateVector({ id, update }) {
|
|
366
|
+
if (!id) {
|
|
367
|
+
throw new error.MastraError({
|
|
368
|
+
id: storage.createVectorErrorId("COUCHBASE", "UPDATE_VECTOR", "INVALID_ARGS"),
|
|
369
|
+
domain: error.ErrorDomain.STORAGE,
|
|
370
|
+
category: error.ErrorCategory.USER,
|
|
371
|
+
text: "id is required for Couchbase updateVector",
|
|
372
|
+
details: {}
|
|
373
|
+
});
|
|
374
|
+
}
|
|
366
375
|
try {
|
|
367
376
|
if (!update.vector && !update.metadata) {
|
|
368
377
|
throw new Error("No updates provided");
|
|
@@ -386,11 +395,11 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
386
395
|
} catch (error$1) {
|
|
387
396
|
throw new error.MastraError(
|
|
388
397
|
{
|
|
389
|
-
id: "
|
|
398
|
+
id: storage.createVectorErrorId("COUCHBASE", "UPDATE_VECTOR", "FAILED"),
|
|
390
399
|
domain: error.ErrorDomain.STORAGE,
|
|
391
400
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
392
401
|
details: {
|
|
393
|
-
id,
|
|
402
|
+
...id && { id },
|
|
394
403
|
hasVectorUpdate: !!update.vector,
|
|
395
404
|
hasMetadataUpdate: !!update.metadata
|
|
396
405
|
}
|
|
@@ -421,17 +430,30 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
421
430
|
} catch (error$1) {
|
|
422
431
|
throw new error.MastraError(
|
|
423
432
|
{
|
|
424
|
-
id: "
|
|
433
|
+
id: storage.createVectorErrorId("COUCHBASE", "DELETE_VECTOR", "FAILED"),
|
|
425
434
|
domain: error.ErrorDomain.STORAGE,
|
|
426
435
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
427
436
|
details: {
|
|
428
|
-
id
|
|
437
|
+
...id && { id }
|
|
429
438
|
}
|
|
430
439
|
},
|
|
431
440
|
error$1
|
|
432
441
|
);
|
|
433
442
|
}
|
|
434
443
|
}
|
|
444
|
+
async deleteVectors({ indexName, filter, ids }) {
|
|
445
|
+
throw new error.MastraError({
|
|
446
|
+
id: storage.createVectorErrorId("COUCHBASE", "DELETE_VECTORS", "NOT_SUPPORTED"),
|
|
447
|
+
text: "deleteVectors is not yet implemented for Couchbase vector store",
|
|
448
|
+
domain: error.ErrorDomain.STORAGE,
|
|
449
|
+
category: error.ErrorCategory.SYSTEM,
|
|
450
|
+
details: {
|
|
451
|
+
indexName,
|
|
452
|
+
...filter && { filter: JSON.stringify(filter) },
|
|
453
|
+
...ids && { idsCount: ids.length }
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
}
|
|
435
457
|
async disconnect() {
|
|
436
458
|
try {
|
|
437
459
|
if (!this.cluster) {
|
|
@@ -441,7 +463,7 @@ var CouchbaseVector = class extends vector.MastraVector {
|
|
|
441
463
|
} catch (error$1) {
|
|
442
464
|
throw new error.MastraError(
|
|
443
465
|
{
|
|
444
|
-
id: "
|
|
466
|
+
id: storage.createVectorErrorId("COUCHBASE", "DISCONNECT", "FAILED"),
|
|
445
467
|
domain: error.ErrorDomain.STORAGE,
|
|
446
468
|
category: error.ErrorCategory.THIRD_PARTY
|
|
447
469
|
},
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector/index.ts"],"names":["MastraVector","connect","error","MastraError","ErrorDomain","ErrorCategory","SearchRequest","VectorSearch","VectorQuery","MutateInSpec"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n QueryResult,\n IndexStats,\n CreateIndexParams,\n UpsertVectorParams,\n QueryVectorParams,\n DescribeIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n UpdateVectorParams,\n} from '@mastra/core/vector';\nimport type { Bucket, Cluster, Collection, Scope } from 'couchbase';\nimport { MutateInSpec, connect, SearchRequest, VectorQuery, VectorSearch } from 'couchbase';\n\ntype MastraMetric = 'cosine' | 'euclidean' | 'dotproduct';\ntype CouchbaseMetric = 'cosine' | 'l2_norm' | 'dot_product';\nexport const DISTANCE_MAPPING: Record<MastraMetric, CouchbaseMetric> = {\n cosine: 'cosine',\n euclidean: 'l2_norm',\n dotproduct: 'dot_product',\n};\n\nexport type CouchbaseVectorParams = {\n connectionString: string;\n username: string;\n password: string;\n bucketName: string;\n scopeName: string;\n collectionName: string;\n};\n\nexport class CouchbaseVector extends MastraVector {\n private clusterPromise: Promise<Cluster>;\n private cluster: Cluster;\n private bucketName: string;\n private collectionName: string;\n private scopeName: string;\n private collection: Collection;\n private bucket: Bucket;\n private scope: Scope;\n private vector_dimension: number;\n\n constructor({\n id,\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n }: CouchbaseVectorParams & { id: string }) {\n super({ id });\n\n try {\n this.clusterPromise = connect(connectionString, {\n username,\n password,\n configProfile: 'wanDevelopment',\n });\n this.cluster = null as unknown as Cluster;\n this.bucketName = bucketName;\n this.collectionName = collectionName;\n this.scopeName = scopeName;\n this.collection = null as unknown as Collection;\n this.bucket = null as unknown as Bucket;\n this.scope = null as unknown as Scope;\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_INITIALIZE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n },\n },\n error,\n );\n }\n }\n\n async getCollection() {\n if (!this.cluster) {\n this.cluster = await this.clusterPromise;\n }\n\n if (!this.collection) {\n this.bucket = this.cluster.bucket(this.bucketName);\n this.scope = this.bucket.scope(this.scopeName);\n this.collection = this.scope.collection(this.collectionName);\n }\n\n return this.collection;\n }\n\n async createIndex({ indexName, dimension, metric = 'dotproduct' as MastraMetric }: CreateIndexParams): Promise<void> {\n try {\n await this.getCollection();\n\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('Dimension must be a positive integer');\n }\n\n await this.scope.searchIndexes().upsertIndex({\n name: indexName,\n sourceName: this.bucketName,\n type: 'fulltext-index',\n params: {\n doc_config: {\n docid_prefix_delim: '',\n docid_regexp: '',\n mode: 'scope.collection.type_field',\n type_field: 'type',\n },\n mapping: {\n default_analyzer: 'standard',\n default_datetime_parser: 'dateTimeOptional',\n default_field: '_all',\n default_mapping: {\n dynamic: true,\n enabled: false,\n },\n default_type: '_default',\n docvalues_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n index_dynamic: true,\n store_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n type_field: '_type',\n types: {\n [`${this.scopeName}.${this.collectionName}`]: {\n dynamic: true,\n enabled: true,\n properties: {\n embedding: {\n enabled: true,\n fields: [\n {\n dims: dimension,\n index: true,\n name: 'embedding',\n similarity: DISTANCE_MAPPING[metric],\n type: 'vector',\n vector_index_optimized_for: 'recall',\n store: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n docvalues: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n include_term_vectors: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n },\n ],\n },\n content: {\n enabled: true,\n fields: [\n {\n index: true,\n name: 'content',\n store: true,\n type: 'text',\n },\n ],\n },\n },\n },\n },\n },\n store: {\n indexType: 'scorch',\n segmentVersion: 16,\n },\n },\n sourceUuid: '',\n sourceParams: {},\n sourceType: 'gocbcore',\n planParams: {\n maxPartitionsPerPIndex: 64,\n indexPartitions: 16,\n numReplicas: 0,\n },\n });\n this.vector_dimension = dimension;\n } catch (error: any) {\n // Check for 'already exists' error (Couchbase may throw a 400 or 409, or have a message)\n const message = error?.message || error?.toString();\n if (message && message.toLowerCase().includes('index exists')) {\n // Fetch index info and check dimension\n await this.validateExistingIndex(indexName, dimension, metric);\n return;\n }\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_CREATE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n dimension,\n metric,\n },\n },\n error,\n );\n }\n }\n\n async upsert({ vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n try {\n await this.getCollection();\n\n if (!vectors || vectors.length === 0) {\n throw new Error('No vectors provided');\n }\n if (this.vector_dimension) {\n for (const vector of vectors) {\n if (!vector || this.vector_dimension !== vector.length) {\n throw new Error('Vector dimension mismatch');\n }\n }\n }\n\n const pointIds = ids || vectors.map(() => crypto.randomUUID());\n const records = vectors.map((vector, i) => {\n const metadataObj = metadata?.[i] || {};\n const record: Record<string, any> = {\n embedding: vector,\n metadata: metadataObj,\n };\n // If metadata has a text field, save it as content\n if (metadataObj.text) {\n record.content = metadataObj.text;\n }\n return record;\n });\n\n const allPromises = [];\n for (let i = 0; i < records.length; i++) {\n allPromises.push(this.collection.upsert(pointIds[i]!, records[i]));\n }\n await Promise.all(allPromises);\n\n return pointIds;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_UPSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async query({ indexName, queryVector, topK = 10, includeVector = false }: QueryVectorParams): Promise<QueryResult[]> {\n try {\n await this.getCollection();\n\n const index_stats = await this.describeIndex({ indexName });\n if (queryVector.length !== index_stats.dimension) {\n throw new Error(\n `Query vector dimension mismatch. Expected ${index_stats.dimension}, got ${queryVector.length}`,\n );\n }\n\n let request = SearchRequest.create(\n VectorSearch.fromVectorQuery(VectorQuery.create('embedding', queryVector).numCandidates(topK)),\n );\n const results = await this.scope.search(indexName, request, {\n fields: ['*'],\n });\n\n if (includeVector) {\n throw new Error('Including vectors in search results is not yet supported by the Couchbase vector store');\n }\n const output = [];\n for (const match of results.rows) {\n const cleanedMetadata: Record<string, any> = {};\n const fields = (match.fields as Record<string, any>) || {}; // Ensure fields is an object\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const newKey = key.startsWith('metadata.') ? key.substring('metadata.'.length) : key;\n cleanedMetadata[newKey] = fields[key];\n }\n }\n output.push({\n id: match.id as string,\n score: (match.score as number) || 0,\n metadata: cleanedMetadata, // Use the cleaned metadata object\n });\n }\n return output;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n topK,\n },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n try {\n await this.getCollection();\n const indexes = await this.scope.searchIndexes().getAllIndexes();\n return indexes?.map(index => index.name) || [];\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_LIST_INDEXES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Retrieves statistics about a vector index.\n *\n * @param {string} indexName - The name of the index to describe\n * @returns A promise that resolves to the index statistics including dimension, count and metric\n */\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n const index = await this.scope.searchIndexes().getIndex(indexName);\n const dimensions =\n index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding?.fields?.[0]\n ?.dims;\n const count = -1; // Not added support yet for adding a count of documents covered by an index\n const metric = index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding\n ?.fields?.[0]?.similarity as CouchbaseMetric;\n return {\n dimension: dimensions,\n count: count,\n metric: Object.keys(DISTANCE_MAPPING).find(\n key => DISTANCE_MAPPING[key as MastraMetric] === metric,\n ) as MastraMetric,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DESCRIBE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n await this.scope.searchIndexes().dropIndex(indexName);\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DELETE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Updates a vector by its ID with the provided vector and/or metadata.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to update.\n * @param update - An object containing the vector and/or metadata to update.\n * @param update.vector - An optional array of numbers representing the new vector.\n * @param update.metadata - An optional record containing the new metadata.\n * @returns A promise that resolves when the update is complete.\n * @throws Will throw an error if no updates are provided or if the update operation fails.\n */\n async updateVector({ id, update }: UpdateVectorParams): Promise<void> {\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (update.vector && this.vector_dimension && update.vector.length !== this.vector_dimension) {\n throw new Error('Vector dimension mismatch');\n }\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n const specs: MutateInSpec[] = [];\n if (update.vector) specs.push(MutateInSpec.replace('embedding', update.vector));\n if (update.metadata) specs.push(MutateInSpec.replace('metadata', update.metadata));\n\n await collection.mutateIn(id, specs);\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n id,\n hasVectorUpdate: !!update.vector,\n hasMetadataUpdate: !!update.metadata,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes a vector by its ID.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to delete.\n * @returns A promise that resolves when the deletion is complete.\n * @throws Will throw an error if the deletion operation fails.\n */\n async deleteVector({ id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n await collection.remove(id);\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n id,\n },\n },\n error,\n );\n }\n }\n\n async disconnect() {\n try {\n if (!this.cluster) {\n return;\n }\n await this.cluster.close();\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DISCONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vector/index.ts"],"names":["MastraVector","connect","error","MastraError","createVectorErrorId","ErrorDomain","ErrorCategory","SearchRequest","VectorSearch","VectorQuery","MutateInSpec"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n QueryResult,\n IndexStats,\n CreateIndexParams,\n UpsertVectorParams,\n QueryVectorParams,\n DescribeIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n UpdateVectorParams,\n DeleteVectorsParams,\n} from '@mastra/core/vector';\nimport type { Bucket, Cluster, Collection, Scope } from 'couchbase';\nimport { MutateInSpec, connect, SearchRequest, VectorQuery, VectorSearch } from 'couchbase';\n\ntype MastraMetric = 'cosine' | 'euclidean' | 'dotproduct';\ntype CouchbaseMetric = 'cosine' | 'l2_norm' | 'dot_product';\nexport const DISTANCE_MAPPING: Record<MastraMetric, CouchbaseMetric> = {\n cosine: 'cosine',\n euclidean: 'l2_norm',\n dotproduct: 'dot_product',\n};\n\nexport type CouchbaseVectorParams = {\n connectionString: string;\n username: string;\n password: string;\n bucketName: string;\n scopeName: string;\n collectionName: string;\n};\n\nexport class CouchbaseVector extends MastraVector {\n private clusterPromise: Promise<Cluster>;\n private cluster: Cluster;\n private bucketName: string;\n private collectionName: string;\n private scopeName: string;\n private collection: Collection;\n private bucket: Bucket;\n private scope: Scope;\n private vector_dimension: number;\n\n constructor({\n id,\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n }: CouchbaseVectorParams & { id: string }) {\n super({ id });\n\n try {\n this.clusterPromise = connect(connectionString, {\n username,\n password,\n configProfile: 'wanDevelopment',\n });\n this.cluster = null as unknown as Cluster;\n this.bucketName = bucketName;\n this.collectionName = collectionName;\n this.scopeName = scopeName;\n this.collection = null as unknown as Collection;\n this.bucket = null as unknown as Bucket;\n this.scope = null as unknown as Scope;\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'INITIALIZE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n connectionString,\n username,\n bucketName,\n scopeName,\n collectionName,\n },\n },\n error,\n );\n }\n }\n\n async getCollection() {\n if (!this.cluster) {\n this.cluster = await this.clusterPromise;\n }\n\n if (!this.collection) {\n this.bucket = this.cluster.bucket(this.bucketName);\n this.scope = this.bucket.scope(this.scopeName);\n this.collection = this.scope.collection(this.collectionName);\n }\n\n return this.collection;\n }\n\n async createIndex({ indexName, dimension, metric = 'dotproduct' as MastraMetric }: CreateIndexParams): Promise<void> {\n try {\n await this.getCollection();\n\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('Dimension must be a positive integer');\n }\n\n await this.scope.searchIndexes().upsertIndex({\n name: indexName,\n sourceName: this.bucketName,\n type: 'fulltext-index',\n params: {\n doc_config: {\n docid_prefix_delim: '',\n docid_regexp: '',\n mode: 'scope.collection.type_field',\n type_field: 'type',\n },\n mapping: {\n default_analyzer: 'standard',\n default_datetime_parser: 'dateTimeOptional',\n default_field: '_all',\n default_mapping: {\n dynamic: true,\n enabled: false,\n },\n default_type: '_default',\n docvalues_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n index_dynamic: true,\n store_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n type_field: '_type',\n types: {\n [`${this.scopeName}.${this.collectionName}`]: {\n dynamic: true,\n enabled: true,\n properties: {\n embedding: {\n enabled: true,\n fields: [\n {\n dims: dimension,\n index: true,\n name: 'embedding',\n similarity: DISTANCE_MAPPING[metric],\n type: 'vector',\n vector_index_optimized_for: 'recall',\n store: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n docvalues: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n include_term_vectors: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n },\n ],\n },\n content: {\n enabled: true,\n fields: [\n {\n index: true,\n name: 'content',\n store: true,\n type: 'text',\n },\n ],\n },\n },\n },\n },\n },\n store: {\n indexType: 'scorch',\n segmentVersion: 16,\n },\n },\n sourceUuid: '',\n sourceParams: {},\n sourceType: 'gocbcore',\n planParams: {\n maxPartitionsPerPIndex: 64,\n indexPartitions: 16,\n numReplicas: 0,\n },\n });\n this.vector_dimension = dimension;\n } catch (error: any) {\n // Check for 'already exists' error (Couchbase may throw a 400 or 409, or have a message)\n const message = error?.message || error?.toString();\n if (message && message.toLowerCase().includes('index exists')) {\n // Fetch index info and check dimension\n await this.validateExistingIndex(indexName, dimension, metric);\n return;\n }\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'CREATE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n dimension,\n metric,\n },\n },\n error,\n );\n }\n }\n\n async upsert({ vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n try {\n await this.getCollection();\n\n if (!vectors || vectors.length === 0) {\n throw new Error('No vectors provided');\n }\n if (this.vector_dimension) {\n for (const vector of vectors) {\n if (!vector || this.vector_dimension !== vector.length) {\n throw new Error('Vector dimension mismatch');\n }\n }\n }\n\n const pointIds = ids || vectors.map(() => crypto.randomUUID());\n const records = vectors.map((vector, i) => {\n const metadataObj = metadata?.[i] || {};\n const record: Record<string, any> = {\n embedding: vector,\n metadata: metadataObj,\n };\n // If metadata has a text field, save it as content\n if (metadataObj.text) {\n record.content = metadataObj.text;\n }\n return record;\n });\n\n const allPromises = [];\n for (let i = 0; i < records.length; i++) {\n allPromises.push(this.collection.upsert(pointIds[i]!, records[i]));\n }\n await Promise.all(allPromises);\n\n return pointIds;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'UPSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async query({ indexName, queryVector, topK = 10, includeVector = false }: QueryVectorParams): Promise<QueryResult[]> {\n try {\n await this.getCollection();\n\n const index_stats = await this.describeIndex({ indexName });\n if (queryVector.length !== index_stats.dimension) {\n throw new Error(\n `Query vector dimension mismatch. Expected ${index_stats.dimension}, got ${queryVector.length}`,\n );\n }\n\n let request = SearchRequest.create(\n VectorSearch.fromVectorQuery(VectorQuery.create('embedding', queryVector).numCandidates(topK)),\n );\n const results = await this.scope.search(indexName, request, {\n fields: ['*'],\n });\n\n if (includeVector) {\n throw new Error('Including vectors in search results is not yet supported by the Couchbase vector store');\n }\n const output = [];\n for (const match of results.rows) {\n const cleanedMetadata: Record<string, any> = {};\n const fields = (match.fields as Record<string, any>) || {}; // Ensure fields is an object\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const newKey = key.startsWith('metadata.') ? key.substring('metadata.'.length) : key;\n cleanedMetadata[newKey] = fields[key];\n }\n }\n output.push({\n id: match.id as string,\n score: (match.score as number) || 0,\n metadata: cleanedMetadata, // Use the cleaned metadata object\n });\n }\n return output;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'QUERY', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n topK,\n },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n try {\n await this.getCollection();\n const indexes = await this.scope.searchIndexes().getAllIndexes();\n return indexes?.map(index => index.name) || [];\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'LIST_INDEXES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Retrieves statistics about a vector index.\n *\n * @param {string} indexName - The name of the index to describe\n * @returns A promise that resolves to the index statistics including dimension, count and metric\n */\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n const index = await this.scope.searchIndexes().getIndex(indexName);\n const dimensions =\n index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding?.fields?.[0]\n ?.dims;\n\n const count = -1; // Not added support yet for adding a count of documents covered by an index\n\n const metric = index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding\n ?.fields?.[0]?.similarity as CouchbaseMetric;\n return {\n dimension: dimensions,\n count: count,\n metric: Object.keys(DISTANCE_MAPPING).find(\n key => DISTANCE_MAPPING[key as MastraMetric] === metric,\n ) as MastraMetric,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DESCRIBE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n await this.scope.searchIndexes().dropIndex(indexName);\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DELETE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Updates a vector by its ID with the provided vector and/or metadata.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to update.\n * @param update - An object containing the vector and/or metadata to update.\n * @param update.vector - An optional array of numbers representing the new vector.\n * @param update.metadata - An optional record containing the new metadata.\n * @returns A promise that resolves when the update is complete.\n * @throws Will throw an error if no updates are provided or if the update operation fails.\n */\n async updateVector({ id, update }: UpdateVectorParams): Promise<void> {\n if (!id) {\n throw new MastraError({\n id: createVectorErrorId('COUCHBASE', 'UPDATE_VECTOR', 'INVALID_ARGS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'id is required for Couchbase updateVector',\n details: {},\n });\n }\n\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (update.vector && this.vector_dimension && update.vector.length !== this.vector_dimension) {\n throw new Error('Vector dimension mismatch');\n }\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n const specs: MutateInSpec[] = [];\n if (update.vector) specs.push(MutateInSpec.replace('embedding', update.vector));\n if (update.metadata) specs.push(MutateInSpec.replace('metadata', update.metadata));\n\n await collection.mutateIn(id, specs);\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'UPDATE_VECTOR', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(id && { id }),\n hasVectorUpdate: !!update.vector,\n hasMetadataUpdate: !!update.metadata,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes a vector by its ID.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to delete.\n * @returns A promise that resolves when the deletion is complete.\n * @throws Will throw an error if the deletion operation fails.\n */\n async deleteVector({ id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n await collection.remove(id);\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DELETE_VECTOR', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(id && { id }),\n },\n },\n error,\n );\n }\n }\n\n async deleteVectors({ indexName, filter, ids }: DeleteVectorsParams): Promise<void> {\n throw new MastraError({\n id: createVectorErrorId('COUCHBASE', 'DELETE_VECTORS', 'NOT_SUPPORTED'),\n text: 'deleteVectors is not yet implemented for Couchbase vector store',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n details: {\n indexName,\n ...(filter && { filter: JSON.stringify(filter) }),\n ...(ids && { idsCount: ids.length }),\n },\n });\n }\n\n async disconnect() {\n try {\n if (!this.cluster) {\n return;\n }\n await this.cluster.close();\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DISCONNECT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
2
|
+
import { createVectorErrorId } from '@mastra/core/storage';
|
|
2
3
|
import { MastraVector } from '@mastra/core/vector';
|
|
3
4
|
import { connect, SearchRequest, VectorSearch, VectorQuery, MutateInSpec } from 'couchbase';
|
|
4
5
|
|
|
@@ -45,13 +46,12 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
45
46
|
} catch (error) {
|
|
46
47
|
throw new MastraError(
|
|
47
48
|
{
|
|
48
|
-
id: "
|
|
49
|
+
id: createVectorErrorId("COUCHBASE", "INITIALIZE", "FAILED"),
|
|
49
50
|
domain: ErrorDomain.STORAGE,
|
|
50
51
|
category: ErrorCategory.THIRD_PARTY,
|
|
51
52
|
details: {
|
|
52
53
|
connectionString,
|
|
53
54
|
username,
|
|
54
|
-
password,
|
|
55
55
|
bucketName,
|
|
56
56
|
scopeName,
|
|
57
57
|
collectionName
|
|
@@ -166,7 +166,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
166
166
|
}
|
|
167
167
|
throw new MastraError(
|
|
168
168
|
{
|
|
169
|
-
id: "
|
|
169
|
+
id: createVectorErrorId("COUCHBASE", "CREATE_INDEX", "FAILED"),
|
|
170
170
|
domain: ErrorDomain.STORAGE,
|
|
171
171
|
category: ErrorCategory.THIRD_PARTY,
|
|
172
172
|
details: {
|
|
@@ -213,7 +213,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
213
213
|
} catch (error) {
|
|
214
214
|
throw new MastraError(
|
|
215
215
|
{
|
|
216
|
-
id: "
|
|
216
|
+
id: createVectorErrorId("COUCHBASE", "UPSERT", "FAILED"),
|
|
217
217
|
domain: ErrorDomain.STORAGE,
|
|
218
218
|
category: ErrorCategory.THIRD_PARTY
|
|
219
219
|
},
|
|
@@ -260,7 +260,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
260
260
|
} catch (error) {
|
|
261
261
|
throw new MastraError(
|
|
262
262
|
{
|
|
263
|
-
id: "
|
|
263
|
+
id: createVectorErrorId("COUCHBASE", "QUERY", "FAILED"),
|
|
264
264
|
domain: ErrorDomain.STORAGE,
|
|
265
265
|
category: ErrorCategory.THIRD_PARTY,
|
|
266
266
|
details: {
|
|
@@ -280,7 +280,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
280
280
|
} catch (error) {
|
|
281
281
|
throw new MastraError(
|
|
282
282
|
{
|
|
283
|
-
id: "
|
|
283
|
+
id: createVectorErrorId("COUCHBASE", "LIST_INDEXES", "FAILED"),
|
|
284
284
|
domain: ErrorDomain.STORAGE,
|
|
285
285
|
category: ErrorCategory.THIRD_PARTY
|
|
286
286
|
},
|
|
@@ -314,7 +314,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
314
314
|
} catch (error) {
|
|
315
315
|
throw new MastraError(
|
|
316
316
|
{
|
|
317
|
-
id: "
|
|
317
|
+
id: createVectorErrorId("COUCHBASE", "DESCRIBE_INDEX", "FAILED"),
|
|
318
318
|
domain: ErrorDomain.STORAGE,
|
|
319
319
|
category: ErrorCategory.THIRD_PARTY,
|
|
320
320
|
details: {
|
|
@@ -339,7 +339,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
339
339
|
}
|
|
340
340
|
throw new MastraError(
|
|
341
341
|
{
|
|
342
|
-
id: "
|
|
342
|
+
id: createVectorErrorId("COUCHBASE", "DELETE_INDEX", "FAILED"),
|
|
343
343
|
domain: ErrorDomain.STORAGE,
|
|
344
344
|
category: ErrorCategory.THIRD_PARTY,
|
|
345
345
|
details: {
|
|
@@ -361,6 +361,15 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
361
361
|
* @throws Will throw an error if no updates are provided or if the update operation fails.
|
|
362
362
|
*/
|
|
363
363
|
async updateVector({ id, update }) {
|
|
364
|
+
if (!id) {
|
|
365
|
+
throw new MastraError({
|
|
366
|
+
id: createVectorErrorId("COUCHBASE", "UPDATE_VECTOR", "INVALID_ARGS"),
|
|
367
|
+
domain: ErrorDomain.STORAGE,
|
|
368
|
+
category: ErrorCategory.USER,
|
|
369
|
+
text: "id is required for Couchbase updateVector",
|
|
370
|
+
details: {}
|
|
371
|
+
});
|
|
372
|
+
}
|
|
364
373
|
try {
|
|
365
374
|
if (!update.vector && !update.metadata) {
|
|
366
375
|
throw new Error("No updates provided");
|
|
@@ -384,11 +393,11 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
384
393
|
} catch (error) {
|
|
385
394
|
throw new MastraError(
|
|
386
395
|
{
|
|
387
|
-
id: "
|
|
396
|
+
id: createVectorErrorId("COUCHBASE", "UPDATE_VECTOR", "FAILED"),
|
|
388
397
|
domain: ErrorDomain.STORAGE,
|
|
389
398
|
category: ErrorCategory.THIRD_PARTY,
|
|
390
399
|
details: {
|
|
391
|
-
id,
|
|
400
|
+
...id && { id },
|
|
392
401
|
hasVectorUpdate: !!update.vector,
|
|
393
402
|
hasMetadataUpdate: !!update.metadata
|
|
394
403
|
}
|
|
@@ -419,17 +428,30 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
419
428
|
} catch (error) {
|
|
420
429
|
throw new MastraError(
|
|
421
430
|
{
|
|
422
|
-
id: "
|
|
431
|
+
id: createVectorErrorId("COUCHBASE", "DELETE_VECTOR", "FAILED"),
|
|
423
432
|
domain: ErrorDomain.STORAGE,
|
|
424
433
|
category: ErrorCategory.THIRD_PARTY,
|
|
425
434
|
details: {
|
|
426
|
-
id
|
|
435
|
+
...id && { id }
|
|
427
436
|
}
|
|
428
437
|
},
|
|
429
438
|
error
|
|
430
439
|
);
|
|
431
440
|
}
|
|
432
441
|
}
|
|
442
|
+
async deleteVectors({ indexName, filter, ids }) {
|
|
443
|
+
throw new MastraError({
|
|
444
|
+
id: createVectorErrorId("COUCHBASE", "DELETE_VECTORS", "NOT_SUPPORTED"),
|
|
445
|
+
text: "deleteVectors is not yet implemented for Couchbase vector store",
|
|
446
|
+
domain: ErrorDomain.STORAGE,
|
|
447
|
+
category: ErrorCategory.SYSTEM,
|
|
448
|
+
details: {
|
|
449
|
+
indexName,
|
|
450
|
+
...filter && { filter: JSON.stringify(filter) },
|
|
451
|
+
...ids && { idsCount: ids.length }
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
}
|
|
433
455
|
async disconnect() {
|
|
434
456
|
try {
|
|
435
457
|
if (!this.cluster) {
|
|
@@ -439,7 +461,7 @@ var CouchbaseVector = class extends MastraVector {
|
|
|
439
461
|
} catch (error) {
|
|
440
462
|
throw new MastraError(
|
|
441
463
|
{
|
|
442
|
-
id: "
|
|
464
|
+
id: createVectorErrorId("COUCHBASE", "DISCONNECT", "FAILED"),
|
|
443
465
|
domain: ErrorDomain.STORAGE,
|
|
444
466
|
category: ErrorCategory.THIRD_PARTY
|
|
445
467
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n QueryResult,\n IndexStats,\n CreateIndexParams,\n UpsertVectorParams,\n QueryVectorParams,\n DescribeIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n UpdateVectorParams,\n} from '@mastra/core/vector';\nimport type { Bucket, Cluster, Collection, Scope } from 'couchbase';\nimport { MutateInSpec, connect, SearchRequest, VectorQuery, VectorSearch } from 'couchbase';\n\ntype MastraMetric = 'cosine' | 'euclidean' | 'dotproduct';\ntype CouchbaseMetric = 'cosine' | 'l2_norm' | 'dot_product';\nexport const DISTANCE_MAPPING: Record<MastraMetric, CouchbaseMetric> = {\n cosine: 'cosine',\n euclidean: 'l2_norm',\n dotproduct: 'dot_product',\n};\n\nexport type CouchbaseVectorParams = {\n connectionString: string;\n username: string;\n password: string;\n bucketName: string;\n scopeName: string;\n collectionName: string;\n};\n\nexport class CouchbaseVector extends MastraVector {\n private clusterPromise: Promise<Cluster>;\n private cluster: Cluster;\n private bucketName: string;\n private collectionName: string;\n private scopeName: string;\n private collection: Collection;\n private bucket: Bucket;\n private scope: Scope;\n private vector_dimension: number;\n\n constructor({\n id,\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n }: CouchbaseVectorParams & { id: string }) {\n super({ id });\n\n try {\n this.clusterPromise = connect(connectionString, {\n username,\n password,\n configProfile: 'wanDevelopment',\n });\n this.cluster = null as unknown as Cluster;\n this.bucketName = bucketName;\n this.collectionName = collectionName;\n this.scopeName = scopeName;\n this.collection = null as unknown as Collection;\n this.bucket = null as unknown as Bucket;\n this.scope = null as unknown as Scope;\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_INITIALIZE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n },\n },\n error,\n );\n }\n }\n\n async getCollection() {\n if (!this.cluster) {\n this.cluster = await this.clusterPromise;\n }\n\n if (!this.collection) {\n this.bucket = this.cluster.bucket(this.bucketName);\n this.scope = this.bucket.scope(this.scopeName);\n this.collection = this.scope.collection(this.collectionName);\n }\n\n return this.collection;\n }\n\n async createIndex({ indexName, dimension, metric = 'dotproduct' as MastraMetric }: CreateIndexParams): Promise<void> {\n try {\n await this.getCollection();\n\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('Dimension must be a positive integer');\n }\n\n await this.scope.searchIndexes().upsertIndex({\n name: indexName,\n sourceName: this.bucketName,\n type: 'fulltext-index',\n params: {\n doc_config: {\n docid_prefix_delim: '',\n docid_regexp: '',\n mode: 'scope.collection.type_field',\n type_field: 'type',\n },\n mapping: {\n default_analyzer: 'standard',\n default_datetime_parser: 'dateTimeOptional',\n default_field: '_all',\n default_mapping: {\n dynamic: true,\n enabled: false,\n },\n default_type: '_default',\n docvalues_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n index_dynamic: true,\n store_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n type_field: '_type',\n types: {\n [`${this.scopeName}.${this.collectionName}`]: {\n dynamic: true,\n enabled: true,\n properties: {\n embedding: {\n enabled: true,\n fields: [\n {\n dims: dimension,\n index: true,\n name: 'embedding',\n similarity: DISTANCE_MAPPING[metric],\n type: 'vector',\n vector_index_optimized_for: 'recall',\n store: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n docvalues: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n include_term_vectors: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n },\n ],\n },\n content: {\n enabled: true,\n fields: [\n {\n index: true,\n name: 'content',\n store: true,\n type: 'text',\n },\n ],\n },\n },\n },\n },\n },\n store: {\n indexType: 'scorch',\n segmentVersion: 16,\n },\n },\n sourceUuid: '',\n sourceParams: {},\n sourceType: 'gocbcore',\n planParams: {\n maxPartitionsPerPIndex: 64,\n indexPartitions: 16,\n numReplicas: 0,\n },\n });\n this.vector_dimension = dimension;\n } catch (error: any) {\n // Check for 'already exists' error (Couchbase may throw a 400 or 409, or have a message)\n const message = error?.message || error?.toString();\n if (message && message.toLowerCase().includes('index exists')) {\n // Fetch index info and check dimension\n await this.validateExistingIndex(indexName, dimension, metric);\n return;\n }\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_CREATE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n dimension,\n metric,\n },\n },\n error,\n );\n }\n }\n\n async upsert({ vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n try {\n await this.getCollection();\n\n if (!vectors || vectors.length === 0) {\n throw new Error('No vectors provided');\n }\n if (this.vector_dimension) {\n for (const vector of vectors) {\n if (!vector || this.vector_dimension !== vector.length) {\n throw new Error('Vector dimension mismatch');\n }\n }\n }\n\n const pointIds = ids || vectors.map(() => crypto.randomUUID());\n const records = vectors.map((vector, i) => {\n const metadataObj = metadata?.[i] || {};\n const record: Record<string, any> = {\n embedding: vector,\n metadata: metadataObj,\n };\n // If metadata has a text field, save it as content\n if (metadataObj.text) {\n record.content = metadataObj.text;\n }\n return record;\n });\n\n const allPromises = [];\n for (let i = 0; i < records.length; i++) {\n allPromises.push(this.collection.upsert(pointIds[i]!, records[i]));\n }\n await Promise.all(allPromises);\n\n return pointIds;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_UPSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async query({ indexName, queryVector, topK = 10, includeVector = false }: QueryVectorParams): Promise<QueryResult[]> {\n try {\n await this.getCollection();\n\n const index_stats = await this.describeIndex({ indexName });\n if (queryVector.length !== index_stats.dimension) {\n throw new Error(\n `Query vector dimension mismatch. Expected ${index_stats.dimension}, got ${queryVector.length}`,\n );\n }\n\n let request = SearchRequest.create(\n VectorSearch.fromVectorQuery(VectorQuery.create('embedding', queryVector).numCandidates(topK)),\n );\n const results = await this.scope.search(indexName, request, {\n fields: ['*'],\n });\n\n if (includeVector) {\n throw new Error('Including vectors in search results is not yet supported by the Couchbase vector store');\n }\n const output = [];\n for (const match of results.rows) {\n const cleanedMetadata: Record<string, any> = {};\n const fields = (match.fields as Record<string, any>) || {}; // Ensure fields is an object\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const newKey = key.startsWith('metadata.') ? key.substring('metadata.'.length) : key;\n cleanedMetadata[newKey] = fields[key];\n }\n }\n output.push({\n id: match.id as string,\n score: (match.score as number) || 0,\n metadata: cleanedMetadata, // Use the cleaned metadata object\n });\n }\n return output;\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_QUERY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n topK,\n },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n try {\n await this.getCollection();\n const indexes = await this.scope.searchIndexes().getAllIndexes();\n return indexes?.map(index => index.name) || [];\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_LIST_INDEXES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Retrieves statistics about a vector index.\n *\n * @param {string} indexName - The name of the index to describe\n * @returns A promise that resolves to the index statistics including dimension, count and metric\n */\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n const index = await this.scope.searchIndexes().getIndex(indexName);\n const dimensions =\n index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding?.fields?.[0]\n ?.dims;\n const count = -1; // Not added support yet for adding a count of documents covered by an index\n const metric = index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding\n ?.fields?.[0]?.similarity as CouchbaseMetric;\n return {\n dimension: dimensions,\n count: count,\n metric: Object.keys(DISTANCE_MAPPING).find(\n key => DISTANCE_MAPPING[key as MastraMetric] === metric,\n ) as MastraMetric,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DESCRIBE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n await this.scope.searchIndexes().dropIndex(indexName);\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DELETE_INDEX_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Updates a vector by its ID with the provided vector and/or metadata.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to update.\n * @param update - An object containing the vector and/or metadata to update.\n * @param update.vector - An optional array of numbers representing the new vector.\n * @param update.metadata - An optional record containing the new metadata.\n * @returns A promise that resolves when the update is complete.\n * @throws Will throw an error if no updates are provided or if the update operation fails.\n */\n async updateVector({ id, update }: UpdateVectorParams): Promise<void> {\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (update.vector && this.vector_dimension && update.vector.length !== this.vector_dimension) {\n throw new Error('Vector dimension mismatch');\n }\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n const specs: MutateInSpec[] = [];\n if (update.vector) specs.push(MutateInSpec.replace('embedding', update.vector));\n if (update.metadata) specs.push(MutateInSpec.replace('metadata', update.metadata));\n\n await collection.mutateIn(id, specs);\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n id,\n hasVectorUpdate: !!update.vector,\n hasMetadataUpdate: !!update.metadata,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes a vector by its ID.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to delete.\n * @returns A promise that resolves when the deletion is complete.\n * @throws Will throw an error if the deletion operation fails.\n */\n async deleteVector({ id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n await collection.remove(id);\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n id,\n },\n },\n error,\n );\n }\n }\n\n async disconnect() {\n try {\n if (!this.cluster) {\n return;\n }\n await this.cluster.close();\n } catch (error) {\n throw new MastraError(\n {\n id: 'COUCHBASE_VECTOR_DISCONNECT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vector/index.ts"],"names":[],"mappings":";;;;;;AAoBO,IAAM,gBAAA,GAA0D;AAAA,EACrE,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY;AACd;AAWO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EACxC,cAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA;AAAA,EAER,WAAA,CAAY;AAAA,IACV,EAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,EAA2C;AACzC,IAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAEZ,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,cAAA,GAAiB,QAAQ,gBAAA,EAAkB;AAAA,QAC9C,QAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA,EAAe;AAAA,OAChB,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,MAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,YAAA,EAAc,QAAQ,CAAA;AAAA,UAC3D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,gBAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,GAAgB;AACpB,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,UAAU,CAAA;AACjD,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,SAAS,CAAA;AAC7C,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAK,cAAc,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,WAAW,SAAA,EAAW,MAAA,GAAS,cAA6B,EAAqC;AACnH,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AAEzB,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,aAAa,CAAA,EAAG;AAClD,QAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,MACxD;AAEA,MAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,EAAc,CAAE,WAAA,CAAY;AAAA,QAC3C,IAAA,EAAM,SAAA;AAAA,QACN,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,IAAA,EAAM,gBAAA;AAAA,QACN,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY;AAAA,YACV,kBAAA,EAAoB,EAAA;AAAA,YACpB,YAAA,EAAc,EAAA;AAAA,YACd,IAAA,EAAM,6BAAA;AAAA,YACN,UAAA,EAAY;AAAA,WACd;AAAA,UACA,OAAA,EAAS;AAAA,YACP,gBAAA,EAAkB,UAAA;AAAA,YAClB,uBAAA,EAAyB,kBAAA;AAAA,YACzB,aAAA,EAAe,MAAA;AAAA,YACf,eAAA,EAAiB;AAAA,cACf,OAAA,EAAS,IAAA;AAAA,cACT,OAAA,EAAS;AAAA,aACX;AAAA,YACA,YAAA,EAAc,UAAA;AAAA,YACd,iBAAA,EAAmB,IAAA;AAAA;AAAA,YACnB,aAAA,EAAe,IAAA;AAAA,YACf,aAAA,EAAe,IAAA;AAAA;AAAA,YACf,UAAA,EAAY,OAAA;AAAA,YACZ,KAAA,EAAO;AAAA,cACL,CAAC,GAAG,IAAA,CAAK,SAAS,IAAI,IAAA,CAAK,cAAc,EAAE,GAAG;AAAA,gBAC5C,OAAA,EAAS,IAAA;AAAA,gBACT,OAAA,EAAS,IAAA;AAAA,gBACT,UAAA,EAAY;AAAA,kBACV,SAAA,EAAW;AAAA,oBACT,OAAA,EAAS,IAAA;AAAA,oBACT,MAAA,EAAQ;AAAA,sBACN;AAAA,wBACE,IAAA,EAAM,SAAA;AAAA,wBACN,KAAA,EAAO,IAAA;AAAA,wBACP,IAAA,EAAM,WAAA;AAAA,wBACN,UAAA,EAAY,iBAAiB,MAAM,CAAA;AAAA,wBACnC,IAAA,EAAM,QAAA;AAAA,wBACN,0BAAA,EAA4B,QAAA;AAAA,wBAC5B,KAAA,EAAO,IAAA;AAAA;AAAA,wBACP,SAAA,EAAW,IAAA;AAAA;AAAA,wBACX,oBAAA,EAAsB;AAAA;AAAA;AACxB;AACF,mBACF;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,OAAA,EAAS,IAAA;AAAA,oBACT,MAAA,EAAQ;AAAA,sBACN;AAAA,wBACE,KAAA,EAAO,IAAA;AAAA,wBACP,IAAA,EAAM,SAAA;AAAA,wBACN,KAAA,EAAO,IAAA;AAAA,wBACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AACF;AACF;AACF,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,SAAA,EAAW,QAAA;AAAA,YACX,cAAA,EAAgB;AAAA;AAClB,SACF;AAAA,QACA,UAAA,EAAY,EAAA;AAAA,QACZ,cAAc,EAAC;AAAA,QACf,UAAA,EAAY,UAAA;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,sBAAA,EAAwB,EAAA;AAAA,UACxB,eAAA,EAAiB,EAAA;AAAA,UACjB,WAAA,EAAa;AAAA;AACf,OACD,CAAA;AACD,MAAA,IAAA,CAAK,gBAAA,GAAmB,SAAA;AAAA,IAC1B,SAAS,KAAA,EAAY;AAEnB,MAAA,MAAM,OAAA,GAAU,KAAA,EAAO,OAAA,IAAW,KAAA,EAAO,QAAA,EAAS;AAClD,MAAA,IAAI,WAAW,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,cAAc,CAAA,EAAG;AAE7D,QAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC7D,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,UAC7D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,SAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,EAAE,OAAA,EAAS,QAAA,EAAU,KAAI,EAA0C;AAC9E,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AAEzB,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACvC;AACA,MAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,UAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,gBAAA,KAAqB,OAAO,MAAA,EAAQ;AACtD,YAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,GAAA,IAAO,OAAA,CAAQ,IAAI,MAAM,MAAA,CAAO,YAAY,CAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,KAAM;AACzC,QAAA,MAAM,WAAA,GAAc,QAAA,GAAW,CAAC,CAAA,IAAK,EAAC;AACtC,QAAA,MAAM,MAAA,GAA8B;AAAA,UAClC,SAAA,EAAW,MAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACZ;AAEA,QAAA,IAAI,YAAY,IAAA,EAAM;AACpB,UAAA,MAAA,CAAO,UAAU,WAAA,CAAY,IAAA;AAAA,QAC/B;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,MAAM,cAAc,EAAC;AACrB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,QAAA,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA;AAAA,MACnE;AACA,MAAA,MAAM,OAAA,CAAQ,IAAI,WAAW,CAAA;AAE7B,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,QAAA,EAAU,QAAQ,CAAA;AAAA,UACvD,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,EAAE,SAAA,EAAW,aAAa,IAAA,GAAO,EAAA,EAAI,aAAA,GAAgB,KAAA,EAAM,EAA8C;AACnH,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AAEzB,MAAA,MAAM,cAAc,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,WAAW,CAAA;AAC1D,MAAA,IAAI,WAAA,CAAY,MAAA,KAAW,WAAA,CAAY,SAAA,EAAW;AAChD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,0CAAA,EAA6C,WAAA,CAAY,SAAS,CAAA,MAAA,EAAS,YAAY,MAAM,CAAA;AAAA,SAC/F;AAAA,MACF;AAEA,MAAA,IAAI,UAAU,aAAA,CAAc,MAAA;AAAA,QAC1B,YAAA,CAAa,gBAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,WAAW,CAAA,CAAE,aAAA,CAAc,IAAI,CAAC;AAAA,OAC/F;AACA,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,WAAW,OAAA,EAAS;AAAA,QAC1D,MAAA,EAAQ,CAAC,GAAG;AAAA,OACb,CAAA;AAED,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,IAAI,MAAM,wFAAwF,CAAA;AAAA,MAC1G;AACA,MAAA,MAAM,SAAS,EAAC;AAChB,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,IAAA,EAAM;AAChC,QAAA,MAAM,kBAAuC,EAAC;AAC9C,QAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,IAAkC,EAAC;AACzD,QAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,UAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrD,YAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,WAAW,IAAI,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,MAAM,CAAA,GAAI,GAAA;AACjF,YAAA,eAAA,CAAgB,MAAM,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,UACtC;AAAA,QACF;AACA,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAI,KAAA,CAAM,EAAA;AAAA,UACV,KAAA,EAAQ,MAAM,KAAA,IAAoB,CAAA;AAAA,UAClC,QAAA,EAAU;AAAA;AAAA,SACX,CAAA;AAAA,MACH;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,OAAA,EAAS,QAAQ,CAAA;AAAA,UACtD,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,GAAiC;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,GAAgB,aAAA,EAAc;AAC/D,MAAA,OAAO,SAAS,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAI,KAAK,EAAC;AAAA,IAC/C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,UAC7D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAU,EAA6C;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,IAAI,EAAE,MAAM,IAAA,CAAK,aAAY,EAAG,QAAA,CAAS,SAAS,CAAA,EAAG;AACnD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,SAAS,CAAA,eAAA,CAAiB,CAAA;AAAA,MACrD;AACA,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAM,aAAA,EAAc,CAAE,SAAS,SAAS,CAAA;AACjE,MAAA,MAAM,aACJ,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,KAAA,GAAQ,GAAG,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,cAAc,CAAA,CAAE,CAAA,EAAG,YAAY,SAAA,EAAW,MAAA,GAAS,CAAC,CAAA,EACxG,IAAA;AAEN,MAAA,MAAM,KAAA,GAAQ,EAAA;AAEd,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,KAAA,GAAQ,GAAG,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,cAAc,CAAA,CAAE,CAAA,EAAG,YAAY,SAAA,EAClG,MAAA,GAAS,CAAC,CAAA,EAAG,UAAA;AACjB,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,UAAA;AAAA,QACX,KAAA;AAAA,QACA,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA,CAAE,IAAA;AAAA,UACpC,CAAA,GAAA,KAAO,gBAAA,CAAiB,GAAmB,CAAA,KAAM;AAAA;AACnD,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,gBAAA,EAAkB,QAAQ,CAAA;AAAA,UAC/D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAU,EAAqC;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,IAAI,EAAE,MAAM,IAAA,CAAK,aAAY,EAAG,QAAA,CAAS,SAAS,CAAA,EAAG;AACnD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,SAAS,CAAA,eAAA,CAAiB,CAAA;AAAA,MACrD;AACA,MAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,EAAc,CAAE,UAAU,SAAS,CAAA;AACpD,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,UAC7D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YAAA,CAAa,EAAE,EAAA,EAAI,QAAO,EAAsC;AACpE,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,eAAA,EAAiB,cAAc,CAAA;AAAA,QACpE,QAAQ,WAAA,CAAY,OAAA;AAAA,QACpB,UAAU,aAAA,CAAc,IAAA;AAAA,QACxB,IAAA,EAAM,2CAAA;AAAA,QACN,SAAS;AAAC,OACX,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,CAAC,OAAO,QAAA,EAAU;AACtC,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACvC;AACA,MAAA,IAAI,MAAA,CAAO,UAAU,IAAA,CAAK,gBAAA,IAAoB,OAAO,MAAA,CAAO,MAAA,KAAW,KAAK,gBAAA,EAAkB;AAC5F,QAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,MAC7C;AACA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,aAAA,EAAc;AAG5C,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,CAAW,IAAI,EAAE,CAAA;AAAA,MACzB,SAAS,GAAA,EAAU;AACjB,QAAA,IAAI,IAAI,IAAA,KAAS,EAAA,IAAM,IAAI,OAAA,EAAS,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAClE,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,eAAA,CAAiB,CAAA;AAAA,QACvD;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AAEA,MAAA,MAAM,QAAwB,EAAC;AAC/B,MAAA,IAAI,MAAA,CAAO,QAAQ,KAAA,CAAM,IAAA,CAAK,aAAa,OAAA,CAAQ,WAAA,EAAa,MAAA,CAAO,MAAM,CAAC,CAAA;AAC9E,MAAA,IAAI,MAAA,CAAO,UAAU,KAAA,CAAM,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA;AAEjF,MAAA,MAAM,UAAA,CAAW,QAAA,CAAS,EAAA,EAAI,KAAK,CAAA;AAAA,IACrC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,eAAA,EAAiB,QAAQ,CAAA;AAAA,UAC9D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,GAAI,EAAA,IAAM,EAAE,EAAA,EAAG;AAAA,YACf,eAAA,EAAiB,CAAC,CAAC,MAAA,CAAO,MAAA;AAAA,YAC1B,iBAAA,EAAmB,CAAC,CAAC,MAAA,CAAO;AAAA;AAC9B,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAA,CAAa,EAAE,EAAA,EAAG,EAAsC;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,aAAA,EAAc;AAG5C,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,CAAW,IAAI,EAAE,CAAA;AAAA,MACzB,SAAS,GAAA,EAAU;AACjB,QAAA,IAAI,IAAI,IAAA,KAAS,EAAA,IAAM,IAAI,OAAA,EAAS,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAClE,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,eAAA,CAAiB,CAAA;AAAA,QACvD;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AAEA,MAAA,MAAM,UAAA,CAAW,OAAO,EAAE,CAAA;AAAA,IAC5B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,eAAA,EAAiB,QAAQ,CAAA;AAAA,UAC9D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,GAAI,EAAA,IAAM,EAAE,EAAA;AAAG;AACjB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAW,MAAA,EAAQ,KAAI,EAAuC;AAClF,IAAA,MAAM,IAAI,WAAA,CAAY;AAAA,MACpB,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,gBAAA,EAAkB,eAAe,CAAA;AAAA,MACtE,IAAA,EAAM,iEAAA;AAAA,MACN,QAAQ,WAAA,CAAY,OAAA;AAAA,MACpB,UAAU,aAAA,CAAc,MAAA;AAAA,MACxB,OAAA,EAAS;AAAA,QACP,SAAA;AAAA,QACA,GAAI,MAAA,IAAU,EAAE,QAAQ,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAE;AAAA,QAC/C,GAAI,GAAA,IAAO,EAAE,QAAA,EAAU,IAAI,MAAA;AAAO;AACpC,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,UAAA,GAAa;AACjB,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mBAAA,CAAoB,WAAA,EAAa,YAAA,EAAc,QAAQ,CAAA;AAAA,UAC3D,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF","file":"index.js","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n QueryResult,\n IndexStats,\n CreateIndexParams,\n UpsertVectorParams,\n QueryVectorParams,\n DescribeIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n UpdateVectorParams,\n DeleteVectorsParams,\n} from '@mastra/core/vector';\nimport type { Bucket, Cluster, Collection, Scope } from 'couchbase';\nimport { MutateInSpec, connect, SearchRequest, VectorQuery, VectorSearch } from 'couchbase';\n\ntype MastraMetric = 'cosine' | 'euclidean' | 'dotproduct';\ntype CouchbaseMetric = 'cosine' | 'l2_norm' | 'dot_product';\nexport const DISTANCE_MAPPING: Record<MastraMetric, CouchbaseMetric> = {\n cosine: 'cosine',\n euclidean: 'l2_norm',\n dotproduct: 'dot_product',\n};\n\nexport type CouchbaseVectorParams = {\n connectionString: string;\n username: string;\n password: string;\n bucketName: string;\n scopeName: string;\n collectionName: string;\n};\n\nexport class CouchbaseVector extends MastraVector {\n private clusterPromise: Promise<Cluster>;\n private cluster: Cluster;\n private bucketName: string;\n private collectionName: string;\n private scopeName: string;\n private collection: Collection;\n private bucket: Bucket;\n private scope: Scope;\n private vector_dimension: number;\n\n constructor({\n id,\n connectionString,\n username,\n password,\n bucketName,\n scopeName,\n collectionName,\n }: CouchbaseVectorParams & { id: string }) {\n super({ id });\n\n try {\n this.clusterPromise = connect(connectionString, {\n username,\n password,\n configProfile: 'wanDevelopment',\n });\n this.cluster = null as unknown as Cluster;\n this.bucketName = bucketName;\n this.collectionName = collectionName;\n this.scopeName = scopeName;\n this.collection = null as unknown as Collection;\n this.bucket = null as unknown as Bucket;\n this.scope = null as unknown as Scope;\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'INITIALIZE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n connectionString,\n username,\n bucketName,\n scopeName,\n collectionName,\n },\n },\n error,\n );\n }\n }\n\n async getCollection() {\n if (!this.cluster) {\n this.cluster = await this.clusterPromise;\n }\n\n if (!this.collection) {\n this.bucket = this.cluster.bucket(this.bucketName);\n this.scope = this.bucket.scope(this.scopeName);\n this.collection = this.scope.collection(this.collectionName);\n }\n\n return this.collection;\n }\n\n async createIndex({ indexName, dimension, metric = 'dotproduct' as MastraMetric }: CreateIndexParams): Promise<void> {\n try {\n await this.getCollection();\n\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('Dimension must be a positive integer');\n }\n\n await this.scope.searchIndexes().upsertIndex({\n name: indexName,\n sourceName: this.bucketName,\n type: 'fulltext-index',\n params: {\n doc_config: {\n docid_prefix_delim: '',\n docid_regexp: '',\n mode: 'scope.collection.type_field',\n type_field: 'type',\n },\n mapping: {\n default_analyzer: 'standard',\n default_datetime_parser: 'dateTimeOptional',\n default_field: '_all',\n default_mapping: {\n dynamic: true,\n enabled: false,\n },\n default_type: '_default',\n docvalues_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n index_dynamic: true,\n store_dynamic: true, // [Doc](https://docs.couchbase.com/server/current/search/search-index-params.html#params) mentions this attribute is required for vector search to return the indexed field\n type_field: '_type',\n types: {\n [`${this.scopeName}.${this.collectionName}`]: {\n dynamic: true,\n enabled: true,\n properties: {\n embedding: {\n enabled: true,\n fields: [\n {\n dims: dimension,\n index: true,\n name: 'embedding',\n similarity: DISTANCE_MAPPING[metric],\n type: 'vector',\n vector_index_optimized_for: 'recall',\n store: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n docvalues: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n include_term_vectors: true, // CHANGED due to https://docs.couchbase.com/server/current/search/search-index-params.html#fields\n },\n ],\n },\n content: {\n enabled: true,\n fields: [\n {\n index: true,\n name: 'content',\n store: true,\n type: 'text',\n },\n ],\n },\n },\n },\n },\n },\n store: {\n indexType: 'scorch',\n segmentVersion: 16,\n },\n },\n sourceUuid: '',\n sourceParams: {},\n sourceType: 'gocbcore',\n planParams: {\n maxPartitionsPerPIndex: 64,\n indexPartitions: 16,\n numReplicas: 0,\n },\n });\n this.vector_dimension = dimension;\n } catch (error: any) {\n // Check for 'already exists' error (Couchbase may throw a 400 or 409, or have a message)\n const message = error?.message || error?.toString();\n if (message && message.toLowerCase().includes('index exists')) {\n // Fetch index info and check dimension\n await this.validateExistingIndex(indexName, dimension, metric);\n return;\n }\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'CREATE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n dimension,\n metric,\n },\n },\n error,\n );\n }\n }\n\n async upsert({ vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n try {\n await this.getCollection();\n\n if (!vectors || vectors.length === 0) {\n throw new Error('No vectors provided');\n }\n if (this.vector_dimension) {\n for (const vector of vectors) {\n if (!vector || this.vector_dimension !== vector.length) {\n throw new Error('Vector dimension mismatch');\n }\n }\n }\n\n const pointIds = ids || vectors.map(() => crypto.randomUUID());\n const records = vectors.map((vector, i) => {\n const metadataObj = metadata?.[i] || {};\n const record: Record<string, any> = {\n embedding: vector,\n metadata: metadataObj,\n };\n // If metadata has a text field, save it as content\n if (metadataObj.text) {\n record.content = metadataObj.text;\n }\n return record;\n });\n\n const allPromises = [];\n for (let i = 0; i < records.length; i++) {\n allPromises.push(this.collection.upsert(pointIds[i]!, records[i]));\n }\n await Promise.all(allPromises);\n\n return pointIds;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'UPSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async query({ indexName, queryVector, topK = 10, includeVector = false }: QueryVectorParams): Promise<QueryResult[]> {\n try {\n await this.getCollection();\n\n const index_stats = await this.describeIndex({ indexName });\n if (queryVector.length !== index_stats.dimension) {\n throw new Error(\n `Query vector dimension mismatch. Expected ${index_stats.dimension}, got ${queryVector.length}`,\n );\n }\n\n let request = SearchRequest.create(\n VectorSearch.fromVectorQuery(VectorQuery.create('embedding', queryVector).numCandidates(topK)),\n );\n const results = await this.scope.search(indexName, request, {\n fields: ['*'],\n });\n\n if (includeVector) {\n throw new Error('Including vectors in search results is not yet supported by the Couchbase vector store');\n }\n const output = [];\n for (const match of results.rows) {\n const cleanedMetadata: Record<string, any> = {};\n const fields = (match.fields as Record<string, any>) || {}; // Ensure fields is an object\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const newKey = key.startsWith('metadata.') ? key.substring('metadata.'.length) : key;\n cleanedMetadata[newKey] = fields[key];\n }\n }\n output.push({\n id: match.id as string,\n score: (match.score as number) || 0,\n metadata: cleanedMetadata, // Use the cleaned metadata object\n });\n }\n return output;\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'QUERY', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n topK,\n },\n },\n error,\n );\n }\n }\n\n async listIndexes(): Promise<string[]> {\n try {\n await this.getCollection();\n const indexes = await this.scope.searchIndexes().getAllIndexes();\n return indexes?.map(index => index.name) || [];\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'LIST_INDEXES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n /**\n * Retrieves statistics about a vector index.\n *\n * @param {string} indexName - The name of the index to describe\n * @returns A promise that resolves to the index statistics including dimension, count and metric\n */\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n const index = await this.scope.searchIndexes().getIndex(indexName);\n const dimensions =\n index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding?.fields?.[0]\n ?.dims;\n\n const count = -1; // Not added support yet for adding a count of documents covered by an index\n\n const metric = index.params.mapping?.types?.[`${this.scopeName}.${this.collectionName}`]?.properties?.embedding\n ?.fields?.[0]?.similarity as CouchbaseMetric;\n return {\n dimension: dimensions,\n count: count,\n metric: Object.keys(DISTANCE_MAPPING).find(\n key => DISTANCE_MAPPING[key as MastraMetric] === metric,\n ) as MastraMetric,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DESCRIBE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n try {\n await this.getCollection();\n if (!(await this.listIndexes()).includes(indexName)) {\n throw new Error(`Index ${indexName} does not exist`);\n }\n await this.scope.searchIndexes().dropIndex(indexName);\n this.vector_dimension = null as unknown as number;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DELETE_INDEX', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Updates a vector by its ID with the provided vector and/or metadata.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to update.\n * @param update - An object containing the vector and/or metadata to update.\n * @param update.vector - An optional array of numbers representing the new vector.\n * @param update.metadata - An optional record containing the new metadata.\n * @returns A promise that resolves when the update is complete.\n * @throws Will throw an error if no updates are provided or if the update operation fails.\n */\n async updateVector({ id, update }: UpdateVectorParams): Promise<void> {\n if (!id) {\n throw new MastraError({\n id: createVectorErrorId('COUCHBASE', 'UPDATE_VECTOR', 'INVALID_ARGS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'id is required for Couchbase updateVector',\n details: {},\n });\n }\n\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (update.vector && this.vector_dimension && update.vector.length !== this.vector_dimension) {\n throw new Error('Vector dimension mismatch');\n }\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n const specs: MutateInSpec[] = [];\n if (update.vector) specs.push(MutateInSpec.replace('embedding', update.vector));\n if (update.metadata) specs.push(MutateInSpec.replace('metadata', update.metadata));\n\n await collection.mutateIn(id, specs);\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'UPDATE_VECTOR', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(id && { id }),\n hasVectorUpdate: !!update.vector,\n hasMetadataUpdate: !!update.metadata,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes a vector by its ID.\n * @param indexName - The name of the index containing the vector.\n * @param id - The ID of the vector to delete.\n * @returns A promise that resolves when the deletion is complete.\n * @throws Will throw an error if the deletion operation fails.\n */\n async deleteVector({ id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = await this.getCollection();\n\n // Check if document exists\n try {\n await collection.get(id);\n } catch (err: any) {\n if (err.code === 13 || err.message?.includes('document not found')) {\n throw new Error(`Vector with id ${id} does not exist`);\n }\n throw err;\n }\n\n await collection.remove(id);\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DELETE_VECTOR', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n ...(id && { id }),\n },\n },\n error,\n );\n }\n }\n\n async deleteVectors({ indexName, filter, ids }: DeleteVectorsParams): Promise<void> {\n throw new MastraError({\n id: createVectorErrorId('COUCHBASE', 'DELETE_VECTORS', 'NOT_SUPPORTED'),\n text: 'deleteVectors is not yet implemented for Couchbase vector store',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n details: {\n indexName,\n ...(filter && { filter: JSON.stringify(filter) }),\n ...(ids && { idsCount: ids.length }),\n },\n });\n }\n\n async disconnect() {\n try {\n if (!this.cluster) {\n return;\n }\n await this.cluster.close();\n } catch (error) {\n throw new MastraError(\n {\n id: createVectorErrorId('COUCHBASE', 'DISCONNECT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n"]}
|
package/dist/vector/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MastraVector } from '@mastra/core/vector';
|
|
2
|
-
import type { QueryResult, IndexStats, CreateIndexParams, UpsertVectorParams, QueryVectorParams, DescribeIndexParams, DeleteIndexParams, DeleteVectorParams, UpdateVectorParams } from '@mastra/core/vector';
|
|
2
|
+
import type { QueryResult, IndexStats, CreateIndexParams, UpsertVectorParams, QueryVectorParams, DescribeIndexParams, DeleteIndexParams, DeleteVectorParams, UpdateVectorParams, DeleteVectorsParams } from '@mastra/core/vector';
|
|
3
3
|
import type { Collection } from 'couchbase';
|
|
4
4
|
type MastraMetric = 'cosine' | 'euclidean' | 'dotproduct';
|
|
5
5
|
type CouchbaseMetric = 'cosine' | 'l2_norm' | 'dot_product';
|
|
@@ -57,6 +57,7 @@ export declare class CouchbaseVector extends MastraVector {
|
|
|
57
57
|
* @throws Will throw an error if the deletion operation fails.
|
|
58
58
|
*/
|
|
59
59
|
deleteVector({ id }: DeleteVectorParams): Promise<void>;
|
|
60
|
+
deleteVectors({ indexName, filter, ids }: DeleteVectorsParams): Promise<void>;
|
|
60
61
|
disconnect(): Promise<void>;
|
|
61
62
|
}
|
|
62
63
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vector/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vector/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAmB,UAAU,EAAS,MAAM,WAAW,CAAC;AAGpE,KAAK,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAC1D,KAAK,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAC5D,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CAIlE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,gBAAgB,CAAS;gBAErB,EACV,EAAE,EACF,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,SAAS,EACT,cAAc,GACf,EAAE,qBAAqB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAoCnC,aAAa;IAcb,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAqC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2G9G,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgDzE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAS,EAAE,aAAqB,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsD9G,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBtC;;;;;OAKG;IACG,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCtE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE;;;;;;;;;OASG;IACG,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDrE;;;;;;OAMG;IACG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvD,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7E,UAAU;CAiBjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/couchbase",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.3",
|
|
4
4
|
"description": "Couchbase vector store provider for Mastra",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,16 +24,17 @@
|
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@microsoft/api-extractor": "^7.52.8",
|
|
26
26
|
"@types/node": "22.13.17",
|
|
27
|
-
"@vitest/coverage-v8": "4.0.
|
|
28
|
-
"@vitest/ui": "4.0.
|
|
27
|
+
"@vitest/coverage-v8": "4.0.12",
|
|
28
|
+
"@vitest/ui": "4.0.12",
|
|
29
29
|
"axios": "^1.12.2",
|
|
30
30
|
"eslint": "^9.37.0",
|
|
31
31
|
"tsup": "^8.5.0",
|
|
32
32
|
"typescript": "^5.8.3",
|
|
33
|
-
"vitest": "
|
|
33
|
+
"vitest": "4.0.12",
|
|
34
34
|
"@internal/lint": "0.0.53",
|
|
35
|
-
"@internal/
|
|
36
|
-
"@mastra/core": "1.0.0-beta.
|
|
35
|
+
"@internal/storage-test-utils": "0.0.49",
|
|
36
|
+
"@mastra/core": "1.0.0-beta.7",
|
|
37
|
+
"@internal/types-builder": "0.0.28"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
40
|
"@mastra/core": ">=1.0.0-0 <2.0.0-0"
|
|
@@ -61,6 +62,6 @@
|
|
|
61
62
|
"coverage": "vitest run --coverage",
|
|
62
63
|
"pretest": "node scripts/start-docker.js",
|
|
63
64
|
"test": "vitest run",
|
|
64
|
-
"posttest": "
|
|
65
|
+
"posttest": "docker compose down -v"
|
|
65
66
|
}
|
|
66
67
|
}
|