@mastra/memory 0.0.0-error-handler-fix-20251020202607 → 0.0.0-esbuild-bundle-worker-20260807182016

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.
Files changed (169) hide show
  1. package/CHANGELOG.md +4656 -3
  2. package/LICENSE.md +15 -0
  3. package/README.md +26 -1
  4. package/dist/_types/@internal_ai-sdk-v4/dist/index.d.ts +7450 -0
  5. package/dist/docs/SKILL.md +62 -0
  6. package/dist/docs/assets/SOURCE_MAP.json +11 -0
  7. package/dist/docs/references/docs-agents-agent-approval.md +664 -0
  8. package/dist/docs/references/docs-agents-networks.md +184 -0
  9. package/dist/docs/references/docs-capabilities-subagents.md +454 -0
  10. package/dist/docs/references/docs-evals-evals-with-memory.md +146 -0
  11. package/dist/docs/references/docs-long-running-agents-background-tasks.md +382 -0
  12. package/dist/docs/references/docs-long-running-agents-goals.md +118 -0
  13. package/dist/docs/references/docs-memory-memory-processors.md +385 -0
  14. package/dist/docs/references/docs-memory-message-history.md +348 -0
  15. package/dist/docs/references/docs-memory-multi-user-threads.md +208 -0
  16. package/dist/docs/references/docs-memory-observational-memory.md +835 -0
  17. package/dist/docs/references/docs-memory-overview.md +266 -0
  18. package/dist/docs/references/docs-memory-semantic-recall.md +401 -0
  19. package/dist/docs/references/docs-memory-working-memory.md +431 -0
  20. package/dist/docs/references/docs-storage-overview.md +214 -0
  21. package/dist/docs/references/reference-core-getMemory.md +51 -0
  22. package/dist/docs/references/reference-core-listMemory.md +57 -0
  23. package/dist/docs/references/reference-file-based-agents-memory.md +58 -0
  24. package/dist/docs/references/reference-memory-clone-utilities.md +203 -0
  25. package/dist/docs/references/reference-memory-cloneThread.md +173 -0
  26. package/dist/docs/references/reference-memory-createThread.md +70 -0
  27. package/dist/docs/references/reference-memory-getThreadById.md +26 -0
  28. package/dist/docs/references/reference-memory-listThreads.md +147 -0
  29. package/dist/docs/references/reference-memory-memory-class.md +148 -0
  30. package/dist/docs/references/reference-memory-observational-memory.md +877 -0
  31. package/dist/docs/references/reference-memory-summarizeConversation.md +99 -0
  32. package/dist/docs/references/reference-memory-summarizeThread.md +93 -0
  33. package/dist/docs/references/reference-processors-token-limiter-processor.md +158 -0
  34. package/dist/docs/references/reference-storage-dsql.md +430 -0
  35. package/dist/docs/references/reference-storage-dynamodb.md +284 -0
  36. package/dist/docs/references/reference-storage-libsql.md +143 -0
  37. package/dist/docs/references/reference-storage-mongodb.md +267 -0
  38. package/dist/docs/references/reference-storage-postgresql.md +531 -0
  39. package/dist/docs/references/reference-storage-redis.md +268 -0
  40. package/dist/docs/references/reference-storage-upstash.md +162 -0
  41. package/dist/docs/references/reference-vectors-libsql.md +307 -0
  42. package/dist/docs/references/reference-vectors-mongodb.md +567 -0
  43. package/dist/docs/references/reference-vectors-pg.md +430 -0
  44. package/dist/docs/references/reference-vectors-upstash.md +296 -0
  45. package/dist/index.cjs +35 -893
  46. package/dist/index.d.ts +465 -62
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +2 -887
  49. package/dist/processors/index.cjs +32 -165
  50. package/dist/processors/index.d.ts +1 -2
  51. package/dist/processors/index.d.ts.map +1 -1
  52. package/dist/processors/index.js +2 -158
  53. package/dist/processors/observational-memory/activation-ttl.d.ts +4 -0
  54. package/dist/processors/observational-memory/activation-ttl.d.ts.map +1 -0
  55. package/dist/processors/observational-memory/anchor-ids.d.ts +4 -0
  56. package/dist/processors/observational-memory/anchor-ids.d.ts.map +1 -0
  57. package/dist/processors/observational-memory/buffering-coordinator.d.ts +61 -0
  58. package/dist/processors/observational-memory/buffering-coordinator.d.ts.map +1 -0
  59. package/dist/processors/observational-memory/built-in-extractors.d.ts +15 -0
  60. package/dist/processors/observational-memory/built-in-extractors.d.ts.map +1 -0
  61. package/dist/processors/observational-memory/constants.d.ts +74 -0
  62. package/dist/processors/observational-memory/constants.d.ts.map +1 -0
  63. package/dist/processors/observational-memory/date-utils.d.ts +41 -0
  64. package/dist/processors/observational-memory/date-utils.d.ts.map +1 -0
  65. package/dist/processors/observational-memory/debug.d.ts +3 -0
  66. package/dist/processors/observational-memory/debug.d.ts.map +1 -0
  67. package/dist/processors/observational-memory/extracted-values.d.ts +44 -0
  68. package/dist/processors/observational-memory/extracted-values.d.ts.map +1 -0
  69. package/dist/processors/observational-memory/extraction-runner.d.ts +22 -0
  70. package/dist/processors/observational-memory/extraction-runner.d.ts.map +1 -0
  71. package/dist/processors/observational-memory/extractor.d.ts +76 -0
  72. package/dist/processors/observational-memory/extractor.d.ts.map +1 -0
  73. package/dist/processors/observational-memory/index.d.ts +30 -0
  74. package/dist/processors/observational-memory/index.d.ts.map +1 -0
  75. package/dist/processors/observational-memory/internal-request-context.d.ts +17 -0
  76. package/dist/processors/observational-memory/internal-request-context.d.ts.map +1 -0
  77. package/dist/processors/observational-memory/markers.d.ts +118 -0
  78. package/dist/processors/observational-memory/markers.d.ts.map +1 -0
  79. package/dist/processors/observational-memory/message-utils.d.ts +83 -0
  80. package/dist/processors/observational-memory/message-utils.d.ts.map +1 -0
  81. package/dist/processors/observational-memory/model-by-input-tokens.d.ts +14 -0
  82. package/dist/processors/observational-memory/model-by-input-tokens.d.ts.map +1 -0
  83. package/dist/processors/observational-memory/model-context.d.ts +2 -0
  84. package/dist/processors/observational-memory/model-context.d.ts.map +1 -0
  85. package/dist/processors/observational-memory/observation-groups.d.ts +15 -0
  86. package/dist/processors/observational-memory/observation-groups.d.ts.map +1 -0
  87. package/dist/processors/observational-memory/observation-strategies/async-buffer.d.ts +39 -0
  88. package/dist/processors/observational-memory/observation-strategies/async-buffer.d.ts.map +1 -0
  89. package/dist/processors/observational-memory/observation-strategies/base.d.ts +122 -0
  90. package/dist/processors/observational-memory/observation-strategies/base.d.ts.map +1 -0
  91. package/dist/processors/observational-memory/observation-strategies/index.d.ts +7 -0
  92. package/dist/processors/observational-memory/observation-strategies/index.d.ts.map +1 -0
  93. package/dist/processors/observational-memory/observation-strategies/resource-scoped.d.ts +43 -0
  94. package/dist/processors/observational-memory/observation-strategies/resource-scoped.d.ts.map +1 -0
  95. package/dist/processors/observational-memory/observation-strategies/sync.d.ts +41 -0
  96. package/dist/processors/observational-memory/observation-strategies/sync.d.ts.map +1 -0
  97. package/dist/processors/observational-memory/observation-strategies/types.d.ts +103 -0
  98. package/dist/processors/observational-memory/observation-strategies/types.d.ts.map +1 -0
  99. package/dist/processors/observational-memory/observation-turn/index.d.ts +4 -0
  100. package/dist/processors/observational-memory/observation-turn/index.d.ts.map +1 -0
  101. package/dist/processors/observational-memory/observation-turn/load-memory-context.d.ts +9 -0
  102. package/dist/processors/observational-memory/observation-turn/load-memory-context.d.ts.map +1 -0
  103. package/dist/processors/observational-memory/observation-turn/step.d.ts +53 -0
  104. package/dist/processors/observational-memory/observation-turn/step.d.ts.map +1 -0
  105. package/dist/processors/observational-memory/observation-turn/turn.d.ts +139 -0
  106. package/dist/processors/observational-memory/observation-turn/turn.d.ts.map +1 -0
  107. package/dist/processors/observational-memory/observation-turn/types.d.ts +46 -0
  108. package/dist/processors/observational-memory/observation-turn/types.d.ts.map +1 -0
  109. package/dist/processors/observational-memory/observation-utils.d.ts +16 -0
  110. package/dist/processors/observational-memory/observation-utils.d.ts.map +1 -0
  111. package/dist/processors/observational-memory/observational-memory.d.ts +930 -0
  112. package/dist/processors/observational-memory/observational-memory.d.ts.map +1 -0
  113. package/dist/processors/observational-memory/observer-agent.d.ts +190 -0
  114. package/dist/processors/observational-memory/observer-agent.d.ts.map +1 -0
  115. package/dist/processors/observational-memory/observer-runner.d.ts +141 -0
  116. package/dist/processors/observational-memory/observer-runner.d.ts.map +1 -0
  117. package/dist/processors/observational-memory/operation-registry.d.ts +14 -0
  118. package/dist/processors/observational-memory/operation-registry.d.ts.map +1 -0
  119. package/dist/processors/observational-memory/processor.d.ts +70 -0
  120. package/dist/processors/observational-memory/processor.d.ts.map +1 -0
  121. package/dist/processors/observational-memory/reflector-agent.d.ts +62 -0
  122. package/dist/processors/observational-memory/reflector-agent.d.ts.map +1 -0
  123. package/dist/processors/observational-memory/reflector-runner.d.ts +133 -0
  124. package/dist/processors/observational-memory/reflector-runner.d.ts.map +1 -0
  125. package/dist/processors/observational-memory/repro-capture.d.ts +33 -0
  126. package/dist/processors/observational-memory/repro-capture.d.ts.map +1 -0
  127. package/dist/processors/observational-memory/retry.d.ts +63 -0
  128. package/dist/processors/observational-memory/retry.d.ts.map +1 -0
  129. package/dist/processors/observational-memory/string-utils.d.ts +13 -0
  130. package/dist/processors/observational-memory/string-utils.d.ts.map +1 -0
  131. package/dist/processors/observational-memory/summarize.d.ts +92 -0
  132. package/dist/processors/observational-memory/summarize.d.ts.map +1 -0
  133. package/dist/processors/observational-memory/temporal-markers.d.ts +4 -0
  134. package/dist/processors/observational-memory/temporal-markers.d.ts.map +1 -0
  135. package/dist/processors/observational-memory/temporary-memory.d.ts +8 -0
  136. package/dist/processors/observational-memory/temporary-memory.d.ts.map +1 -0
  137. package/dist/processors/observational-memory/thresholds.d.ts +52 -0
  138. package/dist/processors/observational-memory/thresholds.d.ts.map +1 -0
  139. package/dist/processors/observational-memory/token-counter.d.ts +57 -0
  140. package/dist/processors/observational-memory/token-counter.d.ts.map +1 -0
  141. package/dist/processors/observational-memory/tool-result-helpers.d.ts +12 -0
  142. package/dist/processors/observational-memory/tool-result-helpers.d.ts.map +1 -0
  143. package/dist/processors/observational-memory/tracing.d.ts +17 -0
  144. package/dist/processors/observational-memory/tracing.d.ts.map +1 -0
  145. package/dist/processors/observational-memory/types.d.ts +997 -0
  146. package/dist/processors/observational-memory/types.d.ts.map +1 -0
  147. package/dist/processors/observational-memory/working-memory-extractor.d.ts +5 -0
  148. package/dist/processors/observational-memory/working-memory-extractor.d.ts.map +1 -0
  149. package/dist/processors/working-memory-state/index.d.ts +2 -0
  150. package/dist/processors/working-memory-state/index.d.ts.map +1 -0
  151. package/dist/processors/working-memory-state/processor.d.ts +53 -0
  152. package/dist/processors/working-memory-state/processor.d.ts.map +1 -0
  153. package/dist/src-C1tlhGeW.js +28559 -0
  154. package/dist/src-C1tlhGeW.js.map +1 -0
  155. package/dist/src-DqoifKIy.cjs +28813 -0
  156. package/dist/src-DqoifKIy.cjs.map +1 -0
  157. package/dist/tools/om-tools.d.ts +172 -0
  158. package/dist/tools/om-tools.d.ts.map +1 -0
  159. package/dist/tools/working-memory.d.ts +33 -28
  160. package/dist/tools/working-memory.d.ts.map +1 -1
  161. package/package.json +36 -28
  162. package/dist/index.cjs.map +0 -1
  163. package/dist/index.js.map +0 -1
  164. package/dist/processors/index.cjs.map +0 -1
  165. package/dist/processors/index.js.map +0 -1
  166. package/dist/processors/token-limiter.d.ts +0 -32
  167. package/dist/processors/token-limiter.d.ts.map +0 -1
  168. package/dist/processors/tool-call-filter.d.ts +0 -20
  169. package/dist/processors/tool-call-filter.d.ts.map +0 -1
