@mastra/qdrant 0.11.19 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,31 +1,36 @@
1
1
  # @mastra/qdrant
2
2
 
3
- ## 0.11.19
3
+ ## 1.0.0-beta.1
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - update peerdeps ([`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc))
7
+ - Add new deleteVectors, updateVector by filter ([#10408](https://github.com/mastra-ai/mastra/pull/10408))
8
8
 
9
- - Updated dependencies [[`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc), [`6d7e90d`](https://github.com/mastra-ai/mastra/commit/6d7e90db09713e6250f4d6c3d3cff1b4740e50f9), [`f78b908`](https://github.com/mastra-ai/mastra/commit/f78b9080e11af765969b36b4a619761056030840), [`23c2614`](https://github.com/mastra-ai/mastra/commit/23c26140fdbf04b8c59e8d7d52106d67dad962ec), [`e365eda`](https://github.com/mastra-ai/mastra/commit/e365eda45795b43707310531cac1e2ce4e5a0712)]:
10
- - @mastra/core@0.24.0
9
+ - 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)]:
10
+ - @mastra/core@1.0.0-beta.5
11
11
 
12
- ## 0.11.19-alpha.0
12
+ ## 1.0.0-beta.0
13
13
 
14
- ### Patch Changes
14
+ ### Major Changes
15
15
 
