@ruvector/rvf-wasm 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -6
- package/pkg/rvf_wasm.d.ts +57 -0
- package/pkg/rvf_wasm.js +48 -0
- package/pkg/rvf_wasm_bg.wasm +0 -0
package/package.json
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ruvector/rvf-wasm",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "RuVector Format WASM
|
|
5
|
-
"
|
|
6
|
-
"
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "RuVector Format WASM microkernel for browser and edge vector operations",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "pkg/rvf_wasm.js",
|
|
7
|
+
"types": "pkg/rvf_wasm.d.ts",
|
|
7
8
|
"files": [
|
|
8
9
|
"pkg/"
|
|
9
10
|
],
|
|
10
11
|
"scripts": {
|
|
11
|
-
"build": "
|
|
12
|
+
"build": "cargo build --release --target wasm32-unknown-unknown --manifest-path ../../crates/rvf/rvf-wasm/Cargo.toml && wasm-opt -Oz ../../crates/rvf/target/wasm32-unknown-unknown/release/rvf_wasm.wasm -o pkg/rvf_wasm_bg.wasm"
|
|
12
13
|
},
|
|
13
|
-
"license": "MIT"
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/ruvnet/ruvector"
|
|
18
|
+
}
|
|
14
19
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type declarations for the RVF WASM microkernel exports.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface RvfWasmExports {
|
|
6
|
+
memory: WebAssembly.Memory;
|
|
7
|
+
|
|
8
|
+
// Memory management
|
|
9
|
+
rvf_alloc(size: number): number;
|
|
10
|
+
rvf_free(ptr: number, size: number): void;
|
|
11
|
+
|
|
12
|
+
// Core query path
|
|
13
|
+
rvf_init(config_ptr: number): number;
|
|
14
|
+
rvf_load_query(query_ptr: number, dim: number): number;
|
|
15
|
+
rvf_load_block(block_ptr: number, count: number, dtype: number): number;
|
|
16
|
+
rvf_distances(metric: number, result_ptr: number): number;
|
|
17
|
+
rvf_topk_merge(dist_ptr: number, id_ptr: number, count: number, k: number): number;
|
|
18
|
+
rvf_topk_read(out_ptr: number): number;
|
|
19
|
+
|
|
20
|
+
// Quantization
|
|
21
|
+
rvf_load_sq_params(params_ptr: number, dim: number): number;
|
|
22
|
+
rvf_dequant_i8(src_ptr: number, dst_ptr: number, count: number): number;
|
|
23
|
+
rvf_load_pq_codebook(codebook_ptr: number, m: number, k: number): number;
|
|
24
|
+
rvf_pq_distances(codes_ptr: number, count: number, result_ptr: number): number;
|
|
25
|
+
|
|
26
|
+
// HNSW navigation
|
|
27
|
+
rvf_load_neighbors(node_id: bigint, layer: number, out_ptr: number): number;
|
|
28
|
+
rvf_greedy_step(current_id: bigint, layer: number): bigint;
|
|
29
|
+
|
|
30
|
+
// Segment verification
|
|
31
|
+
rvf_verify_header(header_ptr: number): number;
|
|
32
|
+
rvf_crc32c(data_ptr: number, len: number): number;
|
|
33
|
+
rvf_verify_checksum(buf_ptr: number, buf_len: number): number;
|
|
34
|
+
|
|
35
|
+
// In-memory store
|
|
36
|
+
rvf_store_create(dim: number, metric: number): number;
|
|
37
|
+
rvf_store_open(buf_ptr: number, buf_len: number): number;
|
|
38
|
+
rvf_store_ingest(handle: number, vecs_ptr: number, ids_ptr: number, count: number): number;
|
|
39
|
+
rvf_store_query(handle: number, query_ptr: number, k: number, metric: number, out_ptr: number): number;
|
|
40
|
+
rvf_store_delete(handle: number, ids_ptr: number, count: number): number;
|
|
41
|
+
rvf_store_count(handle: number): number;
|
|
42
|
+
rvf_store_dimension(handle: number): number;
|
|
43
|
+
rvf_store_status(handle: number, out_ptr: number): number;
|
|
44
|
+
rvf_store_export(handle: number, out_ptr: number, out_len: number): number;
|
|
45
|
+
rvf_store_close(handle: number): number;
|
|
46
|
+
|
|
47
|
+
// Segment parsing
|
|
48
|
+
rvf_parse_header(buf_ptr: number, buf_len: number, out_ptr: number): number;
|
|
49
|
+
rvf_segment_count(buf_ptr: number, buf_len: number): number;
|
|
50
|
+
rvf_segment_info(buf_ptr: number, buf_len: number, idx: number, out_ptr: number): number;
|
|
51
|
+
|
|
52
|
+
// Witness chain
|
|
53
|
+
rvf_witness_verify(chain_ptr: number, chain_len: number): number;
|
|
54
|
+
rvf_witness_count(chain_len: number): number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default function init(input?: ArrayBuffer | Uint8Array | WebAssembly.Module): Promise<RvfWasmExports>;
|
package/pkg/rvf_wasm.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ruvector/rvf-wasm — JS glue for the RVF WASM microkernel.
|
|
3
|
+
*
|
|
4
|
+
* Loads the .wasm binary and re-exports all C-ABI functions plus the
|
|
5
|
+
* WASM linear memory object.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
let wasmInstance = null;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the WASM module.
|
|
12
|
+
* Returns the exports object with all rvf_* functions and `memory`.
|
|
13
|
+
*/
|
|
14
|
+
export default async function init(input) {
|
|
15
|
+
if (wasmInstance) return wasmInstance;
|
|
16
|
+
|
|
17
|
+
let wasmBytes;
|
|
18
|
+
|
|
19
|
+
if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {
|
|
20
|
+
wasmBytes = input;
|
|
21
|
+
} else if (input instanceof WebAssembly.Module) {
|
|
22
|
+
const instance = await WebAssembly.instantiate(input, {});
|
|
23
|
+
wasmInstance = instance.exports;
|
|
24
|
+
return wasmInstance;
|
|
25
|
+
} else {
|
|
26
|
+
// Default: load from adjacent .wasm file
|
|
27
|
+
const url = new URL('rvf_wasm_bg.wasm', import.meta.url);
|
|
28
|
+
if (typeof fetch === 'function') {
|
|
29
|
+
const resp = await fetch(url);
|
|
30
|
+
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
|
31
|
+
const { instance } = await WebAssembly.instantiateStreaming(resp, {});
|
|
32
|
+
wasmInstance = instance.exports;
|
|
33
|
+
return wasmInstance;
|
|
34
|
+
}
|
|
35
|
+
wasmBytes = await resp.arrayBuffer();
|
|
36
|
+
} else {
|
|
37
|
+
// Node.js fallback
|
|
38
|
+
const { readFile } = await import('node:fs/promises');
|
|
39
|
+
const { fileURLToPath } = await import('node:url');
|
|
40
|
+
const path = fileURLToPath(url);
|
|
41
|
+
wasmBytes = await readFile(path);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const { instance } = await WebAssembly.instantiate(wasmBytes, {});
|
|
46
|
+
wasmInstance = instance.exports;
|
|
47
|
+
return wasmInstance;
|
|
48
|
+
}
|
|
Binary file
|