stores/turbopuffer/README.md
Vector store implementation for Turbopuffer, using the official @turbopuffer/turbopuffer SDK with added telemetry support.
pnpm add @mastra/turbopuffer
import { TurbopufferVector } from '@mastra/turbopuffer';
const vectorStore = new TurbopufferVector({
id: 'my-turbopuffer-vector',
apiKey: 'your-api-key',
baseUrl: 'https://gcp-us-central1.turbopuffer.com',
});
// Create a new index
await vectorStore.createIndex({ indexName: 'my-index', dimension: 1536, metric: 'cosine' });
// Add vectors
const vectors = [[0.1, 0.2, ...], [0.3, 0.4, ...]];
const metadata = [{ text: 'doc1' }, { text: 'doc2' }];
const ids = await vectorStore.upsert({ indexName: 'my-index', vectors, metadata });
// Query vectors
const results = await vectorStore.query({
indexName: 'my-index',
queryVector: [0.1, 0.2, ...],
topK: 10,
filter: { text: { $eq: 'doc1' } },
includeVector: false,
);
Required:
apiKey: Your Turbopuffer API keyOptional:
baseUrl: Your Turbopuffer base URL (default: https://api.turbopuffer.com)connectTimeout: Timeout to establish a connection, in ms (default: 10_000)connectionIdleTimeout: Socket idle timeout, in ms (default: 60_000)warmConnections: Number of connections to open initially (default: 0)compression: Whether to compress requests and accept compressed responses (default: true)schemaConfigForIndex: A function that returns a Turbopuffer schema config for an index (default: undefined).createIndex({ indexName, dimension, metric? }): Create a new namespaceupsert({ indexName, vectors, metadata?, ids? }): Add or update vectorsquery({ indexName, queryVector, topK?, filter?, includeVector? }): Search for similar vectorsupdateVector({ indexName, id?, filter?, update }): Update a single vector by ID or metadata filterdeleteVector({ indexName, id }): Delete a single vector by IDdeleteVectors({ indexName, ids?, filter? }): Delete multiple vectors by IDs or metadata filterlistIndexes(): List all namespacesdescribeIndex({ indexName }): Get namespace statisticsdeleteIndex({ indexName }): Delete a namespace