ruvector/docs/gnn/ruvector-gnn-node-bindings.md
rUv 4d5d3bb092 feat(micro-hnsw-wasm): Add Neuromorphic HNSW v2.3 with SNN Integration (#40)
* docs: Add comprehensive GNN v2 implementation plans

Add 22 detailed planning documents for 19 advanced GNN features:

Tier 1 (Immediate - 3-6 months):
- GNN-Guided HNSW Routing (+25% QPS)
- Incremental Graph Learning/ATLAS (10-100x faster updates)
- Neuro-Symbolic Query Execution (hybrid neural + logical)

Tier 2 (Medium-Term - 6-12 months):
- Hyperbolic Embeddings (Poincaré ball model)
- Degree-Aware Adaptive Precision (2-4x memory reduction)
- Continuous-Time Dynamic GNN (concept drift detection)

Tier 3 (Research - 12+ months):
- Graph Condensation (10-100x smaller graphs)
- Native Sparse Attention (8-15x GPU speedup)
- Quantum-Inspired Attention (long-range dependencies)

Novel Innovations (10 experimental features):
- Gravitational Embedding Fields, Causal Attention Networks
- Topology-Aware Gradient Routing, Embedding Crystallization
- Semantic Holography, Entangled Subspace Attention
- Predictive Prefetch Attention, Morphological Attention
- Adversarial Robustness Layer, Consensus Attention

Includes comprehensive regression prevention strategy with:
- Feature flag system for safe rollout
- Performance baseline (186 tests + 6 search_v2 tests)
- Automated rollback mechanisms

Related to #38

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat(micro-hnsw-wasm): Add neuromorphic HNSW v2.3 with SNN integration

## New Crate: micro-hnsw-wasm v2.3.0
- Published to crates.io: https://crates.io/crates/micro-hnsw-wasm
- 11.8KB WASM binary with 58 exported functions
- Neuromorphic vector search combining HNSW + Spiking Neural Networks

### Core Features
- HNSW graph-based approximate nearest neighbor search
- Multi-distance metrics: L2, Cosine, Dot product
- GNN extensions: typed nodes, edge weights, neighbor aggregation
- Multi-core sharding: 256 cores × 32 vectors = 8K total

### Spiking Neural Network (SNN)
- LIF (Leaky Integrate-and-Fire) neurons with membrane dynamics
- STDP (Spike-Timing Dependent Plasticity) learning
- Spike propagation through graph topology
- HNSW→SNN bridge for similarity-driven neural activation

### Novel Neuromorphic Features (v2.3)
- Spike-Timing Vector Encoding (rate-to-time conversion)
- Homeostatic Plasticity (self-stabilizing thresholds)
- Oscillatory Resonance (40Hz gamma synchronization)
- Winner-Take-All Circuits (competitive selection)
- Dendritic Computation (nonlinear branch integration)
- Temporal Pattern Recognition (spike history matching)
- Combined Neuromorphic Search pipeline

### Performance Optimizations
- 5.5x faster SNN tick (2,726ns → 499ns)
- 18% faster STDP learning
- Pre-computed reciprocal constants
- Division elimination in hot paths

### Documentation & Organization
- Reorganized docs into subdirectories (gnn/, implementation/, publishing/, status/)
- Added comprehensive README with badges, SEO, citations
- Added benchmark.js and test_wasm.js test suites
- Added DEEP_REVIEW.md with performance analysis
- Added Verilog RTL for ASIC synthesis

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-01 22:30:15 -05:00

8.2 KiB

Ruvector GNN Node.js Bindings - Implementation Summary

Overview

Successfully created comprehensive NAPI-RS bindings for the ruvector-gnn crate, enabling Graph Neural Network capabilities in Node.js applications.

Files Created

Core Bindings

  1. /home/user/ruvector/crates/ruvector-gnn-node/Cargo.toml

    • Package configuration
    • Dependencies: napi, napi-derive, ruvector-gnn, serde_json
    • Build dependencies: napi-build
    • Configured as cdylib for Node.js
  2. /home/user/ruvector/crates/ruvector-gnn-node/build.rs

    • NAPI build setup script
  3. /home/user/ruvector/crates/ruvector-gnn-node/src/lib.rs (520 lines)

    • Complete NAPI bindings implementation
    • All exported functions use #[napi] attributes
    • Automatic type conversion between JS and Rust

Documentation

  1. /home/user/ruvector/crates/ruvector-gnn-node/README.md
    • Comprehensive usage guide
    • API reference
    • Examples for all features
    • Installation and building instructions

Node.js Package

  1. /home/user/ruvector/crates/ruvector-gnn-node/package.json

    • NPM package configuration
    • NAPI scripts for building and publishing
    • Multi-platform support configuration
  2. /home/user/ruvector/crates/ruvector-gnn-node/.npmignore

    • NPM publish exclusions

Examples and Tests

  1. /home/user/ruvector/crates/ruvector-gnn-node/examples/basic.js

    • 5 comprehensive examples demonstrating all features
    • Runnable example code with output
  2. /home/user/ruvector/crates/ruvector-gnn-node/test/basic.test.js

    • 25+ unit tests using Node.js native test runner
    • Coverage of all API endpoints
    • Error handling tests

CI/CD

  1. /home/user/ruvector/crates/ruvector-gnn-node/.github/workflows/build.yml
    • GitHub Actions workflow
    • Multi-platform builds (Linux, macOS, Windows)
    • Multiple architectures (x86_64, aarch64, musl)

Workspace

  1. Updated /home/user/ruvector/Cargo.toml
    • Added ruvector-gnn-node to workspace members

API Bindings Created

1. RuvectorLayer Class

  • Constructor: new RuvectorLayer(inputDim, hiddenDim, heads, dropout)
  • Methods:
    • forward(nodeEmbedding, neighborEmbeddings, edgeWeights): number[]
    • toJson(): string
    • fromJson(json): RuvectorLayer (static factory)

2. TensorCompress Class

  • Constructor: new TensorCompress()
  • Methods:
    • compress(embedding, accessFreq): string
    • compressWithLevel(embedding, level): string
    • decompress(compressedJson): number[]

3. Search Functions

  • differentiableSearch(query, candidates, k, temperature)

    • Returns: { indices: number[], weights: number[] }
  • hierarchicalForward(query, layerEmbeddings, gnnLayersJson)

    • Returns: number[] (final embedding)

4. Utility Functions

  • getCompressionLevel(accessFreq): string

    • Returns compression level name based on access frequency
  • init(): string

    • Module initialization and version info

5. Type Definitions

  • CompressionLevelConfig: Object type for compression configuration

    • level_type: "none" | "half" | "pq8" | "pq4" | "binary"
    • Optional fields: scale, subvectors, centroids, outlier_threshold, threshold
  • SearchResult: Object type for search results

    • indices: number[]
    • weights: number[]

Features Implemented

Complete Feature Coverage

  • RuvectorLayer (create, forward pass)
  • TensorCompress (compress, decompress, all 5 compression levels)
  • Differentiable search with soft attention
  • Hierarchical forward pass
  • Query types and configurations
  • Serialization/deserialization
  • Error handling with proper JS exceptions
  • Type conversions (f64 ↔ f32)

Data Type Conversions

  • JavaScript arrays ↔ Rust Vec
  • Nested arrays for 2D/3D data
  • JSON serialization for complex types
  • Proper error messages in JavaScript

Performance Optimizations

  • Zero-copy where possible
  • Efficient type conversions
  • SIMD support (inherited from ruvector-gnn)
  • Release build with LTO and stripping

Building and Testing

Build Commands

# Navigate to the crate
cd crates/ruvector-gnn-node

# Install Node dependencies
npm install

# Build debug
npm run build:debug

# Build release
npm run build

# Run tests
npm test

# Run example
node examples/basic.js

Cargo Build

# Check compilation
cargo check -p ruvector-gnn-node

# Build library
cargo build -p ruvector-gnn-node

# Build release
cargo build -p ruvector-gnn-node --release

Platform Support

Configured Targets

  • macOS: x86_64, aarch64 (Apple Silicon)
  • Linux: x86_64-gnu, x86_64-musl, aarch64-gnu, aarch64-musl
  • Windows: x86_64-msvc

Usage Examples

Basic GNN Layer

const { RuvectorLayer } = require('@ruvector/gnn');

const layer = new RuvectorLayer(128, 256, 4, 0.1);
const output = layer.forward(nodeEmbedding, neighbors, weights);

Tensor Compression

const { TensorCompress } = require('@ruvector/gnn');

const compressor = new TensorCompress();
const compressed = compressor.compress(embedding, 0.5);
const decompressed = compressor.decompress(compressed);
const { differentiableSearch } = require('@ruvector/gnn');

const result = differentiableSearch(query, candidates, 5, 1.0);
console.log(result.indices, result.weights);

Compilation Status

Successfully compiled with only documentation warnings from the underlying ruvector-gnn crate.

Finished `dev` profile [unoptimized + debuginfo] target(s) in 12.01s

Next Steps

For Users

  1. Install: npm install @ruvector/gnn
  2. Import and use the bindings
  3. See examples for common patterns

For Developers

  1. Build the native module: npm run build
  2. Run tests: npm test
  3. Publish to NPM: npm publish (after napi prepublish)

For CI/CD

  1. GitHub Actions workflow is configured
  2. Builds for all major platforms
  3. Artifacts uploaded for distribution

Documentation

  • README.md: Complete API reference and examples
  • examples/basic.js: 5 runnable examples
  • test/basic.test.js: 25+ unit tests
  • This document: Implementation summary

Dependencies

Runtime

  • napi: 2.16+ (Node-API bindings)
  • napi-derive: 2.16+ (Procedural macros)
  • ruvector-gnn: Local crate
  • serde_json: 1.0+ (Serialization)

Build

  • napi-build: 2.x (Build script helper)

Dev

  • @napi-rs/cli: 2.16+ (Build and publish tools)

Key Implementation Details

Type Conversions

  • All numeric arrays converted between Vec<f64> (JS) and Vec<f32> (Rust)
  • Nested arrays handled for 2D/3D tensor data
  • JSON strings used for complex types (compressed tensors, layer configs)

Error Handling

  • Rust errors converted to JavaScript exceptions
  • Validation in constructors (e.g., dropout range check)
  • Descriptive error messages

Memory Management

  • NAPI-RS handles memory lifecycle
  • No manual memory management needed in JS
  • Efficient transfer with minimal copying

Testing Coverage

  • Constructor validation
  • Forward pass with and without neighbors
  • Serialization/deserialization round-trip
  • Compression with all levels
  • Search with various inputs
  • Edge cases (empty arrays, invalid inputs)
  • Error conditions

Performance Characteristics

  • Zero-copy: Where possible, data is not duplicated
  • SIMD: Inherited from ruvector-gnn implementation
  • Parallel: GNN operations use rayon for parallelism
  • Optimized: Release builds with LTO and stripping

Integration

The bindings are fully integrated into the Ruvector workspace:

  • Part of the workspace at /home/user/ruvector
  • Follows workspace conventions
  • Compatible with existing ruvector-gnn crate
  • Can be built alongside other workspace members

Success Metrics

All requested bindings implemented Compiles without errors Comprehensive tests written Documentation complete Examples provided CI/CD configured Multi-platform support NPM package ready

Conclusion

The ruvector-gnn Node.js bindings are complete and production-ready. All requested features have been implemented with proper error handling, documentation, tests, and examples. The package is ready for NPM publication and integration into Node.js applications.