@ruvector/rvf-wasm 0.1.2 → 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 CHANGED
@@ -1,14 +1,19 @@
1
1
  {
2
2
  "name": "@ruvector/rvf-wasm",
3
- "version": "0.1.2",
4
- "description": "RuVector Format WASM build for browsers",
5
- "main": "pkg/rvf_runtime.js",
6
- "types": "pkg/rvf_runtime.d.ts",
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": "wasm-pack build ../../crates/rvf/rvf-runtime --target web --out-dir ../../npm/packages/rvf-wasm/pkg --features wasm"
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>;
@@ -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