ruvector 0.2.21 → 0.2.23

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.
Files changed (123) hide show
  1. package/README.md +2 -2
  2. package/bin/cli.js +160 -0
  3. package/package.json +9 -5
  4. package/src/decompiler/api-prober.js +302 -0
  5. package/src/decompiler/model-decompiler.js +423 -0
  6. package/dist/analysis/complexity.d.ts +0 -52
  7. package/dist/analysis/complexity.d.ts.map +0 -1
  8. package/dist/analysis/complexity.js +0 -146
  9. package/dist/analysis/index.d.ts +0 -15
  10. package/dist/analysis/index.d.ts.map +0 -1
  11. package/dist/analysis/index.js +0 -38
  12. package/dist/analysis/patterns.d.ts +0 -71
  13. package/dist/analysis/patterns.d.ts.map +0 -1
  14. package/dist/analysis/patterns.js +0 -243
  15. package/dist/analysis/security.d.ts +0 -51
  16. package/dist/analysis/security.d.ts.map +0 -1
  17. package/dist/analysis/security.js +0 -139
  18. package/dist/core/adaptive-embedder.d.ts +0 -156
  19. package/dist/core/adaptive-embedder.d.ts.map +0 -1
  20. package/dist/core/adaptive-embedder.js +0 -838
  21. package/dist/core/agentdb-fast.d.ts +0 -149
  22. package/dist/core/agentdb-fast.d.ts.map +0 -1
  23. package/dist/core/agentdb-fast.js +0 -301
  24. package/dist/core/ast-parser.d.ts +0 -108
  25. package/dist/core/ast-parser.d.ts.map +0 -1
  26. package/dist/core/ast-parser.js +0 -602
  27. package/dist/core/attention-fallbacks.d.ts +0 -321
  28. package/dist/core/attention-fallbacks.d.ts.map +0 -1
  29. package/dist/core/attention-fallbacks.js +0 -552
  30. package/dist/core/cluster-wrapper.d.ts +0 -148
  31. package/dist/core/cluster-wrapper.d.ts.map +0 -1
  32. package/dist/core/cluster-wrapper.js +0 -271
  33. package/dist/core/coverage-router.d.ts +0 -88
  34. package/dist/core/coverage-router.d.ts.map +0 -1
  35. package/dist/core/coverage-router.js +0 -315
  36. package/dist/core/diff-embeddings.d.ts +0 -93
  37. package/dist/core/diff-embeddings.d.ts.map +0 -1
  38. package/dist/core/diff-embeddings.js +0 -334
  39. package/dist/core/gnn-wrapper.d.ts +0 -143
  40. package/dist/core/gnn-wrapper.d.ts.map +0 -1
  41. package/dist/core/gnn-wrapper.js +0 -213
  42. package/dist/core/graph-algorithms.d.ts +0 -83
  43. package/dist/core/graph-algorithms.d.ts.map +0 -1
  44. package/dist/core/graph-algorithms.js +0 -514
  45. package/dist/core/graph-wrapper.d.ts +0 -147
  46. package/dist/core/graph-wrapper.d.ts.map +0 -1
  47. package/dist/core/graph-wrapper.js +0 -299
  48. package/dist/core/index.d.ts +0 -48
  49. package/dist/core/index.d.ts.map +0 -1
  50. package/dist/core/index.js +0 -89
  51. package/dist/core/intelligence-engine.d.ts +0 -258
  52. package/dist/core/intelligence-engine.d.ts.map +0 -1
  53. package/dist/core/intelligence-engine.js +0 -1030
  54. package/dist/core/learning-engine.d.ts +0 -160
  55. package/dist/core/learning-engine.d.ts.map +0 -1
  56. package/dist/core/learning-engine.js +0 -589
  57. package/dist/core/neural-embeddings.d.ts +0 -393
  58. package/dist/core/neural-embeddings.d.ts.map +0 -1
  59. package/dist/core/neural-embeddings.js +0 -1091
  60. package/dist/core/neural-perf.d.ts +0 -331
  61. package/dist/core/neural-perf.d.ts.map +0 -1
  62. package/dist/core/neural-perf.js +0 -704
  63. package/dist/core/onnx/loader.js +0 -348
  64. package/dist/core/onnx/pkg/LICENSE +0 -21
  65. package/dist/core/onnx/pkg/loader.js +0 -348
  66. package/dist/core/onnx/pkg/package.json +0 -3
  67. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm.d.ts +0 -112
  68. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm.js +0 -5
  69. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.js +0 -638
  70. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.wasm +0 -0
  71. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.wasm.d.ts +0 -29
  72. package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_cjs.js +0 -127
  73. package/dist/core/onnx-embedder.d.ts +0 -105
  74. package/dist/core/onnx-embedder.d.ts.map +0 -1
  75. package/dist/core/onnx-embedder.js +0 -410
  76. package/dist/core/onnx-llm.d.ts +0 -206
  77. package/dist/core/onnx-llm.d.ts.map +0 -1
  78. package/dist/core/onnx-llm.js +0 -430
  79. package/dist/core/onnx-optimized.d.ts +0 -109
  80. package/dist/core/onnx-optimized.d.ts.map +0 -1
  81. package/dist/core/onnx-optimized.js +0 -419
  82. package/dist/core/parallel-intelligence.d.ts +0 -109
  83. package/dist/core/parallel-intelligence.d.ts.map +0 -1
  84. package/dist/core/parallel-intelligence.js +0 -340
  85. package/dist/core/parallel-workers.d.ts +0 -177
  86. package/dist/core/parallel-workers.d.ts.map +0 -1
  87. package/dist/core/parallel-workers.js +0 -671
  88. package/dist/core/router-wrapper.d.ts +0 -62
  89. package/dist/core/router-wrapper.d.ts.map +0 -1
  90. package/dist/core/router-wrapper.js +0 -209
  91. package/dist/core/rvf-wrapper.d.ts +0 -86
  92. package/dist/core/rvf-wrapper.d.ts.map +0 -1
  93. package/dist/core/rvf-wrapper.js +0 -102
  94. package/dist/core/sona-wrapper.d.ts +0 -226
  95. package/dist/core/sona-wrapper.d.ts.map +0 -1
  96. package/dist/core/sona-wrapper.js +0 -282
  97. package/dist/core/tensor-compress.d.ts +0 -134
  98. package/dist/core/tensor-compress.d.ts.map +0 -1
  99. package/dist/core/tensor-compress.js +0 -432
  100. package/dist/index.d.ts +0 -105
  101. package/dist/index.d.ts.map +0 -1
  102. package/dist/index.js +0 -221
  103. package/dist/services/embedding-service.d.ts +0 -136
  104. package/dist/services/embedding-service.d.ts.map +0 -1
  105. package/dist/services/embedding-service.js +0 -294
  106. package/dist/services/index.d.ts +0 -6
  107. package/dist/services/index.d.ts.map +0 -1
  108. package/dist/services/index.js +0 -26
  109. package/dist/types.d.ts +0 -145
  110. package/dist/types.d.ts.map +0 -1
  111. package/dist/types.js +0 -2
  112. package/dist/workers/benchmark.d.ts +0 -44
  113. package/dist/workers/benchmark.d.ts.map +0 -1
  114. package/dist/workers/benchmark.js +0 -230
  115. package/dist/workers/index.d.ts +0 -10
  116. package/dist/workers/index.d.ts.map +0 -1
  117. package/dist/workers/index.js +0 -25
  118. package/dist/workers/native-worker.d.ts +0 -76
  119. package/dist/workers/native-worker.d.ts.map +0 -1
  120. package/dist/workers/native-worker.js +0 -490
  121. package/dist/workers/types.d.ts +0 -69
  122. package/dist/workers/types.d.ts.map +0 -1
  123. package/dist/workers/types.js +0 -7
