@mastra/pg 0.1.6-alpha.1 → 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.
- package/.turbo/turbo-build.log +11 -6
- package/CHANGELOG.md +25 -0
- package/README.md +22 -17
- package/dist/_tsup-dts-rollup.d.cts +329 -0
- package/dist/_tsup-dts-rollup.d.ts +45 -20
- package/dist/index.cjs +1050 -0
- package/dist/index.d.cts +4 -0
- package/dist/index.js +24 -17
- package/package.json +7 -3
- package/src/storage/index.ts +2 -2
- package/src/vector/filter.ts +5 -5
- package/src/vector/index.test.ts +696 -314
- package/src/vector/index.ts +62 -42
- package/src/vector/performance.helpers.ts +1 -1
- package/src/vector/sql-builder.ts +10 -6
- package/src/vector/vector.performance.test.ts +14 -17
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
|
|
2
|
-
> @mastra/pg@0.1.6-alpha.
|
|
3
|
-
> tsup src/index.ts --format esm --experimental-dts --clean --treeshake
|
|
2
|
+
> @mastra/pg@0.1.6-alpha.3 build /home/runner/work/mastra/mastra/stores/pg
|
|
3
|
+
> tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.3.6
|
|
8
8
|
[34mTSC[39m Build start
|
|
9
|
-
[32mTSC[39m ⚡️ Build success in
|
|
9
|
+
[32mTSC[39m ⚡️ Build success in 11801ms
|
|
10
10
|
[34mDTS[39m Build start
|
|
11
11
|
[34mCLI[39m Target: es2022
|
|
12
12
|
Analysis will use the bundled TypeScript version 5.7.3
|
|
13
13
|
[36mWriting package typings: /home/runner/work/mastra/mastra/stores/pg/dist/_tsup-dts-rollup.d.ts[39m
|
|
14
|
-
|
|
14
|
+
Analysis will use the bundled TypeScript version 5.7.3
|
|
15
|
+
[36mWriting package typings: /home/runner/work/mastra/mastra/stores/pg/dist/_tsup-dts-rollup.d.cts[39m
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 12369ms
|
|
15
17
|
[34mCLI[39m Cleaning output folder
|
|
16
18
|
[34mESM[39m Build start
|
|
17
|
-
[
|
|
18
|
-
[32mESM[39m
|
|
19
|
+
[34mCJS[39m Build start
|
|
20
|
+
[32mESM[39m [1mdist/index.js [22m[32m33.20 KB[39m
|
|
21
|
+
[32mESM[39m ⚡️ Build success in 1143ms
|
|
22
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m33.60 KB[39m
|
|
23
|
+
[32mCJS[39m ⚡️ Build success in 1147ms
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @mastra/pg
|
|
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
|
+
- 4d4e1e1: Updated vector tests and pinecone
|
|
10
|
+
- bb4f447: Add support for commonjs
|
|
11
|
+
- Updated dependencies [0fd78ac]
|
|
12
|
+
- Updated dependencies [0d25b75]
|
|
13
|
+
- Updated dependencies [fd14a3f]
|
|
14
|
+
- Updated dependencies [3f369a2]
|
|
15
|
+
- Updated dependencies [4d4e1e1]
|
|
16
|
+
- Updated dependencies [bb4f447]
|
|
17
|
+
- @mastra/core@0.4.3-alpha.3
|
|
18
|
+
|
|
19
|
+
## 0.1.6-alpha.2
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 5325d6a: A bug fix earlier today unmasked that the next/prev settings for PG semantic recall were swapped
|
|
24
|
+
- Updated dependencies [2512a93]
|
|
25
|
+
- Updated dependencies [e62de74]
|
|
26
|
+
- @mastra/core@0.4.3-alpha.2
|
|
27
|
+
|
|
3
28
|
## 0.1.6-alpha.1
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -23,24 +23,28 @@ import { PgVector } from '@mastra/pg';
|
|
|
23
23
|
const vectorStore = new PgVector('postgresql://user:pass@localhost:5432/db');
|
|
24
24
|
|
|
25
25
|
// Create a new table with vector support
|
|
26
|
-
await vectorStore.createIndex(
|
|
26
|
+
await vectorStore.createIndex({
|
|
27
|
+
indexName: 'my_vectors',
|
|
28
|
+
dimension: 1536,
|
|
29
|
+
metric: 'cosine',
|
|
30
|
+
});
|
|
27
31
|
|
|
28
32
|
// Add vectors
|
|
29
|
-
const ids = await vectorStore.upsert(
|
|
30
|
-
'my_vectors',
|
|
31
|
-
[[0.1, 0.2, ...], [0.3, 0.4, ...]],
|
|
32
|
-
[{ text: 'doc1' }, { text: 'doc2' }]
|
|
33
|
-
);
|
|
33
|
+
const ids = await vectorStore.upsert({
|
|
34
|
+
indexName: 'my_vectors',
|
|
35
|
+
vectors: [[0.1, 0.2, ...], [0.3, 0.4, ...]],
|
|
36
|
+
metadata: [{ text: 'doc1' }, { text: 'doc2' }],
|
|
37
|
+
});
|
|
34
38
|
|
|
35
39
|
// Query vectors
|
|
36
|
-
const results = await vectorStore.query(
|
|
37
|
-
'my_vectors',
|
|
38
|
-
[0.1, 0.2, ...],
|
|
39
|
-
10,
|
|
40
|
-
{ text: 'doc1' }, // filter
|
|
41
|
-
false,
|
|
42
|
-
0.5
|
|
43
|
-
);
|
|
40
|
+
const results = await vectorStore.query({
|
|
41
|
+
indexName: 'my_vectors',
|
|
42
|
+
queryVector: [0.1, 0.2, ...],
|
|
43
|
+
topK: 10, // topK
|
|
44
|
+
filter: { text: 'doc1' }, // filter
|
|
45
|
+
includeVector: false, // includeVector
|
|
46
|
+
minScore: 0.5, // minScore
|
|
47
|
+
});
|
|
44
48
|
|
|
45
49
|
// Clean up
|
|
46
50
|
await vectorStore.disconnect();
|
|
@@ -137,9 +141,10 @@ Example filter:
|
|
|
137
141
|
|
|
138
142
|
## Vector Store Methods
|
|
139
143
|
|
|
140
|
-
- `createIndex(indexName, dimension, metric?)`: Create a new table with vector support
|
|
141
|
-
- `upsert(indexName, vectors, metadata?, ids?)`: Add or update vectors
|
|
142
|
-
- `query(indexName, queryVector, topK?, filter?, includeVector?, minScore?)`: Search for similar vectors
|
|
144
|
+
- `createIndex({indexName, dimension, metric?, indexConfig?, defineIndex?})`: Create a new table with vector support
|
|
145
|
+
- `upsert({indexName, vectors, metadata?, ids?})`: Add or update vectors
|
|
146
|
+
- `query({indexName, queryVector, topK?, filter?, includeVector?, minScore?})`: Search for similar vectors
|
|
147
|
+
- `defineIndex({indexName, metric?, indexConfig?})`: Define an index
|
|
143
148
|
- `listIndexes()`: List all vector-enabled tables
|
|
144
149
|
- `describeIndex(indexName)`: Get table statistics
|
|
145
150
|
- `deleteIndex(indexName)`: Delete a table
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import type { ArrayOperator } from '@mastra/core/vector/filter';
|
|
2
|
+
import { BaseFilterTranslator } from '@mastra/core/vector/filter';
|
|
3
|
+
import type { BasicOperator } from '@mastra/core/vector/filter';
|
|
4
|
+
import type { CreateIndexParams } from '@mastra/core/vector';
|
|
5
|
+
import type { ElementOperator } from '@mastra/core/vector/filter';
|
|
6
|
+
import type { EvalRow } from '@mastra/core/storage';
|
|
7
|
+
import type { IndexStats } from '@mastra/core/vector';
|
|
8
|
+
import type { LogicalOperator } from '@mastra/core/vector/filter';
|
|
9
|
+
import { MastraStorage } from '@mastra/core/storage';
|
|
10
|
+
import { MastraVector } from '@mastra/core/vector';
|
|
11
|
+
import type { MessageType } from '@mastra/core/memory';
|
|
12
|
+
import type { NumericOperator } from '@mastra/core/vector/filter';
|
|
13
|
+
import type { OperatorSupport } from '@mastra/core/vector/filter';
|
|
14
|
+
import type { ParamsToArgs } from '@mastra/core/vector';
|
|
15
|
+
import type { QueryResult } from '@mastra/core/vector';
|
|
16
|
+
import type { QueryVectorParams } from '@mastra/core/vector';
|
|
17
|
+
import type { RegexOperator } from '@mastra/core/vector/filter';
|
|
18
|
+
import type { StorageColumn } from '@mastra/core/storage';
|
|
19
|
+
import type { StorageGetMessagesArg } from '@mastra/core/storage';
|
|
20
|
+
import type { StorageThreadType } from '@mastra/core/memory';
|
|
21
|
+
import type { TABLE_NAMES } from '@mastra/core/storage';
|
|
22
|
+
import type { UpsertVectorParams } from '@mastra/core/vector';
|
|
23
|
+
import type { VectorFilter } from '@mastra/core/vector/filter';
|
|
24
|
+
import type { WorkflowRunState } from '@mastra/core/workflows';
|
|
25
|
+
|
|
26
|
+
export declare const baseTestConfigs: {
|
|
27
|
+
smokeTests: {
|
|
28
|
+
dimension: number;
|
|
29
|
+
size: number;
|
|
30
|
+
k: number;
|
|
31
|
+
queryCount: number;
|
|
32
|
+
}[];
|
|
33
|
+
'64': {
|
|
34
|
+
dimension: number;
|
|
35
|
+
size: number;
|
|
36
|
+
k: number;
|
|
37
|
+
queryCount: number;
|
|
38
|
+
}[];
|
|
39
|
+
'384': {
|
|
40
|
+
dimension: number;
|
|
41
|
+
size: number;
|
|
42
|
+
k: number;
|
|
43
|
+
queryCount: number;
|
|
44
|
+
}[];
|
|
45
|
+
'1024': {
|
|
46
|
+
dimension: number;
|
|
47
|
+
size: number;
|
|
48
|
+
k: number;
|
|
49
|
+
queryCount: number;
|
|
50
|
+
}[];
|
|
51
|
+
stressTests: {
|
|
52
|
+
dimension: number;
|
|
53
|
+
size: number;
|
|
54
|
+
k: number;
|
|
55
|
+
queryCount: number;
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export declare function buildFilterQuery(filter: VectorFilter, minScore: number): FilterResult;
|
|
60
|
+
|
|
61
|
+
export declare const calculateRecall: (actual: number[], expected: number[], k: number) => number;
|
|
62
|
+
|
|
63
|
+
export declare const calculateTimeout: (dimension: number, size: number, k: number) => number;
|
|
64
|
+
|
|
65
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
66
|
+
|
|
67
|
+
export declare const FILTER_OPERATORS: Record<string, OperatorFn>;
|
|
68
|
+
|
|
69
|
+
declare type FilterOperator = {
|
|
70
|
+
sql: string;
|
|
71
|
+
needsValue: boolean;
|
|
72
|
+
transformValue?: (value: any) => any;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export declare interface FilterResult {
|
|
76
|
+
sql: string;
|
|
77
|
+
values: any[];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export declare const findNearestBruteForce: (query: number[], vectors: number[][], k: number) => number[];
|
|
81
|
+
|
|
82
|
+
export declare const formatTable: (data: any[], columns: string[]) => string;
|
|
83
|
+
|
|
84
|
+
export declare const generateClusteredVectors: (count: number, dim: number, numClusters?: number) => number[][];
|
|
85
|
+
|
|
86
|
+
export declare const generateRandomVectors: (count: number, dim: number) => number[][];
|
|
87
|
+
|
|
88
|
+
export declare const generateSkewedVectors: (count: number, dim: number) => number[][];
|
|
89
|
+
|
|
90
|
+
export declare const getHNSWConfig: (indexConfig: IndexConfig) => {
|
|
91
|
+
m: number;
|
|
92
|
+
efConstruction: number;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export declare function getIndexDescription({ type, hnsw, }: {
|
|
96
|
+
type: IndexType;
|
|
97
|
+
hnsw: {
|
|
98
|
+
m: number;
|
|
99
|
+
efConstruction: number;
|
|
100
|
+
};
|
|
101
|
+
}): string;
|
|
102
|
+
|
|
103
|
+
export declare const getListCount: (indexConfig: IndexConfig, size: number) => number | undefined;
|
|
104
|
+
|
|
105
|
+
export declare function getSearchEf(k: number, m: number): {
|
|
106
|
+
default: number;
|
|
107
|
+
lower: number;
|
|
108
|
+
higher: number;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export declare const groupBy: <T, K extends keyof T>(array: T[], key: K | ((item: T) => string), reducer?: (group: T[]) => any) => Record<string, any>;
|
|
112
|
+
|
|
113
|
+
export declare const handleKey: (key: string) => string;
|
|
114
|
+
|
|
115
|
+
declare interface HNSWConfig {
|
|
116
|
+
m?: number;
|
|
117
|
+
efConstruction?: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export declare interface IndexConfig {
|
|
121
|
+
type?: IndexType;
|
|
122
|
+
ivf?: IVFConfig;
|
|
123
|
+
hnsw?: HNSWConfig;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export declare type IndexType = 'ivfflat' | 'hnsw' | 'flat';
|
|
127
|
+
|
|
128
|
+
declare interface IVFConfig {
|
|
129
|
+
lists?: number;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export declare function measureLatency<T>(fn: () => Promise<T>): Promise<[number, T]>;
|
|
133
|
+
|
|
134
|
+
declare type OperatorFn = (key: string, paramIndex: number, value?: any) => FilterOperator;
|
|
135
|
+
|
|
136
|
+
export declare type OperatorType = BasicOperator | NumericOperator | ArrayOperator | ElementOperator | LogicalOperator | '$contains' | Exclude<RegexOperator, '$options'>;
|
|
137
|
+
|
|
138
|
+
declare interface PgCreateIndexParams extends CreateIndexParams {
|
|
139
|
+
indexConfig?: IndexConfig;
|
|
140
|
+
buildIndex?: boolean;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
declare interface PgDefineIndexParams {
|
|
144
|
+
indexName: string;
|
|
145
|
+
metric: 'cosine' | 'euclidean' | 'dotproduct';
|
|
146
|
+
indexConfig: IndexConfig;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Translates MongoDB-style filters to PG compatible filters.
|
|
151
|
+
*
|
|
152
|
+
* Key differences from MongoDB:
|
|
153
|
+
*
|
|
154
|
+
* Logical Operators ($and, $or, $nor):
|
|
155
|
+
* - Can be used at the top level or nested within fields
|
|
156
|
+
* - Can take either a single condition or an array of conditions
|
|
157
|
+
*
|
|
158
|
+
*/
|
|
159
|
+
export declare class PGFilterTranslator extends BaseFilterTranslator {
|
|
160
|
+
protected getSupportedOperators(): OperatorSupport;
|
|
161
|
+
translate(filter?: VectorFilter): VectorFilter;
|
|
162
|
+
private translateNode;
|
|
163
|
+
private translateRegexPattern;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
declare interface PGIndexStats extends IndexStats {
|
|
167
|
+
type: IndexType;
|
|
168
|
+
config: {
|
|
169
|
+
m?: number;
|
|
170
|
+
efConstruction?: number;
|
|
171
|
+
lists?: number;
|
|
172
|
+
probes?: number;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export { PGIndexStats }
|
|
176
|
+
export { PGIndexStats as PGIndexStats_alias_1 }
|
|
177
|
+
|
|
178
|
+
declare interface PgQueryVectorParams extends QueryVectorParams {
|
|
179
|
+
minScore?: number;
|
|
180
|
+
/**
|
|
181
|
+
* HNSW search parameter. Controls the size of the dynamic candidate
|
|
182
|
+
* list during search. Higher values improve accuracy at the cost of speed.
|
|
183
|
+
*/
|
|
184
|
+
ef?: number;
|
|
185
|
+
/**
|
|
186
|
+
* IVFFlat probe parameter. Number of cells to visit during search.
|
|
187
|
+
* Higher values improve accuracy at the cost of speed.
|
|
188
|
+
*/
|
|
189
|
+
probes?: number;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
declare class PgVector extends MastraVector {
|
|
193
|
+
private pool;
|
|
194
|
+
private indexCache;
|
|
195
|
+
constructor(connectionString: string);
|
|
196
|
+
transformFilter(filter?: VectorFilter): VectorFilter;
|
|
197
|
+
getIndexInfo(indexName: string): Promise<PGIndexStats>;
|
|
198
|
+
query(...args: ParamsToArgs<PgQueryVectorParams>): Promise<QueryResult[]>;
|
|
199
|
+
upsert(...args: ParamsToArgs<UpsertVectorParams>): Promise<string[]>;
|
|
200
|
+
createIndex(...args: ParamsToArgs<PgCreateIndexParams>): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* @deprecated This function is deprecated. Use buildIndex instead
|
|
203
|
+
*/
|
|
204
|
+
defineIndex(indexName: string, metric: "cosine" | "euclidean" | "dotproduct" | undefined, indexConfig: IndexConfig): Promise<void>;
|
|
205
|
+
buildIndex(...args: ParamsToArgs<PgDefineIndexParams>): Promise<void>;
|
|
206
|
+
listIndexes(): Promise<string[]>;
|
|
207
|
+
describeIndex(indexName: string): Promise<PGIndexStats>;
|
|
208
|
+
deleteIndex(indexName: string): Promise<void>;
|
|
209
|
+
truncateIndex(indexName: string): Promise<void>;
|
|
210
|
+
disconnect(): Promise<void>;
|
|
211
|
+
}
|
|
212
|
+
export { PgVector }
|
|
213
|
+
export { PgVector as PgVector_alias_1 }
|
|
214
|
+
|
|
215
|
+
declare type PostgresConfig = {
|
|
216
|
+
host: string;
|
|
217
|
+
port: number;
|
|
218
|
+
database: string;
|
|
219
|
+
user: string;
|
|
220
|
+
password: string;
|
|
221
|
+
} | {
|
|
222
|
+
connectionString: string;
|
|
223
|
+
};
|
|
224
|
+
export { PostgresConfig }
|
|
225
|
+
export { PostgresConfig as PostgresConfig_alias_1 }
|
|
226
|
+
|
|
227
|
+
declare class PostgresStore extends MastraStorage {
|
|
228
|
+
private db;
|
|
229
|
+
private pgp;
|
|
230
|
+
constructor(config: PostgresConfig);
|
|
231
|
+
getEvalsByAgentName(_agentName: string, _type?: 'test' | 'live'): Promise<EvalRow[]>;
|
|
232
|
+
batchInsert({ tableName, records }: {
|
|
233
|
+
tableName: TABLE_NAMES;
|
|
234
|
+
records: Record<string, any>[];
|
|
235
|
+
}): Promise<void>;
|
|
236
|
+
getTraces({ name, scope, page, perPage, attributes, }: {
|
|
237
|
+
name?: string;
|
|
238
|
+
scope?: string;
|
|
239
|
+
page: number;
|
|
240
|
+
perPage: number;
|
|
241
|
+
attributes?: Record<string, string>;
|
|
242
|
+
}): Promise<any[]>;
|
|
243
|
+
createTable({ tableName, schema, }: {
|
|
244
|
+
tableName: TABLE_NAMES;
|
|
245
|
+
schema: Record<string, StorageColumn>;
|
|
246
|
+
}): Promise<void>;
|
|
247
|
+
clearTable({ tableName }: {
|
|
248
|
+
tableName: TABLE_NAMES;
|
|
249
|
+
}): Promise<void>;
|
|
250
|
+
insert({ tableName, record }: {
|
|
251
|
+
tableName: TABLE_NAMES;
|
|
252
|
+
record: Record<string, any>;
|
|
253
|
+
}): Promise<void>;
|
|
254
|
+
load<R>({ tableName, keys }: {
|
|
255
|
+
tableName: TABLE_NAMES;
|
|
256
|
+
keys: Record<string, string>;
|
|
257
|
+
}): Promise<R | null>;
|
|
258
|
+
getThreadById({ threadId }: {
|
|
259
|
+
threadId: string;
|
|
260
|
+
}): Promise<StorageThreadType | null>;
|
|
261
|
+
getThreadsByResourceId({ resourceId }: {
|
|
262
|
+
resourceId: string;
|
|
263
|
+
}): Promise<StorageThreadType[]>;
|
|
264
|
+
saveThread({ thread }: {
|
|
265
|
+
thread: StorageThreadType;
|
|
266
|
+
}): Promise<StorageThreadType>;
|
|
267
|
+
updateThread({ id, title, metadata, }: {
|
|
268
|
+
id: string;
|
|
269
|
+
title: string;
|
|
270
|
+
metadata: Record<string, unknown>;
|
|
271
|
+
}): Promise<StorageThreadType>;
|
|
272
|
+
deleteThread({ threadId }: {
|
|
273
|
+
threadId: string;
|
|
274
|
+
}): Promise<void>;
|
|
275
|
+
getMessages<T = unknown>({ threadId, selectBy }: StorageGetMessagesArg): Promise<T>;
|
|
276
|
+
saveMessages({ messages }: {
|
|
277
|
+
messages: MessageType[];
|
|
278
|
+
}): Promise<MessageType[]>;
|
|
279
|
+
persistWorkflowSnapshot({ workflowName, runId, snapshot, }: {
|
|
280
|
+
workflowName: string;
|
|
281
|
+
runId: string;
|
|
282
|
+
snapshot: WorkflowRunState;
|
|
283
|
+
}): Promise<void>;
|
|
284
|
+
loadWorkflowSnapshot({ workflowName, runId, }: {
|
|
285
|
+
workflowName: string;
|
|
286
|
+
runId: string;
|
|
287
|
+
}): Promise<WorkflowRunState | null>;
|
|
288
|
+
close(): Promise<void>;
|
|
289
|
+
}
|
|
290
|
+
export { PostgresStore }
|
|
291
|
+
export { PostgresStore as PostgresStore_alias_1 }
|
|
292
|
+
|
|
293
|
+
export declare interface TestConfig {
|
|
294
|
+
dimension: number;
|
|
295
|
+
size: number;
|
|
296
|
+
k: number;
|
|
297
|
+
queryCount: number;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export declare interface TestResult {
|
|
301
|
+
distribution: string;
|
|
302
|
+
dimension: number;
|
|
303
|
+
type: IndexType;
|
|
304
|
+
size: number;
|
|
305
|
+
k?: number;
|
|
306
|
+
metrics: {
|
|
307
|
+
recall?: number;
|
|
308
|
+
minRecall?: number;
|
|
309
|
+
maxRecall?: number;
|
|
310
|
+
latency?: {
|
|
311
|
+
p50: number;
|
|
312
|
+
p95: number;
|
|
313
|
+
lists?: number;
|
|
314
|
+
vectorsPerList?: number;
|
|
315
|
+
m?: number;
|
|
316
|
+
ef?: number;
|
|
317
|
+
};
|
|
318
|
+
clustering?: {
|
|
319
|
+
numLists?: number;
|
|
320
|
+
avgVectorsPerList?: number;
|
|
321
|
+
recommendedLists?: number;
|
|
322
|
+
distribution?: string;
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export declare function warmupQuery(vectorDB: PgVector, indexName: string, dimension: number, k: number): Promise<void>;
|
|
328
|
+
|
|
329
|
+
export { }
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
import type { ArrayOperator } from '@mastra/core/filter';
|
|
2
|
-
import { BaseFilterTranslator } from '@mastra/core/filter';
|
|
3
|
-
import type { BasicOperator } from '@mastra/core/filter';
|
|
4
|
-
import type {
|
|
1
|
+
import type { ArrayOperator } from '@mastra/core/vector/filter';
|
|
2
|
+
import { BaseFilterTranslator } from '@mastra/core/vector/filter';
|
|
3
|
+
import type { BasicOperator } from '@mastra/core/vector/filter';
|
|
4
|
+
import type { CreateIndexParams } from '@mastra/core/vector';
|
|
5
|
+
import type { ElementOperator } from '@mastra/core/vector/filter';
|
|
5
6
|
import type { EvalRow } from '@mastra/core/storage';
|
|
6
|
-
import type { Filter } from '@mastra/core/filter';
|
|
7
7
|
import type { IndexStats } from '@mastra/core/vector';
|
|
8
|
-
import type { LogicalOperator } from '@mastra/core/filter';
|
|
8
|
+
import type { LogicalOperator } from '@mastra/core/vector/filter';
|
|
9
9
|
import { MastraStorage } from '@mastra/core/storage';
|
|
10
10
|
import { MastraVector } from '@mastra/core/vector';
|
|
11
11
|
import type { MessageType } from '@mastra/core/memory';
|
|
12
|
-
import type { NumericOperator } from '@mastra/core/filter';
|
|
13
|
-
import type { OperatorSupport } from '@mastra/core/filter';
|
|
12
|
+
import type { NumericOperator } from '@mastra/core/vector/filter';
|
|
13
|
+
import type { OperatorSupport } from '@mastra/core/vector/filter';
|
|
14
|
+
import type { ParamsToArgs } from '@mastra/core/vector';
|
|
14
15
|
import type { QueryResult } from '@mastra/core/vector';
|
|
15
|
-
import type {
|
|
16
|
+
import type { QueryVectorParams } from '@mastra/core/vector';
|
|
17
|
+
import type { RegexOperator } from '@mastra/core/vector/filter';
|
|
16
18
|
import type { StorageColumn } from '@mastra/core/storage';
|
|
17
19
|
import type { StorageGetMessagesArg } from '@mastra/core/storage';
|
|
18
20
|
import type { StorageThreadType } from '@mastra/core/memory';
|
|
19
21
|
import type { TABLE_NAMES } from '@mastra/core/storage';
|
|
22
|
+
import type { UpsertVectorParams } from '@mastra/core/vector';
|
|
23
|
+
import type { VectorFilter } from '@mastra/core/vector/filter';
|
|
20
24
|
import type { WorkflowRunState } from '@mastra/core/workflows';
|
|
21
25
|
|
|
22
26
|
export declare const baseTestConfigs: {
|
|
@@ -52,7 +56,7 @@ export declare const baseTestConfigs: {
|
|
|
52
56
|
}[];
|
|
53
57
|
};
|
|
54
58
|
|
|
55
|
-
export declare function buildFilterQuery(filter:
|
|
59
|
+
export declare function buildFilterQuery(filter: VectorFilter, minScore: number): FilterResult;
|
|
56
60
|
|
|
57
61
|
export declare const calculateRecall: (actual: number[], expected: number[], k: number) => number;
|
|
58
62
|
|
|
@@ -131,6 +135,17 @@ declare type OperatorFn = (key: string, paramIndex: number, value?: any) => Filt
|
|
|
131
135
|
|
|
132
136
|
export declare type OperatorType = BasicOperator | NumericOperator | ArrayOperator | ElementOperator | LogicalOperator | '$contains' | Exclude<RegexOperator, '$options'>;
|
|
133
137
|
|
|
138
|
+
declare interface PgCreateIndexParams extends CreateIndexParams {
|
|
139
|
+
indexConfig?: IndexConfig;
|
|
140
|
+
buildIndex?: boolean;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
declare interface PgDefineIndexParams {
|
|
144
|
+
indexName: string;
|
|
145
|
+
metric: 'cosine' | 'euclidean' | 'dotproduct';
|
|
146
|
+
indexConfig: IndexConfig;
|
|
147
|
+
}
|
|
148
|
+
|
|
134
149
|
/**
|
|
135
150
|
* Translates MongoDB-style filters to PG compatible filters.
|
|
136
151
|
*
|
|
@@ -143,7 +158,7 @@ export declare type OperatorType = BasicOperator | NumericOperator | ArrayOperat
|
|
|
143
158
|
*/
|
|
144
159
|
export declare class PGFilterTranslator extends BaseFilterTranslator {
|
|
145
160
|
protected getSupportedOperators(): OperatorSupport;
|
|
146
|
-
translate(filter
|
|
161
|
+
translate(filter?: VectorFilter): VectorFilter;
|
|
147
162
|
private translateNode;
|
|
148
163
|
private translateRegexPattern;
|
|
149
164
|
}
|
|
@@ -160,24 +175,34 @@ declare interface PGIndexStats extends IndexStats {
|
|
|
160
175
|
export { PGIndexStats }
|
|
161
176
|
export { PGIndexStats as PGIndexStats_alias_1 }
|
|
162
177
|
|
|
178
|
+
declare interface PgQueryVectorParams extends QueryVectorParams {
|
|
179
|
+
minScore?: number;
|
|
180
|
+
/**
|
|
181
|
+
* HNSW search parameter. Controls the size of the dynamic candidate
|
|
182
|
+
* list during search. Higher values improve accuracy at the cost of speed.
|
|
183
|
+
*/
|
|
184
|
+
ef?: number;
|
|
185
|
+
/**
|
|
186
|
+
* IVFFlat probe parameter. Number of cells to visit during search.
|
|
187
|
+
* Higher values improve accuracy at the cost of speed.
|
|
188
|
+
*/
|
|
189
|
+
probes?: number;
|
|
190
|
+
}
|
|
191
|
+
|
|
163
192
|
declare class PgVector extends MastraVector {
|
|
164
193
|
private pool;
|
|
165
194
|
private indexCache;
|
|
166
195
|
constructor(connectionString: string);
|
|
167
|
-
transformFilter(filter?:
|
|
196
|
+
transformFilter(filter?: VectorFilter): VectorFilter;
|
|
168
197
|
getIndexInfo(indexName: string): Promise<PGIndexStats>;
|
|
169
|
-
query(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
probes?: number;
|
|
173
|
-
}): Promise<QueryResult[]>;
|
|
174
|
-
upsert(indexName: string, vectors: number[][], metadata?: Record<string, any>[], ids?: string[]): Promise<string[]>;
|
|
175
|
-
createIndex(indexName: string, dimension: number, metric?: 'cosine' | 'euclidean' | 'dotproduct', indexConfig?: IndexConfig, defineIndex?: boolean): Promise<void>;
|
|
198
|
+
query(...args: ParamsToArgs<PgQueryVectorParams>): Promise<QueryResult[]>;
|
|
199
|
+
upsert(...args: ParamsToArgs<UpsertVectorParams>): Promise<string[]>;
|
|
200
|
+
createIndex(...args: ParamsToArgs<PgCreateIndexParams>): Promise<void>;
|
|
176
201
|
/**
|
|
177
202
|
* @deprecated This function is deprecated. Use buildIndex instead
|
|
178
203
|
*/
|
|
179
204
|
defineIndex(indexName: string, metric: "cosine" | "euclidean" | "dotproduct" | undefined, indexConfig: IndexConfig): Promise<void>;
|
|
180
|
-
buildIndex(
|
|
205
|
+
buildIndex(...args: ParamsToArgs<PgDefineIndexParams>): Promise<void>;
|
|
181
206
|
listIndexes(): Promise<string[]>;
|
|
182
207
|
describeIndex(indexName: string): Promise<PGIndexStats>;
|
|
183
208
|
deleteIndex(indexName: string): Promise<void>;
|