@mastra/oracledb 0.0.0 → 0.2.0-alpha.0

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 (92) hide show
  1. package/LICENSE.md +30 -0
  2. package/dist/docs/SKILL.md +37 -0
  3. package/dist/docs/assets/SOURCE_MAP.json +6 -0
  4. package/dist/docs/references/docs-memory-observational-memory.md +835 -0
  5. package/dist/docs/references/docs-memory-semantic-recall.md +402 -0
  6. package/dist/docs/references/docs-memory-working-memory.md +432 -0
  7. package/dist/docs/references/docs-storage-overview.md +215 -0
  8. package/dist/docs/references/guides-rag-overview.md +74 -0
  9. package/dist/docs/references/guides-rag-retrieval.md +537 -0
  10. package/dist/docs/references/guides-rag-vector-databases.md +710 -0
  11. package/dist/docs/references/reference-rag-metadata-filters.md +227 -0
  12. package/dist/docs/references/reference-storage-oracledb.md +239 -0
  13. package/dist/docs/references/reference-vectors-oracledb.md +347 -0
  14. package/dist/index.cjs +10217 -0
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/index.d.ts +7 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +10196 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/schema.d.ts +27 -0
  21. package/dist/schema.d.ts.map +1 -0
  22. package/dist/shared/connection.d.ts +46 -0
  23. package/dist/shared/connection.d.ts.map +1 -0
  24. package/dist/storage/db/index.d.ts +128 -0
  25. package/dist/storage/db/index.d.ts.map +1 -0
  26. package/dist/storage/domain-utils.d.ts +18 -0
  27. package/dist/storage/domain-utils.d.ts.map +1 -0
  28. package/dist/storage/domains/agents/index.d.ts +54 -0
  29. package/dist/storage/domains/agents/index.d.ts.map +1 -0
  30. package/dist/storage/domains/mcp-clients/index.d.ts +46 -0
  31. package/dist/storage/domains/mcp-clients/index.d.ts.map +1 -0
  32. package/dist/storage/domains/memory/index.d.ts +88 -0
  33. package/dist/storage/domains/memory/index.d.ts.map +1 -0
  34. package/dist/storage/domains/memory/messages.d.ts +37 -0
  35. package/dist/storage/domains/memory/messages.d.ts.map +1 -0
  36. package/dist/storage/domains/memory/observational-buffering.d.ts +7 -0
  37. package/dist/storage/domains/memory/observational-buffering.d.ts.map +1 -0
  38. package/dist/storage/domains/memory/observational.d.ts +56 -0
  39. package/dist/storage/domains/memory/observational.d.ts.map +1 -0
  40. package/dist/storage/domains/memory/resources.d.ts +14 -0
  41. package/dist/storage/domains/memory/resources.d.ts.map +1 -0
  42. package/dist/storage/domains/memory/schema.d.ts +43 -0
  43. package/dist/storage/domains/memory/schema.d.ts.map +1 -0
  44. package/dist/storage/domains/memory/threads.d.ts +37 -0
  45. package/dist/storage/domains/memory/threads.d.ts.map +1 -0
  46. package/dist/storage/domains/memory/utils.d.ts +68 -0
  47. package/dist/storage/domains/memory/utils.d.ts.map +1 -0
  48. package/dist/storage/domains/observability/binds.d.ts +21 -0
  49. package/dist/storage/domains/observability/binds.d.ts.map +1 -0
  50. package/dist/storage/domains/observability/index.d.ts +49 -0
  51. package/dist/storage/domains/observability/index.d.ts.map +1 -0
  52. package/dist/storage/domains/observability/logs.d.ts +5 -0
  53. package/dist/storage/domains/observability/logs.d.ts.map +1 -0
  54. package/dist/storage/domains/observability/schema.d.ts +38 -0
  55. package/dist/storage/domains/observability/schema.d.ts.map +1 -0
  56. package/dist/storage/domains/observability/scores-bridge.d.ts +7 -0
  57. package/dist/storage/domains/observability/scores-bridge.d.ts.map +1 -0
  58. package/dist/storage/domains/observability/spans.d.ts +18 -0
  59. package/dist/storage/domains/observability/spans.d.ts.map +1 -0
  60. package/dist/storage/domains/scorer-definitions/index.d.ts +46 -0
  61. package/dist/storage/domains/scorer-definitions/index.d.ts.map +1 -0
  62. package/dist/storage/domains/scores/index.d.ts +63 -0
  63. package/dist/storage/domains/scores/index.d.ts.map +1 -0
  64. package/dist/storage/domains/workflows/index.d.ts +61 -0
  65. package/dist/storage/domains/workflows/index.d.ts.map +1 -0
  66. package/dist/storage/index.d.ts +45 -0
  67. package/dist/storage/index.d.ts.map +1 -0
  68. package/dist/storage/migrations.d.ts +55 -0
  69. package/dist/storage/migrations.d.ts.map +1 -0
  70. package/dist/storage/types.d.ts +44 -0
  71. package/dist/storage/types.d.ts.map +1 -0
  72. package/dist/vector/ddl.d.ts +58 -0
  73. package/dist/vector/ddl.d.ts.map +1 -0
  74. package/dist/vector/filter.d.ts +7 -0
  75. package/dist/vector/filter.d.ts.map +1 -0
  76. package/dist/vector/identifiers.d.ts +11 -0
  77. package/dist/vector/identifiers.d.ts.map +1 -0
  78. package/dist/vector/index.d.ts +32 -0
  79. package/dist/vector/index.d.ts.map +1 -0
  80. package/dist/vector/prompt.d.ts +6 -0
  81. package/dist/vector/prompt.d.ts.map +1 -0
  82. package/dist/vector/query.d.ts +5 -0
  83. package/dist/vector/query.d.ts.map +1 -0
  84. package/dist/vector/sql.d.ts +12 -0
  85. package/dist/vector/sql.d.ts.map +1 -0
  86. package/dist/vector/stats.d.ts +9 -0
  87. package/dist/vector/stats.d.ts.map +1 -0
  88. package/dist/vector/types.d.ts +80 -0
  89. package/dist/vector/types.d.ts.map +1 -0
  90. package/dist/vector/upsert.d.ts +20 -0
  91. package/dist/vector/upsert.d.ts.map +1 -0
  92. package/package.json +23 -24
