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.
- package/README.md +2 -2
- package/bin/cli.js +160 -0
- package/package.json +9 -5
- package/src/decompiler/api-prober.js +302 -0
- package/src/decompiler/model-decompiler.js +423 -0
- package/dist/analysis/complexity.d.ts +0 -52
- package/dist/analysis/complexity.d.ts.map +0 -1
- package/dist/analysis/complexity.js +0 -146
- package/dist/analysis/index.d.ts +0 -15
- package/dist/analysis/index.d.ts.map +0 -1
- package/dist/analysis/index.js +0 -38
- package/dist/analysis/patterns.d.ts +0 -71
- package/dist/analysis/patterns.d.ts.map +0 -1
- package/dist/analysis/patterns.js +0 -243
- package/dist/analysis/security.d.ts +0 -51
- package/dist/analysis/security.d.ts.map +0 -1
- package/dist/analysis/security.js +0 -139
- package/dist/core/adaptive-embedder.d.ts +0 -156
- package/dist/core/adaptive-embedder.d.ts.map +0 -1
- package/dist/core/adaptive-embedder.js +0 -838
- package/dist/core/agentdb-fast.d.ts +0 -149
- package/dist/core/agentdb-fast.d.ts.map +0 -1
- package/dist/core/agentdb-fast.js +0 -301
- package/dist/core/ast-parser.d.ts +0 -108
- package/dist/core/ast-parser.d.ts.map +0 -1
- package/dist/core/ast-parser.js +0 -602
- package/dist/core/attention-fallbacks.d.ts +0 -321
- package/dist/core/attention-fallbacks.d.ts.map +0 -1
- package/dist/core/attention-fallbacks.js +0 -552
- package/dist/core/cluster-wrapper.d.ts +0 -148
- package/dist/core/cluster-wrapper.d.ts.map +0 -1
- package/dist/core/cluster-wrapper.js +0 -271
- package/dist/core/coverage-router.d.ts +0 -88
- package/dist/core/coverage-router.d.ts.map +0 -1
- package/dist/core/coverage-router.js +0 -315
- package/dist/core/diff-embeddings.d.ts +0 -93
- package/dist/core/diff-embeddings.d.ts.map +0 -1
- package/dist/core/diff-embeddings.js +0 -334
- package/dist/core/gnn-wrapper.d.ts +0 -143
- package/dist/core/gnn-wrapper.d.ts.map +0 -1
- package/dist/core/gnn-wrapper.js +0 -213
- package/dist/core/graph-algorithms.d.ts +0 -83
- package/dist/core/graph-algorithms.d.ts.map +0 -1
- package/dist/core/graph-algorithms.js +0 -514
- package/dist/core/graph-wrapper.d.ts +0 -147
- package/dist/core/graph-wrapper.d.ts.map +0 -1
- package/dist/core/graph-wrapper.js +0 -299
- package/dist/core/index.d.ts +0 -48
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -89
- package/dist/core/intelligence-engine.d.ts +0 -258
- package/dist/core/intelligence-engine.d.ts.map +0 -1
- package/dist/core/intelligence-engine.js +0 -1030
- package/dist/core/learning-engine.d.ts +0 -160
- package/dist/core/learning-engine.d.ts.map +0 -1
- package/dist/core/learning-engine.js +0 -589
- package/dist/core/neural-embeddings.d.ts +0 -393
- package/dist/core/neural-embeddings.d.ts.map +0 -1
- package/dist/core/neural-embeddings.js +0 -1091
- package/dist/core/neural-perf.d.ts +0 -331
- package/dist/core/neural-perf.d.ts.map +0 -1
- package/dist/core/neural-perf.js +0 -704
- package/dist/core/onnx/loader.js +0 -348
- package/dist/core/onnx/pkg/LICENSE +0 -21
- package/dist/core/onnx/pkg/loader.js +0 -348
- package/dist/core/onnx/pkg/package.json +0 -3
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm.d.ts +0 -112
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm.js +0 -5
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.js +0 -638
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.wasm +0 -0
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_bg.wasm.d.ts +0 -29
- package/dist/core/onnx/pkg/ruvector_onnx_embeddings_wasm_cjs.js +0 -127
- package/dist/core/onnx-embedder.d.ts +0 -105
- package/dist/core/onnx-embedder.d.ts.map +0 -1
- package/dist/core/onnx-embedder.js +0 -410
- package/dist/core/onnx-llm.d.ts +0 -206
- package/dist/core/onnx-llm.d.ts.map +0 -1
- package/dist/core/onnx-llm.js +0 -430
- package/dist/core/onnx-optimized.d.ts +0 -109
- package/dist/core/onnx-optimized.d.ts.map +0 -1
- package/dist/core/onnx-optimized.js +0 -419
- package/dist/core/parallel-intelligence.d.ts +0 -109
- package/dist/core/parallel-intelligence.d.ts.map +0 -1
- package/dist/core/parallel-intelligence.js +0 -340
- package/dist/core/parallel-workers.d.ts +0 -177
- package/dist/core/parallel-workers.d.ts.map +0 -1
- package/dist/core/parallel-workers.js +0 -671
- package/dist/core/router-wrapper.d.ts +0 -62
- package/dist/core/router-wrapper.d.ts.map +0 -1
- package/dist/core/router-wrapper.js +0 -209
- package/dist/core/rvf-wrapper.d.ts +0 -86
- package/dist/core/rvf-wrapper.d.ts.map +0 -1
- package/dist/core/rvf-wrapper.js +0 -102
- package/dist/core/sona-wrapper.d.ts +0 -226
- package/dist/core/sona-wrapper.d.ts.map +0 -1
- package/dist/core/sona-wrapper.js +0 -282
- package/dist/core/tensor-compress.d.ts +0 -134
- package/dist/core/tensor-compress.d.ts.map +0 -1
- package/dist/core/tensor-compress.js +0 -432
- package/dist/index.d.ts +0 -105
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -221
- package/dist/services/embedding-service.d.ts +0 -136
- package/dist/services/embedding-service.d.ts.map +0 -1
- package/dist/services/embedding-service.js +0 -294
- package/dist/services/index.d.ts +0 -6
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -26
- package/dist/types.d.ts +0 -145
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/workers/benchmark.d.ts +0 -44
- package/dist/workers/benchmark.d.ts.map +0 -1
- package/dist/workers/benchmark.js +0 -230
- package/dist/workers/index.d.ts +0 -10
- package/dist/workers/index.d.ts.map +0 -1
- package/dist/workers/index.js +0 -25
- package/dist/workers/native-worker.d.ts +0 -76
- package/dist/workers/native-worker.d.ts.map +0 -1
- package/dist/workers/native-worker.js +0 -490
- package/dist/workers/types.d.ts +0 -69
- package/dist/workers/types.d.ts.map +0 -1
- 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"}
|