@@ -0,0 +1,430 @@
1
+ > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
+
3
+ # PG vector store
4
+
5
+ The PgVector class provides vector search using [PostgreSQL](https://www.postgresql.org/) with [pgvector](https://github.com/pgvector/pgvector) extension. It provides reliable vector similarity search capabilities within your existing PostgreSQL database.
6
+
7
+ ## Constructor options
8
+
9
+ **connectionString** (`string`): PostgreSQL connection URL
10
+
11
+ **host** (`string`): PostgreSQL server host
12
+
13
+ **port** (`number`): PostgreSQL server port
14
+
15
+ **database** (`string`): PostgreSQL database name
16
+
17
+ **user** (`string`): PostgreSQL user
18
+
19
+ **password** (`string`): PostgreSQL password
20
+
21
+ **ssl** (`boolean | ConnectionOptions`): Enable SSL or provide custom SSL configuration
22
+
23
+ **schemaName** (`string`): The name of the schema you want the vector store to use. Will use the default schema if not provided.
24
+
25
+ **max** (`number`): Maximum number of pool connections (default: 20)
26
+
27
+ **idleTimeoutMillis** (`number`): Idle connection timeout in milliseconds (default: 30000)
28
+
29
+ **pgPoolOptions** (`PoolConfig`): Additional pg pool configuration options
30
+
31
+ **disableInit** (`boolean`): When true, automatic DDL (schema, extension, table, and index creation) inside createIndex is skipped. Useful for CI/CD pipelines where schema and indexes are managed separately and the runtime database role lacks DDL privileges. Can also be enabled with the MASTRA\_DISABLE\_STORAGE\_INIT environment variable. (Default: `false`)
32
+
33
+ ## Constructor examples
34
+
35
+ ### Connection String
36
+
37
+ ```ts
38
+ import { PgVector } from '@mastra/pg'
39
+
40
+ const vectorStore = new PgVector({
41
+ id: 'pg-vector',
42
+ connectionString: 'postgresql://user:password@localhost:5432/mydb',
43
+ })
44
+ ```
45
+
46
+ ### Host/Port/Database Configuration
47
+
48
+ ```ts
49
+ const vectorStore = new PgVector({
50
+ id: 'pg-vector',
51
+ host: 'localhost',
52
+ port: 5432,
53
+ database: 'mydb',
54
+ user: 'postgres',
55
+ password: 'password',
56
+ })
57
+ ```
58
+
59
+ ### Advanced Configuration
60
+
61
+ ```ts
62
+ const vectorStore = new PgVector({
63
+ id: 'pg-vector',
64
+ connectionString: 'postgresql://user:password@localhost:5432/mydb',
65
+ schemaName: 'custom_schema',
66
+ max: 30,
67
+ idleTimeoutMillis: 60000,
68
+ pgPoolOptions: {
69
+ connectionTimeoutMillis: 5000,
70
+ allowExitOnIdle: true,
71
+ },
72
+ })
73
+ ```
74
+
75
+ ## Methods
76
+
77
+ ### `createIndex()`
78
+
79
+ **indexName** (`string`): Name of the index to create
80
+
81
+ **dimension** (`number`): Vector dimension (must match your embedding model)
82
+
83
+ **metric** (`'cosine' | 'euclidean' | 'dotproduct'`): Distance metric for similarity search (Default: `cosine`)
84
+
85
+ **indexConfig** (`IndexConfig`): Index configuration (Default: `{ type: 'ivfflat' }`)
86
+
87
+ **buildIndex** (`boolean`): Whether to build the index (Default: `true`)
88
+
89
+ **metadataIndexes** (`string[]`): Array of metadata field names to create btree indexes on. Improves query performance when filtering by these metadata fields.
90
+
91
+ #### `IndexConfig`
92
+
93
+ **type** (`'flat' | 'hnsw' | 'ivfflat'`): Index type (Default: `ivfflat`)
94
+
95
+ **type.flat** (`flat`): Sequential scan (no index) that performs exhaustive search.
96
+
97
+ **type.ivfflat** (`ivfflat`): Clusters vectors into lists for approximate search.
98
+
99
+ **type.hnsw** (`hnsw`): Graph-based index offering fast search times and high recall.
100
+
101
+ **ivf** (`IVFConfig`): IVF configuration
102
+
103
+ **ivf.lists** (`number`): Number of lists. If not specified, automatically calculated based on dataset size. (Minimum 100, Maximum 4000)
104
+
105
+ **hnsw** (`HNSWConfig`): HNSW configuration
106
+
107
+ **hnsw\.m** (`number`): Maximum number of connections per node (default: 8)
108
+
109
+ **hnsw\.efConstruction** (`number`): Build-time complexity (default: 32)
110
+
111
+ #### Memory Requirements
112
+
113
+ HNSW indexes require substantial shared memory during construction. For 100K vectors:
114
+
115
+ - Small dimensions (64d): \~60MB with default settings
116
+ - Medium dimensions (256d): \~180MB with default settings
117
+ - Large dimensions (384d+): \~250MB+ with default settings
118
+
119
+ Higher M values or efConstruction values will increase memory requirements substantially. Adjust your system's shared memory limits if needed.
120
+
121
+ ### `upsert()`
122
+
123
+ **indexName** (`string`): Name of the index to upsert vectors into
124
+
125
+ **vectors** (`number[][]`): Array of embedding vectors
126
+
127
+ **metadata** (`Record<string, any>[]`): Metadata for each vector
128
+
129
+ **ids** (`string[]`): Optional vector IDs (auto-generated if not provided)
130
+
131
+ ### `query()`
132
+
133
+ **indexName** (`string`): Name of the index to query
134
+
135
+ **queryVector** (`number[]`): Query vector
136
+
137
+ **topK** (`number`): Number of results to return (Default: `10`)
138
+
139
+ **filter** (`Record<string, any>`): Metadata filters
140
+
141
+ **includeVector** (`boolean`): Whether to include the vector in the result (Default: `false`)
142
+
143
+ **minScore** (`number`): Minimum similarity score threshold (Default: `0`)
144
+
145
+ **options** (`{ ef?: number; probes?: number }`): Additional options for HNSW and IVF indexes
146
+
147
+ **options.ef** (`number`): HNSW search parameter
148
+
149
+ **options.probes** (`number`): IVF search parameter
150
+
151
+ ### `listIndexes()`
152
+
153
+ Returns an array of index names as strings.
154
+
155
+ ### `describeIndex()`
156
+
157
+ **indexName** (`string`): Name of the index to describe
158
+
159
+ Returns:
160
+
161
+ ```typescript
162
+ interface PGIndexStats {
163
+ dimension: number
164
+ count: number
165
+ metric: 'cosine' | 'euclidean' | 'dotproduct'
166
+ type: 'flat' | 'hnsw' | 'ivfflat'
167
+ config: {
168
+ m?: number
169
+ efConstruction?: number
170
+ lists?: number
171
+ probes?: number
172
+ }
173
+ }
174
+ ```
175
+
176
+ ### `deleteIndex()`
177
+
178
+ **indexName** (`string`): Name of the index to delete
179
+
180
+ ### `updateVector()`
181
+
182
+ Update a single vector by ID or by metadata filter. Either `id` or `filter` must be provided, but not both.
183
+
184
+ **indexName** (`string`): Name of the index containing the vector
185
+
186
+ **id** (`string`): ID of the vector to update (mutually exclusive with filter)
187
+
188
+ **filter** (`Record<string, any>`): Metadata filter to identify vector(s) to update (mutually exclusive with id)
189
+
190
+ **update** (`{ vector?: number[]; metadata?: Record<string, any>; }`): Object containing the vector and/or metadata to update
191
+
192
+ Updates an existing vector by ID or filter. At least one of vector or metadata must be provided in the update object.
193
+
194
+ ```typescript
195
+ // Update by ID
196
+ await pgVector.updateVector({
197
+ indexName: 'my_vectors',
198
+ id: 'vector123',
199
+ update: {
200
+ vector: [0.1, 0.2, 0.3],
201
+ metadata: { label: 'updated' },
202
+ },
203
+ })
204
+
205
+ // Update by filter
206
+ await pgVector.updateVector({
207
+ indexName: 'my_vectors',
208
+ filter: { category: 'product' },
209
+ update: {
210
+ metadata: { status: 'reviewed' },
211
+ },
212
+ })
213
+ ```
214
+
215
+ ### `deleteVector()`
216
+
217
+ **indexName** (`string`): Name of the index containing the vector
218
+
219
+ **id** (`string`): ID of the vector to delete
220
+
221
+ Deletes a single vector by ID from the specified index.
222
+
223
+ ```typescript
224
+ await pgVector.deleteVector({ indexName: 'my_vectors', id: 'vector123' })
225
+ ```
226
+
227
+ ### `deleteVectors()`
228
+
229
+ Delete multiple vectors by IDs or by metadata filter. Either `ids` or `filter` must be provided, but not both.
230
+
231
+ **indexName** (`string`): Name of the index containing the vectors to delete
232
+
233
+ **ids** (`string[]`): Array of vector IDs to delete (mutually exclusive with filter)
234
+
235
+ **filter** (`Record<string, any>`): Metadata filter to identify vectors to delete (mutually exclusive with ids)
236
+
237
+ ### `disconnect()`
238
+
239
+ Closes the database connection pool. Should be called when done using the store.
240
+
241
+ ### `buildIndex()`
242
+
243
+ **indexName** (`string`): Name of the index to define
244
+
245
+ **metric** (`'cosine' | 'euclidean' | 'dotproduct'`): Distance metric for similarity search (Default: `cosine`)
246
+
247
+ **indexConfig** (`IndexConfig`): Configuration for the index type and parameters
248
+
249
+ Builds or rebuilds an index with specified metric and configuration. Will drop any existing index before creating the new one.
250
+
251
+ ```typescript
252
+ // Define HNSW index
253
+ await pgVector.buildIndex('my_vectors', 'cosine', {
254
+ type: 'hnsw',
255
+ hnsw: {
256
+ m: 8,
257
+ efConstruction: 32,
258
+ },
259
+ })
260
+
261
+ // Define IVF index
262
+ await pgVector.buildIndex('my_vectors', 'cosine', {
263
+ type: 'ivfflat',
264
+ ivf: {
265
+ lists: 100,
266
+ },
267
+ })
268
+
269
+ // Define flat index
270
+ await pgVector.buildIndex('my_vectors', 'cosine', {
271
+ type: 'flat',
272
+ })
273
+ ```
274
+
275
+ ## Response types
276
+
277
+ Query results are returned in this format:
278
+
279
+ ```typescript
280
+ interface QueryResult {
281
+ id: string
282
+ score: number
283
+ metadata: Record<string, any>
284
+ vector?: number[] // Only included if includeVector is true
285
+ }
286
+ ```
287
+
288
+ ## Error handling
289
+
290
+ The store throws typed errors that can be caught:
291
+
292
+ ```typescript
293
+ try {
294
+ await store.query({
295
+ indexName: 'index_name',
296
+ queryVector: queryVector,
297
+ })
298
+ } catch (error) {
299
+ if (error instanceof VectorStoreError) {
300
+ console.log(error.code) // 'connection_failed' | 'invalid_dimension' | etc
301
+ console.log(error.details) // Additional error context
302
+ }
303
+ }
304
+ ```
305
+
306
+ ## Index configuration guide
307
+
308
+ ### Performance Optimization
309
+
310
+ #### IVFFlat Tuning
311
+
312
+ - **lists parameter**: Set to `sqrt(n) * 2` where n is the number of vectors
313
+ - More lists = better accuracy but slower build time
314
+ - Fewer lists = faster build but potentially lower accuracy
315
+
316
+ #### HNSW Tuning
317
+
318
+ - **m parameter**:
319
+
320
+ - 8-16: Moderate accuracy, lower memory
321
+ - 16-32: High accuracy, moderate memory
322
+ - 32-64: Very high accuracy, high memory
323
+
324
+ - **efConstruction**:
325
+
326
+ - 32-64: Fast build, good quality
327
+ - 64-128: Slower build, better quality
328
+ - 128-256: Slowest build, best quality
329
+
330
+ ### Index Recreation Behavior
331
+
332
+ The system automatically detects configuration changes and only rebuilds indexes when necessary:
333
+
334
+ - Same configuration: Index is kept (no recreation)
335
+ - Changed configuration: Index is dropped and rebuilt
336
+ - This prevents the performance issues from unnecessary index recreations
337
+
338
+ ## Best practices
339
+
340
+ - Regularly evaluate your index configuration to ensure optimal performance.
341
+ - Adjust parameters like `lists` and `m` based on dataset size and query requirements.
342
+ - **Monitor index performance** using `describeIndex()` to track usage
343
+ - Rebuild indexes periodically to maintain efficiency, especially after substantial data changes
344
+
345
+ ## Direct pool access
346
+
347
+ The `PgVector` class exposes its underlying PostgreSQL connection pool as a public field:
348
+
349
+ ```typescript
350
+ pgVector.pool // instance of pg.Pool
351
+ ```
352
+
353
+ This enables advanced usage such as running direct SQL queries, managing transactions, or monitoring pool state. When using the pool directly:
354
+
355
+ - You are responsible for releasing clients (`client.release()`) after use.
356
+ - The pool remains accessible after calling `disconnect()`, but new queries will fail.
357
+ - Direct access bypasses any validation or transaction logic provided by PgVector methods.
358
+
359
+ This design supports advanced use cases but requires careful resource management by the user.
360
+
361
+ ## Usage example
362
+
363
+ ### Local embeddings with fastembed
364
+
365
+ Embeddings are numeric vectors used by memory's `semanticRecall` to retrieve related messages by meaning (not keywords). This setup uses `@mastra/fastembed` to generate vector embeddings.
366
+
367
+ Install `fastembed` to get started:
368
+
369
+ **npm**:
370
+
371
+ ```bash
372
+ npm install @mastra/fastembed@latest
373
+ ```
374
+
375
+ **pnpm**:
376
+
377
+ ```bash
378
+ pnpm add @mastra/fastembed@latest
379
+ ```
380
+
381
+ **Yarn**:
382
+
383
+ ```bash
384
+ yarn add @mastra/fastembed@latest
385
+ ```
386
+
387
+ **Bun**:
388
+
389
+ ```bash
390
+ bun add @mastra/fastembed@latest
391
+ ```
392
+
393
+ Add the following to your agent:
394
+
395
+ ```typescript
396
+ import { Memory } from '@mastra/memory'
397
+ import { Agent } from '@mastra/core/agent'
398
+ import { PostgresStore, PgVector } from '@mastra/pg'
399
+ import { fastembed } from '@mastra/fastembed'
400
+
401
+ export const pgAgent = new Agent({
402
+ id: 'pg-agent',
403
+ name: 'PG Agent',
404
+ instructions:
405
+ 'You are an AI agent with the ability to automatically recall memories from previous interactions.',
406
+ model: 'openai/gpt-5.6-sol',
407
+ memory: new Memory({
408
+ storage: new PostgresStore({
409
+ id: 'pg-agent-storage',
410
+ connectionString: process.env.DATABASE_URL!,
411
+ }),
412
+ vector: new PgVector({
413
+ id: 'pg-agent-vector',
414
+ connectionString: process.env.DATABASE_URL!,
415
+ }),
416
+ embedder: fastembed,
417
+ options: {
418
+ lastMessages: 10,
419
+ semanticRecall: {
420
+ topK: 3,
421
+ messageRange: 2,
422
+ },
423
+ },
424
+ }),
425
+ })
426
+ ```
427
+
428
+ ## Related
429
+
430
+ - [Metadata Filters](https://mastra.ai/reference/rag/metadata-filters)
@@ -0,0 +1,296 @@
1
+ > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
+
3
+ # Upstash vector store
4
+
5
+ The UpstashVector class provides vector search using [Upstash Vector](https://upstash.com/vector), a serverless vector database service that provides vector similarity search with metadata filtering capabilities and hybrid search support.
6
+
7
+ ## Constructor options
8
+
9
+ **url** (`string`): Upstash Vector database URL
10
+
11
+ **token** (`string`): Upstash Vector API token
12
+
13
+ ## Methods
14
+
15
+ ### `createIndex()`
16
+
17
+ Note: This method is a no-op for Upstash as indexes are created automatically.
18
+
19
+ **indexName** (`string`): Name of the index to create
20
+
21
+ **dimension** (`number`): Vector dimension (must match your embedding model)
22
+
23
+ **metric** (`'cosine' | 'euclidean' | 'dotproduct'`): Distance metric for similarity search (Default: `cosine`)
24
+
25
+ ### `upsert()`
26
+
27
+ **indexName** (`string`): Name of the index to upsert into
28
+
29
+ **vectors** (`number[][]`): Array of embedding vectors
30
+
31
+ **sparseVectors** (`{ indices: number[], values: number[] }[]`): Array of sparse vectors for hybrid search. Each sparse vector must have matching indices and values arrays.
32
+
33
+ **metadata** (`Record<string, any>[]`): Metadata for each vector
34
+
35
+ **ids** (`string[]`): Optional vector IDs (auto-generated if not provided)
36
+
37
+ ### `query()`
38
+
39
+ **indexName** (`string`): Name of the index to query
40
+
41
+ **queryVector** (`number[]`): Query vector to find similar vectors
42
+
43
+ **sparseVector** (`{ indices: number[], values: number[] }`): Optional sparse vector for hybrid search. Must have matching indices and values arrays.
44
+
45
+ **topK** (`number`): Number of results to return (Default: `10`)
46
+
47
+ **filter** (`Record<string, any>`): Metadata filters for the query
48
+
49
+ **includeVector** (`boolean`): Whether to include vectors in the results (Default: `false`)
50
+
51
+ **fusionAlgorithm** (`FusionAlgorithm`): Algorithm used to combine dense and sparse search results in hybrid search (e.g., RRF - Reciprocal Rank Fusion)
52
+
53
+ **queryMode** (`QueryMode`): Search mode: 'DENSE' for dense-only, 'SPARSE' for sparse-only, or 'HYBRID' for combined search
54
+
55
+ ### `listIndexes()`
56
+
57
+ Returns an array of index names (namespaces) as strings.
58
+
59
+ ### `describeIndex()`
60
+
61
+ **indexName** (`string`): Name of the index to describe
62
+
63
+ Returns:
64
+
65
+ ```typescript
66
+ interface IndexStats {
67
+ dimension: number
68
+ count: number
69
+ metric: 'cosine' | 'euclidean' | 'dotproduct'
70
+ }
71
+ ```
72
+
73
+ ### `deleteIndex()`
74
+
75
+ **indexName** (`string`): Name of the index (namespace) to delete
76
+
77
+ ### `updateVector()`
78
+
79
+ **indexName** (`string`): Name of the index to update
80
+
81
+ **id** (`string`): ID of the item to update
82
+
83
+ **update** (`object`): Update object containing vector, sparse vector, and/or metadata
84
+
85
+ The `update` object can have the following properties:
86
+
87
+ - `vector` (optional): An array of numbers representing the new dense vector.
88
+ - `sparseVector` (optional): A sparse vector object with `indices` and `values` arrays for hybrid indexes.
89
+ - `metadata` (optional): A record of key-value pairs for metadata.
90
+
91
+ ### `deleteVector()`
92
+
93
+ **indexName** (`string`): Name of the index from which to delete the item
94
+
95
+ **id** (`string`): ID of the item to delete
96
+
97
+ Attempts to delete an item by its ID from the specified index. Logs an error message if the deletion fails.
98
+
99
+ ## Hybrid vector search
100
+
101
+ Upstash Vector supports hybrid search that combines semantic search (dense vectors) with keyword-based search (sparse vectors) for improved relevance and accuracy.
102
+
103
+ ### Basic Hybrid Usage
104
+
105
+ ```typescript
106
+ import { UpstashVector } from '@mastra/upstash'
107
+
108
+ const vectorStore = new UpstashVector({
109
+ id: 'upstash-vector',
110
+ url: process.env.UPSTASH_VECTOR_URL,
111
+ token: process.env.UPSTASH_VECTOR_TOKEN,
112
+ })
113
+
114
+ // Upsert vectors with both dense and sparse components
115
+ const denseVectors = [
116
+ [0.1, 0.2, 0.3],
117
+ [0.4, 0.5, 0.6],
118
+ ]
119
+ const sparseVectors = [
120
+ { indices: [1, 5, 10], values: [0.8, 0.6, 0.4] },
121
+ { indices: [2, 6, 11], values: [0.7, 0.5, 0.3] },
122
+ ]
123
+
124
+ await vectorStore.upsert({
125
+ indexName: 'hybrid-index',
126
+ vectors: denseVectors,
127
+ sparseVectors: sparseVectors,
128
+ metadata: [{ title: 'Document 1' }, { title: 'Document 2' }],
129
+ })
130
+
131
+ // Query with hybrid search
132
+ const results = await vectorStore.query({
133
+ indexName: 'hybrid-index',
134
+ queryVector: [0.1, 0.2, 0.3],
135
+ sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
136
+ topK: 10,
137
+ })
138
+ ```
139
+
140
+ ### Advanced Hybrid Search Options
141
+
142
+ ```typescript
143
+ import { FusionAlgorithm, QueryMode } from '@upstash/vector'
144
+
145
+ // Query with specific fusion algorithm
146
+ const fusionResults = await vectorStore.query({
147
+ indexName: 'hybrid-index',
148
+ queryVector: [0.1, 0.2, 0.3],
149
+ sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
150
+ fusionAlgorithm: FusionAlgorithm.RRF,
151
+ topK: 10,
152
+ })
153
+
154
+ // Dense-only search
155
+ const denseResults = await vectorStore.query({
156
+ indexName: 'hybrid-index',
157
+ queryVector: [0.1, 0.2, 0.3],
158
+ queryMode: QueryMode.DENSE,
159
+ topK: 10,
160
+ })
161
+
162
+ // Sparse-only search
163
+ const sparseResults = await vectorStore.query({
164
+ indexName: 'hybrid-index',
165
+ queryVector: [0.1, 0.2, 0.3], // Still required for index structure
166
+ sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
167
+ queryMode: QueryMode.SPARSE,
168
+ topK: 10,
169
+ })
170
+ ```
171
+
172
+ ### Updating Hybrid Vectors
173
+
174
+ ```typescript
175
+ // Update both dense and sparse components
176
+ await vectorStore.updateVector({
177
+ indexName: 'hybrid-index',
178
+ id: 'vector-id',
179
+ update: {
180
+ vector: [0.2, 0.3, 0.4],
181
+ sparseVector: { indices: [2, 7, 12], values: [0.9, 0.8, 0.6] },
182
+ metadata: { title: 'Updated Document' },
183
+ },
184
+ })
185
+ ```
186
+
187
+ ## Response types
188
+
189
+ Query results are returned in this format:
190
+
191
+ ```typescript
192
+ interface QueryResult {
193
+ id: string
194
+ score: number
195
+ metadata: Record<string, any>
196
+ vector?: number[] // Only included if includeVector is true
197
+ }
198
+ ```
199
+
200
+ ## Error handling
201
+
202
+ The store throws typed errors that can be caught:
203
+
204
+ ```typescript
205
+ try {
206
+ await store.query({
207
+ indexName: 'index_name',
208
+ queryVector: queryVector,
209
+ })
210
+ } catch (error) {
211
+ if (error instanceof VectorStoreError) {
212
+ console.log(error.code) // 'connection_failed' | 'invalid_dimension' | etc
213
+ console.log(error.details) // Additional error context
214
+ }
215
+ }
216
+ ```
217
+
218
+ ## Environment variables
219
+
220
+ Required environment variables:
221
+
222
+ - `UPSTASH_VECTOR_URL`: Your Upstash Vector database URL
223
+ - `UPSTASH_VECTOR_TOKEN`: Your Upstash Vector API token
224
+
225
+ ## Usage example
226
+
227
+ ### Local embeddings with fastembed
228
+
229
+ Embeddings are numeric vectors used by memory's `semanticRecall` to retrieve related messages by meaning (not keywords). This setup uses `@mastra/fastembed` to generate vector embeddings.
230
+
231
+ Install `fastembed` to get started:
232
+
233
+ **npm**:
234
+
235
+ ```bash
236
+ npm install @mastra/fastembed@latest
237
+ ```
238
+
239
+ **pnpm**:
240
+
241
+ ```bash
242
+ pnpm add @mastra/fastembed@latest
243
+ ```
244
+
245
+ **Yarn**:
246
+
247
+ ```bash
248
+ yarn add @mastra/fastembed@latest
249
+ ```
250
+
251
+ **Bun**:
252
+
253
+ ```bash
254
+ bun add @mastra/fastembed@latest
255
+ ```
256
+
257
+ Add the following to your agent:
258
+
259
+ ```typescript
260
+ import { Memory } from '@mastra/memory'
261
+ import { Agent } from '@mastra/core/agent'
262
+ import { UpstashStore, UpstashVector } from '@mastra/upstash'
263
+ import { fastembed } from '@mastra/fastembed'
264
+
265
+ export const upstashAgent = new Agent({
266
+ id: 'upstash-agent',
267
+ name: 'Upstash Agent',
268
+ instructions:
269
+ 'You are an AI agent with the ability to automatically recall memories from previous interactions.',
270
+ model: 'openai/gpt-5.6-sol',
271
+ memory: new Memory({
272
+ storage: new UpstashStore({
273
+ id: 'upstash-agent-storage',
274
+ url: process.env.UPSTASH_REDIS_REST_URL!,
275
+ token: process.env.UPSTASH_REDIS_REST_TOKEN!,
276
+ }),
277
+ vector: new UpstashVector({
278
+ id: 'upstash-agent-vector',
279
+ url: process.env.UPSTASH_VECTOR_REST_URL!,
280
+ token: process.env.UPSTASH_VECTOR_REST_TOKEN!,
281
+ }),
282
+ embedder: fastembed,
283
+ options: {
284
+ lastMessages: 10,
285
+ semanticRecall: {
286
+ topK: 3,
287
+ messageRange: 2,
288
+ },
289
+ },
290
+ }),
291
+ })
292
+ ```
293
+
294
+ ## Related
295
+
296
+ - [Metadata Filters](https://mastra.ai/reference/rag/metadata-filters)