{"_id":"@aigentic/gnn-wasm","_rev":"3-3563b14c36311184a8bf7918ed52a77e","name":"@aigentic/gnn-wasm","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@aigentic/gnn-wasm","version":"0.1.0","keywords":["wasm","webassembly","gnn","graph-neural-network","machine-learning","neural-networks","browser"],"author":{"name":"rUv"},"license":"MIT","_id":"@aigentic/gnn-wasm@0.1.0","maintainers":[{"name":"aigentic","email":"engineering@aigentic.net"}],"homepage":"https://github.com/ruvnet/ruvector","bugs":{"url":"https://github.com/ruvnet/ruvector/issues"},"dist":{"shasum":"663f198474c2889221420d3c8dbfa280ed1bac9c","tarball":"https://registry.npmjs.org/@aigentic/gnn-wasm/-/gnn-wasm-0.1.0.tgz","fileCount":2,"integrity":"sha512-Vz0pjMJzGD4B265xOB1LqzG9WE88LdM0SfX2GOHKA1fvdC5byoVqtF/0P60d3lHh/T/VYKjwizJ/nPSDJobPJQ==","signatures":[{"sig":"MEYCIQC+MVvFitX+wTDrSwOl7y+eOuc0WQRuWKzAn560DbSHDgIhAIJeiBDCG5zXUwKc1a/liIcdRtUR5p4k4M7ZLzk9BE/r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5340},"main":"pkg/ruvector_gnn_wasm.js","types":"pkg/ruvector_gnn_wasm.d.ts","gitHead":"06426cbc6e70f09762e996a98517b0b1fd1c7c4e","scripts":{"test":"wasm-pack test --headless --firefox","build":"wasm-pack build --target web --out-dir pkg","build:node":"wasm-pack build --target nodejs --out-dir pkg-node","build:bundler":"wasm-pack build --target bundler --out-dir pkg-bundler"},"_npmUser":{"name":"aigentic","email":"engineering@aigentic.net"},"repository":{"url":"git+https://github.com/ruvnet/ruvector.git","type":"git"},"_npmVersion":"11.12.0","description":"WebAssembly bindings for ruvector-gnn - Graph Neural Network layers for browsers","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gnn-wasm_0.1.0_1779091135450_0.8656894339076922","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aigentic/gnn-wasm","version":"0.1.1","keywords":["wasm","webassembly","gnn","graph-neural-network","machine-learning","neural-networks","browser"],"author":{"name":"rUv"},"license":"MIT","_id":"@aigentic/gnn-wasm@0.1.1","maintainers":[{"name":"aigentic","email":"engineering@aigentic.net"}],"homepage":"https://github.com/ruvnet/ruvector","bugs":{"url":"https://github.com/ruvnet/ruvector/issues"},"dist":{"shasum":"654fd5c15e9d8fe49d8bd89044332da7371b8e02","tarball":"https://registry.npmjs.org/@aigentic/gnn-wasm/-/gnn-wasm-0.1.1.tgz","fileCount":2,"integrity":"sha512-Q3RZtMfp+91AGiB7az+VpWpV33JzXOjtqqc47CgVlfqHlC996SCesX62MsuNdjhTWX6ft5oDYhnNWgK9yJFr9A==","signatures":[{"sig":"MEUCIFmgEotWGA1aMam43xEPl4OHKwzPiEm0/SI75/8XIN+cAiEA8WBZDBfYma1h5biHncMWl2gK1RUw+YPvI403kaAhFfw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5340},"main":"pkg/ruvector_gnn_wasm.js","types":"pkg/ruvector_gnn_wasm.d.ts","gitHead":"06426cbc6e70f09762e996a98517b0b1fd1c7c4e","scripts":{"test":"wasm-pack test --headless --firefox","build":"wasm-pack build --target web --out-dir pkg","build:node":"wasm-pack build --target nodejs --out-dir pkg-node","build:bundler":"wasm-pack build --target bundler --out-dir pkg-bundler"},"_npmUser":{"name":"aigentic","email":"engineering@aigentic.net"},"repository":{"url":"git+https://github.com/ruvnet/ruvector.git","type":"git"},"_npmVersion":"11.12.0","description":"WebAssembly bindings for ruvector-gnn - Graph Neural Network layers for browsers","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gnn-wasm_0.1.1_1779092874084_0.9134907130211429","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-18T07:58:55.382Z","modified":"2026-09-13T15:30:31.856Z","0.1.0":"2026-05-18T07:58:55.583Z","0.1.1":"2026-05-18T08:27:54.254Z"},"bugs":{"url":"https://github.com/ruvnet/ruvector/issues"},"author":{"name":"rUv"},"license":"MIT","homepage":"https://github.com/ruvnet/ruvector","keywords":["wasm","webassembly","gnn","graph-neural-network","machine-learning","neural-networks","browser"],"repository":{"url":"git+https://github.com/ruvnet/ruvector.git","type":"git"},"description":"WebAssembly bindings for ruvector-gnn - Graph Neural Network layers for browsers","maintainers":[{"email":"engineering@aigentic.net","name":"aiggy"}],"readme":"# RuVector GNN WASM\n\nWebAssembly bindings for RuVector Graph Neural Network operations.\n\n## Features\n\n- **GNN Layer Operations**: Multi-head attention, GRU updates, layer normalization\n- **Tensor Compression**: Adaptive compression based on access frequency\n- **Differentiable Search**: Soft attention-based similarity search\n- **Hierarchical Forward**: Multi-layer GNN processing\n\n## Installation\n\n```bash\nnpm install ruvector-gnn-wasm\n```\n\n## Usage\n\n### Initialize\n\n```typescript\nimport init, {\n  JsRuvectorLayer,\n  JsTensorCompress,\n  differentiableSearch,\n  SearchConfig\n} from 'ruvector-gnn-wasm';\n\nawait init();\n```\n\n### GNN Layer\n\n```typescript\n// Create a GNN layer\nconst layer = new JsRuvectorLayer(\n  4,    // input dimension\n  8,    // hidden dimension\n  2,    // number of attention heads\n  0.1   // dropout rate\n);\n\n// Forward pass\nconst nodeEmbedding = new Float32Array([1.0, 2.0, 3.0, 4.0]);\nconst neighbors = [\n  new Float32Array([0.5, 1.0, 1.5, 2.0]),\n  new Float32Array([2.0, 3.0, 4.0, 5.0])\n];\nconst edgeWeights = new Float32Array([0.3, 0.7]);\n\nconst output = layer.forward(nodeEmbedding, neighbors, edgeWeights);\nconsole.log('Output dimension:', layer.outputDim);\n```\n\n### Tensor Compression\n\n```typescript\nconst compressor = new JsTensorCompress();\n\n// Compress based on access frequency\nconst embedding = new Float32Array(128).fill(0.5);\nconst compressed = compressor.compress(embedding, 0.5); // 50% access frequency\n\n// Decompress\nconst decompressed = compressor.decompress(compressed);\n\n// Or specify compression level explicitly\nconst compressedPQ8 = compressor.compressWithLevel(embedding, \"pq8\");\n\n// Get compression ratio\nconst ratio = compressor.getCompressionRatio(0.5); // Returns ~2.0 for half precision\n```\n\n### Compression Levels\n\nAccess frequency determines compression:\n- `f > 0.8`: **Full precision** (no compression) - hot data\n- `f > 0.4`: **Half precision** (2x compression) - warm data\n- `f > 0.1`: **8-bit PQ** (4x compression) - cool data\n- `f > 0.01`: **4-bit PQ** (8x compression) - cold data\n- `f <= 0.01`: **Binary** (32x compression) - archive data\n\n### Differentiable Search\n\n```typescript\nconst query = new Float32Array([1.0, 0.0, 0.0]);\nconst candidates = [\n  new Float32Array([1.0, 0.0, 0.0]),  // Perfect match\n  new Float32Array([0.9, 0.1, 0.0]),  // Close match\n  new Float32Array([0.0, 1.0, 0.0])   // Orthogonal\n];\n\nconst config = new SearchConfig(2, 1.0); // k=2, temperature=1.0\nconst result = differentiableSearch(query, candidates, config);\n\nconsole.log('Top indices:', result.indices);\nconsole.log('Weights:', result.weights);\n```\n\n## API Reference\n\n### `JsRuvectorLayer`\n\n```typescript\nclass JsRuvectorLayer {\n  constructor(\n    inputDim: number,\n    hiddenDim: number,\n    heads: number,\n    dropout: number\n  );\n\n  forward(\n    nodeEmbedding: Float32Array,\n    neighborEmbeddings: Float32Array[],\n    edgeWeights: Float32Array\n  ): Float32Array;\n\n  readonly outputDim: number;\n}\n```\n\n### `JsTensorCompress`\n\n```typescript\nclass JsTensorCompress {\n  constructor();\n\n  compress(embedding: Float32Array, accessFreq: number): object;\n  compressWithLevel(embedding: Float32Array, level: string): object;\n  decompress(compressed: object): Float32Array;\n  getCompressionRatio(accessFreq: number): number;\n}\n```\n\nCompression levels: `\"none\"`, `\"half\"`, `\"pq8\"`, `\"pq4\"`, `\"binary\"`\n\n### `differentiableSearch`\n\n```typescript\nfunction differentiableSearch(\n  query: Float32Array,\n  candidateEmbeddings: Float32Array[],\n  config: SearchConfig\n): { indices: number[], weights: number[] };\n```\n\n### `SearchConfig`\n\n```typescript\nclass SearchConfig {\n  constructor(k: number, temperature: number);\n  k: number;          // Number of results\n  temperature: number; // Softmax temperature (lower = sharper)\n}\n```\n\n### `cosineSimilarity`\n\n```typescript\nfunction cosineSimilarity(a: Float32Array, b: Float32Array): number;\n```\n\n## Building from Source\n\n```bash\n# Install wasm-pack\ncurl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh\n\n# Build for Node.js\nwasm-pack build --target nodejs\n\n# Build for browser\nwasm-pack build --target web\n\n# Build for bundler (webpack, etc.)\nwasm-pack build --target bundler\n```\n\n## Performance\n\n- GNN layers use efficient attention mechanisms\n- Compression reduces memory usage by 2-32x\n- All operations are optimized for WASM\n- No garbage collection during forward passes\n\n## License\n\nMIT\n","readmeFilename":"README.md"}