Files
wifi-densepose/vendor/ruvector/examples/rvf/scripts/rvf-node-example.mjs

77 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
// rvf-node-example.mjs — Node.js RVF quick start
// Usage: node scripts/rvf-node-example.mjs
// Prerequisites: npm install @ruvector/rvf-node
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
let RvfDatabase;
try {
({ RvfDatabase } = require('@ruvector/rvf-node'));
} catch {
console.error('Install first: npm install @ruvector/rvf-node');
process.exit(1);
}
const path = '/tmp/rvf_node_demo.rvf';
console.log('=== RVF Node.js Quick Start ===\n');
// 1. Create store
console.log('[1/6] Creating vector store...');
const db = RvfDatabase.create(path, {
dimension: 128,
metric: 'cosine',
m: 16,
efConstruction: 200,
});
console.log(` Created: ${path} (128-dim, cosine)`);
// 2. Ingest vectors
console.log('[2/6] Ingesting vectors...');
const count = 100;
const vectors = new Float32Array(count * 128);
const ids = [];
for (let i = 0; i < count; i++) {
for (let d = 0; d < 128; d++) {
vectors[i * 128 + d] = Math.sin(i * 0.1 + d * 0.01);
}
ids.push(i + 1);
}
const result = db.ingestBatch(vectors, ids);
console.log(` Ingested: ${result.accepted} vectors, epoch ${result.epoch}`);
// 3. Query nearest neighbors
console.log('[3/6] Querying nearest neighbors...');
const query = new Float32Array(128);
query.fill(0.1);
const matches = db.query(query, 5, { efSearch: 200 });
console.log(' Top-5 results:');
for (const m of matches) {
console.log(` id=${m.id}, distance=${m.distance.toFixed(4)}`);
}
// 4. Filtered query
console.log('[4/6] Querying with metadata filter...');
const filtered = db.query(query, 3, {
filter: JSON.stringify({ op: 'gt', fieldId: 0, valueType: 'u64', value: '50' }),
});
console.log(` Filtered results: ${filtered.length} matches`);
// 5. Lineage
console.log('[5/6] Checking lineage...');
console.log(` fileId: ${db.fileId()}`);
console.log(` parentId: ${db.parentId()}`);
console.log(` lineageDepth: ${db.lineageDepth()}`);
// 6. Status
console.log('[6/6] Store status...');
const status = db.status();
console.log(` vectors: ${status.totalVectors}`);
console.log(` segments: ${status.totalSegments}`);
console.log(` file size: ${status.fileSize} bytes`);
db.close();
console.log('\n=== Done ===');