@mastra/astra 1.0.0-beta.0 → 1.0.0-beta.2
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/dist/index.cjs +45 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +45 -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 +7 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @mastra/astra
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.2
|
|
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.1
|
|
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.0
|
|
4
22
|
|
|
5
23
|
### Major Changes
|
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var astraDbTs = require('@datastax/astra-db-ts');
|
|
4
4
|
var error = require('@mastra/core/error');
|
|
5
|
+
var storage = require('@mastra/core/storage');
|
|
5
6
|
var vector = require('@mastra/core/vector');
|
|
6
7
|
var filter = require('@mastra/core/vector/filter');
|
|
7
8
|
|
|
@@ -72,7 +73,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
72
73
|
async createIndex({ indexName, dimension, metric = "cosine" }) {
|
|
73
74
|
if (!Number.isInteger(dimension) || dimension <= 0) {
|
|
74
75
|
throw new error.MastraError({
|
|
75
|
-
id: "
|
|
76
|
+
id: storage.createVectorErrorId("ASTRA", "CREATE_INDEX", "INVALID_DIMENSION"),
|
|
76
77
|
text: "Dimension must be a positive integer",
|
|
77
78
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
78
79
|
category: error.ErrorCategory.USER
|
|
@@ -89,7 +90,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
89
90
|
} catch (error$1) {
|
|
90
91
|
new error.MastraError(
|
|
91
92
|
{
|
|
92
|
-
id: "
|
|
93
|
+
id: storage.createVectorErrorId("ASTRA", "CREATE_INDEX", "DB_ERROR"),
|
|
93
94
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
94
95
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
95
96
|
details: { indexName }
|
|
@@ -120,7 +121,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
120
121
|
} catch (error$1) {
|
|
121
122
|
throw new error.MastraError(
|
|
122
123
|
{
|
|
123
|
-
id: "
|
|
124
|
+
id: storage.createVectorErrorId("ASTRA", "UPSERT", "DB_ERROR"),
|
|
124
125
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
125
126
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
126
127
|
details: { indexName }
|
|
@@ -172,7 +173,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
172
173
|
} catch (error$1) {
|
|
173
174
|
throw new error.MastraError(
|
|
174
175
|
{
|
|
175
|
-
id: "
|
|
176
|
+
id: storage.createVectorErrorId("ASTRA", "QUERY", "DB_ERROR"),
|
|
176
177
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
177
178
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
178
179
|
details: { indexName }
|
|
@@ -192,7 +193,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
192
193
|
} catch (error$1) {
|
|
193
194
|
throw new error.MastraError(
|
|
194
195
|
{
|
|
195
|
-
id: "
|
|
196
|
+
id: storage.createVectorErrorId("ASTRA", "LIST_INDEXES", "DB_ERROR"),
|
|
196
197
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
197
198
|
category: error.ErrorCategory.THIRD_PARTY
|
|
198
199
|
},
|
|
@@ -223,7 +224,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
223
224
|
if (error$1 instanceof error.MastraError) throw error$1;
|
|
224
225
|
throw new error.MastraError(
|
|
225
226
|
{
|
|
226
|
-
id: "
|
|
227
|
+
id: storage.createVectorErrorId("ASTRA", "DESCRIBE_INDEX", "DB_ERROR"),
|
|
227
228
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
228
229
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
229
230
|
details: { indexName }
|
|
@@ -245,7 +246,7 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
245
246
|
} catch (error$1) {
|
|
246
247
|
throw new error.MastraError(
|
|
247
248
|
{
|
|
248
|
-
id: "
|
|
249
|
+
id: storage.createVectorErrorId("ASTRA", "DELETE_INDEX", "DB_ERROR"),
|
|
249
250
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
250
251
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
251
252
|
details: { indexName }
|
|
@@ -265,13 +266,25 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
265
266
|
* @throws Will throw an error if no updates are provided or if the update operation fails.
|
|
266
267
|
*/
|
|
267
268
|
async updateVector({ indexName, id, update }) {
|
|
269
|
+
if (!id) {
|
|
270
|
+
throw new error.MastraError({
|
|
271
|
+
id: storage.createVectorErrorId("ASTRA", "UPDATE_VECTOR", "NO_ID"),
|
|
272
|
+
text: "id is required for Astra updateVector",
|
|
273
|
+
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
274
|
+
category: error.ErrorCategory.USER,
|
|
275
|
+
details: { indexName }
|
|
276
|
+
});
|
|
277
|
+
}
|
|
268
278
|
if (!update.vector && !update.metadata) {
|
|
269
279
|
throw new error.MastraError({
|
|
270
|
-
id: "
|
|
280
|
+
id: storage.createVectorErrorId("ASTRA", "UPDATE_VECTOR", "NO_PAYLOAD"),
|
|
271
281
|
text: "No updates provided for vector",
|
|
272
282
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
273
283
|
category: error.ErrorCategory.USER,
|
|
274
|
-
details: {
|
|
284
|
+
details: {
|
|
285
|
+
indexName,
|
|
286
|
+
id
|
|
287
|
+
}
|
|
275
288
|
});
|
|
276
289
|
}
|
|
277
290
|
try {
|
|
@@ -288,10 +301,13 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
288
301
|
if (error$1 instanceof error.MastraError) throw error$1;
|
|
289
302
|
throw new error.MastraError(
|
|
290
303
|
{
|
|
291
|
-
id: "
|
|
304
|
+
id: storage.createVectorErrorId("ASTRA", "UPDATE_VECTOR", "FAILED_UNHANDLED"),
|
|
292
305
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
293
306
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
294
|
-
details: {
|
|
307
|
+
details: {
|
|
308
|
+
indexName,
|
|
309
|
+
...id && { id }
|
|
310
|
+
}
|
|
295
311
|
},
|
|
296
312
|
error$1
|
|
297
313
|
);
|
|
@@ -312,15 +328,31 @@ var AstraVector = class extends vector.MastraVector {
|
|
|
312
328
|
if (error$1 instanceof error.MastraError) throw error$1;
|
|
313
329
|
throw new error.MastraError(
|
|
314
330
|
{
|
|
315
|
-
id: "
|
|
331
|
+
id: storage.createVectorErrorId("ASTRA", "DELETE_VECTOR", "FAILED"),
|
|
316
332
|
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
317
333
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
318
|
-
details: {
|
|
334
|
+
details: {
|
|
335
|
+
indexName,
|
|
336
|
+
...id && { id }
|
|
337
|
+
}
|
|
319
338
|
},
|
|
320
339
|
error$1
|
|
321
340
|
);
|
|
322
341
|
}
|
|
323
342
|
}
|
|
343
|
+
async deleteVectors({ indexName, filter, ids }) {
|
|
344
|
+
throw new error.MastraError({
|
|
345
|
+
id: storage.createVectorErrorId("ASTRA", "DELETE_VECTORS", "NOT_SUPPORTED"),
|
|
346
|
+
text: "deleteVectors is not yet implemented for Astra vector store",
|
|
347
|
+
domain: error.ErrorDomain.MASTRA_VECTOR,
|
|
348
|
+
category: error.ErrorCategory.SYSTEM,
|
|
349
|
+
details: {
|
|
350
|
+
indexName,
|
|
351
|
+
...filter && { filter: JSON.stringify(filter) },
|
|
352
|
+
...ids && { idsCount: ids.length }
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}
|
|
324
356
|
};
|
|
325
357
|
|
|
326
358
|
// src/vector/prompt.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector/filter.ts","../src/vector/index.ts","../src/vector/prompt.ts"],"names":["BaseFilterTranslator","MastraVector","DataAPIClient","MastraError","ErrorDomain","ErrorCategory","error","UUID"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorSupport,\n QueryOperator,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype AstraOperatorValueMap = Omit<OperatorValueMap, '$elemMatch' | '$regex' | '$options'> & {\n $size: number; // Astra-specific\n};\n\ntype AstraLogicalOperatorValueMap = Omit<LogicalOperatorValueMap, '$nor'>;\n\ntype AstraBlacklisted = BlacklistedRootOperators | '$nor' | '$size';\n\nexport type AstraVectorFilter = VectorFilter<\n keyof AstraOperatorValueMap,\n AstraOperatorValueMap,\n AstraLogicalOperatorValueMap,\n AstraBlacklisted\n>;\n\n/**\n * Translator for Astra DB filter queries.\n * Maintains MongoDB-compatible syntax while ensuring proper validation\n * and normalization of values.\n */\nexport class AstraFilterTranslator extends BaseFilterTranslator<AstraVectorFilter> {\n protected override getSupportedOperators(): OperatorSupport {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n array: ['$all', '$in', '$nin'],\n logical: ['$and', '$or', '$not'],\n regex: [],\n custom: ['$size'],\n };\n }\n\n translate(filter?: AstraVectorFilter): AstraVectorFilter {\n if (this.isEmpty(filter)) return filter;\n this.validateFilter(filter);\n\n return this.translateNode(filter);\n }\n\n private translateNode(node: AstraVectorFilter): any {\n // Handle primitive values and arrays\n if (this.isRegex(node)) {\n throw new Error('Regex is not supported in Astra DB');\n }\n if (this.isPrimitive(node) || Array.isArray(node)) {\n return node;\n }\n\n const entries = Object.entries(node as Record<string, any>);\n const translatedEntries = entries.map(([key, value]) => {\n // Handle operators\n if (this.isOperator(key)) {\n return [key, this.translateOperatorValue(key, value)];\n }\n\n // Handle nested paths and objects\n return [key, this.translateNode(value)];\n });\n\n return Object.fromEntries(translatedEntries);\n }\n\n private translateOperatorValue(operator: QueryOperator, value: any): any {\n if (this.isBasicOperator(operator) || this.isNumericOperator(operator)) {\n return this.normalizeComparisonValue(value);\n }\n\n if (this.isArrayOperator(operator) && Array.isArray(value)) {\n return this.normalizeArrayValues(value);\n }\n\n return this.translateNode(value);\n }\n}\n","import type { Db } from '@datastax/astra-db-ts';\nimport { DataAPIClient, UUID } from '@datastax/astra-db-ts';\nimport { MastraError, ErrorDomain, ErrorCategory } 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 { AstraVectorFilter } from './filter';\nimport { AstraFilterTranslator } from './filter';\n\n// Mastra and Astra DB agree on cosine and euclidean, but Astra DB uses dot_product instead of dotproduct.\nconst metricMap = {\n cosine: 'cosine',\n euclidean: 'euclidean',\n dotproduct: 'dot_product',\n} as const;\n\nexport interface AstraDbOptions {\n token: string;\n endpoint: string;\n keyspace?: string;\n}\n\ntype AstraQueryVectorParams = QueryVectorParams<AstraVectorFilter>;\n\nexport class AstraVector extends MastraVector<AstraVectorFilter> {\n readonly #db: Db;\n\n constructor({ token, endpoint, keyspace, id }: AstraDbOptions & { id: string }) {\n super({ id });\n const client = new DataAPIClient(token);\n this.#db = client.db(endpoint, { keyspace });\n }\n\n /**\n * Creates a new collection with the specified configuration.\n *\n * @param {string} indexName - The name of the collection to create.\n * @param {number} dimension - The dimension of the vectors to be stored in the collection.\n * @param {'cosine' | 'euclidean' | 'dotproduct'} [metric=cosine] - The metric to use to sort vectors in the collection.\n * @returns {Promise<void>} A promise that resolves when the collection is created.\n */\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new MastraError({\n id: 'ASTRA_VECTOR_CREATE_INDEX_INVALID_DIMENSION',\n text: 'Dimension must be a positive integer',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n });\n }\n try {\n await this.#db.createCollection(indexName, {\n vector: {\n dimension,\n metric: metricMap[metric],\n },\n checkExists: false,\n });\n } catch (error: any) {\n new MastraError(\n {\n id: 'ASTRA_VECTOR_CREATE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Inserts or updates vectors in the specified collection.\n *\n * @param {string} indexName - The name of the collection to upsert into.\n * @param {number[][]} vectors - An array of vectors to upsert.\n * @param {Record<string, any>[]} [metadata] - An optional array of metadata objects corresponding to each vector.\n * @param {string[]} [ids] - An optional array of IDs corresponding to each vector. If not provided, new IDs will be generated.\n * @returns {Promise<string[]>} A promise that resolves to an array of IDs of the upserted vectors.\n */\n async upsert({ indexName, vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n const collection = this.#db.collection(indexName);\n\n // Generate IDs if not provided\n const vectorIds = ids || vectors.map(() => UUID.v7().toString());\n\n const records = vectors.map((vector, i) => ({\n id: vectorIds[i],\n $vector: vector,\n metadata: metadata?.[i] || {},\n }));\n\n try {\n await collection.insertMany(records);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_UPSERT_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n return vectorIds;\n }\n\n transformFilter(filter?: AstraVectorFilter) {\n const translator = new AstraFilterTranslator();\n return translator.translate(filter);\n }\n\n /**\n * Queries the specified collection using a vector and optional filter.\n *\n * @param {string} indexName - The name of the collection to query.\n * @param {number[]} queryVector - The vector to query with.\n * @param {number} [topK] - The maximum number of results to return.\n * @param {Record<string, any>} [filter] - An optional filter to apply to the query. For more on filters in Astra DB, see the filtering reference: https://docs.datastax.com/en/astra-db-serverless/api-reference/documents.html#operators\n * @param {boolean} [includeVectors=false] - Whether to include the vectors in the response.\n * @returns {Promise<QueryResult[]>} A promise that resolves to an array of query results.\n */\n async query({\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n }: AstraQueryVectorParams): Promise<QueryResult[]> {\n const collection = this.#db.collection(indexName);\n\n const translatedFilter = this.transformFilter(filter);\n\n try {\n const cursor = collection.find(translatedFilter ?? {}, {\n sort: { $vector: queryVector },\n limit: topK,\n includeSimilarity: true,\n projection: {\n $vector: includeVector ? true : false,\n },\n });\n\n const results = await cursor.toArray();\n\n return results.map(result => ({\n id: result.id,\n score: result.$similarity,\n metadata: result.metadata,\n ...(includeVector && { vector: result.$vector }),\n }));\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_QUERY_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Lists all collections in the database.\n *\n * @returns {Promise<string[]>} A promise that resolves to an array of collection names.\n */\n async listIndexes(): Promise<string[]> {\n try {\n return await this.#db.listCollections({ nameOnly: true });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_LIST_INDEXES_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\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 const collection = this.#db.collection(indexName);\n try {\n const optionsPromise = collection.options();\n const countPromise = collection.countDocuments({}, 100);\n const [options, count] = await Promise.all([optionsPromise, countPromise]);\n\n const keys = Object.keys(metricMap) as (keyof typeof metricMap)[];\n const metric = keys.find(key => metricMap[key] === options.vector?.metric);\n return {\n dimension: options.vector?.dimension!,\n metric,\n count: count,\n };\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DESCRIBE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes the specified collection.\n *\n * @param {string} indexName - The name of the collection to delete.\n * @returns {Promise<void>} A promise that resolves when the collection is deleted.\n */\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n const collection = this.#db.collection(indexName);\n try {\n await collection.drop();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DELETE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\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({ indexName, id, update }: UpdateVectorParams): Promise<void> {\n if (!update.vector && !update.metadata) {\n throw new MastraError({\n id: 'ASTRA_VECTOR_UPDATE_NO_PAYLOAD',\n text: 'No updates provided for vector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: { indexName, id },\n });\n }\n\n try {\n const collection = this.#db.collection(indexName);\n const updateDoc: Record<string, any> = {};\n\n if (update.vector) {\n updateDoc.$vector = update.vector;\n }\n\n if (update.metadata) {\n updateDoc.metadata = update.metadata;\n }\n\n await collection.findOneAndUpdate({ id }, { $set: updateDoc });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_UPDATE_FAILED_UNHANDLED',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id },\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({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = this.#db.collection(indexName);\n await collection.deleteOne({ id });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DELETE_FAILED',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id },\n },\n error,\n );\n }\n }\n}\n","/**\n * Vector store specific prompt that details supported operators and examples.\n * This prompt helps users construct valid filters for Astra Vector.\n */\nexport const ASTRA_PROMPT = `When querying Astra, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in array\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in array\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in array\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n\nLogical Operators:\n- $and: Logical AND (can be implicit or explicit)\n Implicit Example: { \"price\": { \"$gt\": 100 }, \"category\": \"electronics\" }\n Explicit Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n\nElement Operators:\n- $exists: Check if field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n\nRestrictions:\n- Regex patterns are not supported\n- Only $and, $or, and $not logical operators are supported\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Empty arrays in $in/$nin will return no results\n- A non-empty array is required for $all operator\n- Only logical operators ($and, $or, $not) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [...] }\n Invalid: { \"$gt\": 100 }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be an object\n - Cannot be empty\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"category\": { \"$in\": [\"electronics\", \"computers\"] } },\n { \"price\": { \"$gte\": 100, \"$lte\": 1000 } },\n { \"tags\": { \"$all\": [\"premium\"] } },\n { \"rating\": { \"$exists\": true, \"$gt\": 4 } },\n { \"$or\": [\n { \"stock\": { \"$gt\": 0 } },\n { \"preorder\": true }\n ]}\n ]\n}`;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vector/filter.ts","../src/vector/index.ts","../src/vector/prompt.ts"],"names":["BaseFilterTranslator","MastraVector","DataAPIClient","MastraError","createVectorErrorId","ErrorDomain","ErrorCategory","error","UUID"],"mappings":";;;;;;;;;AA8BO,IAAM,qBAAA,GAAN,cAAoCA,2BAAA,CAAwC;AAAA,EAC9D,qBAAA,GAAyC;AAC1D,IAAA,OAAO;AAAA,MACL,GAAGA,2BAAA,CAAqB,iBAAA;AAAA,MACxB,KAAA,EAAO,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,MAC7B,OAAA,EAAS,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,MAC/B,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ,CAAC,OAAO;AAAA,KAClB;AAAA,EACF;AAAA,EAEA,UAAU,MAAA,EAA+C;AACvD,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,MAAA;AACjC,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAE1B,IAAA,OAAO,IAAA,CAAK,cAAc,MAAM,CAAA;AAAA,EAClC;AAAA,EAEQ,cAAc,IAAA,EAA8B;AAElD,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,KAAK,WAAA,CAAY,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAA2B,CAAA;AAC1D,IAAA,MAAM,oBAAoB,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAEtD,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,QAAA,OAAO,CAAC,GAAA,EAAK,IAAA,CAAK,sBAAA,CAAuB,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,MACtD;AAGA,MAAA,OAAO,CAAC,GAAA,EAAK,IAAA,CAAK,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,IACxC,CAAC,CAAA;AAED,IAAA,OAAO,MAAA,CAAO,YAAY,iBAAiB,CAAA;AAAA,EAC7C;AAAA,EAEQ,sBAAA,CAAuB,UAAyB,KAAA,EAAiB;AACvE,IAAA,IAAI,KAAK,eAAA,CAAgB,QAAQ,KAAK,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AACtE,MAAA,OAAO,IAAA,CAAK,yBAAyB,KAAK,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,KAAK,eAAA,CAAgB,QAAQ,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1D,MAAA,OAAO,IAAA,CAAK,qBAAqB,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,OAAO,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EACjC;AACF,CAAA;;;AC7DA,IAAM,SAAA,GAAY;AAAA,EAChB,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,WAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAUO,IAAM,WAAA,GAAN,cAA0BC,mBAAA,CAAgC;AAAA,EACtD,GAAA;AAAA,EAET,YAAY,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,IAAG,EAAoC;AAC9E,IAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,IAAIC,uBAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,EAAE,UAAU,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,CAAY,EAAE,WAAW,SAAA,EAAW,MAAA,GAAS,UAAS,EAAqC;AAC/F,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,aAAa,CAAA,EAAG;AAClD,MAAA,MAAM,IAAIC,iBAAA,CAAY;AAAA,QACpB,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,mBAAmB,CAAA;AAAA,QACpE,IAAA,EAAM,sCAAA;AAAA,QACN,QAAQC,iBAAA,CAAY,aAAA;AAAA,QACpB,UAAUC,mBAAA,CAAc;AAAA,OACzB,CAAA;AAAA,IACH;AACA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,SAAA,EAAW;AAAA,QACzC,MAAA,EAAQ;AAAA,UACN,SAAA;AAAA,UACA,MAAA,EAAQ,UAAU,MAAM;AAAA,SAC1B;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH,SAASC,OAAA,EAAY;AACnB,MAAA,IAAIJ,iBAAA;AAAA,QACF;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,UAAU,CAAA;AAAA,UAC3D,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAA,CAAO,EAAE,WAAW,OAAA,EAAS,QAAA,EAAU,KAAI,EAA0C;AACzF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAGhD,IAAA,MAAM,SAAA,GAAY,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAMC,cAAA,CAAK,EAAA,EAAG,CAAE,QAAA,EAAU,CAAA;AAE/D,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,MAAO;AAAA,MAC1C,EAAA,EAAI,UAAU,CAAC,CAAA;AAAA,MACf,OAAA,EAAS,MAAA;AAAA,MACT,QAAA,EAAU,QAAA,GAAW,CAAC,CAAA,IAAK;AAAC,KAC9B,CAAE,CAAA;AAEF,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,CAAW,WAAW,OAAO,CAAA;AAAA,IACrC,SAASD,OAAA,EAAY;AACnB,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,QAAA,EAAU,UAAU,CAAA;AAAA,UACrD,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,gBAAgB,MAAA,EAA4B;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAI,qBAAA,EAAsB;AAC7C,IAAA,OAAO,UAAA,CAAW,UAAU,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,KAAA,CAAM;AAAA,IACV,SAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,MAAA;AAAA,IACA,aAAA,GAAgB;AAAA,GAClB,EAAmD;AACjD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAEhD,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAEpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,gBAAA,IAAoB,EAAC,EAAG;AAAA,QACrD,IAAA,EAAM,EAAE,OAAA,EAAS,WAAA,EAAY;AAAA,QAC7B,KAAA,EAAO,IAAA;AAAA,QACP,iBAAA,EAAmB,IAAA;AAAA,QACnB,UAAA,EAAY;AAAA,UACV,OAAA,EAAS,gBAAgB,IAAA,GAAO;AAAA;AAClC,OACD,CAAA;AAED,MAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,EAAQ;AAErC,MAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,MAAA,MAAW;AAAA,QAC5B,IAAI,MAAA,CAAO,EAAA;AAAA,QACX,OAAO,MAAA,CAAO,WAAA;AAAA,QACd,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,GAAI,aAAA,IAAiB,EAAE,MAAA,EAAQ,OAAO,OAAA;AAAQ,OAChD,CAAE,CAAA;AAAA,IACJ,SAASA,OAAA,EAAY;AACnB,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,OAAA,EAAS,UAAU,CAAA;AAAA,UACpD,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,GAAiC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,gBAAgB,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,IAC1D,SAASA,OAAA,EAAY;AACnB,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,UAAU,CAAA;AAAA,UAC3D,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc;AAAA,SAC1B;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAU,EAA6C;AAC3E,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,WAAW,OAAA,EAAQ;AAC1C,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,cAAA,CAAe,IAAI,GAAG,CAAA;AACtD,MAAA,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI,CAAC,cAAA,EAAgB,YAAY,CAAC,CAAA;AAEzE,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AAClC,MAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,CAAA,GAAA,KAAO,UAAU,GAAG,CAAA,KAAM,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AACzE,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,QAAQ,MAAA,EAAQ,SAAA;AAAA,QAC3B,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAASA,OAAA,EAAY;AACnB,MAAA,IAAIA,OAAA,YAAiBJ,mBAAa,MAAMI,OAAA;AACxC,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,gBAAA,EAAkB,UAAU,CAAA;AAAA,UAC7D,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAU,EAAqC;AACjE,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,IAAA,EAAK;AAAA,IACxB,SAASA,OAAA,EAAY;AACnB,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,UAAU,CAAA;AAAA,UAC3D,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS,EAAE,SAAA;AAAU,SACvB;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YAAA,CAAa,EAAE,SAAA,EAAW,EAAA,EAAI,QAAO,EAAsC;AAC/E,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAIJ,iBAAA,CAAY;AAAA,QACpB,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,eAAA,EAAiB,OAAO,CAAA;AAAA,QACzD,IAAA,EAAM,uCAAA;AAAA,QACN,QAAQC,iBAAA,CAAY,aAAA;AAAA,QACpB,UAAUC,mBAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS,EAAE,SAAA;AAAU,OACtB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,CAAC,OAAO,QAAA,EAAU;AACtC,MAAA,MAAM,IAAIH,iBAAA,CAAY;AAAA,QACpB,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,eAAA,EAAiB,YAAY,CAAA;AAAA,QAC9D,IAAA,EAAM,gCAAA;AAAA,QACN,QAAQC,iBAAA,CAAY,aAAA;AAAA,QACpB,UAAUC,mBAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACP,SAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAChD,MAAA,MAAM,YAAiC,EAAC;AAExC,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,SAAA,CAAU,UAAU,MAAA,CAAO,MAAA;AAAA,MAC7B;AAEA,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,SAAA,CAAU,WAAW,MAAA,CAAO,QAAA;AAAA,MAC9B;AAEA,MAAA,MAAM,UAAA,CAAW,iBAAiB,EAAE,EAAA,IAAM,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,IAC/D,SAASC,OAAA,EAAY;AACnB,MAAA,IAAIA,OAAA,YAAiBJ,mBAAa,MAAMI,OAAA;AACxC,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,eAAA,EAAiB,kBAAkB,CAAA;AAAA,UACpE,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,SAAA;AAAA,YACA,GAAI,EAAA,IAAM,EAAE,EAAA;AAAG;AACjB,SACF;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAA,CAAa,EAAE,SAAA,EAAW,IAAG,EAAsC;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA;AAChD,MAAA,MAAM,UAAA,CAAW,SAAA,CAAU,EAAE,EAAA,EAAI,CAAA;AAAA,IACnC,SAASA,OAAA,EAAY;AACnB,MAAA,IAAIA,OAAA,YAAiBJ,mBAAa,MAAMI,OAAA;AACxC,MAAA,MAAM,IAAIJ,iBAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,eAAA,EAAiB,QAAQ,CAAA;AAAA,UAC1D,QAAQC,iBAAA,CAAY,aAAA;AAAA,UACpB,UAAUC,mBAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,SAAA;AAAA,YACA,GAAI,EAAA,IAAM,EAAE,EAAA;AAAG;AACjB,SACF;AAAA,QACAC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAW,MAAA,EAAQ,KAAI,EAAuC;AAClF,IAAA,MAAM,IAAIJ,iBAAA,CAAY;AAAA,MACpB,EAAA,EAAIC,2BAAA,CAAoB,OAAA,EAAS,gBAAA,EAAkB,eAAe,CAAA;AAAA,MAClE,IAAA,EAAM,6DAAA;AAAA,MACN,QAAQC,iBAAA,CAAY,aAAA;AAAA,MACpB,UAAUC,mBAAA,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;AACF;;;AClWO,IAAM,YAAA,GAAe,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA","file":"index.cjs","sourcesContent":["import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorSupport,\n QueryOperator,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype AstraOperatorValueMap = Omit<OperatorValueMap, '$elemMatch' | '$regex' | '$options'> & {\n $size: number; // Astra-specific\n};\n\ntype AstraLogicalOperatorValueMap = Omit<LogicalOperatorValueMap, '$nor'>;\n\ntype AstraBlacklisted = BlacklistedRootOperators | '$nor' | '$size';\n\nexport type AstraVectorFilter = VectorFilter<\n keyof AstraOperatorValueMap,\n AstraOperatorValueMap,\n AstraLogicalOperatorValueMap,\n AstraBlacklisted\n>;\n\n/**\n * Translator for Astra DB filter queries.\n * Maintains MongoDB-compatible syntax while ensuring proper validation\n * and normalization of values.\n */\nexport class AstraFilterTranslator extends BaseFilterTranslator<AstraVectorFilter> {\n protected override getSupportedOperators(): OperatorSupport {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n array: ['$all', '$in', '$nin'],\n logical: ['$and', '$or', '$not'],\n regex: [],\n custom: ['$size'],\n };\n }\n\n translate(filter?: AstraVectorFilter): AstraVectorFilter {\n if (this.isEmpty(filter)) return filter;\n this.validateFilter(filter);\n\n return this.translateNode(filter);\n }\n\n private translateNode(node: AstraVectorFilter): any {\n // Handle primitive values and arrays\n if (this.isRegex(node)) {\n throw new Error('Regex is not supported in Astra DB');\n }\n if (this.isPrimitive(node) || Array.isArray(node)) {\n return node;\n }\n\n const entries = Object.entries(node as Record<string, any>);\n const translatedEntries = entries.map(([key, value]) => {\n // Handle operators\n if (this.isOperator(key)) {\n return [key, this.translateOperatorValue(key, value)];\n }\n\n // Handle nested paths and objects\n return [key, this.translateNode(value)];\n });\n\n return Object.fromEntries(translatedEntries);\n }\n\n private translateOperatorValue(operator: QueryOperator, value: any): any {\n if (this.isBasicOperator(operator) || this.isNumericOperator(operator)) {\n return this.normalizeComparisonValue(value);\n }\n\n if (this.isArrayOperator(operator) && Array.isArray(value)) {\n return this.normalizeArrayValues(value);\n }\n\n return this.translateNode(value);\n }\n}\n","import type { Db } from '@datastax/astra-db-ts';\nimport { DataAPIClient, UUID } from '@datastax/astra-db-ts';\nimport { MastraError, ErrorDomain, ErrorCategory } 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 { AstraVectorFilter } from './filter';\nimport { AstraFilterTranslator } from './filter';\n\n// Mastra and Astra DB agree on cosine and euclidean, but Astra DB uses dot_product instead of dotproduct.\nconst metricMap = {\n cosine: 'cosine',\n euclidean: 'euclidean',\n dotproduct: 'dot_product',\n} as const;\n\nexport interface AstraDbOptions {\n token: string;\n endpoint: string;\n keyspace?: string;\n}\n\ntype AstraQueryVectorParams = QueryVectorParams<AstraVectorFilter>;\n\nexport class AstraVector extends MastraVector<AstraVectorFilter> {\n readonly #db: Db;\n\n constructor({ token, endpoint, keyspace, id }: AstraDbOptions & { id: string }) {\n super({ id });\n const client = new DataAPIClient(token);\n this.#db = client.db(endpoint, { keyspace });\n }\n\n /**\n * Creates a new collection with the specified configuration.\n *\n * @param {string} indexName - The name of the collection to create.\n * @param {number} dimension - The dimension of the vectors to be stored in the collection.\n * @param {'cosine' | 'euclidean' | 'dotproduct'} [metric=cosine] - The metric to use to sort vectors in the collection.\n * @returns {Promise<void>} A promise that resolves when the collection is created.\n */\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'CREATE_INDEX', 'INVALID_DIMENSION'),\n text: 'Dimension must be a positive integer',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n });\n }\n try {\n await this.#db.createCollection(indexName, {\n vector: {\n dimension,\n metric: metricMap[metric],\n },\n checkExists: false,\n });\n } catch (error: any) {\n new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'CREATE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Inserts or updates vectors in the specified collection.\n *\n * @param {string} indexName - The name of the collection to upsert into.\n * @param {number[][]} vectors - An array of vectors to upsert.\n * @param {Record<string, any>[]} [metadata] - An optional array of metadata objects corresponding to each vector.\n * @param {string[]} [ids] - An optional array of IDs corresponding to each vector. If not provided, new IDs will be generated.\n * @returns {Promise<string[]>} A promise that resolves to an array of IDs of the upserted vectors.\n */\n async upsert({ indexName, vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n const collection = this.#db.collection(indexName);\n\n // Generate IDs if not provided\n const vectorIds = ids || vectors.map(() => UUID.v7().toString());\n\n const records = vectors.map((vector, i) => ({\n id: vectorIds[i],\n $vector: vector,\n metadata: metadata?.[i] || {},\n }));\n\n try {\n await collection.insertMany(records);\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'UPSERT', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n return vectorIds;\n }\n\n transformFilter(filter?: AstraVectorFilter) {\n const translator = new AstraFilterTranslator();\n return translator.translate(filter);\n }\n\n /**\n * Queries the specified collection using a vector and optional filter.\n *\n * @param {string} indexName - The name of the collection to query.\n * @param {number[]} queryVector - The vector to query with.\n * @param {number} [topK] - The maximum number of results to return.\n * @param {Record<string, any>} [filter] - An optional filter to apply to the query. For more on filters in Astra DB, see the filtering reference: https://docs.datastax.com/en/astra-db-serverless/api-reference/documents.html#operators\n * @param {boolean} [includeVectors=false] - Whether to include the vectors in the response.\n * @returns {Promise<QueryResult[]>} A promise that resolves to an array of query results.\n */\n async query({\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n }: AstraQueryVectorParams): Promise<QueryResult[]> {\n const collection = this.#db.collection(indexName);\n\n const translatedFilter = this.transformFilter(filter);\n\n try {\n const cursor = collection.find(translatedFilter ?? {}, {\n sort: { $vector: queryVector },\n limit: topK,\n includeSimilarity: true,\n projection: {\n $vector: includeVector ? true : false,\n },\n });\n\n const results = await cursor.toArray();\n\n return results.map(result => ({\n id: result.id,\n score: result.$similarity,\n metadata: result.metadata,\n ...(includeVector && { vector: result.$vector }),\n }));\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'QUERY', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Lists all collections in the database.\n *\n * @returns {Promise<string[]>} A promise that resolves to an array of collection names.\n */\n async listIndexes(): Promise<string[]> {\n try {\n return await this.#db.listCollections({ nameOnly: true });\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'LIST_INDEXES', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\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 const collection = this.#db.collection(indexName);\n try {\n const optionsPromise = collection.options();\n const countPromise = collection.countDocuments({}, 100);\n const [options, count] = await Promise.all([optionsPromise, countPromise]);\n\n const keys = Object.keys(metricMap) as (keyof typeof metricMap)[];\n const metric = keys.find(key => metricMap[key] === options.vector?.metric);\n return {\n dimension: options.vector?.dimension!,\n metric,\n count: count,\n };\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DESCRIBE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes the specified collection.\n *\n * @param {string} indexName - The name of the collection to delete.\n * @returns {Promise<void>} A promise that resolves when the collection is deleted.\n */\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n const collection = this.#db.collection(indexName);\n try {\n await collection.drop();\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DELETE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\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({ indexName, id, update }: UpdateVectorParams): Promise<void> {\n if (!id) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'NO_ID'),\n text: 'id is required for Astra updateVector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n\n if (!update.vector && !update.metadata) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'NO_PAYLOAD'),\n text: 'No updates provided for vector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: {\n indexName,\n id,\n },\n });\n }\n\n try {\n const collection = this.#db.collection(indexName);\n const updateDoc: Record<string, any> = {};\n\n if (update.vector) {\n updateDoc.$vector = update.vector;\n }\n\n if (update.metadata) {\n updateDoc.metadata = update.metadata;\n }\n\n await collection.findOneAndUpdate({ id }, { $set: updateDoc });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'FAILED_UNHANDLED'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n ...(id && { id }),\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({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = this.#db.collection(indexName);\n await collection.deleteOne({ id });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DELETE_VECTOR', 'FAILED'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\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('ASTRA', 'DELETE_VECTORS', 'NOT_SUPPORTED'),\n text: 'deleteVectors is not yet implemented for Astra vector store',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.SYSTEM,\n details: {\n indexName,\n ...(filter && { filter: JSON.stringify(filter) }),\n ...(ids && { idsCount: ids.length }),\n },\n });\n }\n}\n","/**\n * Vector store specific prompt that details supported operators and examples.\n * This prompt helps users construct valid filters for Astra Vector.\n */\nexport const ASTRA_PROMPT = `When querying Astra, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in array\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in array\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in array\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n\nLogical Operators:\n- $and: Logical AND (can be implicit or explicit)\n Implicit Example: { \"price\": { \"$gt\": 100 }, \"category\": \"electronics\" }\n Explicit Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n\nElement Operators:\n- $exists: Check if field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n\nRestrictions:\n- Regex patterns are not supported\n- Only $and, $or, and $not logical operators are supported\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Empty arrays in $in/$nin will return no results\n- A non-empty array is required for $all operator\n- Only logical operators ($and, $or, $not) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [...] }\n Invalid: { \"$gt\": 100 }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be an object\n - Cannot be empty\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"category\": { \"$in\": [\"electronics\", \"computers\"] } },\n { \"price\": { \"$gte\": 100, \"$lte\": 1000 } },\n { \"tags\": { \"$all\": [\"premium\"] } },\n { \"rating\": { \"$exists\": true, \"$gt\": 4 } },\n { \"$or\": [\n { \"stock\": { \"$gt\": 0 } },\n { \"preorder\": true }\n ]}\n ]\n}`;\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DataAPIClient, UUID } from '@datastax/astra-db-ts';
|
|
2
2
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
3
|
+
import { createVectorErrorId } from '@mastra/core/storage';
|
|
3
4
|
import { MastraVector } from '@mastra/core/vector';
|
|
4
5
|
import { BaseFilterTranslator } from '@mastra/core/vector/filter';
|
|
5
6
|
|
|
@@ -70,7 +71,7 @@ var AstraVector = class extends MastraVector {
|
|
|
70
71
|
async createIndex({ indexName, dimension, metric = "cosine" }) {
|
|
71
72
|
if (!Number.isInteger(dimension) || dimension <= 0) {
|
|
72
73
|
throw new MastraError({
|
|
73
|
-
id: "
|
|
74
|
+
id: createVectorErrorId("ASTRA", "CREATE_INDEX", "INVALID_DIMENSION"),
|
|
74
75
|
text: "Dimension must be a positive integer",
|
|
75
76
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
76
77
|
category: ErrorCategory.USER
|
|
@@ -87,7 +88,7 @@ var AstraVector = class extends MastraVector {
|
|
|
87
88
|
} catch (error) {
|
|
88
89
|
new MastraError(
|
|
89
90
|
{
|
|
90
|
-
id: "
|
|
91
|
+
id: createVectorErrorId("ASTRA", "CREATE_INDEX", "DB_ERROR"),
|
|
91
92
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
92
93
|
category: ErrorCategory.THIRD_PARTY,
|
|
93
94
|
details: { indexName }
|
|
@@ -118,7 +119,7 @@ var AstraVector = class extends MastraVector {
|
|
|
118
119
|
} catch (error) {
|
|
119
120
|
throw new MastraError(
|
|
120
121
|
{
|
|
121
|
-
id: "
|
|
122
|
+
id: createVectorErrorId("ASTRA", "UPSERT", "DB_ERROR"),
|
|
122
123
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
123
124
|
category: ErrorCategory.THIRD_PARTY,
|
|
124
125
|
details: { indexName }
|
|
@@ -170,7 +171,7 @@ var AstraVector = class extends MastraVector {
|
|
|
170
171
|
} catch (error) {
|
|
171
172
|
throw new MastraError(
|
|
172
173
|
{
|
|
173
|
-
id: "
|
|
174
|
+
id: createVectorErrorId("ASTRA", "QUERY", "DB_ERROR"),
|
|
174
175
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
175
176
|
category: ErrorCategory.THIRD_PARTY,
|
|
176
177
|
details: { indexName }
|
|
@@ -190,7 +191,7 @@ var AstraVector = class extends MastraVector {
|
|
|
190
191
|
} catch (error) {
|
|
191
192
|
throw new MastraError(
|
|
192
193
|
{
|
|
193
|
-
id: "
|
|
194
|
+
id: createVectorErrorId("ASTRA", "LIST_INDEXES", "DB_ERROR"),
|
|
194
195
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
195
196
|
category: ErrorCategory.THIRD_PARTY
|
|
196
197
|
},
|
|
@@ -221,7 +222,7 @@ var AstraVector = class extends MastraVector {
|
|
|
221
222
|
if (error instanceof MastraError) throw error;
|
|
222
223
|
throw new MastraError(
|
|
223
224
|
{
|
|
224
|
-
id: "
|
|
225
|
+
id: createVectorErrorId("ASTRA", "DESCRIBE_INDEX", "DB_ERROR"),
|
|
225
226
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
226
227
|
category: ErrorCategory.THIRD_PARTY,
|
|
227
228
|
details: { indexName }
|
|
@@ -243,7 +244,7 @@ var AstraVector = class extends MastraVector {
|
|
|
243
244
|
} catch (error) {
|
|
244
245
|
throw new MastraError(
|
|
245
246
|
{
|
|
246
|
-
id: "
|
|
247
|
+
id: createVectorErrorId("ASTRA", "DELETE_INDEX", "DB_ERROR"),
|
|
247
248
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
248
249
|
category: ErrorCategory.THIRD_PARTY,
|
|
249
250
|
details: { indexName }
|
|
@@ -263,13 +264,25 @@ var AstraVector = class extends MastraVector {
|
|
|
263
264
|
* @throws Will throw an error if no updates are provided or if the update operation fails.
|
|
264
265
|
*/
|
|
265
266
|
async updateVector({ indexName, id, update }) {
|
|
267
|
+
if (!id) {
|
|
268
|
+
throw new MastraError({
|
|
269
|
+
id: createVectorErrorId("ASTRA", "UPDATE_VECTOR", "NO_ID"),
|
|
270
|
+
text: "id is required for Astra updateVector",
|
|
271
|
+
domain: ErrorDomain.MASTRA_VECTOR,
|
|
272
|
+
category: ErrorCategory.USER,
|
|
273
|
+
details: { indexName }
|
|
274
|
+
});
|
|
275
|
+
}
|
|
266
276
|
if (!update.vector && !update.metadata) {
|
|
267
277
|
throw new MastraError({
|
|
268
|
-
id: "
|
|
278
|
+
id: createVectorErrorId("ASTRA", "UPDATE_VECTOR", "NO_PAYLOAD"),
|
|
269
279
|
text: "No updates provided for vector",
|
|
270
280
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
271
281
|
category: ErrorCategory.USER,
|
|
272
|
-
details: {
|
|
282
|
+
details: {
|
|
283
|
+
indexName,
|
|
284
|
+
id
|
|
285
|
+
}
|
|
273
286
|
});
|
|
274
287
|
}
|
|
275
288
|
try {
|
|
@@ -286,10 +299,13 @@ var AstraVector = class extends MastraVector {
|
|
|
286
299
|
if (error instanceof MastraError) throw error;
|
|
287
300
|
throw new MastraError(
|
|
288
301
|
{
|
|
289
|
-
id: "
|
|
302
|
+
id: createVectorErrorId("ASTRA", "UPDATE_VECTOR", "FAILED_UNHANDLED"),
|
|
290
303
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
291
304
|
category: ErrorCategory.THIRD_PARTY,
|
|
292
|
-
details: {
|
|
305
|
+
details: {
|
|
306
|
+
indexName,
|
|
307
|
+
...id && { id }
|
|
308
|
+
}
|
|
293
309
|
},
|
|
294
310
|
error
|
|
295
311
|
);
|
|
@@ -310,15 +326,31 @@ var AstraVector = class extends MastraVector {
|
|
|
310
326
|
if (error instanceof MastraError) throw error;
|
|
311
327
|
throw new MastraError(
|
|
312
328
|
{
|
|
313
|
-
id: "
|
|
329
|
+
id: createVectorErrorId("ASTRA", "DELETE_VECTOR", "FAILED"),
|
|
314
330
|
domain: ErrorDomain.MASTRA_VECTOR,
|
|
315
331
|
category: ErrorCategory.THIRD_PARTY,
|
|
316
|
-
details: {
|
|
332
|
+
details: {
|
|
333
|
+
indexName,
|
|
334
|
+
...id && { id }
|
|
335
|
+
}
|
|
317
336
|
},
|
|
318
337
|
error
|
|
319
338
|
);
|
|
320
339
|
}
|
|
321
340
|
}
|
|
341
|
+
async deleteVectors({ indexName, filter, ids }) {
|
|
342
|
+
throw new MastraError({
|
|
343
|
+
id: createVectorErrorId("ASTRA", "DELETE_VECTORS", "NOT_SUPPORTED"),
|
|
344
|
+
text: "deleteVectors is not yet implemented for Astra vector store",
|
|
345
|
+
domain: ErrorDomain.MASTRA_VECTOR,
|
|
346
|
+
category: ErrorCategory.SYSTEM,
|
|
347
|
+
details: {
|
|
348
|
+
indexName,
|
|
349
|
+
...filter && { filter: JSON.stringify(filter) },
|
|
350
|
+
...ids && { idsCount: ids.length }
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
}
|
|
322
354
|
};
|
|
323
355
|
|
|
324
356
|
// src/vector/prompt.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector/filter.ts","../src/vector/index.ts","../src/vector/prompt.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorSupport,\n QueryOperator,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype AstraOperatorValueMap = Omit<OperatorValueMap, '$elemMatch' | '$regex' | '$options'> & {\n $size: number; // Astra-specific\n};\n\ntype AstraLogicalOperatorValueMap = Omit<LogicalOperatorValueMap, '$nor'>;\n\ntype AstraBlacklisted = BlacklistedRootOperators | '$nor' | '$size';\n\nexport type AstraVectorFilter = VectorFilter<\n keyof AstraOperatorValueMap,\n AstraOperatorValueMap,\n AstraLogicalOperatorValueMap,\n AstraBlacklisted\n>;\n\n/**\n * Translator for Astra DB filter queries.\n * Maintains MongoDB-compatible syntax while ensuring proper validation\n * and normalization of values.\n */\nexport class AstraFilterTranslator extends BaseFilterTranslator<AstraVectorFilter> {\n protected override getSupportedOperators(): OperatorSupport {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n array: ['$all', '$in', '$nin'],\n logical: ['$and', '$or', '$not'],\n regex: [],\n custom: ['$size'],\n };\n }\n\n translate(filter?: AstraVectorFilter): AstraVectorFilter {\n if (this.isEmpty(filter)) return filter;\n this.validateFilter(filter);\n\n return this.translateNode(filter);\n }\n\n private translateNode(node: AstraVectorFilter): any {\n // Handle primitive values and arrays\n if (this.isRegex(node)) {\n throw new Error('Regex is not supported in Astra DB');\n }\n if (this.isPrimitive(node) || Array.isArray(node)) {\n return node;\n }\n\n const entries = Object.entries(node as Record<string, any>);\n const translatedEntries = entries.map(([key, value]) => {\n // Handle operators\n if (this.isOperator(key)) {\n return [key, this.translateOperatorValue(key, value)];\n }\n\n // Handle nested paths and objects\n return [key, this.translateNode(value)];\n });\n\n return Object.fromEntries(translatedEntries);\n }\n\n private translateOperatorValue(operator: QueryOperator, value: any): any {\n if (this.isBasicOperator(operator) || this.isNumericOperator(operator)) {\n return this.normalizeComparisonValue(value);\n }\n\n if (this.isArrayOperator(operator) && Array.isArray(value)) {\n return this.normalizeArrayValues(value);\n }\n\n return this.translateNode(value);\n }\n}\n","import type { Db } from '@datastax/astra-db-ts';\nimport { DataAPIClient, UUID } from '@datastax/astra-db-ts';\nimport { MastraError, ErrorDomain, ErrorCategory } 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 { AstraVectorFilter } from './filter';\nimport { AstraFilterTranslator } from './filter';\n\n// Mastra and Astra DB agree on cosine and euclidean, but Astra DB uses dot_product instead of dotproduct.\nconst metricMap = {\n cosine: 'cosine',\n euclidean: 'euclidean',\n dotproduct: 'dot_product',\n} as const;\n\nexport interface AstraDbOptions {\n token: string;\n endpoint: string;\n keyspace?: string;\n}\n\ntype AstraQueryVectorParams = QueryVectorParams<AstraVectorFilter>;\n\nexport class AstraVector extends MastraVector<AstraVectorFilter> {\n readonly #db: Db;\n\n constructor({ token, endpoint, keyspace, id }: AstraDbOptions & { id: string }) {\n super({ id });\n const client = new DataAPIClient(token);\n this.#db = client.db(endpoint, { keyspace });\n }\n\n /**\n * Creates a new collection with the specified configuration.\n *\n * @param {string} indexName - The name of the collection to create.\n * @param {number} dimension - The dimension of the vectors to be stored in the collection.\n * @param {'cosine' | 'euclidean' | 'dotproduct'} [metric=cosine] - The metric to use to sort vectors in the collection.\n * @returns {Promise<void>} A promise that resolves when the collection is created.\n */\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new MastraError({\n id: 'ASTRA_VECTOR_CREATE_INDEX_INVALID_DIMENSION',\n text: 'Dimension must be a positive integer',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n });\n }\n try {\n await this.#db.createCollection(indexName, {\n vector: {\n dimension,\n metric: metricMap[metric],\n },\n checkExists: false,\n });\n } catch (error: any) {\n new MastraError(\n {\n id: 'ASTRA_VECTOR_CREATE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Inserts or updates vectors in the specified collection.\n *\n * @param {string} indexName - The name of the collection to upsert into.\n * @param {number[][]} vectors - An array of vectors to upsert.\n * @param {Record<string, any>[]} [metadata] - An optional array of metadata objects corresponding to each vector.\n * @param {string[]} [ids] - An optional array of IDs corresponding to each vector. If not provided, new IDs will be generated.\n * @returns {Promise<string[]>} A promise that resolves to an array of IDs of the upserted vectors.\n */\n async upsert({ indexName, vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n const collection = this.#db.collection(indexName);\n\n // Generate IDs if not provided\n const vectorIds = ids || vectors.map(() => UUID.v7().toString());\n\n const records = vectors.map((vector, i) => ({\n id: vectorIds[i],\n $vector: vector,\n metadata: metadata?.[i] || {},\n }));\n\n try {\n await collection.insertMany(records);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_UPSERT_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n return vectorIds;\n }\n\n transformFilter(filter?: AstraVectorFilter) {\n const translator = new AstraFilterTranslator();\n return translator.translate(filter);\n }\n\n /**\n * Queries the specified collection using a vector and optional filter.\n *\n * @param {string} indexName - The name of the collection to query.\n * @param {number[]} queryVector - The vector to query with.\n * @param {number} [topK] - The maximum number of results to return.\n * @param {Record<string, any>} [filter] - An optional filter to apply to the query. For more on filters in Astra DB, see the filtering reference: https://docs.datastax.com/en/astra-db-serverless/api-reference/documents.html#operators\n * @param {boolean} [includeVectors=false] - Whether to include the vectors in the response.\n * @returns {Promise<QueryResult[]>} A promise that resolves to an array of query results.\n */\n async query({\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n }: AstraQueryVectorParams): Promise<QueryResult[]> {\n const collection = this.#db.collection(indexName);\n\n const translatedFilter = this.transformFilter(filter);\n\n try {\n const cursor = collection.find(translatedFilter ?? {}, {\n sort: { $vector: queryVector },\n limit: topK,\n includeSimilarity: true,\n projection: {\n $vector: includeVector ? true : false,\n },\n });\n\n const results = await cursor.toArray();\n\n return results.map(result => ({\n id: result.id,\n score: result.$similarity,\n metadata: result.metadata,\n ...(includeVector && { vector: result.$vector }),\n }));\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_QUERY_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Lists all collections in the database.\n *\n * @returns {Promise<string[]>} A promise that resolves to an array of collection names.\n */\n async listIndexes(): Promise<string[]> {\n try {\n return await this.#db.listCollections({ nameOnly: true });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_LIST_INDEXES_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\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 const collection = this.#db.collection(indexName);\n try {\n const optionsPromise = collection.options();\n const countPromise = collection.countDocuments({}, 100);\n const [options, count] = await Promise.all([optionsPromise, countPromise]);\n\n const keys = Object.keys(metricMap) as (keyof typeof metricMap)[];\n const metric = keys.find(key => metricMap[key] === options.vector?.metric);\n return {\n dimension: options.vector?.dimension!,\n metric,\n count: count,\n };\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DESCRIBE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes the specified collection.\n *\n * @param {string} indexName - The name of the collection to delete.\n * @returns {Promise<void>} A promise that resolves when the collection is deleted.\n */\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n const collection = this.#db.collection(indexName);\n try {\n await collection.drop();\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DELETE_INDEX_DB_ERROR',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\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({ indexName, id, update }: UpdateVectorParams): Promise<void> {\n if (!update.vector && !update.metadata) {\n throw new MastraError({\n id: 'ASTRA_VECTOR_UPDATE_NO_PAYLOAD',\n text: 'No updates provided for vector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: { indexName, id },\n });\n }\n\n try {\n const collection = this.#db.collection(indexName);\n const updateDoc: Record<string, any> = {};\n\n if (update.vector) {\n updateDoc.$vector = update.vector;\n }\n\n if (update.metadata) {\n updateDoc.metadata = update.metadata;\n }\n\n await collection.findOneAndUpdate({ id }, { $set: updateDoc });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_UPDATE_FAILED_UNHANDLED',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id },\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({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = this.#db.collection(indexName);\n await collection.deleteOne({ id });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'ASTRA_VECTOR_DELETE_FAILED',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName, id },\n },\n error,\n );\n }\n }\n}\n","/**\n * Vector store specific prompt that details supported operators and examples.\n * This prompt helps users construct valid filters for Astra Vector.\n */\nexport const ASTRA_PROMPT = `When querying Astra, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in array\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in array\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in array\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n\nLogical Operators:\n- $and: Logical AND (can be implicit or explicit)\n Implicit Example: { \"price\": { \"$gt\": 100 }, \"category\": \"electronics\" }\n Explicit Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n\nElement Operators:\n- $exists: Check if field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n\nRestrictions:\n- Regex patterns are not supported\n- Only $and, $or, and $not logical operators are supported\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Empty arrays in $in/$nin will return no results\n- A non-empty array is required for $all operator\n- Only logical operators ($and, $or, $not) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [...] }\n Invalid: { \"$gt\": 100 }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be an object\n - Cannot be empty\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"category\": { \"$in\": [\"electronics\", \"computers\"] } },\n { \"price\": { \"$gte\": 100, \"$lte\": 1000 } },\n { \"tags\": { \"$all\": [\"premium\"] } },\n { \"rating\": { \"$exists\": true, \"$gt\": 4 } },\n { \"$or\": [\n { \"stock\": { \"$gt\": 0 } },\n { \"preorder\": true }\n ]}\n ]\n}`;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vector/filter.ts","../src/vector/index.ts","../src/vector/prompt.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { BaseFilterTranslator } from '@mastra/core/vector/filter';\nimport type {\n VectorFilter,\n OperatorSupport,\n QueryOperator,\n OperatorValueMap,\n LogicalOperatorValueMap,\n BlacklistedRootOperators,\n} from '@mastra/core/vector/filter';\n\ntype AstraOperatorValueMap = Omit<OperatorValueMap, '$elemMatch' | '$regex' | '$options'> & {\n $size: number; // Astra-specific\n};\n\ntype AstraLogicalOperatorValueMap = Omit<LogicalOperatorValueMap, '$nor'>;\n\ntype AstraBlacklisted = BlacklistedRootOperators | '$nor' | '$size';\n\nexport type AstraVectorFilter = VectorFilter<\n keyof AstraOperatorValueMap,\n AstraOperatorValueMap,\n AstraLogicalOperatorValueMap,\n AstraBlacklisted\n>;\n\n/**\n * Translator for Astra DB filter queries.\n * Maintains MongoDB-compatible syntax while ensuring proper validation\n * and normalization of values.\n */\nexport class AstraFilterTranslator extends BaseFilterTranslator<AstraVectorFilter> {\n protected override getSupportedOperators(): OperatorSupport {\n return {\n ...BaseFilterTranslator.DEFAULT_OPERATORS,\n array: ['$all', '$in', '$nin'],\n logical: ['$and', '$or', '$not'],\n regex: [],\n custom: ['$size'],\n };\n }\n\n translate(filter?: AstraVectorFilter): AstraVectorFilter {\n if (this.isEmpty(filter)) return filter;\n this.validateFilter(filter);\n\n return this.translateNode(filter);\n }\n\n private translateNode(node: AstraVectorFilter): any {\n // Handle primitive values and arrays\n if (this.isRegex(node)) {\n throw new Error('Regex is not supported in Astra DB');\n }\n if (this.isPrimitive(node) || Array.isArray(node)) {\n return node;\n }\n\n const entries = Object.entries(node as Record<string, any>);\n const translatedEntries = entries.map(([key, value]) => {\n // Handle operators\n if (this.isOperator(key)) {\n return [key, this.translateOperatorValue(key, value)];\n }\n\n // Handle nested paths and objects\n return [key, this.translateNode(value)];\n });\n\n return Object.fromEntries(translatedEntries);\n }\n\n private translateOperatorValue(operator: QueryOperator, value: any): any {\n if (this.isBasicOperator(operator) || this.isNumericOperator(operator)) {\n return this.normalizeComparisonValue(value);\n }\n\n if (this.isArrayOperator(operator) && Array.isArray(value)) {\n return this.normalizeArrayValues(value);\n }\n\n return this.translateNode(value);\n }\n}\n","import type { Db } from '@datastax/astra-db-ts';\nimport { DataAPIClient, UUID } from '@datastax/astra-db-ts';\nimport { MastraError, ErrorDomain, ErrorCategory } 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 { AstraVectorFilter } from './filter';\nimport { AstraFilterTranslator } from './filter';\n\n// Mastra and Astra DB agree on cosine and euclidean, but Astra DB uses dot_product instead of dotproduct.\nconst metricMap = {\n cosine: 'cosine',\n euclidean: 'euclidean',\n dotproduct: 'dot_product',\n} as const;\n\nexport interface AstraDbOptions {\n token: string;\n endpoint: string;\n keyspace?: string;\n}\n\ntype AstraQueryVectorParams = QueryVectorParams<AstraVectorFilter>;\n\nexport class AstraVector extends MastraVector<AstraVectorFilter> {\n readonly #db: Db;\n\n constructor({ token, endpoint, keyspace, id }: AstraDbOptions & { id: string }) {\n super({ id });\n const client = new DataAPIClient(token);\n this.#db = client.db(endpoint, { keyspace });\n }\n\n /**\n * Creates a new collection with the specified configuration.\n *\n * @param {string} indexName - The name of the collection to create.\n * @param {number} dimension - The dimension of the vectors to be stored in the collection.\n * @param {'cosine' | 'euclidean' | 'dotproduct'} [metric=cosine] - The metric to use to sort vectors in the collection.\n * @returns {Promise<void>} A promise that resolves when the collection is created.\n */\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'CREATE_INDEX', 'INVALID_DIMENSION'),\n text: 'Dimension must be a positive integer',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n });\n }\n try {\n await this.#db.createCollection(indexName, {\n vector: {\n dimension,\n metric: metricMap[metric],\n },\n checkExists: false,\n });\n } catch (error: any) {\n new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'CREATE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Inserts or updates vectors in the specified collection.\n *\n * @param {string} indexName - The name of the collection to upsert into.\n * @param {number[][]} vectors - An array of vectors to upsert.\n * @param {Record<string, any>[]} [metadata] - An optional array of metadata objects corresponding to each vector.\n * @param {string[]} [ids] - An optional array of IDs corresponding to each vector. If not provided, new IDs will be generated.\n * @returns {Promise<string[]>} A promise that resolves to an array of IDs of the upserted vectors.\n */\n async upsert({ indexName, vectors, metadata, ids }: UpsertVectorParams): Promise<string[]> {\n const collection = this.#db.collection(indexName);\n\n // Generate IDs if not provided\n const vectorIds = ids || vectors.map(() => UUID.v7().toString());\n\n const records = vectors.map((vector, i) => ({\n id: vectorIds[i],\n $vector: vector,\n metadata: metadata?.[i] || {},\n }));\n\n try {\n await collection.insertMany(records);\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'UPSERT', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n return vectorIds;\n }\n\n transformFilter(filter?: AstraVectorFilter) {\n const translator = new AstraFilterTranslator();\n return translator.translate(filter);\n }\n\n /**\n * Queries the specified collection using a vector and optional filter.\n *\n * @param {string} indexName - The name of the collection to query.\n * @param {number[]} queryVector - The vector to query with.\n * @param {number} [topK] - The maximum number of results to return.\n * @param {Record<string, any>} [filter] - An optional filter to apply to the query. For more on filters in Astra DB, see the filtering reference: https://docs.datastax.com/en/astra-db-serverless/api-reference/documents.html#operators\n * @param {boolean} [includeVectors=false] - Whether to include the vectors in the response.\n * @returns {Promise<QueryResult[]>} A promise that resolves to an array of query results.\n */\n async query({\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n }: AstraQueryVectorParams): Promise<QueryResult[]> {\n const collection = this.#db.collection(indexName);\n\n const translatedFilter = this.transformFilter(filter);\n\n try {\n const cursor = collection.find(translatedFilter ?? {}, {\n sort: { $vector: queryVector },\n limit: topK,\n includeSimilarity: true,\n projection: {\n $vector: includeVector ? true : false,\n },\n });\n\n const results = await cursor.toArray();\n\n return results.map(result => ({\n id: result.id,\n score: result.$similarity,\n metadata: result.metadata,\n ...(includeVector && { vector: result.$vector }),\n }));\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'QUERY', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Lists all collections in the database.\n *\n * @returns {Promise<string[]>} A promise that resolves to an array of collection names.\n */\n async listIndexes(): Promise<string[]> {\n try {\n return await this.#db.listCollections({ nameOnly: true });\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'LIST_INDEXES', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\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 const collection = this.#db.collection(indexName);\n try {\n const optionsPromise = collection.options();\n const countPromise = collection.countDocuments({}, 100);\n const [options, count] = await Promise.all([optionsPromise, countPromise]);\n\n const keys = Object.keys(metricMap) as (keyof typeof metricMap)[];\n const metric = keys.find(key => metricMap[key] === options.vector?.metric);\n return {\n dimension: options.vector?.dimension!,\n metric,\n count: count,\n };\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DESCRIBE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\n },\n error,\n );\n }\n }\n\n /**\n * Deletes the specified collection.\n *\n * @param {string} indexName - The name of the collection to delete.\n * @returns {Promise<void>} A promise that resolves when the collection is deleted.\n */\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n const collection = this.#db.collection(indexName);\n try {\n await collection.drop();\n } catch (error: any) {\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DELETE_INDEX', 'DB_ERROR'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: { indexName },\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({ indexName, id, update }: UpdateVectorParams): Promise<void> {\n if (!id) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'NO_ID'),\n text: 'id is required for Astra updateVector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n\n if (!update.vector && !update.metadata) {\n throw new MastraError({\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'NO_PAYLOAD'),\n text: 'No updates provided for vector',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.USER,\n details: {\n indexName,\n id,\n },\n });\n }\n\n try {\n const collection = this.#db.collection(indexName);\n const updateDoc: Record<string, any> = {};\n\n if (update.vector) {\n updateDoc.$vector = update.vector;\n }\n\n if (update.metadata) {\n updateDoc.metadata = update.metadata;\n }\n\n await collection.findOneAndUpdate({ id }, { $set: updateDoc });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'UPDATE_VECTOR', 'FAILED_UNHANDLED'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\n ...(id && { id }),\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({ indexName, id }: DeleteVectorParams): Promise<void> {\n try {\n const collection = this.#db.collection(indexName);\n await collection.deleteOne({ id });\n } catch (error: any) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createVectorErrorId('ASTRA', 'DELETE_VECTOR', 'FAILED'),\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n indexName,\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('ASTRA', 'DELETE_VECTORS', 'NOT_SUPPORTED'),\n text: 'deleteVectors is not yet implemented for Astra vector store',\n domain: ErrorDomain.MASTRA_VECTOR,\n category: ErrorCategory.SYSTEM,\n details: {\n indexName,\n ...(filter && { filter: JSON.stringify(filter) }),\n ...(ids && { idsCount: ids.length }),\n },\n });\n }\n}\n","/**\n * Vector store specific prompt that details supported operators and examples.\n * This prompt helps users construct valid filters for Astra Vector.\n */\nexport const ASTRA_PROMPT = `When querying Astra, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in array\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in array\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in array\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n\nLogical Operators:\n- $and: Logical AND (can be implicit or explicit)\n Implicit Example: { \"price\": { \"$gt\": 100 }, \"category\": \"electronics\" }\n Explicit Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n\nElement Operators:\n- $exists: Check if field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n\nRestrictions:\n- Regex patterns are not supported\n- Only $and, $or, and $not logical operators are supported\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Empty arrays in $in/$nin will return no results\n- A non-empty array is required for $all operator\n- Only logical operators ($and, $or, $not) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [...] }\n Invalid: { \"$gt\": 100 }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be an object\n - Cannot be empty\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"category\": { \"$in\": [\"electronics\", \"computers\"] } },\n { \"price\": { \"$gte\": 100, \"$lte\": 1000 } },\n { \"tags\": { \"$all\": [\"premium\"] } },\n { \"rating\": { \"$exists\": true, \"$gt\": 4 } },\n { \"$or\": [\n { \"stock\": { \"$gt\": 0 } },\n { \"preorder\": true }\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 { AstraVectorFilter } from './filter.js';
|
|
4
4
|
export interface AstraDbOptions {
|
|
5
5
|
token: string;
|
|
@@ -82,6 +82,7 @@ export declare class AstraVector extends MastraVector<AstraVectorFilter> {
|
|
|
82
82
|
* @throws Will throw an error if the deletion operation fails.
|
|
83
83
|
*/
|
|
84
84
|
deleteVector({ indexName, id }: DeleteVectorParams): Promise<void>;
|
|
85
|
+
deleteVectors({ indexName, filter, ids }: DeleteVectorsParams): Promise<void>;
|
|
85
86
|
}
|
|
86
87
|
export {};
|
|
87
88
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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":"AAIA,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,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAUlD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,sBAAsB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAEnE,qBAAa,WAAY,SAAQ,YAAY,CAAC,iBAAiB,CAAC;;gBAGlD,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAM9E;;;;;;;OAOG;IACG,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAiB,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhG;;;;;;;;OAQG;IACG,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B1F,eAAe,CAAC,MAAM,CAAC,EAAE,iBAAiB;IAK1C;;;;;;;;;OASG;IACG,KAAK,CAAC,EACV,SAAS,EACT,WAAW,EACX,IAAS,EACT,MAAM,EACN,aAAqB,GACtB,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoClD;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAetC;;;;;OAKG;IACG,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B5E;;;;;OAKG;IACG,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlE;;;;;;;;;OASG;IACG,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDhF;;;;;;OAMG;IACG,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlE,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAapF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/astra",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"description": "Astra DB provider for Mastra - includes vector store capabilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,14 +28,16 @@
|
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@microsoft/api-extractor": "^7.52.8",
|
|
31
|
-
"@types/node": "
|
|
31
|
+
"@types/node": "22.13.17",
|
|
32
|
+
"@vitest/coverage-v8": "4.0.12",
|
|
33
|
+
"@vitest/ui": "4.0.12",
|
|
32
34
|
"eslint": "^9.37.0",
|
|
33
35
|
"tsup": "^8.5.0",
|
|
34
36
|
"typescript": "^5.8.3",
|
|
35
|
-
"vitest": "
|
|
36
|
-
"@internal/types-builder": "0.0.28",
|
|
37
|
+
"vitest": "4.0.12",
|
|
37
38
|
"@internal/lint": "0.0.53",
|
|
38
|
-
"@
|
|
39
|
+
"@internal/types-builder": "0.0.28",
|
|
40
|
+
"@mastra/core": "1.0.0-beta.7"
|
|
39
41
|
},
|
|
40
42
|
"peerDependencies": {
|
|
41
43
|
"@mastra/core": ">=1.0.0-0 <2.0.0-0"
|