16
- - update peerdeps ([`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc))
16
+ - Every Mastra primitive (agent, MCPServer, workflow, tool, processor, scorer, and vector) now has a get, list, and add method associated with it. Each primitive also now requires an id to be set. ([#9675](https://github.com/mastra-ai/mastra/pull/9675))
17
17
 
18
- - Updated dependencies [[`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc), [`6d7e90d`](https://github.com/mastra-ai/mastra/commit/6d7e90db09713e6250f4d6c3d3cff1b4740e50f9), [`f78b908`](https://github.com/mastra-ai/mastra/commit/f78b9080e11af765969b36b4a619761056030840), [`23c2614`](https://github.com/mastra-ai/mastra/commit/23c26140fdbf04b8c59e8d7d52106d67dad962ec), [`e365eda`](https://github.com/mastra-ai/mastra/commit/e365eda45795b43707310531cac1e2ce4e5a0712)]:
19
- - @mastra/core@0.24.0-alpha.0
18
+ Primitives that are added to other primitives are also automatically added to the Mastra instance
20
19
 
21
- ## 0.11.18
20
+ - Bump minimum required Node.js version to 22.13.0 ([#9706](https://github.com/mastra-ai/mastra/pull/9706))
22
21
 
23
- ### Patch Changes
22
+ - Removed old tracing code based on OpenTelemetry ([#9237](https://github.com/mastra-ai/mastra/pull/9237))
24
23
 
25
- - Fix peerdependencies ([`eb7c1c8`](https://github.com/mastra-ai/mastra/commit/eb7c1c8c592d8fb16dfd250e337d9cdc73c8d5de))
24
+ - Mark as stable ([`83d5942`](https://github.com/mastra-ai/mastra/commit/83d5942669ce7bba4a6ca4fd4da697a10eb5ebdc))
26
25
 
27
- - Updated dependencies []:
28
- - @mastra/core@0.23.1
26
+ ### Minor Changes
27
+
28
+ - Update peer dependencies to match core package version bump (1.0.0) ([#9237](https://github.com/mastra-ai/mastra/pull/9237))
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [[`39c9743`](https://github.com/mastra-ai/mastra/commit/39c97432d084294f8ba85fbf3ef28098ff21459e), [`f743dbb`](https://github.com/mastra-ai/mastra/commit/f743dbb8b40d1627b5c10c0e6fc154f4ebb6e394), [`fec5129`](https://github.com/mastra-ai/mastra/commit/fec5129de7fc64423ea03661a56cef31dc747a0d), [`0491e7c`](https://github.com/mastra-ai/mastra/commit/0491e7c9b714cb0ba22187ee062147ec2dd7c712), [`f6f4903`](https://github.com/mastra-ai/mastra/commit/f6f4903397314f73362061dc5a3e8e7c61ea34aa), [`0e8ed46`](https://github.com/mastra-ai/mastra/commit/0e8ed467c54d6901a6a365f270ec15d6faadb36c), [`6c049d9`](https://github.com/mastra-ai/mastra/commit/6c049d94063fdcbd5b81c4912a2bf82a92c9cc0b), [`2f897df`](https://github.com/mastra-ai/mastra/commit/2f897df208508f46f51b7625e5dd20c37f93e0e3), [`3443770`](https://github.com/mastra-ai/mastra/commit/3443770662df8eb24c9df3589b2792d78cfcb811), [`f0a07e0`](https://github.com/mastra-ai/mastra/commit/f0a07e0111b3307c5fabfa4094c5c2cfb734fbe6), [`aaa40e7`](https://github.com/mastra-ai/mastra/commit/aaa40e788628b319baa8e889407d11ad626547fa), [`1521d71`](https://github.com/mastra-ai/mastra/commit/1521d716e5daedc74690c983fbd961123c56756b), [`9e1911d`](https://github.com/mastra-ai/mastra/commit/9e1911db2b4db85e0e768c3f15e0d61e319869f6), [`ebac155`](https://github.com/mastra-ai/mastra/commit/ebac15564a590117db7078233f927a7e28a85106), [`dd1c38d`](https://github.com/mastra-ai/mastra/commit/dd1c38d1b75f1b695c27b40d8d9d6ed00d5e0f6f), [`5948e6a`](https://github.com/mastra-ai/mastra/commit/5948e6a5146c83666ba3f294b2be576c82a513fb), [`8940859`](https://github.com/mastra-ai/mastra/commit/89408593658199b4ad67f7b65e888f344e64a442), [`e629310`](https://github.com/mastra-ai/mastra/commit/e629310f1a73fa236d49ec7a1d1cceb6229dc7cc), [`4c6b492`](https://github.com/mastra-ai/mastra/commit/4c6b492c4dd591c6a592520c1f6855d6e936d71f), [`dff01d8`](https://github.com/mastra-ai/mastra/commit/dff01d81ce1f4e4087cfac20fa868e6db138dd14), [`9d819d5`](https://github.com/mastra-ai/mastra/commit/9d819d54b61481639f4008e4694791bddf187edd), [`71c8d6c`](https://github.com/mastra-ai/mastra/commit/71c8d6c161253207b2b9588bdadb7eed604f7253), [`6179a9b`](https://github.com/mastra-ai/mastra/commit/6179a9ba36ffac326de3cc3c43cdc8028d37c251), [`00f4921`](https://github.com/mastra-ai/mastra/commit/00f4921dd2c91a1e5446799599ef7116a8214a1a), [`ca8041c`](https://github.com/mastra-ai/mastra/commit/ca8041cce0379fda22ed293a565bcb5b6ddca68a), [`7051bf3`](https://github.com/mastra-ai/mastra/commit/7051bf38b3b122a069008f861f7bfc004a6d9f6e), [`a8f1494`](https://github.com/mastra-ai/mastra/commit/a8f1494f4bbdc2770bcf327d4c7d869e332183f1), [`0793497`](https://github.com/mastra-ai/mastra/commit/079349753620c40246ffd673e3f9d7d9820beff3), [`5df9cce`](https://github.com/mastra-ai/mastra/commit/5df9cce1a753438413f64c11eeef8f845745c2a8), [`a854ede`](https://github.com/mastra-ai/mastra/commit/a854ede62bf5ac0945a624ac48913dd69c73aabf), [`c576fc0`](https://github.com/mastra-ai/mastra/commit/c576fc0b100b2085afded91a37c97a0ea0ec09c7), [`3defc80`](https://github.com/mastra-ai/mastra/commit/3defc80cf2b88a1b7fc1cc4ddcb91e982a614609), [`16153fe`](https://github.com/mastra-ai/mastra/commit/16153fe7eb13c99401f48e6ca32707c965ee28b9), [`9f4a683`](https://github.com/mastra-ai/mastra/commit/9f4a6833e88b52574665c028fd5508ad5c2f6004), [`bc94344`](https://github.com/mastra-ai/mastra/commit/bc943444a1342d8a662151b7bce1df7dae32f59c), [`57d157f`](https://github.com/mastra-ai/mastra/commit/57d157f0b163a95c3e6c9eae31bdb11d1bfc64f9), [`903f67d`](https://github.com/mastra-ai/mastra/commit/903f67d184504a273893818c02b961f5423a79ad), [`2a90c55`](https://github.com/mastra-ai/mastra/commit/2a90c55a86a9210697d5adaab5ee94584b079adc), [`eb09742`](https://github.com/mastra-ai/mastra/commit/eb09742197f66c4c38154c3beec78313e69760b2), [`96d35f6`](https://github.com/mastra-ai/mastra/commit/96d35f61376bc2b1bf148648a2c1985bd51bef55), [`5cbe88a`](https://github.com/mastra-ai/mastra/commit/5cbe88aefbd9f933bca669fd371ea36bf939ac6d), [`a1bd7b8`](https://github.com/mastra-ai/mastra/commit/a1bd7b8571db16b94eb01588f451a74758c96d65), [`d78b38d`](https://github.com/mastra-ai/mastra/commit/d78b38d898fce285260d3bbb4befade54331617f), [`0633100`](https://github.com/mastra-ai/mastra/commit/0633100a911ad22f5256471bdf753da21c104742), [`c710c16`](https://github.com/mastra-ai/mastra/commit/c710c1652dccfdc4111c8412bca7a6bb1d48b441), [`354ad0b`](https://github.com/mastra-ai/mastra/commit/354ad0b7b1b8183ac567f236a884fc7ede6d7138), [`cfae733`](https://github.com/mastra-ai/mastra/commit/cfae73394f4920635e6c919c8e95ff9a0788e2e5), [`e3dfda7`](https://github.com/mastra-ai/mastra/commit/e3dfda7b11bf3b8c4bb55637028befb5f387fc74), [`844ea5d`](https://github.com/mastra-ai/mastra/commit/844ea5dc0c248961e7bf73629ae7dcff503e853c), [`398fde3`](https://github.com/mastra-ai/mastra/commit/398fde3f39e707cda79372cdae8f9870e3b57c8d), [`f0f8f12`](https://github.com/mastra-ai/mastra/commit/f0f8f125c308f2d0fd36942ef652fd852df7522f), [`0d7618b`](https://github.com/mastra-ai/mastra/commit/0d7618bc650bf2800934b243eca5648f4aeed9c2), [`7b763e5`](https://github.com/mastra-ai/mastra/commit/7b763e52fc3eaf699c2a99f2adf418dd46e4e9a5), [`d36cfbb`](https://github.com/mastra-ai/mastra/commit/d36cfbbb6565ba5f827883cc9bb648eb14befdc1), [`3697853`](https://github.com/mastra-ai/mastra/commit/3697853deeb72017d90e0f38a93c1e29221aeca0), [`b2e45ec`](https://github.com/mastra-ai/mastra/commit/b2e45eca727a8db01a81ba93f1a5219c7183c839), [`d6d49f7`](https://github.com/mastra-ai/mastra/commit/d6d49f7b8714fa19a52ff9c7cf7fb7e73751901e), [`a534e95`](https://github.com/mastra-ai/mastra/commit/a534e9591f83b3cc1ebff99c67edf4cda7bf81d3), [`9d0e7fe`](https://github.com/mastra-ai/mastra/commit/9d0e7feca8ed98de959f53476ee1456073673348), [`53d927c`](https://github.com/mastra-ai/mastra/commit/53d927cc6f03bff33655b7e2b788da445a08731d), [`3f2faf2`](https://github.com/mastra-ai/mastra/commit/3f2faf2e2d685d6c053cc5af1bf9fedf267b2ce5), [`22f64bc`](https://github.com/mastra-ai/mastra/commit/22f64bc1d37149480b58bf2fefe35b79a1e3e7d5), [`83d5942`](https://github.com/mastra-ai/mastra/commit/83d5942669ce7bba4a6ca4fd4da697a10eb5ebdc), [`b7959e6`](https://github.com/mastra-ai/mastra/commit/b7959e6e25a46b480f9ea2217c4c6c588c423791), [`bda6370`](https://github.com/mastra-ai/mastra/commit/bda637009360649aaf579919e7873e33553c273e), [`d7acd8e`](https://github.com/mastra-ai/mastra/commit/d7acd8e987b5d7eff4fd98b0906c17c06a2e83d5), [`c7f1f7d`](https://github.com/mastra-ai/mastra/commit/c7f1f7d24f61f247f018cc2d1f33bf63212959a7), [`0bddc6d`](https://github.com/mastra-ai/mastra/commit/0bddc6d8dbd6f6008c0cba2e4960a2da75a55af1), [`735d8c1`](https://github.com/mastra-ai/mastra/commit/735d8c1c0d19fbc09e6f8b66cf41bc7655993838), [`acf322e`](https://github.com/mastra-ai/mastra/commit/acf322e0f1fd0189684cf529d91c694bea918a45), [`c942802`](https://github.com/mastra-ai/mastra/commit/c942802a477a925b01859a7b8688d4355715caaa), [`a0c8c1b`](https://github.com/mastra-ai/mastra/commit/a0c8c1b87d4fee252aebda73e8637fbe01d761c9), [`cc34739`](https://github.com/mastra-ai/mastra/commit/cc34739c34b6266a91bea561119240a7acf47887), [`c218bd3`](https://github.com/mastra-ai/mastra/commit/c218bd3759e32423735b04843a09404572631014), [`2c4438b`](https://github.com/mastra-ai/mastra/commit/2c4438b87817ab7eed818c7990fef010475af1a3), [`2b8893c`](https://github.com/mastra-ai/mastra/commit/2b8893cb108ef9acb72ee7835cd625610d2c1a4a), [`8e5c75b`](https://github.com/mastra-ai/mastra/commit/8e5c75bdb1d08a42d45309a4c72def4b6890230f), [`e59e0d3`](https://github.com/mastra-ai/mastra/commit/e59e0d32afb5fcf2c9f3c00c8f81f6c21d3a63fa), [`fa8409b`](https://github.com/mastra-ai/mastra/commit/fa8409bc39cfd8ba6643b9db5269b90b22e2a2f7), [`173c535`](https://github.com/mastra-ai/mastra/commit/173c535c0645b0da404fe09f003778f0b0d4e019)]:
33
+ - @mastra/core@1.0.0-beta.0
29
34
 
30
35
  ## 0.11.17
31
36
 
package/README.md CHANGED
@@ -72,6 +72,9 @@ The following distance metrics are supported:
72
72
  - `createIndex({ indexName, dimension, metric? })`: Create a new collection
73
73
  - `upsert({ indexName, vectors, metadata?, ids? })`: Add or update vectors
74
74
  - `query({ indexName, queryVector, topK?, filter?, includeVector? })`: Search for similar vectors
75
+ - `updateVector({ indexName, id?, filter?, update })`: Update a single vector by ID or metadata filter
76
+ - `deleteVector({ indexName, id })`: Delete a single vector by ID
77
+ - `deleteVectors({ indexName, ids?, filter? })`: Delete multiple vectors by IDs or metadata filter
75
78
  - `listIndexes()`: List all collections
76
79
  - `describeIndex(indexName)`: Get collection statistics
77
80
  - `deleteIndex(indexName)`: Delete a collection
package/dist/index.cjs CHANGED
@@ -242,25 +242,14 @@ var QdrantVector = class extends vector.MastraVector {
242
242
  client;
243
243
  /**
244
244
  * Creates a new QdrantVector client.
245
+ * @param id - The unique identifier for this vector store instance.
245
246
  * @param url - The URL of the Qdrant server.
246
247
  * @param apiKey - The API key for Qdrant.
247
248
  * @param https - Whether to use HTTPS.
248
249
  */
249
- constructor({ url, apiKey, https, ...rest }) {
250
- super();
251
- const baseClient = new jsClientRest.QdrantClient({
252
- url,
253
- apiKey,
254
- https,
255
- ...rest
256
- });
257
- const telemetry = this.__getTelemetry();
258
- this.client = telemetry?.traceClass(baseClient, {
259
- spanNamePrefix: "qdrant-vector",
260
- attributes: {
261
- "vector.type": "qdrant"
262
- }
263
- }) ?? baseClient;
250
+ constructor({ id, ...qdrantParams }) {
251
+ super({ id });
252
+ this.client = new jsClientRest.QdrantClient(qdrantParams);
264
253
  }
265
254
  async upsert({ indexName, vectors, metadata, ids }) {
266
255
  const pointIds = ids || vectors.map(() => crypto.randomUUID());
@@ -429,6 +418,11 @@ var QdrantVector = class extends vector.MastraVector {
429
418
  try {
430
419
  await this.client.deleteCollection(indexName);
431
420
  } catch (error$1) {
421
+ const errorMessage = error$1?.message || error$1?.toString() || "";
422
+ if (error$1?.status === 404 || errorMessage.toLowerCase().includes("not found") || errorMessage.toLowerCase().includes("not exist")) {
423
+ this.logger.info(`Collection ${indexName} does not exist, treating as already deleted`);
424
+ return;
425
+ }
432
426
  throw new error.MastraError(
433
427
  {
434
428
  id: "STORAGE_QDRANT_VECTOR_DELETE_INDEX_FAILED",
@@ -441,66 +435,143 @@ var QdrantVector = class extends vector.MastraVector {
441
435
  }
442
436
  }
443
437
  /**
444
- * Updates a vector by its ID with the provided vector and/or metadata.
445
- * @param indexName - The name of the index containing the vector.
446
- * @param id - The ID of the vector to update.
438
+ * Updates a vector by its ID or multiple vectors matching a filter.
439
+ * @param indexName - The name of the index containing the vector(s).
440
+ * @param id - The ID of the vector to update (mutually exclusive with filter).
441
+ * @param filter - Filter to match multiple vectors to update (mutually exclusive with id).
447
442
  * @param update - An object containing the vector and/or metadata to update.
448
443
  * @param update.vector - An optional array of numbers representing the new vector.
449
444
  * @param update.metadata - An optional record containing the new metadata.
450
445
  * @returns A promise that resolves when the update is complete.
451
446
  * @throws Will throw an error if no updates are provided or if the update operation fails.
452
447
  */
453
- async updateVector({ indexName, id, update }) {
454
- try {
455
- if (!update.vector && !update.metadata) {
456
- throw new Error("No updates provided");
457
- }
458
- } catch (validationError) {
459
- throw new error.MastraError(
460
- {
461
- id: "STORAGE_QDRANT_VECTOR_UPDATE_VECTOR_INVALID_ARGS",
462
- domain: error.ErrorDomain.STORAGE,
463
- category: error.ErrorCategory.USER,
464
- details: { indexName, id }
465
- },
466
- validationError
467
- );
448
+ async updateVector({ indexName, id, filter, update }) {
449
+ if (id && filter) {
450
+ throw new error.MastraError({
451
+ id: "STORAGE_QDRANT_VECTOR_UPDATE_MUTUALLY_EXCLUSIVE",
452
+ text: "Cannot specify both id and filter - they are mutually exclusive",
453
+ domain: error.ErrorDomain.STORAGE,
454
+ category: error.ErrorCategory.USER,
455
+ details: { indexName }
456
+ });
457
+ }
458
+ if (!id && !filter) {
459
+ throw new error.MastraError({
460
+ id: "STORAGE_QDRANT_VECTOR_UPDATE_NO_TARGET",
461
+ text: "Either id or filter must be provided",
462
+ domain: error.ErrorDomain.STORAGE,
463
+ category: error.ErrorCategory.USER,
464
+ details: { indexName }
465
+ });
466
+ }
467
+ if (!update.vector && !update.metadata) {
468
+ throw new error.MastraError({
469
+ id: "STORAGE_QDRANT_VECTOR_UPDATE_NO_PAYLOAD",
470
+ text: "No updates provided",
471
+ domain: error.ErrorDomain.STORAGE,
472
+ category: error.ErrorCategory.USER,
473
+ details: {
474
+ indexName,
475
+ ...id && { id }
476
+ }
477
+ });
478
+ }
479
+ if (filter && Object.keys(filter).length === 0) {
480
+ throw new error.MastraError({
481
+ id: "STORAGE_QDRANT_VECTOR_UPDATE_EMPTY_FILTER",
482
+ text: "Filter cannot be an empty filter object",
483
+ domain: error.ErrorDomain.STORAGE,
484
+ category: error.ErrorCategory.USER,
485
+ details: { indexName }
486
+ });
468
487
  }
469
- const pointId = this.parsePointId(id);
470
488
  try {
471
- if (update.metadata && !update.vector) {
472
- await this.client.setPayload(indexName, { payload: update.metadata, points: [pointId] });
473
- return;
474
- }
475
- if (update.vector && !update.metadata) {
476
- await this.client.updateVectors(indexName, {
477
- points: [
478
- {
479
- id: pointId,
480
- vector: update.vector
481
- }
482
- ]
483
- });
484
- return;
485
- }
486
- if (update.vector && update.metadata) {
487
- const point = {
488
- id: pointId,
489
- vector: update.vector,
490
- payload: update.metadata
491
- };
492
- await this.client.upsert(indexName, {
493
- points: [point]
494
- });
495
- return;
489
+ if (id) {
490
+ const pointId = this.parsePointId(id);
491
+ if (update.metadata && !update.vector) {
492
+ await this.client.setPayload(indexName, { payload: update.metadata, points: [pointId] });
493
+ return;
494
+ }
495
+ if (update.vector && !update.metadata) {
496
+ await this.client.updateVectors(indexName, {
497
+ points: [
498
+ {
499
+ id: pointId,
500
+ vector: update.vector
501
+ }
502
+ ]
503
+ });
504
+ return;
505
+ }
506
+ if (update.vector && update.metadata) {
507
+ const point = {
508
+ id: pointId,
509
+ vector: update.vector,
510
+ payload: update.metadata
511
+ };
512
+ await this.client.upsert(indexName, {
513
+ points: [point]
514
+ });
515
+ return;
516
+ }
517
+ } else if (filter) {
518
+ const translatedFilter = this.transformFilter(filter);
519
+ const matchingPoints = [];
520
+ let offset = void 0;
521
+ do {
522
+ const scrollResult = await this.client.scroll(indexName, {
523
+ filter: translatedFilter,
524
+ limit: 100,
525
+ offset,
526
+ with_payload: false,
527
+ with_vector: update.vector ? false : true
528
+ // Only fetch vectors if not updating them
529
+ });
530
+ matchingPoints.push(
531
+ ...scrollResult.points.map((point) => ({
532
+ id: point.id,
533
+ vector: Array.isArray(point.vector) ? point.vector : void 0
534
+ }))
535
+ );
536
+ const nextOffset = scrollResult.next_page_offset;
537
+ offset = typeof nextOffset === "string" || typeof nextOffset === "number" ? nextOffset : void 0;
538
+ } while (offset !== void 0);
539
+ if (matchingPoints.length === 0) {
540
+ return;
541
+ }
542
+ const pointIds = matchingPoints.map((p) => p.id);
543
+ if (update.metadata && !update.vector) {
544
+ await this.client.setPayload(indexName, { payload: update.metadata, points: pointIds });
545
+ return;
546
+ }
547
+ if (update.vector) {
548
+ const points = matchingPoints.map((p) => ({
549
+ id: p.id,
550
+ vector: update.vector,
551
+ payload: update.metadata || {}
552
+ }));
553
+ for (let i = 0; i < points.length; i += BATCH_SIZE) {
554
+ const batch = points.slice(i, i + BATCH_SIZE);
555
+ await this.client.upsert(indexName, {
556
+ points: batch,
557
+ wait: true
558
+ });
559
+ }
560
+ return;
561
+ }
496
562
  }
497
563
  } catch (error$1) {
564
+ if (error$1 instanceof error.MastraError) throw error$1;
498
565
  throw new error.MastraError(
499
566
  {
500
567
  id: "STORAGE_QDRANT_VECTOR_UPDATE_VECTOR_FAILED",
501
568
  domain: error.ErrorDomain.STORAGE,
502
569
  category: error.ErrorCategory.THIRD_PARTY,
503
- details: { indexName, id }
570
+ details: {
571
+ indexName,
572
+ ...id && { id },
573
+ ...filter && { filter: JSON.stringify(filter) }
574
+ }
504
575
  },
505
576
  error$1
506
577
  );
@@ -525,7 +596,10 @@ var QdrantVector = class extends vector.MastraVector {
525
596
  id: "STORAGE_QDRANT_VECTOR_DELETE_VECTOR_FAILED",
526
597
  domain: error.ErrorDomain.STORAGE,
527
598
  category: error.ErrorCategory.THIRD_PARTY,
528
- details: { indexName, id }
599
+ details: {
600
+ indexName,
601
+ ...id && { id }
602
+ }
529
603
  },
530
604
  error$1
531
605
  );
@@ -566,6 +640,90 @@ var QdrantVector = class extends vector.MastraVector {
566
640
  }
567
641
  return id;
568
642
  }
643
+ /**
644
+ * Deletes multiple vectors by IDs or filter.
645
+ * @param indexName - The name of the index containing the vectors.
646
+ * @param ids - Array of vector IDs to delete (mutually exclusive with filter).
647
+ * @param filter - Filter to match vectors to delete (mutually exclusive with ids).
648
+ * @returns A promise that resolves when the deletion is complete.
649
+ * @throws Will throw an error if both ids and filter are provided, or if neither is provided.
650
+ */
651
+ async deleteVectors({ indexName, filter, ids }) {
652
+ if (ids && filter) {
653
+ throw new error.MastraError({
654
+ id: "STORAGE_QDRANT_VECTOR_DELETE_VECTORS_MUTUALLY_EXCLUSIVE",
655
+ text: "Cannot specify both ids and filter - they are mutually exclusive",
656
+ domain: error.ErrorDomain.STORAGE,
657
+ category: error.ErrorCategory.USER,
658
+ details: { indexName }
659
+ });
660
+ }
661
+ if (!ids && !filter) {
662
+ throw new error.MastraError({
663
+ id: "STORAGE_QDRANT_VECTOR_DELETE_VECTORS_NO_TARGET",
664
+ text: "Either filter or ids must be provided",
665
+ domain: error.ErrorDomain.STORAGE,
666
+ category: error.ErrorCategory.USER,
667
+ details: { indexName }
668
+ });
669
+ }
670
+ if (ids && ids.length === 0) {
671
+ throw new error.MastraError({
672
+ id: "STORAGE_QDRANT_VECTOR_DELETE_VECTORS_EMPTY_IDS",
673
+ text: "Cannot delete with empty ids array",
674
+ domain: error.ErrorDomain.STORAGE,
675
+ category: error.ErrorCategory.USER,
676
+ details: { indexName }
677
+ });
678
+ }
679
+ if (filter && Object.keys(filter).length === 0) {
680
+ throw new error.MastraError({
681
+ id: "STORAGE_QDRANT_VECTOR_DELETE_VECTORS_EMPTY_FILTER",
682
+ text: "Cannot delete with empty filter object",
683
+ domain: error.ErrorDomain.STORAGE,
684
+ category: error.ErrorCategory.USER,
685
+ details: { indexName }
686
+ });
687
+ }
688
+ try {
689
+ if (ids) {
690
+ const pointIds = ids.map((id) => this.parsePointId(id));
691
+ try {
692
+ await this.client.delete(indexName, {
693
+ points: pointIds,
694
+ wait: true
695
+ });
696
+ } catch (error) {
697
+ const message = error?.message || error?.toString() || "";
698
+ if (message.toLowerCase().includes("bad request")) {
699
+ return;
700
+ }
701
+ throw error;
702
+ }
703
+ } else if (filter) {
704
+ const translatedFilter = this.transformFilter(filter) ?? {};
705
+ await this.client.delete(indexName, {
706
+ filter: translatedFilter,
707
+ wait: true
708
+ });
709
+ }
710
+ } catch (error$1) {
711
+ if (error$1 instanceof error.MastraError) throw error$1;
712
+ throw new error.MastraError(
713
+ {
714
+ id: "STORAGE_QDRANT_VECTOR_DELETE_VECTORS_FAILED",
715
+ domain: error.ErrorDomain.STORAGE,
716
+ category: error.ErrorCategory.THIRD_PARTY,
717
+ details: {
718
+ indexName,
719
+ ...filter && { filter: JSON.stringify(filter) },
720
+ ...ids && { idsCount: ids.length }
721
+ }
722
+ },
723
+ error$1
724
+ );
725
+ }
726
+ }
569
727
  };
570
728
 
571
729
  // src/vector/prompt.ts