@@ -0,0 +1,402 @@
1
+ > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
+
3
+ # Semantic recall
4
+
5
+ If you ask your friend what they did last weekend, they will search in their memory for events associated with "last weekend" and then tell you what they did. That's sort of like how semantic recall works in Mastra.
6
+
7
+ > **📹 Watch:** Watch [Mastra semantic recall](https://www.youtube.com/watch?v=UVZtK8cK8xQ\&pp=ygUVbWFzdHJhIHdvcmtpbmcgbWVtb3J5) to see how agents retrieve relevant messages from past conversations.
8
+
9
+ ## How semantic recall works
10
+
11
+ Semantic recall is RAG-based search that helps agents maintain context across longer interactions when messages are no longer within [recent message history](https://mastra.ai/docs/memory/message-history).
12
+
13
+ It uses vector embeddings of messages for similarity search and integrates with vector stores, plus has configurable context windows around retrieved messages.
14
+
15
+ ![Diagram showing Mastra Memory semantic recall](/assets/images/semantic-recall-fd7b9336a6d0d18019216cb6d3dbe710.png)
16
+
17
+ When it's enabled, new messages are used to query a vector DB for semantically similar messages.
18
+
19
+ After getting a response from the LLM, all new messages (user, assistant, and tool calls/results) are inserted into the vector DB to be recalled in later interactions.
20
+
21
+ ## Quickstart
22
+
23
+ Semantic recall is disabled by default. To enable it, set `semanticRecall: true` in `options` and provide a `vector` store and `embedder`:
24
+
25
+ **LibSQL**:
26
+
27
+ ```typescript
28
+ import { Agent } from '@mastra/core/agent'
29
+ import { Memory } from '@mastra/memory'
30
+ import { LibSQLStore, LibSQLVector } from '@mastra/libsql'
31
+ import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
32
+
33
+ const agent = new Agent({
34
+ id: 'support-agent',
35
+ name: 'SupportAgent',
36
+ instructions: 'You are a helpful support agent.',
37
+ model: 'openai/gpt-5.6-sol',
38
+ memory: new Memory({
39
+ storage: new LibSQLStore({
40
+ id: 'agent-storage',
41
+ url: 'file:./local.db',
42
+ }),
43
+ vector: new LibSQLVector({
44
+ id: 'agent-vector',
45
+ url: 'file:./local.db',
46
+ }),
47
+ embedder: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
48
+ options: {
49
+ semanticRecall: true,
50
+ },
51
+ }),
52
+ })
53
+ ```
54
+
55
+ **MongoDB**:
56
+
57
+ ```typescript
58
+ import { Agent } from '@mastra/core/agent'
59
+ import { Memory } from '@mastra/memory'
60
+ import { MongoDBStore, MongoDBVector } from '@mastra/mongodb'
61
+ import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
62
+
63
+ const agent = new Agent({
64
+ id: 'support-agent',
65
+ name: 'SupportAgent',
66
+ instructions: 'You are a helpful support agent.',
67
+ model: 'openai/gpt-5.6-sol',
68
+ memory: new Memory({
69
+ storage: new MongoDBStore({
70
+ id: 'agent-storage',
71
+ uri: process.env.MONGODB_URI,
72
+ dbName: process.env.MONGODB_DB_NAME,
73
+ }),
74
+ vector: new MongoDBVector({
75
+ id: 'agent-vector',
76
+ uri: process.env.MONGODB_URI,
77
+ dbName: process.env.MONGODB_DB_NAME,
78
+ }),
79
+ embedder: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
80
+ options: {
81
+ semanticRecall: true,
82
+ },
83
+ }),
84
+ })
85
+ ```
86
+
87
+ ## Using the `recall()` method
88
+
89
+ While `listMessages` retrieves messages by thread ID with basic pagination, [`recall()`](https://mastra.ai/reference/memory/recall) adds support for **semantic search**. When you need to find messages by meaning rather than recency, use `recall()` with a `vectorSearchString`:
90
+
91
+ ```typescript
92
+ const memory = await agent.getMemory()
93
+
94
+ // Basic recall - similar to listMessages
95
+ const { messages } = await memory!.recall({
96
+ threadId: 'thread-123',
97
+ perPage: 50,
98
+ })
99
+
100
+ // Semantic recall - find messages by meaning
101
+ const { messages: relevantMessages } = await memory!.recall({
102
+ threadId: 'thread-123',
103
+ vectorSearchString: 'What did we discuss about the project deadline?',
104
+ threadConfig: {
105
+ semanticRecall: true,
106
+ },
107
+ })
108
+ ```
109
+
110
+ ## Storage configuration
111
+
112
+ Semantic recall relies on a [storage and vector db](https://mastra.ai/reference/memory/memory-class) to store messages and their embeddings.
113
+
114
+ ```ts
115
+ import { Memory } from '@mastra/memory'
116
+ import { Agent } from '@mastra/core/agent'
117
+ import { LibSQLStore, LibSQLVector } from '@mastra/libsql'
118
+
119
+ const agent = new Agent({
120
+ memory: new Memory({
121
+ // this is the default storage db if omitted
122
+ storage: new LibSQLStore({
123
+ id: 'agent-storage',
124
+ url: 'file:./local.db',
125
+ }),
126
+ // this is the default vector db if omitted
127
+ vector: new LibSQLVector({
128
+ id: 'agent-vector',
129
+ url: 'file:./local.db',
130
+ }),
131
+ options: {
132
+ semanticRecall: true,
133
+ },
134
+ }),
135
+ })
136
+ ```
137
+
138
+ Each vector store page below includes installation instructions, configuration parameters, and usage examples:
139
+
140
+ - [Astra](https://mastra.ai/reference/vectors/astra)
141
+ - [Chroma](https://mastra.ai/reference/vectors/chroma)
142
+ - [Cloudflare Vectorize](https://mastra.ai/reference/vectors/vectorize)
143
+ - [Convex](https://mastra.ai/reference/vectors/convex)
144
+ - [Couchbase](https://mastra.ai/reference/vectors/couchbase)
145
+ - [DuckDB](https://mastra.ai/reference/vectors/duckdb)
146
+ - [Elasticsearch](https://mastra.ai/reference/vectors/elasticsearch)
147
+ - [LanceDB](https://mastra.ai/reference/vectors/lance)
148
+ - [libSQL](https://mastra.ai/reference/vectors/libsql)
149
+ - [MongoDB](https://mastra.ai/reference/vectors/mongodb)
150
+ - [OpenSearch](https://mastra.ai/reference/vectors/opensearch)
151
+ - [OracleDB](https://mastra.ai/reference/vectors/oracledb)
152
+ - [Pinecone](https://mastra.ai/reference/vectors/pinecone)
153
+ - [PostgreSQL](https://mastra.ai/reference/vectors/pg)
154
+ - [Qdrant](https://mastra.ai/reference/vectors/qdrant)
155
+ - [S3 Vectors](https://mastra.ai/reference/vectors/s3vectors)
156
+ - [Turbopuffer](https://mastra.ai/reference/vectors/turbopuffer)
157
+ - [Upstash](https://mastra.ai/reference/vectors/upstash)
158
+
159
+ ## Recall configuration
160
+
161
+ The following options control semantic recall behavior:
162
+
163
+ 1. **topK**: The number of similar messages to retrieve
164
+ 2. **messageRange**: The surrounding messages to include with each match
165
+ 3. **scope**: Whether to search the current thread or all threads for a resource
166
+ 4. **filter**: Metadata criteria that restrict search results
167
+
168
+ ```typescript
169
+ const agent = new Agent({
170
+ id: 'agent',
171
+ memory: new Memory({
172
+ options: {
173
+ semanticRecall: {
174
+ topK: 3, // Retrieve 3 similar messages
175
+ messageRange: 2, // Include 2 messages before and after each match
176
+ scope: 'resource', // Search all threads for this resource
177
+ filter: { projectId: { $eq: 'project-a' } },
178
+ },
179
+ },
180
+ }),
181
+ })
182
+ ```
183
+
184
+ > **Note:** `scope: 'resource'` is supported by the LibSQL, OracleDB, PostgreSQL, MongoDB, and Upstash storage adapters.
185
+
186
+ ### Metadata filtering
187
+
188
+ The `filter` option restricts semantic recall results to messages with matching thread metadata.
189
+
190
+ ```typescript
191
+ const agent = new Agent({
192
+ id: 'agent',
193
+ memory: new Memory({
194
+ options: {
195
+ semanticRecall: {
196
+ scope: 'resource',
197
+ filter: {
198
+ projectId: { $eq: 'project-a' },
199
+ category: { $in: ['work', 'personal'] },
200
+ },
201
+ },
202
+ },
203
+ }),
204
+ })
205
+ ```
206
+
207
+ Filters match metadata stored on message embeddings when messages are saved. If thread metadata changes later, existing embeddings keep their previous metadata until those messages are saved or indexed again.
208
+
209
+ Supported filter operators:
210
+
211
+ - `$and`: Logical AND
212
+ - `$eq`: Equal to
213
+ - `$gt`: Greater than
214
+ - `$gte`: Greater than or equal
215
+ - `$in`: In array
216
+ - `$lt`: Less than
217
+ - `$lte`: Less than or equal
218
+ - `$ne`: Not equal to
219
+ - `$nin`: Not in array
220
+ - `$or`: Logical OR
221
+
222
+ The following example demonstrates metadata filters for common use cases:
223
+
224
+ ```typescript
225
+ // Filter by project
226
+ const options = {
227
+ semanticRecall: { filter: { projectId: { $eq: 'my-project' } } },
228
+ }
229
+
230
+ // Filter by multiple categories
231
+ const options = {
232
+ semanticRecall: { filter: { category: { $in: ['work', 'research'] } } },
233
+ }
234
+
235
+ // Filter by project and priority
236
+ const options = {
237
+ semanticRecall: {
238
+ filter: {
239
+ $and: [{ projectId: { $eq: 'project-a' } }, { priority: { $gte: 3 } }],
240
+ },
241
+ },
242
+ }
243
+ ```
244
+
245
+ ## Embedder configuration
246
+
247
+ Semantic recall relies on an [embedding model](https://mastra.ai/reference/memory/memory-class) to convert messages into embeddings. Mastra supports embedding models through the model router using `provider/model` strings, or you can use any [embedding model](https://sdk.vercel.ai/docs/ai-sdk-core/embeddings) compatible with the AI SDK.
248
+
249
+ ### Using the Model Router (Recommended)
250
+
251
+ The simplest way is to use a `provider/model` string with autocomplete support:
252
+
253
+ ```ts
254
+ import { Memory } from '@mastra/memory'
255
+ import { Agent } from '@mastra/core/agent'
256
+ import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
257
+
258
+ const agent = new Agent({
259
+ id: 'agent',
260
+ memory: new Memory({
261
+ embedder: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
262
+ options: {
263
+ semanticRecall: true,
264
+ },
265
+ }),
266
+ })
267
+ ```
268
+
269
+ Supported embedding models:
270
+
271
+ - **OpenAI**: `text-embedding-3-small`, `text-embedding-3-large`, `text-embedding-ada-002`
272
+ - **Google**: `gemini-embedding-001`
273
+ - **OpenRouter**: Access embedding models from various providers
274
+
275
+ ```ts
276
+ import { Agent } from '@mastra/core/agent'
277
+ import { Memory } from '@mastra/memory'
278
+ import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
279
+
280
+ const agent = new Agent({
281
+ id: 'agent',
282
+ memory: new Memory({
283
+ embedder: new ModelRouterEmbeddingModel({
284
+ providerId: 'openrouter',
285
+ modelId: 'openai/text-embedding-3-small',
286
+ }),
287
+ }),
288
+ })
289
+ ```
290
+
291
+ The model router automatically handles API key detection from environment variables (`OPENAI_API_KEY`, `GOOGLE_API_KEY`, `OPENROUTER_API_KEY`). Google models also fall back to `GOOGLE_GENERATIVE_AI_API_KEY`.
292
+
293
+ ### Using AI SDK Packages
294
+
295
+ You can also use AI SDK embedding models directly:
296
+
297
+ ```ts
298
+ import { Memory } from '@mastra/memory'
299
+ import { Agent } from '@mastra/core/agent'
300
+ import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
301
+
302
+ const agent = new Agent({
303
+ id: 'agent',
304
+ memory: new Memory({
305
+ embedder: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
306
+ }),
307
+ })
308
+ ```
309
+
310
+ ### Using FastEmbed (local)
311
+
312
+ To use FastEmbed (a local embedding model), install `@mastra/fastembed`:
313
+
314
+ **npm**:
315
+
316
+ ```bash
317
+ npm install @mastra/fastembed@latest
318
+ ```
319
+
320
+ **pnpm**:
321
+
322
+ ```bash
323
+ pnpm add @mastra/fastembed@latest
324
+ ```
325
+
326
+ **Yarn**:
327
+
328
+ ```bash
329
+ yarn add @mastra/fastembed@latest
330
+ ```
331
+
332
+ **Bun**:
333
+
334
+ ```bash
335
+ bun add @mastra/fastembed@latest
336
+ ```
337
+
338
+ Then configure it in your memory:
339
+
340
+ ```ts
341
+ import { Memory } from '@mastra/memory'
342
+ import { Agent } from '@mastra/core/agent'
343
+ import { fastembed } from '@mastra/fastembed'
344
+
345
+ const agent = new Agent({
346
+ id: 'agent',
347
+ memory: new Memory({
348
+ embedder: fastembed,
349
+ }),
350
+ })
351
+ ```
352
+
353
+ ## PostgreSQL index optimization
354
+
355
+ When using PostgreSQL as your vector store, you can optimize semantic recall performance by configuring the vector index. This is particularly important for large-scale deployments with thousands of messages.
356
+
357
+ PostgreSQL supports both IVFFlat and HNSW indexes. By default, Mastra creates an IVFFlat index, but HNSW indexes typically provide better performance, especially with OpenAI embeddings which use inner product distance.
358
+
359
+ ```typescript
360
+ import { Memory } from '@mastra/memory'
361
+ import { PgStore, PgVector } from '@mastra/pg'
362
+
363
+ const agent = new Agent({
364
+ memory: new Memory({
365
+ storage: new PgStore({
366
+ id: 'agent-storage',
367
+ connectionString: process.env.DATABASE_URL,
368
+ }),
369
+ vector: new PgVector({
370
+ id: 'agent-vector',
371
+ connectionString: process.env.DATABASE_URL,
372
+ }),
373
+ options: {
374
+ semanticRecall: {
375
+ topK: 5,
376
+ messageRange: 2,
377
+ indexConfig: {
378
+ type: 'hnsw', // Use HNSW for better performance
379
+ metric: 'dotproduct', // Best for OpenAI embeddings
380
+ m: 16, // Number of bi-directional links (default: 16)
381
+ efConstruction: 64, // Size of candidate list during construction (default: 64)
382
+ },
383
+ },
384
+ },
385
+ }),
386
+ })
387
+ ```
388
+
389
+ For detailed information about index configuration options and performance tuning, see the [PgVector configuration guide](https://mastra.ai/reference/vectors/pg).
390
+
391
+ ## Disable semantic recall
392
+
393
+ Semantic recall is disabled by default (`semanticRecall: false`). Each call adds latency because new messages are converted into embeddings and used to query a vector database before the LLM receives them.
394
+
395
+ Keep semantic recall disabled when:
396
+
397
+ - Message history provides sufficient context for the current conversation.
398
+ - You're building performance-sensitive applications, like realtime two-way audio, where embedding and vector query latency is noticeable.
399
+
400
+ ## Viewing recalled messages
401
+
402
+ When tracing is enabled, any messages retrieved via semantic recall will appear in the agent's trace output, alongside recent message history (if configured).