ruvector-fixed / dist /core /gnn-wrapper.d.ts
Archie
Fix dimension/dimensions bug and positional insert/search args
40d7073
/**
* GNN Wrapper - Safe wrapper around @ruvector/gnn with automatic array conversion
*
* This wrapper handles the array type conversion automatically, allowing users
* to pass either regular arrays or Float32Arrays.
*
* The native @ruvector/gnn requires Float32Array for maximum performance.
* This wrapper converts any input type to Float32Array automatically.
*
* Performance Tips:
* - Pass Float32Array directly for zero-copy performance
* - Use toFloat32Array/toFloat32ArrayBatch for pre-conversion
* - Avoid repeated conversions in hot paths
*/
/**
* Convert any array-like input to Float32Array (native requires Float32Array)
* Optimized paths:
* - Float32Array: zero-copy return
* - Float64Array: efficient typed array copy
* - Array: direct Float32Array construction
*/
export declare function toFloat32Array(input: number[] | Float32Array | Float64Array): Float32Array;
/**
* Convert array of arrays to array of Float32Arrays
*/
export declare function toFloat32ArrayBatch(input: (number[] | Float32Array | Float64Array)[]): Float32Array[];
/**
* Search result from differentiable search
*/
export interface DifferentiableSearchResult {
/** Indices of top-k candidates */
indices: number[];
/** Soft weights for top-k candidates */
weights: number[];
}
/**
* Differentiable search using soft attention mechanism
*
* This wrapper automatically converts Float32Array inputs to regular arrays.
*
* @param query - Query vector (array or Float32Array)
* @param candidates - List of candidate vectors (arrays or Float32Arrays)
* @param k - Number of top results to return
* @param temperature - Temperature for softmax (lower = sharper, higher = smoother)
* @returns Search result with indices and soft weights
*
* @example
* ```typescript
* import { differentiableSearch } from 'ruvector/core/gnn-wrapper';
*
* // Works with regular arrays (auto-converted to Float32Array)
* const result1 = differentiableSearch([1, 0, 0], [[1, 0, 0], [0, 1, 0]], 2, 1.0);
*
* // For best performance, use Float32Array directly (zero-copy)
* const query = new Float32Array([1, 0, 0]);
* const candidates = [new Float32Array([1, 0, 0]), new Float32Array([0, 1, 0])];
* const result2 = differentiableSearch(query, candidates, 2, 1.0);
* ```
*/
export declare function differentiableSearch(query: number[] | Float32Array | Float64Array, candidates: (number[] | Float32Array | Float64Array)[], k: number, temperature?: number): DifferentiableSearchResult;
/**
* GNN Layer for HNSW topology
*/
export declare class RuvectorLayer {
private inner;
/**
* Create a new Ruvector GNN layer
*
* @param inputDim - Dimension of input node embeddings
* @param hiddenDim - Dimension of hidden representations
* @param heads - Number of attention heads
* @param dropout - Dropout rate (0.0 to 1.0)
*/
constructor(inputDim: number, hiddenDim: number, heads: number, dropout?: number);
/**
* Forward pass through the GNN layer
*
* @param nodeEmbedding - Current node's embedding
* @param neighborEmbeddings - Embeddings of neighbor nodes
* @param edgeWeights - Weights of edges to neighbors
* @returns Updated node embedding as Float32Array
*/
forward(nodeEmbedding: number[] | Float32Array, neighborEmbeddings: (number[] | Float32Array)[], edgeWeights: number[] | Float32Array): Float32Array;
/**
* Serialize the layer to JSON
*/
toJson(): string;
/**
* Deserialize the layer from JSON
*/
static fromJson(json: string): RuvectorLayer;
}
/**
* Tensor compressor with adaptive level selection
*/
export declare class TensorCompress {
private inner;
constructor();
/**
* Compress an embedding based on access frequency
*
* @param embedding - Input embedding vector
* @param accessFreq - Access frequency (0.0 to 1.0)
* @returns Compressed tensor as JSON string
*/
compress(embedding: number[] | Float32Array, accessFreq: number): string;
/**
* Decompress a compressed tensor
*
* @param compressedJson - Compressed tensor JSON
* @returns Decompressed embedding
*/
decompress(compressedJson: string): number[];
}
/**
* Hierarchical forward pass through GNN layers
*
* @param query - Query vector
* @param layerEmbeddings - Embeddings organized by layer
* @param gnnLayersJson - JSON array of serialized GNN layers
* @returns Final embedding after hierarchical processing as Float32Array
*/
export declare function hierarchicalForward(query: number[] | Float32Array, layerEmbeddings: (number[] | Float32Array)[][], gnnLayersJson: string[]): Float32Array;
/**
* Get compression level for a given access frequency
*/
export declare function getCompressionLevel(accessFreq: number): string;
/**
* Check if GNN module is available
*/
export declare function isGnnAvailable(): boolean;
declare const _default: {
differentiableSearch: typeof differentiableSearch;
RuvectorLayer: typeof RuvectorLayer;
TensorCompress: typeof TensorCompress;
hierarchicalForward: typeof hierarchicalForward;
getCompressionLevel: typeof getCompressionLevel;
isGnnAvailable: typeof isGnnAvailable;
toFloat32Array: typeof toFloat32Array;
toFloat32ArrayBatch: typeof toFloat32ArrayBatch;
};
export default _default;
//# sourceMappingURL=gnn-wrapper.d.ts.map