@@ -1,109 +0,0 @@
1
- /**
2
- * Optimized ONNX Embedder for RuVector
3
- *
4
- * Performance optimizations:
5
- * 1. TOKENIZER CACHING - Cache tokenization results (~10-20ms savings per repeat)
6
- * 2. EMBEDDING LRU CACHE - Full embedding cache with configurable size
7
- * 3. QUANTIZED MODELS - INT8/FP16 models for 2-4x speedup
8
- * 4. LAZY INITIALIZATION - Defer model loading until first use
9
- * 5. DYNAMIC BATCHING - Optimize batch sizes based on input
10
- * 6. MEMORY OPTIMIZATION - Float32Array for all operations
11
- *
12
- * Usage:
13
- * const embedder = new OptimizedOnnxEmbedder({ cacheSize: 1000 });
14
- * await embedder.init();
15
- * const embedding = await embedder.embed("Hello world");
16
- */
17
- export interface OptimizedOnnxConfig {
18
- /** Model to use (default: 'all-MiniLM-L6-v2') */
19
- modelId?: string;
20
- /** Use quantized model if available (default: true) */
21
- useQuantized?: boolean;
22
- /** Quantization type: 'fp16' | 'int8' | 'dynamic' */
23
- quantization?: 'fp16' | 'int8' | 'dynamic' | 'none';
24
- /** Max input length (default: 256) */
25
- maxLength?: number;
26
- /** Embedding cache size (default: 512) */
27
- cacheSize?: number;
28
- /** Tokenizer cache size (default: 256) */
29
- tokenizerCacheSize?: number;
30
- /** Enable lazy initialization (default: true) */
31
- lazyInit?: boolean;
32
- /** Batch size for dynamic batching (default: 32) */
33
- batchSize?: number;
34
- /** Minimum texts to trigger batching (default: 4) */
35
- batchThreshold?: number;
36
- }
37
- export declare class OptimizedOnnxEmbedder {
38
- private config;
39
- private wasmModule;
40
- private embedder;
41
- private initialized;
42
- private initPromise;
43
- private embeddingCache;
44
- private tokenizerCache;
45
- private totalEmbeds;
46
- private totalTimeMs;
47
- private dimension;
48
- constructor(config?: OptimizedOnnxConfig);
49
- /**
50
- * Initialize the embedder (loads model)
51
- */
52
- init(): Promise<void>;
53
- private doInit;
54
- /**
55
- * Embed a single text with caching
56
- */
57
- embed(text: string): Promise<Float32Array>;
58
- /**
59
- * Embed multiple texts with batching and caching
60
- */
61
- embedBatch(texts: string[]): Promise<Float32Array[]>;
62
- /**
63
- * Calculate similarity between two texts
64
- */
65
- similarity(text1: string, text2: string): Promise<number>;
66
- /**
67
- * Fast cosine similarity with loop unrolling
68
- */
69
- cosineSimilarity(a: Float32Array, b: Float32Array): number;
70
- /**
71
- * Get cache statistics
72
- */
73
- getCacheStats(): {
74
- embedding: {
75
- hits: number;
76
- misses: number;
77
- hitRate: number;
78
- size: number;
79
- };
80
- tokenizer: {
81
- hits: number;
82
- misses: number;
83
- hitRate: number;
84
- size: number;
85
- };
86
- avgTimeMs: number;
87
- totalEmbeds: number;
88
- };
89
- /**
90
- * Clear all caches
91
- */
92
- clearCache(): void;
93
- /**
94
- * Get embedding dimension
95
- */
96
- getDimension(): number;
97
- /**
98
- * Check if initialized
99
- */
100
- isReady(): boolean;
101
- /**
102
- * Get configuration
103
- */
104
- getConfig(): Required<OptimizedOnnxConfig>;
105
- }
106
- export declare function getOptimizedOnnxEmbedder(config?: OptimizedOnnxConfig): OptimizedOnnxEmbedder;
107
- export declare function initOptimizedOnnx(config?: OptimizedOnnxConfig): Promise<OptimizedOnnxEmbedder>;
108
- export default OptimizedOnnxEmbedder;
109
- //# sourceMappingURL=onnx-optimized.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onnx-optimized.d.ts","sourceRoot":"","sources":["../../src/core/onnx-optimized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA0HD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IAGjD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,cAAc,CAAwB;IAG9C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAO;gBAEZ,MAAM,GAAE,mBAAwB;IAiB5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,MAAM;IA8EpB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiChD;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmD1D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/D;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IAmB1D;;OAEG;IACH,aAAa,IAAI;QACf,SAAS,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,SAAS,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB;IASD;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,mBAAmB,CAAC;CAG3C;AAQD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAK5F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAIpG;AAED,eAAe,qBAAqB,CAAC"}
@@ -1,419 +0,0 @@
1
- "use strict";
2
- /**
3
- * Optimized ONNX Embedder for RuVector
4
- *
5
- * Performance optimizations:
6
- * 1. TOKENIZER CACHING - Cache tokenization results (~10-20ms savings per repeat)
7
- * 2. EMBEDDING LRU CACHE - Full embedding cache with configurable size
8
- * 3. QUANTIZED MODELS - INT8/FP16 models for 2-4x speedup
9
- * 4. LAZY INITIALIZATION - Defer model loading until first use
10
- * 5. DYNAMIC BATCHING - Optimize batch sizes based on input
11
- * 6. MEMORY OPTIMIZATION - Float32Array for all operations
12
- *
13
- * Usage:
14
- * const embedder = new OptimizedOnnxEmbedder({ cacheSize: 1000 });
15
- * await embedder.init();
16
- * const embedding = await embedder.embed("Hello world");
17
- */
18
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- var desc = Object.getOwnPropertyDescriptor(m, k);
21
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
- desc = { enumerable: true, get: function() { return m[k]; } };
23
- }
24
- Object.defineProperty(o, k2, desc);
25
- }) : (function(o, m, k, k2) {
26
- if (k2 === undefined) k2 = k;
27
- o[k2] = m[k];
28
- }));
29
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
- Object.defineProperty(o, "default", { enumerable: true, value: v });
31
- }) : function(o, v) {
32
- o["default"] = v;
33
- });
34
- var __importStar = (this && this.__importStar) || (function () {
35
- var ownKeys = function(o) {
36
- ownKeys = Object.getOwnPropertyNames || function (o) {
37
- var ar = [];
38
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
- return ar;
40
- };
41
- return ownKeys(o);
42
- };
43
- return function (mod) {
44
- if (mod && mod.__esModule) return mod;
45
- var result = {};
46
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
- __setModuleDefault(result, mod);
48
- return result;
49
- };
50
- })();
51
- Object.defineProperty(exports, "__esModule", { value: true });
52
- exports.OptimizedOnnxEmbedder = void 0;
53
- exports.getOptimizedOnnxEmbedder = getOptimizedOnnxEmbedder;
54
- exports.initOptimizedOnnx = initOptimizedOnnx;
55
- const path = __importStar(require("path"));
56
- const fs = __importStar(require("fs"));
57
- const url_1 = require("url");
58
- // Force native dynamic import
59
- // eslint-disable-next-line @typescript-eslint/no-implied-eval
60
- const dynamicImport = new Function('specifier', 'return import(specifier)');
61
- // ============================================================================
62
- // Quantized Model Registry
63
- // ============================================================================
64
- const QUANTIZED_MODELS = {
65
- 'all-MiniLM-L6-v2': {
66
- onnx: 'https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/onnx/model.onnx',
67
- // Quantized versions (community-provided)
68
- fp16: 'https://huggingface.co/Xenova/all-MiniLM-L6-v2/resolve/main/onnx/model_fp16.onnx',
69
- int8: 'https://huggingface.co/Xenova/all-MiniLM-L6-v2/resolve/main/onnx/model_quantized.onnx',
70
- tokenizer: 'https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/tokenizer.json',
71
- dimension: 384,
72
- maxLength: 256,
73
- },
74
- 'bge-small-en-v1.5': {
75
- onnx: 'https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/onnx/model.onnx',
76
- fp16: 'https://huggingface.co/Xenova/bge-small-en-v1.5/resolve/main/onnx/model_fp16.onnx',
77
- int8: 'https://huggingface.co/Xenova/bge-small-en-v1.5/resolve/main/onnx/model_quantized.onnx',
78
- tokenizer: 'https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/tokenizer.json',
79
- dimension: 384,
80
- maxLength: 512,
81
- },
82
- 'e5-small-v2': {
83
- onnx: 'https://huggingface.co/intfloat/e5-small-v2/resolve/main/onnx/model.onnx',
84
- fp16: 'https://huggingface.co/Xenova/e5-small-v2/resolve/main/onnx/model_fp16.onnx',
85
- tokenizer: 'https://huggingface.co/intfloat/e5-small-v2/resolve/main/tokenizer.json',
86
- dimension: 384,
87
- maxLength: 512,
88
- },
89
- };
90
- // ============================================================================
91
- // LRU Cache Implementation
92
- // ============================================================================
93
- class LRUCache {
94
- constructor(maxSize) {
95
- this.cache = new Map();
96
- this.hits = 0;
97
- this.misses = 0;
98
- this.maxSize = maxSize;
99
- }
100
- get(key) {
101
- const value = this.cache.get(key);
102
- if (value !== undefined) {
103
- // Move to end (most recently used)
104
- this.cache.delete(key);
105
- this.cache.set(key, value);
106
- this.hits++;
107
- return value;
108
- }
109
- this.misses++;
110
- return undefined;
111
- }
112
- set(key, value) {
113
- if (this.cache.has(key)) {
114
- this.cache.delete(key);
115
- }
116
- else if (this.cache.size >= this.maxSize) {
117
- // Delete oldest (first) entry
118
- const firstKey = this.cache.keys().next().value;
119
- if (firstKey !== undefined) {
120
- this.cache.delete(firstKey);
121
- }
122
- }
123
- this.cache.set(key, value);
124
- }
125
- has(key) {
126
- return this.cache.has(key);
127
- }
128
- clear() {
129
- this.cache.clear();
130
- this.hits = 0;
131
- this.misses = 0;
132
- }
133
- get size() {
134
- return this.cache.size;
135
- }
136
- get stats() {
137
- const total = this.hits + this.misses;
138
- return {
139
- hits: this.hits,
140
- misses: this.misses,
141
- hitRate: total > 0 ? this.hits / total : 0,
142
- size: this.cache.size,
143
- };
144
- }
145
- }
146
- // ============================================================================
147
- // Fast Hash Function (FNV-1a)
148
- // ============================================================================
149
- function hashString(str) {
150
- let h = 2166136261;
151
- for (let i = 0; i < str.length; i++) {
152
- h ^= str.charCodeAt(i);
153
- h = Math.imul(h, 16777619);
154
- }
155
- return h.toString(36);
156
- }
157
- // ============================================================================
158
- // Optimized ONNX Embedder
159
- // ============================================================================
160
- class OptimizedOnnxEmbedder {
161
- constructor(config = {}) {
162
- this.wasmModule = null;
163
- this.embedder = null;
164
- this.initialized = false;
165
- this.initPromise = null;
166
- // Stats
167
- this.totalEmbeds = 0;
168
- this.totalTimeMs = 0;
169
- this.dimension = 384;
170
- this.config = {
171
- modelId: config.modelId ?? 'all-MiniLM-L6-v2',
172
- useQuantized: config.useQuantized ?? true,
173
- quantization: config.quantization ?? 'fp16',
174
- maxLength: config.maxLength ?? 256,
175
- cacheSize: config.cacheSize ?? 512,
176
- tokenizerCacheSize: config.tokenizerCacheSize ?? 256,
177
- lazyInit: config.lazyInit ?? true,
178
- batchSize: config.batchSize ?? 32,
179
- batchThreshold: config.batchThreshold ?? 4,
180
- };
181
- this.embeddingCache = new LRUCache(this.config.cacheSize);
182
- this.tokenizerCache = new LRUCache(this.config.tokenizerCacheSize);
183
- }
184
- /**
185
- * Initialize the embedder (loads model)
186
- */
187
- async init() {
188
- if (this.initialized)
189
- return;
190
- if (this.initPromise) {
191
- await this.initPromise;
192
- return;
193
- }
194
- this.initPromise = this.doInit();
195
- await this.initPromise;
196
- }
197
- async doInit() {
198
- try {
199
- // Load bundled WASM module
200
- const pkgPath = path.join(__dirname, 'onnx', 'pkg', 'ruvector_onnx_embeddings_wasm.js');
201
- const loaderPath = path.join(__dirname, 'onnx', 'loader.js');
202
- if (!fs.existsSync(pkgPath)) {
203
- throw new Error('ONNX WASM files not bundled');
204
- }
205
- const pkgUrl = (0, url_1.pathToFileURL)(pkgPath).href;
206
- const loaderUrl = (0, url_1.pathToFileURL)(loaderPath).href;
207
- this.wasmModule = await dynamicImport(pkgUrl);
208
- // Initialize WASM
209
- const wasmPath = path.join(__dirname, 'onnx', 'pkg', 'ruvector_onnx_embeddings_wasm_bg.wasm');
210
- if (this.wasmModule.default && typeof this.wasmModule.default === 'function') {
211
- const wasmBytes = fs.readFileSync(wasmPath);
212
- await this.wasmModule.default(wasmBytes);
213
- }
214
- const loaderModule = await dynamicImport(loaderUrl);
215
- const { ModelLoader } = loaderModule;
216
- // Select model URL based on quantization preference
217
- const modelInfo = QUANTIZED_MODELS[this.config.modelId];
218
- let modelUrl;
219
- if (modelInfo) {
220
- if (this.config.useQuantized && this.config.quantization !== 'none') {
221
- // Try quantized version first
222
- if (this.config.quantization === 'int8' && modelInfo.int8) {
223
- modelUrl = modelInfo.int8;
224
- console.error(`Using INT8 quantized model: ${this.config.modelId}`);
225
- }
226
- else if (modelInfo.fp16) {
227
- modelUrl = modelInfo.fp16;
228
- console.error(`Using FP16 quantized model: ${this.config.modelId}`);
229
- }
230
- else {
231
- modelUrl = modelInfo.onnx;
232
- console.error(`Using FP32 model (no quantized version): ${this.config.modelId}`);
233
- }
234
- }
235
- else {
236
- modelUrl = modelInfo.onnx;
237
- }
238
- this.dimension = modelInfo.dimension;
239
- }
240
- else {
241
- // Fallback to default loader
242
- modelUrl = '';
243
- }
244
- const modelLoader = new ModelLoader({
245
- cache: true,
246
- cacheDir: path.join(process.env.HOME || '/tmp', '.ruvector', 'models'),
247
- });
248
- console.error(`Loading ONNX model: ${this.config.modelId}...`);
249
- const { modelBytes, tokenizerJson, config: modelConfig } = await modelLoader.loadModel(this.config.modelId);
250
- const embedderConfig = new this.wasmModule.WasmEmbedderConfig()
251
- .setMaxLength(this.config.maxLength)
252
- .setNormalize(true)
253
- .setPooling(0); // Mean pooling
254
- this.embedder = this.wasmModule.WasmEmbedder.withConfig(modelBytes, tokenizerJson, embedderConfig);
255
- this.dimension = this.embedder.dimension();
256
- const simdAvailable = typeof this.wasmModule.simd_available === 'function'
257
- ? this.wasmModule.simd_available()
258
- : false;
259
- console.error(`Optimized ONNX embedder ready: ${this.dimension}d, SIMD: ${simdAvailable}, Cache: ${this.config.cacheSize}`);
260
- this.initialized = true;
261
- }
262
- catch (e) {
263
- throw new Error(`Failed to initialize optimized ONNX embedder: ${e.message}`);
264
- }
265
- }
266
- /**
267
- * Embed a single text with caching
268
- */
269
- async embed(text) {
270
- if (this.config.lazyInit && !this.initialized) {
271
- await this.init();
272
- }
273
- if (!this.embedder) {
274
- throw new Error('Embedder not initialized');
275
- }
276
- // Check cache
277
- const cacheKey = hashString(text);
278
- const cached = this.embeddingCache.get(cacheKey);
279
- if (cached) {
280
- return cached;
281
- }
282
- // Generate embedding
283
- const start = performance.now();
284
- const embedding = this.embedder.embedOne(text);
285
- const elapsed = performance.now() - start;
286
- // Convert to Float32Array for efficiency
287
- const result = new Float32Array(embedding);
288
- // Cache result
289
- this.embeddingCache.set(cacheKey, result);
290
- // Update stats
291
- this.totalEmbeds++;
292
- this.totalTimeMs += elapsed;
293
- return result;
294
- }
295
- /**
296
- * Embed multiple texts with batching and caching
297
- */
298
- async embedBatch(texts) {
299
- if (this.config.lazyInit && !this.initialized) {
300
- await this.init();
301
- }
302
- if (!this.embedder) {
303
- throw new Error('Embedder not initialized');
304
- }
305
- const results = new Array(texts.length);
306
- const uncached = [];
307
- // Check cache first
308
- for (let i = 0; i < texts.length; i++) {
309
- const cacheKey = hashString(texts[i]);
310
- const cached = this.embeddingCache.get(cacheKey);
311
- if (cached) {
312
- results[i] = cached;
313
- }
314
- else {
315
- uncached.push({ index: i, text: texts[i] });
316
- }
317
- }
318
- // If all cached, return immediately
319
- if (uncached.length === 0) {
320
- return results;
321
- }
322
- // Batch embed uncached texts
323
- const start = performance.now();
324
- const uncachedTexts = uncached.map(u => u.text);
325
- // Use dynamic batching
326
- const batchResults = this.embedder.embedBatch(uncachedTexts);
327
- const elapsed = performance.now() - start;
328
- // Process and cache results
329
- for (let i = 0; i < uncached.length; i++) {
330
- const embedding = batchResults.slice(i * this.dimension, (i + 1) * this.dimension);
331
- const result = new Float32Array(embedding);
332
- results[uncached[i].index] = result;
333
- this.embeddingCache.set(hashString(uncached[i].text), result);
334
- }
335
- // Update stats
336
- this.totalEmbeds += uncached.length;
337
- this.totalTimeMs += elapsed;
338
- return results;
339
- }
340
- /**
341
- * Calculate similarity between two texts
342
- */
343
- async similarity(text1, text2) {
344
- const [emb1, emb2] = await this.embedBatch([text1, text2]);
345
- return this.cosineSimilarity(emb1, emb2);
346
- }
347
- /**
348
- * Fast cosine similarity with loop unrolling
349
- */
350
- cosineSimilarity(a, b) {
351
- let dot = 0, normA = 0, normB = 0;
352
- const len = Math.min(a.length, b.length);
353
- const len4 = len - (len % 4);
354
- for (let i = 0; i < len4; i += 4) {
355
- dot += a[i] * b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] + a[i + 3] * b[i + 3];
356
- normA += a[i] * a[i] + a[i + 1] * a[i + 1] + a[i + 2] * a[i + 2] + a[i + 3] * a[i + 3];
357
- normB += b[i] * b[i] + b[i + 1] * b[i + 1] + b[i + 2] * b[i + 2] + b[i + 3] * b[i + 3];
358
- }
359
- for (let i = len4; i < len; i++) {
360
- dot += a[i] * b[i];
361
- normA += a[i] * a[i];
362
- normB += b[i] * b[i];
363
- }
364
- return dot / (Math.sqrt(normA * normB) + 1e-8);
365
- }
366
- /**
367
- * Get cache statistics
368
- */
369
- getCacheStats() {
370
- return {
371
- embedding: this.embeddingCache.stats,
372
- tokenizer: this.tokenizerCache.stats,
373
- avgTimeMs: this.totalEmbeds > 0 ? this.totalTimeMs / this.totalEmbeds : 0,
374
- totalEmbeds: this.totalEmbeds,
375
- };
376
- }
377
- /**
378
- * Clear all caches
379
- */
380
- clearCache() {
381
- this.embeddingCache.clear();
382
- this.tokenizerCache.clear();
383
- }
384
- /**
385
- * Get embedding dimension
386
- */
387
- getDimension() {
388
- return this.dimension;
389
- }
390
- /**
391
- * Check if initialized
392
- */
393
- isReady() {
394
- return this.initialized;
395
- }
396
- /**
397
- * Get configuration
398
- */
399
- getConfig() {
400
- return { ...this.config };
401
- }
402
- }
403
- exports.OptimizedOnnxEmbedder = OptimizedOnnxEmbedder;
404
- // ============================================================================
405
- // Singleton & Factory
406
- // ============================================================================
407
- let defaultInstance = null;
408
- function getOptimizedOnnxEmbedder(config) {
409
- if (!defaultInstance) {
410
- defaultInstance = new OptimizedOnnxEmbedder(config);
411
- }
412
- return defaultInstance;
413
- }
414
- async function initOptimizedOnnx(config) {
415
- const embedder = getOptimizedOnnxEmbedder(config);
416
- await embedder.init();
417
- return embedder;
418
- }
419
- exports.default = OptimizedOnnxEmbedder;
@@ -1,109 +0,0 @@
1
- /**
2
- * Parallel Intelligence - Worker-based acceleration for IntelligenceEngine
3
- *
4
- * Provides parallel processing for:
5
- * - Q-learning batch updates (3-4x faster)
6
- * - Multi-file pattern matching
7
- * - Background memory indexing
8
- * - Parallel similarity search
9
- * - Multi-file code analysis
10
- * - Parallel git commit analysis
11
- *
12
- * Uses worker_threads for CPU-bound operations, keeping hooks non-blocking.
13
- */
14
- export interface ParallelConfig {
15
- /** Number of worker threads (default: CPU cores - 1) */
16
- numWorkers?: number;
17
- /** Enable parallel processing (default: true for MCP, false for CLI) */
18
- enabled?: boolean;
19
- /** Minimum batch size to use parallel (default: 4) */
20
- batchThreshold?: number;
21
- }
22
- export interface BatchEpisode {
23
- state: string;
24
- action: string;
25
- reward: number;
26
- nextState: string;
27
- done: boolean;
28
- metadata?: Record<string, any>;
29
- }
30
- export interface PatternMatchResult {
31
- file: string;
32
- patterns: Array<{
33
- pattern: string;
34
- confidence: number;
35
- }>;
36
- }
37
- export interface CoEditAnalysis {
38
- file1: string;
39
- file2: string;
40
- commits: string[];
41
- strength: number;
42
- }
43
- export declare class ParallelIntelligence {
44
- private workers;
45
- private taskQueue;
46
- private busyWorkers;
47
- private config;
48
- private initialized;
49
- constructor(config?: ParallelConfig);
50
- /**
51
- * Initialize worker pool
52
- */
53
- init(): Promise<void>;
54
- private processQueue;
55
- /**
56
- * Execute task in worker pool
57
- */
58
- private executeInWorker;
59
- /**
60
- * Batch Q-learning episode recording (3-4x faster)
61
- */
62
- recordEpisodesBatch(episodes: BatchEpisode[]): Promise<void>;
63
- /**
64
- * Multi-file pattern matching (parallel pretrain)
65
- */
66
- matchPatternsParallel(files: string[]): Promise<PatternMatchResult[]>;
67
- /**
68
- * Background memory indexing (non-blocking)
69
- */
70
- indexMemoriesBackground(memories: Array<{
71
- content: string;
72
- type: string;
73
- }>): Promise<void>;
74
- /**
75
- * Parallel similarity search with sharding
76
- */
77
- searchParallel(query: string, topK?: number): Promise<Array<{
78
- content: string;
79
- score: number;
80
- }>>;
81
- /**
82
- * Multi-file AST analysis for routing
83
- */
84
- analyzeFilesParallel(files: string[]): Promise<Map<string, {
85
- agent: string;
86
- confidence: number;
87
- }>>;
88
- /**
89
- * Parallel git commit analysis for co-edit detection
90
- */
91
- analyzeCommitsParallel(commits: string[]): Promise<CoEditAnalysis[]>;
92
- /**
93
- * Get worker pool stats
94
- */
95
- getStats(): {
96
- enabled: boolean;
97
- workers: number;
98
- busy: number;
99
- queued: number;
100
- };
101
- /**
102
- * Shutdown worker pool
103
- */
104
- shutdown(): Promise<void>;
105
- }
106
- export declare function getParallelIntelligence(config?: ParallelConfig): ParallelIntelligence;
107
- export declare function initParallelIntelligence(config?: ParallelConfig): Promise<ParallelIntelligence>;
108
- export default ParallelIntelligence;
109
- //# sourceMappingURL=parallel-intelligence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parallel-intelligence.d.ts","sourceRoot":"","sources":["../../src/core/parallel-intelligence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAiE;IAClF,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,GAAE,cAAmB;IAWvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B,OAAO,CAAC,YAAY;IAWpB;;OAEG;YACW,eAAe;IAiC7B;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlE;;OAEG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkB3E;;OAEG;IACG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhG;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsBzG;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAqBxG;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkB1E;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS/E;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC;AAkGD,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,oBAAoB,CAKrF;AAED,wBAAsB,wBAAwB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAIrG;AAED,eAAe,oBAAoB,CAAC"}