@mastra/pinecone 0.1.6-alpha.0 → 0.1.6-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,23 @@
1
1
 
2
- > @mastra/pinecone@0.1.6-alpha.0 build /home/runner/work/mastra/mastra/stores/pinecone
3
- > tsup src/index.ts --format esm --experimental-dts --clean --treeshake
2
+ > @mastra/pinecone@0.1.6-alpha.3 build /home/runner/work/mastra/mastra/stores/pinecone
3
+ > tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake
4
4
 
5
5
  CLI Building entry: src/index.ts
6
6
  CLI Using tsconfig: tsconfig.json
7
7
  CLI tsup v8.3.6
8
8
  TSC Build start
9
- TSC ⚡️ Build success in 6644ms
9
+ TSC ⚡️ Build success in 6185ms
10
10
  DTS Build start
11
11
  CLI Target: es2022
12
12
  Analysis will use the bundled TypeScript version 5.7.3
13
13
  Writing package typings: /home/runner/work/mastra/mastra/stores/pinecone/dist/_tsup-dts-rollup.d.ts
14
- DTS ⚡️ Build success in 4999ms
14
+ Analysis will use the bundled TypeScript version 5.7.3
15
+ Writing package typings: /home/runner/work/mastra/mastra/stores/pinecone/dist/_tsup-dts-rollup.d.cts
16
+ DTS ⚡️ Build success in 8479ms
15
17
  CLI Cleaning output folder
16
18
  ESM Build start
17
- ESM dist/index.js 5.86 KB
18
- ESM ⚡️ Build success in 419ms
19
+ CJS Build start
20
+ CJS dist/index.cjs 6.12 KB
21
+ CJS ⚡️ Build success in 461ms
22
+ ESM dist/index.js 6.08 KB
23
+ ESM ⚡️ Build success in 562ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @mastra/pinecone
2
2
 
3
+ ## 0.1.6-alpha.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 0fd78ac: Update vector store functions to use object params
8
+ - fd14a3f: Updating filter location from @mastra/core/filter to @mastra/core/vector/filter
9
+ - c4fdac3: Updated tests for upstash and astra
10
+ - 4d4e1e1: Updated vector tests and pinecone
11
+ - bb4f447: Add support for commonjs
12
+ - Updated dependencies [0fd78ac]
13
+ - Updated dependencies [0d25b75]
14
+ - Updated dependencies [fd14a3f]
15
+ - Updated dependencies [3f369a2]
16
+ - Updated dependencies [4d4e1e1]
17
+ - Updated dependencies [bb4f447]
18
+ - @mastra/core@0.4.3-alpha.3
19
+
20
+ ## 0.1.6-alpha.2
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [2512a93]
25
+ - Updated dependencies [e62de74]
26
+ - @mastra/core@0.4.3-alpha.2
27
+
28
+ ## 0.1.6-alpha.1
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [0d185b1]
33
+ - Updated dependencies [ed55f1d]
34
+ - Updated dependencies [8d13b14]
35
+ - Updated dependencies [3ee4831]
36
+ - Updated dependencies [108793c]
37
+ - Updated dependencies [5f28f44]
38
+ - @mastra/core@0.4.3-alpha.1
39
+
3
40
  ## 0.1.6-alpha.0
4
41
 
5
42
  ### Patch Changes
package/README.md CHANGED
@@ -19,21 +19,21 @@ const vectorStore = new PineconeVector(
19
19
  );
20
20
 
21
21
  // Create a new index
22
- await vectorStore.createIndex('my-index', 1536, 'cosine');
22
+ await vectorStore.createIndex({ indexName: 'my-index', dimension: 1536, metric: 'cosine' });
23
23
 
24
24
  // Add vectors
25
25
  const vectors = [[0.1, 0.2, ...], [0.3, 0.4, ...]];
26
26
  const metadata = [{ text: 'doc1' }, { text: 'doc2' }];
