Convex Vector Store
The ConvexVector class provides vector storage and similarity search using Convex. It stores embeddings inside Convex and performs cosine similarity search.
InstallationDirect link to Installation
npm install @mastra/convex@beta
Convex SetupDirect link to Convex Setup
Before using ConvexVector, you need to set up the Convex schema and storage handler. See Convex Storage Setup for setup instructions.
Constructor OptionsDirect link to Constructor Options
deploymentUrl:
adminAuthToken:
storageFunction?:
Constructor ExamplesDirect link to Constructor Examples
Basic ConfigurationDirect link to Basic Configuration
import { ConvexVector } from "@mastra/convex";
const vectorStore = new ConvexVector({
id: 'convex-vectors',
deploymentUrl: "https://your-project.convex.cloud",
adminAuthToken: "your-admin-token",
});
Custom Storage FunctionDirect link to Custom Storage Function
const vectorStore = new ConvexVector({
id: 'convex-vectors',
deploymentUrl: "https://your-project.convex.cloud",
adminAuthToken: "your-admin-token",
storageFunction: "custom/path:handler",
});
MethodsDirect link to Methods
createIndex()Direct link to createIndex()
indexName:
dimension:
metric?:
await vectorStore.createIndex({
indexName: "my_vectors",
dimension: 1536,
});
upsert()Direct link to upsert()
indexName:
vectors:
metadata?:
ids?:
await vectorStore.upsert({
indexName: "my_vectors",
vectors: [[0.1, 0.2, 0.3, ...]],
metadata: [{ label: "example" }],
ids: ["vec-1"],
});
query()Direct link to query()
indexName:
queryVector:
topK?:
filter?:
includeVector?:
const results = await vectorStore.query({
indexName: "my_vectors",
queryVector: [0.1, 0.2, 0.3, ...],
topK: 5,
filter: { category: "documents" },
});
listIndexes()Direct link to listIndexes()
Returns an array of index names as strings.
const indexes = await vectorStore.listIndexes();
// ["my_vectors", "embeddings", ...]
describeIndex()Direct link to describeIndex()
indexName:
Returns:
interface IndexStats {
dimension: number;
count: number;
metric: "cosine" | "euclidean" | "dotproduct";
}
deleteIndex()Direct link to deleteIndex()
indexName:
Deletes the index and all its vectors.
await vectorStore.deleteIndex({ indexName: "my_vectors" });
updateVector()Direct link to updateVector()
Update a single vector by ID or by metadata filter. Either id or filter must be provided, but not both.
indexName:
id?:
filter?:
update:
// Update by ID
await vectorStore.updateVector({
indexName: "my_vectors",
id: "vector123",
update: {
vector: [0.1, 0.2, 0.3],
metadata: { label: "updated" },
},
});
// Update by filter
await vectorStore.updateVector({
indexName: "my_vectors",
filter: { category: "product" },
update: {
metadata: { status: "reviewed" },
},
});
deleteVector()Direct link to deleteVector()
indexName:
id:
await vectorStore.deleteVector({ indexName: "my_vectors", id: "vector123" });
deleteVectors()Direct link to deleteVectors()
Delete multiple vectors by IDs or by metadata filter. Either ids or filter must be provided, but not both.
indexName:
ids?:
filter?:
// Delete by IDs
await vectorStore.deleteVectors({
indexName: "my_vectors",
ids: ["vec1", "vec2", "vec3"],
});
// Delete by filter
await vectorStore.deleteVectors({
indexName: "my_vectors",
filter: { status: "archived" },
});
Response TypesDirect link to Response Types
Query results are returned in this format:
interface QueryResult {
id: string;
score: number;
metadata: Record<string, any>;
vector?: number[]; // Only included if includeVector is true
}
Metadata FilteringDirect link to Metadata Filtering
ConvexVector supports metadata filtering with various operators:
// Simple equality
const results = await vectorStore.query({
indexName: "my_vectors",
queryVector: embedding,
filter: { category: "documents" },
});
// Comparison operators
const results = await vectorStore.query({
indexName: "my_vectors",
queryVector: embedding,
filter: {
price: { $gt: 100 },
status: { $in: ["active", "pending"] },
},
});
// Logical operators
const results = await vectorStore.query({
indexName: "my_vectors",
queryVector: embedding,
filter: {
$and: [
{ category: "electronics" },
{ price: { $lte: 500 } },
],
},
});
Supported Filter OperatorsDirect link to Supported Filter Operators
| Operator | Description |
|---|---|
$eq | Equal to |
$ne | Not equal to |
$gt | Greater than |
$gte | Greater than or equal |
$lt | Less than |
$lte | Less than or equal |
$in | In array |
$nin | Not in array |
$and | Logical AND |
$or | Logical OR |
ArchitectureDirect link to Architecture
ConvexVector stores vectors in the mastra_vectors table with the following structure:
id: Unique vector identifierindexName: Name of the indexembedding: The vector data (array of floats)metadata: Optional JSON metadata
Vector similarity search is performed using cosine similarity, computed in the Convex function.