import { VectoriaDB, FileStorageAdapter, SerializationUtils } from 'vectoriadb';
export function createProductionDB<T extends DocumentMetadata>(
documents: Array<{ id: string; text: string; metadata: T }>
) {
return new VectoriaDB<T>({
// Model configuration
modelName: process.env.VECTORIA_MODEL || 'Xenova/all-MiniLM-L6-v2',
cacheDir: process.env.VECTORIA_MODEL_CACHE || './.cache/transformers',
// Storage configuration
storageAdapter: new FileStorageAdapter({
cacheDir: process.env.VECTORIA_CACHE_DIR || './.cache/vectoriadb',
namespace: process.env.VECTORIA_NAMESPACE || 'production',
}),
// Cache invalidation
toolsHash: SerializationUtils.createToolsHash(documents),
version: process.env.npm_package_version,
// Resource limits
maxDocuments: parseInt(process.env.VECTORIA_MAX_DOCS || '100000'),
maxDocumentSize: parseInt(process.env.VECTORIA_MAX_DOC_SIZE || '100000'),
maxBatchSize: parseInt(process.env.VECTORIA_MAX_BATCH || '500'),
// Search defaults
defaultSimilarityThreshold: parseFloat(process.env.VECTORIA_THRESHOLD || '0.4'),
defaultTopK: parseInt(process.env.VECTORIA_TOP_K || '10'),
// HNSW configuration
useHNSW: process.env.VECTORIA_USE_HNSW === 'true',
hnsw: {
M: parseInt(process.env.VECTORIA_HNSW_M || '16'),
efConstruction: parseInt(process.env.VECTORIA_HNSW_EF_CONSTRUCTION || '200'),
efSearch: parseInt(process.env.VECTORIA_HNSW_EF_SEARCH || '50'),
},
// Error handling
verboseErrors: process.env.NODE_ENV !== 'production',
});
}