27
- const ids = await vectorStore.upsert('my-index', vectors, metadata);
27
+ const ids = await vectorStore.upsert({ indexName: 'my-index', vectors, metadata });
28
28
 
29
29
  // Query vectors
30
- const results = await vectorStore.query(
31
- 'my-index',
32
- [0.1, 0.2, ...],
33
- 10, // topK
34
- { text: { $eq: 'doc1' } }, // optional filter
35
- false // includeValues
36
- );
30
+ const results = await vectorStore.query({
31
+ indexName: 'my-index',
32
+ queryVector: [0.1, 0.2, ...],
33
+ topK: 10, // topK
34
+ filter: { text: { $eq: 'doc1' } }, // optional filter
35
+ includeVector: false, // includeValues
36
+ });
37
37
  ```
38
38
 
39
39
  ## Configuration
@@ -59,9 +59,9 @@ Optional:
59
59
 
60
60
  ## Methods
61
61
 
62
- - `createIndex(indexName, dimension, metric?)`: Create a new index
63
- - `upsert(indexName, vectors, metadata?, ids?)`: Add or update vectors
64
- - `query(indexName, queryVector, topK?, filter?, includeVector?)`: Search for similar vectors
62
+ - `createIndex({indexName, dimension, metric?})`: Create a new index
63
+ - `upsert({indexName, vectors, metadata?, ids?})`: Add or update vectors
64
+ - `query({indexName, queryVector, topK?, filter?, includeVector?})`: Search for similar vectors
65
65
  - `listIndexes()`: List all indexes
66
66
  - `describeIndex(indexName)`: Get index statistics
67
67
  - `deleteIndex(indexName)`: Delete an index
@@ -0,0 +1,33 @@
1
+ import { BaseFilterTranslator } from '@mastra/core/vector/filter';
2
+ import type { CreateIndexParams } from '@mastra/core/vector';
3
+ import type { IndexStats } from '@mastra/core/vector';
4
+ import { MastraVector } from '@mastra/core/vector';
5
+ import type { OperatorSupport } from '@mastra/core/vector/filter';
6
+ import type { ParamsToArgs } from '@mastra/core/vector';
7
+ import type { QueryResult } from '@mastra/core/vector';
8
+ import type { QueryVectorParams } from '@mastra/core/vector';
9
+ import type { UpsertVectorParams } from '@mastra/core/vector';
10
+ import type { VectorFilter } from '@mastra/core/vector/filter';
11
+
12
+ export declare class PineconeFilterTranslator extends BaseFilterTranslator {
13
+ protected getSupportedOperators(): OperatorSupport;
14
+ translate(filter?: VectorFilter): VectorFilter;
15
+ private translateNode;
16
+ private translateOperator;
17
+ }
18
+
19
+ declare class PineconeVector extends MastraVector {
20
+ private client;
21
+ constructor(apiKey: string, environment?: string);
22
+ createIndex(...args: ParamsToArgs<CreateIndexParams>): Promise<void>;
23
+ upsert(...args: ParamsToArgs<UpsertVectorParams>): Promise<string[]>;
24
+ transformFilter(filter?: VectorFilter): VectorFilter;
25
+ query(...args: ParamsToArgs<QueryVectorParams>): Promise<QueryResult[]>;
26
+ listIndexes(): Promise<string[]>;
27
+ describeIndex(indexName: string): Promise<IndexStats>;
28
+ deleteIndex(indexName: string): Promise<void>;
29
+ }
30
+ export { PineconeVector }
31
+ export { PineconeVector as PineconeVector_alias_1 }
32
+
33
+ export { }
@@ -1,13 +1,17 @@
1
- import { BaseFilterTranslator } from '@mastra/core/filter';
2
- import { Filter } from '@mastra/core/filter';
3
- import { IndexStats } from '@mastra/core/vector';
1
+ import { BaseFilterTranslator } from '@mastra/core/vector/filter';
2
+ import type { CreateIndexParams } from '@mastra/core/vector';
3
+ import type { IndexStats } from '@mastra/core/vector';
4
4
  import { MastraVector } from '@mastra/core/vector';
5
- import { OperatorSupport } from '@mastra/core/filter';
6
- import { QueryResult } from '@mastra/core/vector';
5
+ import type { OperatorSupport } from '@mastra/core/vector/filter';
6
+ import type { ParamsToArgs } from '@mastra/core/vector';
7
+ import type { QueryResult } from '@mastra/core/vector';
8
+ import type { QueryVectorParams } from '@mastra/core/vector';
9
+ import type { UpsertVectorParams } from '@mastra/core/vector';
10
+ import type { VectorFilter } from '@mastra/core/vector/filter';
7
11
 
8
12
  export declare class PineconeFilterTranslator extends BaseFilterTranslator {
9
13
  protected getSupportedOperators(): OperatorSupport;
10
- translate(filter?: Filter): Filter | undefined;
14
+ translate(filter?: VectorFilter): VectorFilter;
11
15
  private translateNode;
12
16
  private translateOperator;
13
17
  }
@@ -15,10 +19,10 @@ export declare class PineconeFilterTranslator extends BaseFilterTranslator {
15
19
  declare class PineconeVector extends MastraVector {
16
20
  private client;
17
21
  constructor(apiKey: string, environment?: string);
18
- createIndex(indexName: string, dimension: number, metric?: 'cosine' | 'euclidean' | 'dotproduct'): Promise<void>;
19
- upsert(indexName: string, vectors: number[][], metadata?: Record<string, any>[], ids?: string[]): Promise<string[]>;
20
- transformFilter(filter?: Filter): Filter | undefined;
21
- query(indexName: string, queryVector: number[], topK?: number, filter?: Filter, includeVector?: boolean): Promise<QueryResult[]>;
22
+ createIndex(...args: ParamsToArgs<CreateIndexParams>): Promise<void>;
23
+ upsert(...args: ParamsToArgs<UpsertVectorParams>): Promise<string[]>;
24
+ transformFilter(filter?: VectorFilter): VectorFilter;
25
+ query(...args: ParamsToArgs<QueryVectorParams>): Promise<QueryResult[]>;
22
26
  listIndexes(): Promise<string[]>;
23
27
  describeIndex(indexName: string): Promise<IndexStats>;
24
28
  deleteIndex(indexName: string): Promise<void>;
package/dist/index.cjs ADDED
@@ -0,0 +1,184 @@
1
+ 'use strict';
2
+
3
+ var vector = require('@mastra/core/vector');
4
+ var pinecone = require('@pinecone-database/pinecone');
5
+ var filter = require('@mastra/core/vector/filter');
6
+
7
+ // src/vector/index.ts
8
+ var PineconeFilterTranslator = class extends filter.BaseFilterTranslator {
9
+ getSupportedOperators() {
10
+ return {
11
+ ...filter.BaseFilterTranslator.DEFAULT_OPERATORS,
12
+ logical: ["$and", "$or"],
13
+ array: ["$in", "$all", "$nin"],
14
+ element: ["$exists"],
15
+ regex: [],
16
+ custom: []
17
+ };
18
+ }
19
+ translate(filter) {
20
+ if (this.isEmpty(filter)) return filter;
21
+ this.validateFilter(filter);
22
+ return this.translateNode(filter);
23
+ }
24
+ translateNode(node, currentPath = "") {
25
+ if (this.isRegex(node)) {
26
+ throw new Error("Regex is not supported in Pinecone");
27
+ }
28
+ if (this.isPrimitive(node)) return this.normalizeComparisonValue(node);
29
+ if (Array.isArray(node)) return { $in: this.normalizeArrayValues(node) };
30
+ const entries = Object.entries(node);
31
+ const firstEntry = entries[0];
32
+ if (entries.length === 1 && firstEntry && this.isOperator(firstEntry[0])) {
33
+ const [operator, value] = firstEntry;
34
+ const translated = this.translateOperator(operator, value, currentPath);
35
+ return this.isLogicalOperator(operator) ? { [operator]: translated } : translated;
36
+ }
37
+ const result = {};
38
+ for (const [key, value] of entries) {
39
+ const newPath = currentPath ? `${currentPath}.${key}` : key;
40
+ if (this.isOperator(key)) {
41
+ result[key] = this.translateOperator(key, value, currentPath);
42
+ continue;
43
+ }
44
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
45
+ if (Object.keys(value).length === 1 && "$all" in value) {
46
+ const translated = this.translateNode(value, key);
47
+ if (translated.$and) {
48
+ return translated;
49
+ }
50
+ }
51
+ if (Object.keys(value).length === 0) {
52
+ result[newPath] = this.translateNode(value);
53
+ } else {
54
+ const hasOperators = Object.keys(value).some((k) => this.isOperator(k));
55
+ if (hasOperators) {
56
+ const normalizedValue = {};
57
+ for (const [op, opValue] of Object.entries(value)) {
58
+ normalizedValue[op] = this.isOperator(op) ? this.translateOperator(op, opValue) : opValue;
59
+ }
60
+ result[newPath] = normalizedValue;
61
+ } else {
62
+ Object.assign(result, this.translateNode(value, newPath));
63
+ }
64
+ }
65
+ } else {
66
+ result[newPath] = this.translateNode(value);
67
+ }
68
+ }
69
+ return result;
70
+ }
71
+ translateOperator(operator, value, currentPath = "") {
72
+ if (operator === "$all") {
73
+ if (!Array.isArray(value) || value.length === 0) {
74
+ throw new Error("A non-empty array is required for the $all operator");
75
+ }
76
+ return this.simulateAllOperator(currentPath, value);
77
+ }
78
+ if (this.isLogicalOperator(operator)) {
79
+ return Array.isArray(value) ? value.map((item) => this.translateNode(item)) : this.translateNode(value);
80
+ }
81
+ return this.normalizeComparisonValue(value);
82
+ }
83
+ };
84
+
85
+ // src/vector/index.ts
86
+ var PineconeVector = class extends vector.MastraVector {
87
+ client;
88
+ constructor(apiKey, environment) {
89
+ super();
90
+ const opts = { apiKey };
91
+ if (environment) {
92
+ opts["controllerHostUrl"] = environment;
93
+ }
94
+ const baseClient = new pinecone.Pinecone(opts);
95
+ const telemetry = this.__getTelemetry();
96
+ this.client = telemetry?.traceClass(baseClient, {
97
+ spanNamePrefix: "pinecone-vector",
98
+ attributes: {
99
+ "vector.type": "pinecone"
100
+ }
101
+ }) ?? baseClient;
102
+ }
103
+ async createIndex(...args) {
104
+ const params = this.normalizeArgs("createIndex", args);
105
+ const { indexName, dimension, metric = "cosine" } = params;
106
+ if (!Number.isInteger(dimension) || dimension <= 0) {
107
+ throw new Error("Dimension must be a positive integer");
108
+ }
109
+ await this.client.createIndex({
110
+ name: indexName,
111
+ dimension,
112
+ metric,
113
+ spec: {
114
+ serverless: {
115
+ cloud: "aws",
116
+ region: "us-east-1"
117
+ }
118
+ }
119
+ });
120
+ }
121
+ async upsert(...args) {
122
+ const params = this.normalizeArgs("upsert", args);
123
+ const { indexName, vectors, metadata, ids } = params;
124
+ const index = this.client.Index(indexName);
125
+ const vectorIds = ids || vectors.map(() => crypto.randomUUID());
126
+ const records = vectors.map((vector, i) => ({
127
+ id: vectorIds[i],
128
+ values: vector,
129
+ metadata: metadata?.[i] || {}
130
+ }));
131
+ const batchSize = 100;
132
+ for (let i = 0; i < records.length; i += batchSize) {
133
+ const batch = records.slice(i, i + batchSize);
134
+ await index.upsert(batch);
135
+ }
136
+ return vectorIds;
137
+ }
138
+ transformFilter(filter) {
139
+ const translator = new PineconeFilterTranslator();
140
+ return translator.translate(filter);
141
+ }
142
+ async query(...args) {
143
+ const params = this.normalizeArgs("query", args);
144
+ const { indexName, queryVector, topK = 10, filter, includeVector = false } = params;
145
+ const index = this.client.Index(indexName);
146
+ const translatedFilter = this.transformFilter(filter) ?? void 0;
147
+ const results = await index.query({
148
+ vector: queryVector,
149
+ topK,
150
+ filter: translatedFilter,
151
+ includeMetadata: true,
152
+ includeValues: includeVector
153
+ });
154
+ return results.matches.map((match) => ({
155
+ id: match.id,
156
+ score: match.score || 0,
157
+ metadata: match.metadata,
158
+ ...includeVector && { vector: match.values || [] }
159
+ }));
160
+ }
161
+ async listIndexes() {
162
+ const indexesResult = await this.client.listIndexes();
163
+ return indexesResult?.indexes?.map((index) => index.name) || [];
164
+ }
165
+ async describeIndex(indexName) {
166
+ const index = this.client.Index(indexName);
167
+ const stats = await index.describeIndexStats();
168
+ const description = await this.client.describeIndex(indexName);
169
+ return {
170
+ dimension: description.dimension,
171
+ count: stats.totalRecordCount || 0,
172
+ metric: description.metric
173
+ };
174
+ }
175
+ async deleteIndex(indexName) {
176
+ try {
177
+ await this.client.deleteIndex(indexName);
178
+ } catch (error) {
179
+ throw new Error(`Failed to delete Pinecone index: ${error.message}`);
180
+ }
181
+ }
182
+ };
183
+
184
+ exports.PineconeVector = PineconeVector;
@@ -0,0 +1 @@
1
+ export { PineconeVector } from './_tsup-dts-rollup.cjs';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { BaseFilterTranslator } from '@mastra/core/filter';
2
1
  import { MastraVector } from '@mastra/core/vector';
3
2
  import { Pinecone } from '@pinecone-database/pinecone';
3
+ import { BaseFilterTranslator } from '@mastra/core/vector/filter';
4
4
 
5
5
  // src/vector/index.ts
6
6
  var PineconeFilterTranslator = class extends BaseFilterTranslator {
@@ -98,7 +98,9 @@ var PineconeVector = class extends MastraVector {
98
98
  }
99
99
  }) ?? baseClient;
100
100
  }
101
- async createIndex(indexName, dimension, metric = "cosine") {
101
+ async createIndex(...args) {
102
+ const params = this.normalizeArgs("createIndex", args);
103
+ const { indexName, dimension, metric = "cosine" } = params;
102
104
  if (!Number.isInteger(dimension) || dimension <= 0) {
103
105
  throw new Error("Dimension must be a positive integer");
104
106
  }
@@ -114,7 +116,9 @@ var PineconeVector = class extends MastraVector {
114
116
  }
115
117
  });
116
118
  }
117
- async upsert(indexName, vectors, metadata, ids) {
119
+ async upsert(...args) {
120
+ const params = this.normalizeArgs("upsert", args);
121
+ const { indexName, vectors, metadata, ids } = params;
118
122
  const index = this.client.Index(indexName);
119
123
  const vectorIds = ids || vectors.map(() => crypto.randomUUID());
120
124
  const records = vectors.map((vector, i) => ({
@@ -130,13 +134,14 @@ var PineconeVector = class extends MastraVector {
130
134
  return vectorIds;
131
135
  }
132
136
  transformFilter(filter) {
133
- const pineconeFilter = new PineconeFilterTranslator();
134
- const translatedFilter = pineconeFilter.translate(filter);
135
- return translatedFilter;
137
+ const translator = new PineconeFilterTranslator();
138
+ return translator.translate(filter);
136
139
  }
137
- async query(indexName, queryVector, topK = 10, filter, includeVector = false) {
140
+ async query(...args) {
141
+ const params = this.normalizeArgs("query", args);
142
+ const { indexName, queryVector, topK = 10, filter, includeVector = false } = params;
138
143
  const index = this.client.Index(indexName);
139
- const translatedFilter = this.transformFilter(filter);
144
+ const translatedFilter = this.transformFilter(filter) ?? void 0;
140
145
  const results = await index.query({
141
146
  vector: queryVector,
142
147
  topK,
@@ -0,0 +1,6 @@
1
+ import { createConfig } from '@internal/lint/eslint';
2
+
3
+ const config = await createConfig();
4
+
5
+ /** @type {import("eslint").Linter.Config[]} */
6
+ export default [...config];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/pinecone",
3
- "version": "0.1.6-alpha.0",
3
+ "version": "0.1.6-alpha.3",
4
4
  "description": "Pinecone vector store provider for Mastra",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,13 +10,17 @@
10
10
  "import": {
11
11
  "types": "./dist/index.d.ts",
12
12
  "default": "./dist/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./dist/index.d.cts",
16
+ "default": "./dist/index.cjs"
13
17
  }
14
18
  },
15
19
  "./package.json": "./package.json"
16
20
  },
17
21
  "dependencies": {
18
22
  "@pinecone-database/pinecone": "^3.0.3",
19
- "@mastra/core": "^0.4.3-alpha.0"
23
+ "@mastra/core": "^0.4.3-alpha.3"
20
24
  },
21
25
  "devDependencies": {
22
26
  "@microsoft/api-extractor": "^7.49.2",
@@ -24,11 +28,14 @@
24
28
  "dotenv": "^16.4.7",
25
29
  "tsup": "^8.0.1",
26
30
  "typescript": "^5.7.3",
27
- "vitest": "^3.0.4"
31
+ "vitest": "^3.0.4",
32
+ "eslint": "^9.20.1",
33
+ "@internal/lint": "0.0.0"
28
34
  },
29
35
  "scripts": {
30
- "build": "tsup src/index.ts --format esm --experimental-dts --clean --treeshake",
36
+ "build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake",
31
37
  "build:watch": "pnpm build --watch",
32
- "test": "vitest run"
38
+ "test": "vitest run",
39
+ "lint": "eslint ."
33
40
  }
34
41
  }
@@ -1,10 +1,5 @@
1
- import {
2
- BaseFilterTranslator,
3
- type FieldCondition,
4
- type Filter,
5
- type OperatorSupport,
6
- type QueryOperator,
7
- } from '@mastra/core/filter';
1
+ import { BaseFilterTranslator } from '@mastra/core/vector/filter';
2
+ import type { FieldCondition, VectorFilter, OperatorSupport, QueryOperator } from '@mastra/core/vector/filter';
8
3
 
9
4
  export class PineconeFilterTranslator extends BaseFilterTranslator {
10
5
  protected override getSupportedOperators(): OperatorSupport {
@@ -18,13 +13,13 @@ export class PineconeFilterTranslator extends BaseFilterTranslator {
18
13
  };
19
14
  }
20
15
 
21
- translate(filter?: Filter): Filter | undefined {
16
+ translate(filter?: VectorFilter): VectorFilter {
22
17
  if (this.isEmpty(filter)) return filter;
23
- this.validateFilter(filter as Filter);
18
+ this.validateFilter(filter);
24
19
  return this.translateNode(filter);
25
20
  }
26
21
 
27
- private translateNode(node: Filter | FieldCondition, currentPath: string = ''): any {
22
+ private translateNode(node: VectorFilter | FieldCondition, currentPath: string = ''): any {
28
23
  if (this.isRegex(node)) {
29
24
  throw new Error('Regex is not supported in Pinecone');
30
25
  }