Turbopuffer Vector Store
The TurbopufferVector class provides vector search using Turbopuffer, a high-performance vector database optimized for RAG applications. Turbopuffer offers fast vector similarity search with advanced filtering capabilities and efficient storage management.
Constructor OptionsDirect link to Constructor Options
apiKey:
string
The API key to authenticate with Turbopuffer
baseUrl?:
string
= https://api.turbopuffer.com
The base URL for the Turbopuffer API
connectTimeout?:
number
= 10000
The timeout to establish a connection, in ms. Only applicable in Node and Deno.
connectionIdleTimeout?:
number
= 60000
The socket idle timeout, in ms. Only applicable in Node and Deno.
warmConnections?:
number
= 0
The number of connections to open initially when creating a new client.
compression?:
boolean
= true
Whether to compress requests and accept compressed responses.
schemaConfigForIndex?:
function
A callback function that takes an index name and returns a config object for that index. This allows you to define explicit schemas per index.
MethodsDirect link to Methods
createIndex()Direct link to createIndex()
indexName:
string
Name of the index to create
dimension:
number
Vector dimension (must match your embedding model)
metric?:
'cosine' | 'euclidean' | 'dotproduct'
= cosine
Distance metric for similarity search
upsert()Direct link to upsert()
vectors:
number[][]
Array of embedding vectors
metadata?:
Record<string, any>[]
Metadata for each vector
ids?:
string[]
Optional vector IDs (auto-generated if not provided)
query()Direct link to query()
indexName:
string
Name of the index to query
queryVector:
number[]
Query vector to find similar vectors
topK?:
number
= 10
Number of results to return
filter?:
Record<string, any>
Metadata filters for the query
includeVector?:
boolean
= false
Whether to include vectors in the results
listIndexes()Direct link to listIndexes()
Returns an array of index names as strings.
describeIndex()Direct link to describeIndex()
indexName:
string
Name of the index to describe
Returns:
interface IndexStats {
dimension: number;
count: number;
metric: "cosine" | "euclidean" | "dotproduct";
}
deleteIndex()Direct link to deleteIndex()
indexName:
string
Name of the index to delete
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:
string
Name of the index containing the vector
id?:
string
ID of the vector to update (mutually exclusive with filter)
filter?:
Record<string, any>
Metadata filter to identify vector(s) to update (mutually exclusive with id)
update:
{ vector?: number[]; metadata?: Record<string, any>; }
Object containing the vector and/or metadata to update
deleteVector()Direct link to deleteVector()
indexName:
string
Name of the index containing the vector
id:
string
ID of the vector to delete
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:
string
Name of the index containing the vectors to delete
ids?:
string[]
Array of vector IDs to delete (mutually exclusive with filter)
filter?:
Record<string, any>
Metadata filter to identify vectors to delete (mutually exclusive with ids)
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
}
Schema ConfigurationDirect link to Schema Configuration
The schemaConfigForIndex option allows you to define explicit schemas for different indexes:
schemaConfigForIndex: (indexName: string) => {
// Mastra's default embedding model and index for memory messages:
if (indexName === "memory_messages_384") {
return {
dimensions: 384,
schema: {
thread_id: {
type: "string",
filterable: true,
},
},
};
} else {
throw new Error(`TODO: add schema for index: ${indexName}`);
}
};
Error HandlingDirect link to Error Handling
The store throws typed errors that can be caught:
try {
await store.query({
indexName: "index_name",
queryVector: queryVector,
});
} catch (error) {
if (error instanceof VectorStoreError) {
console.log(error.code); // 'connection_failed' | 'invalid_dimension' | etc
console.log(error.details); // Additional error context
}
}