@vectororm/adapter-turbopuffer
v1.0.1
Published
Turbopuffer adapter for VectorORM
Maintainers
Readme
@vectororm/adapter-turbopuffer
Turbopuffer adapter for VectorORM.
Installation
npm install @vectororm/adapter-turbopuffer @vectororm/coreUsage
import { TurbopufferAdapter } from '@vectororm/adapter-turbopuffer';
// Create adapter
const adapter = new TurbopufferAdapter({
apiKey: process.env.TURBOPUFFER_API_KEY || 'your-api-key',
// Optional: custom base URL
baseUrl: 'https://api.turbopuffer.com',
});
// Connect
await adapter.connect();
// Create a collection (namespace)
await adapter.createCollection('my-vectors', 128, 'cosine');
// Upsert vectors
await adapter.upsert('my-vectors', [
{
id: 'vec1',
embedding: [0.1, 0.2, ...],
metadata: { title: 'Document 1', category: 'tech' }
}
]);
// Search
const results = await adapter.search('my-vectors', queryVector, {
topK: 10,
filter: { field: 'category', op: 'eq', value: 'tech' }
});
// Disconnect
await adapter.disconnect();Configuration
TurbopufferConfig
apiKey(required): Your Turbopuffer API keyregion(optional): Turbopuffer region (e.g.aws-us-east-1,gcp-us-central1). Sets base URL tohttps://{region}.turbopuffer.combaseUrl(optional): Custom API base URL. Overridesregionif both are provided. Defaults tohttps://api.turbopuffer.com
Region Examples
// US East (AWS)
new TurbopufferAdapter({ apiKey: '...', region: 'aws-us-east-1' });
// Europe (GCP Frankfurt)
new TurbopufferAdapter({ apiKey: '...', region: 'gcp-europe-west3' });
// Custom endpoint
new TurbopufferAdapter({ apiKey: '...', baseUrl: 'https://custom.example.com' });
// Environment variable: TURBOPUFFER_REGION=aws-us-east-1
new TurbopufferAdapter({ apiKey: '...' }); // picks up region from envFeatures
- Full CRUD operations on vectors
- Metadata filtering with compound AND/OR filters
- Vector similarity search
- Metadata updates
- Batch operations
- Async iteration over collections
- Multiple distance metrics (cosine, euclidean)
Supported Operations
Connection Management
connect()- Establish connection to Turbopufferdisconnect()- Close connectionisConnected()- Check connection status
Collection Management
createCollection(name, dimension, metric)- Create namespacedeleteCollection(name)- Delete namespacecollectionExists(name)- Check if namespace existsgetCollectionStats(name)- Get vector count and stats
Vector Operations
upsert(collection, records)- Insert or update vectorsfetch(collection, ids)- Fetch vectors by IDsdelete(collection, ids)- Delete vectors by IDssearch(collection, queryVector, options)- Vector similarity searchupdateMetadata(collection, updates)- Update vector metadataiterate(collection, options)- Async iteration over vectors
Filter Translation
- Converts UniversalFilter to Turbopuffer filter format
- Supports:
eq,ne,gt,gte,lt,lte,in,nin - Supports compound
and/orfilters - Supports nested filter combinations
Implementation Notes
REST API
This adapter uses Turbopuffer's REST API directly with fetch (no SDK dependency) to avoid Node.js version constraints. The implementation is compatible with Node.js 18+.
Namespaces
Turbopuffer uses "namespaces" instead of "collections". This adapter transparently maps collection operations to namespace operations.
Distance Metrics
cosine→cosine_distanceeuclidean→euclidean_squared
Pagination
Turbopuffer uses attribute-based pagination. The iterate() method paginates by ID using greater-than filters.
Fetch Operation
Turbopuffer doesn't have a direct fetch-by-ID endpoint. The adapter uses filtered queries to implement this functionality.
Limitations
See TECH_DEBT.md for known limitations and future enhancements.
Testing
# Run unit tests
npm test
# Run tests in watch mode
npm run test:watchDocumentation
License
Apache-2.0
