@ruvector/ruvllm 3.0.0 → 4.0.0
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/GPU-LOOP.md +229 -0
- package/LICENSE +201 -0
- package/NOTICE +9 -0
- package/README.md +157 -362
- package/examples/gpu-loop.example.json +26 -0
- package/package.json +50 -121
- package/src/adapters-cli.mjs +23 -0
- package/src/adapters.mjs +91 -0
- package/src/cli.mjs +30 -0
- package/src/engine.mjs +238 -0
- package/src/fixture.mjs +38 -0
- package/src/gpu-host.mjs +47 -0
- package/src/gpu-loop-cli.mjs +67 -0
- package/src/gpu-loop.mjs +184 -0
- package/src/gpu-spool-adapter.mjs +80 -0
- package/src/vast-host-adapter.mjs +274 -0
- package/bin/cli.js +0 -1040
- package/dist/cjs/benchmarks/embedding-benchmark.d.ts +0 -102
- package/dist/cjs/benchmarks/embedding-benchmark.d.ts.map +0 -1
- package/dist/cjs/benchmarks/embedding-benchmark.js +0 -436
- package/dist/cjs/benchmarks/index.d.ts +0 -34
- package/dist/cjs/benchmarks/index.d.ts.map +0 -1
- package/dist/cjs/benchmarks/index.js +0 -132
- package/dist/cjs/benchmarks/model-comparison.d.ts +0 -71
- package/dist/cjs/benchmarks/model-comparison.d.ts.map +0 -1
- package/dist/cjs/benchmarks/model-comparison.js +0 -476
- package/dist/cjs/benchmarks/routing-benchmark.d.ts +0 -70
- package/dist/cjs/benchmarks/routing-benchmark.d.ts.map +0 -1
- package/dist/cjs/benchmarks/routing-benchmark.js +0 -289
- package/dist/cjs/contrastive.d.ts +0 -229
- package/dist/cjs/contrastive.d.ts.map +0 -1
- package/dist/cjs/contrastive.js +0 -589
- package/dist/cjs/engine.d.ts +0 -160
- package/dist/cjs/engine.d.ts.map +0 -1
- package/dist/cjs/engine.js +0 -552
- package/dist/cjs/export.d.ts +0 -182
- package/dist/cjs/export.d.ts.map +0 -1
- package/dist/cjs/export.js +0 -422
- package/dist/cjs/federated.d.ts +0 -233
- package/dist/cjs/federated.d.ts.map +0 -1
- package/dist/cjs/federated.js +0 -525
- package/dist/cjs/index.d.ts +0 -68
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -104
- package/dist/cjs/intelligence.d.ts +0 -136
- package/dist/cjs/intelligence.d.ts.map +0 -1
- package/dist/cjs/intelligence.js +0 -226
- package/dist/cjs/lora.d.ts +0 -251
- package/dist/cjs/lora.d.ts.map +0 -1
- package/dist/cjs/lora.js +0 -509
- package/dist/cjs/models.d.ts +0 -129
- package/dist/cjs/models.d.ts.map +0 -1
- package/dist/cjs/models.js +0 -323
- package/dist/cjs/native.d.ts +0 -140
- package/dist/cjs/native.d.ts.map +0 -1
- package/dist/cjs/native.js +0 -98
- package/dist/cjs/session.d.ts +0 -80
- package/dist/cjs/session.d.ts.map +0 -1
- package/dist/cjs/session.js +0 -203
- package/dist/cjs/simd.d.ts +0 -90
- package/dist/cjs/simd.d.ts.map +0 -1
- package/dist/cjs/simd.js +0 -209
- package/dist/cjs/sona.d.ts +0 -223
- package/dist/cjs/sona.d.ts.map +0 -1
- package/dist/cjs/sona.js +0 -562
- package/dist/cjs/streaming.d.ts +0 -55
- package/dist/cjs/streaming.d.ts.map +0 -1
- package/dist/cjs/streaming.js +0 -131
- package/dist/cjs/training.d.ts +0 -312
- package/dist/cjs/training.d.ts.map +0 -1
- package/dist/cjs/training.js +0 -610
- package/dist/cjs/types.d.ts +0 -696
- package/dist/cjs/types.d.ts.map +0 -1
- package/dist/cjs/types.js +0 -6
- package/dist/esm/benchmarks/embedding-benchmark.d.ts +0 -102
- package/dist/esm/benchmarks/embedding-benchmark.d.ts.map +0 -1
- package/dist/esm/benchmarks/embedding-benchmark.js +0 -427
- package/dist/esm/benchmarks/index.d.ts +0 -34
- package/dist/esm/benchmarks/index.d.ts.map +0 -1
- package/dist/esm/benchmarks/index.js +0 -110
- package/dist/esm/benchmarks/model-comparison.d.ts +0 -71
- package/dist/esm/benchmarks/model-comparison.d.ts.map +0 -1
- package/dist/esm/benchmarks/model-comparison.js +0 -434
- package/dist/esm/benchmarks/routing-benchmark.d.ts +0 -70
- package/dist/esm/benchmarks/routing-benchmark.d.ts.map +0 -1
- package/dist/esm/benchmarks/routing-benchmark.js +0 -283
- package/dist/esm/contrastive.d.ts +0 -229
- package/dist/esm/contrastive.d.ts.map +0 -1
- package/dist/esm/contrastive.js +0 -578
- package/dist/esm/engine.d.ts +0 -160
- package/dist/esm/engine.d.ts.map +0 -1
- package/dist/esm/engine.js +0 -548
- package/dist/esm/export.d.ts +0 -182
- package/dist/esm/export.d.ts.map +0 -1
- package/dist/esm/export.js +0 -414
- package/dist/esm/federated.d.ts +0 -233
- package/dist/esm/federated.d.ts.map +0 -1
- package/dist/esm/federated.js +0 -520
- package/dist/esm/index.d.ts +0 -68
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -84
- package/dist/esm/intelligence.d.ts +0 -136
- package/dist/esm/intelligence.d.ts.map +0 -1
- package/dist/esm/intelligence.js +0 -188
- package/dist/esm/lora.d.ts +0 -251
- package/dist/esm/lora.d.ts.map +0 -1
- package/dist/esm/lora.js +0 -504
- package/dist/esm/models.d.ts +0 -129
- package/dist/esm/models.d.ts.map +0 -1
- package/dist/esm/models.js +0 -282
- package/dist/esm/native.d.ts +0 -140
- package/dist/esm/native.d.ts.map +0 -1
- package/dist/esm/native.js +0 -93
- package/dist/esm/session.d.ts +0 -80
- package/dist/esm/session.d.ts.map +0 -1
- package/dist/esm/session.js +0 -199
- package/dist/esm/simd.d.ts +0 -90
- package/dist/esm/simd.d.ts.map +0 -1
- package/dist/esm/simd.js +0 -205
- package/dist/esm/sona.d.ts +0 -223
- package/dist/esm/sona.d.ts.map +0 -1
- package/dist/esm/sona.js +0 -556
- package/dist/esm/streaming.d.ts +0 -55
- package/dist/esm/streaming.d.ts.map +0 -1
- package/dist/esm/streaming.js +0 -126
- package/dist/esm/training.d.ts +0 -312
- package/dist/esm/training.d.ts.map +0 -1
- package/dist/esm/training.js +0 -603
- package/dist/esm/types.d.ts +0 -696
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js +0 -5
- package/scripts/ensemble-model-compare.js +0 -287
- package/scripts/fix-esm-extensions.mjs +0 -181
- package/scripts/huggingface/README.md +0 -537
- package/scripts/huggingface/publish.sh +0 -112
- package/scripts/hybrid-model-compare.js +0 -373
- package/scripts/improved-model-compare.js +0 -288
- package/scripts/optimized-model-compare.js +0 -364
- package/scripts/real-model-compare.js +0 -280
- package/scripts/smoke-esm.mjs +0 -82
- package/scripts/training/agentic-flow-capabilities.json +0 -329
- package/scripts/training/claude-code-synth.js +0 -505
- package/scripts/training/claude-flow-capabilities.json +0 -1322
- package/scripts/training/claude-hard-negatives.js +0 -222
- package/scripts/training/contrastive-finetune.js +0 -517
- package/scripts/training/ecosystem-triplets.jsonl +0 -1467
- package/scripts/training/generate-ecosystem-triplets.js +0 -1324
- package/scripts/training/routing-dataset.js +0 -634
- package/scripts/training/ruvector-capabilities.json +0 -798
- package/scripts/training/validate-ecosystem.js +0 -381
- package/scripts/training/validation-results.json +0 -23
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuvLTRA Benchmark Suite
|
|
3
|
-
*
|
|
4
|
-
* Comprehensive benchmarks for evaluating RuvLTRA models
|
|
5
|
-
* on Claude Code-specific use cases.
|
|
6
|
-
*/
|
|
7
|
-
export * from './routing-benchmark';
|
|
8
|
-
export * from './embedding-benchmark';
|
|
9
|
-
export * from './model-comparison';
|
|
10
|
-
import { ROUTING_TEST_CASES, type RoutingBenchmarkResults } from './routing-benchmark';
|
|
11
|
-
import { SIMILARITY_TEST_PAIRS, SEARCH_TEST_CASES, CLUSTER_TEST_CASES, type EmbeddingBenchmarkResults } from './embedding-benchmark';
|
|
12
|
-
export interface FullBenchmarkResults {
|
|
13
|
-
routing: RoutingBenchmarkResults;
|
|
14
|
-
embedding: EmbeddingBenchmarkResults;
|
|
15
|
-
timestamp: string;
|
|
16
|
-
model: string;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Run all benchmarks with a given model
|
|
20
|
-
*/
|
|
21
|
-
export declare function runFullBenchmark(router: (task: string) => {
|
|
22
|
-
agent: string;
|
|
23
|
-
confidence: number;
|
|
24
|
-
}, embedder: (text: string) => number[], similarityFn: (a: number[], b: number[]) => number, modelName?: string): FullBenchmarkResults;
|
|
25
|
-
/**
|
|
26
|
-
* Format full benchmark results
|
|
27
|
-
*/
|
|
28
|
-
export declare function formatFullResults(results: FullBenchmarkResults): string;
|
|
29
|
-
/**
|
|
30
|
-
* Compare two models
|
|
31
|
-
*/
|
|
32
|
-
export declare function compareModels(results1: FullBenchmarkResults, results2: FullBenchmarkResults): string;
|
|
33
|
-
export { ROUTING_TEST_CASES, SIMILARITY_TEST_PAIRS, SEARCH_TEST_CASES, CLUSTER_TEST_CASES, };
|
|
34
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAIL,kBAAkB,EAClB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,yBAAyB,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,EACpC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,EAClD,SAAS,GAAE,MAAkB,GAC5B,oBAAoB,CAUtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAmDvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAuCR;AAGD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,CAAC"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* RuvLTRA Benchmark Suite
|
|
4
|
-
*
|
|
5
|
-
* Comprehensive benchmarks for evaluating RuvLTRA models
|
|
6
|
-
* on Claude Code-specific use cases.
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
-
};
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.CLUSTER_TEST_CASES = exports.SEARCH_TEST_CASES = exports.SIMILARITY_TEST_PAIRS = exports.ROUTING_TEST_CASES = void 0;
|
|
24
|
-
exports.runFullBenchmark = runFullBenchmark;
|
|
25
|
-
exports.formatFullResults = formatFullResults;
|
|
26
|
-
exports.compareModels = compareModels;
|
|
27
|
-
__exportStar(require("./routing-benchmark"), exports);
|
|
28
|
-
__exportStar(require("./embedding-benchmark"), exports);
|
|
29
|
-
__exportStar(require("./model-comparison"), exports);
|
|
30
|
-
const routing_benchmark_1 = require("./routing-benchmark");
|
|
31
|
-
Object.defineProperty(exports, "ROUTING_TEST_CASES", { enumerable: true, get: function () { return routing_benchmark_1.ROUTING_TEST_CASES; } });
|
|
32
|
-
const embedding_benchmark_1 = require("./embedding-benchmark");
|
|
33
|
-
Object.defineProperty(exports, "SIMILARITY_TEST_PAIRS", { enumerable: true, get: function () { return embedding_benchmark_1.SIMILARITY_TEST_PAIRS; } });
|
|
34
|
-
Object.defineProperty(exports, "SEARCH_TEST_CASES", { enumerable: true, get: function () { return embedding_benchmark_1.SEARCH_TEST_CASES; } });
|
|
35
|
-
Object.defineProperty(exports, "CLUSTER_TEST_CASES", { enumerable: true, get: function () { return embedding_benchmark_1.CLUSTER_TEST_CASES; } });
|
|
36
|
-
/**
|
|
37
|
-
* Run all benchmarks with a given model
|
|
38
|
-
*/
|
|
39
|
-
function runFullBenchmark(router, embedder, similarityFn, modelName = 'unknown') {
|
|
40
|
-
const routing = (0, routing_benchmark_1.runRoutingBenchmark)(router);
|
|
41
|
-
const embedding = (0, embedding_benchmark_1.runEmbeddingBenchmark)(embedder, similarityFn);
|
|
42
|
-
return {
|
|
43
|
-
routing,
|
|
44
|
-
embedding,
|
|
45
|
-
timestamp: new Date().toISOString(),
|
|
46
|
-
model: modelName,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Format full benchmark results
|
|
51
|
-
*/
|
|
52
|
-
function formatFullResults(results) {
|
|
53
|
-
const lines = [];
|
|
54
|
-
lines.push('');
|
|
55
|
-
lines.push('╔═══════════════════════════════════════════════════════════════════════════╗');
|
|
56
|
-
lines.push('║ RUVLTRA BENCHMARK SUITE ║');
|
|
57
|
-
lines.push('║ Claude Code Use Case Evaluation ║');
|
|
58
|
-
lines.push('╠═══════════════════════════════════════════════════════════════════════════╣');
|
|
59
|
-
lines.push(`║ Model: ${results.model.padEnd(64)}║`);
|
|
60
|
-
lines.push(`║ Date: ${results.timestamp.padEnd(64)}║`);
|
|
61
|
-
lines.push('╚═══════════════════════════════════════════════════════════════════════════╝');
|
|
62
|
-
lines.push((0, routing_benchmark_1.formatRoutingResults)(results.routing));
|
|
63
|
-
lines.push((0, embedding_benchmark_1.formatEmbeddingResults)(results.embedding));
|
|
64
|
-
// Overall assessment
|
|
65
|
-
lines.push('');
|
|
66
|
-
lines.push('═══════════════════════════════════════════════════════════════');
|
|
67
|
-
lines.push(' OVERALL ASSESSMENT');
|
|
68
|
-
lines.push('═══════════════════════════════════════════════════════════════');
|
|
69
|
-
const routingScore = results.routing.accuracy;
|
|
70
|
-
const embeddingScore = (results.embedding.similarityAccuracy +
|
|
71
|
-
results.embedding.searchMRR +
|
|
72
|
-
results.embedding.clusterPurity) / 3;
|
|
73
|
-
const overallScore = (routingScore + embeddingScore) / 2;
|
|
74
|
-
lines.push('');
|
|
75
|
-
lines.push(` Routing Score: ${(routingScore * 100).toFixed(1)}%`);
|
|
76
|
-
lines.push(` Embedding Score: ${(embeddingScore * 100).toFixed(1)}%`);
|
|
77
|
-
lines.push(` ─────────────────────────`);
|
|
78
|
-
lines.push(` Overall Score: ${(overallScore * 100).toFixed(1)}%`);
|
|
79
|
-
lines.push('');
|
|
80
|
-
if (overallScore >= 0.8) {
|
|
81
|
-
lines.push(' ✓ EXCELLENT - Highly suitable for Claude Code workflows');
|
|
82
|
-
}
|
|
83
|
-
else if (overallScore >= 0.6) {
|
|
84
|
-
lines.push(' ~ GOOD - Suitable for most Claude Code use cases');
|
|
85
|
-
}
|
|
86
|
-
else if (overallScore >= 0.4) {
|
|
87
|
-
lines.push(' ~ ACCEPTABLE - May work but consider alternatives');
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
lines.push(' ✗ NEEDS IMPROVEMENT - Consider different model or fine-tuning');
|
|
91
|
-
}
|
|
92
|
-
lines.push('');
|
|
93
|
-
lines.push('═══════════════════════════════════════════════════════════════');
|
|
94
|
-
return lines.join('\n');
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Compare two models
|
|
98
|
-
*/
|
|
99
|
-
function compareModels(results1, results2) {
|
|
100
|
-
const lines = [];
|
|
101
|
-
lines.push('');
|
|
102
|
-
lines.push('╔═══════════════════════════════════════════════════════════════════════════╗');
|
|
103
|
-
lines.push('║ MODEL COMPARISON ║');
|
|
104
|
-
lines.push('╚═══════════════════════════════════════════════════════════════════════════╝');
|
|
105
|
-
lines.push('');
|
|
106
|
-
const metrics = [
|
|
107
|
-
{ name: 'Routing Accuracy', v1: results1.routing.accuracy, v2: results2.routing.accuracy },
|
|
108
|
-
{ name: 'Similarity Detection', v1: results1.embedding.similarityAccuracy, v2: results2.embedding.similarityAccuracy },
|
|
109
|
-
{ name: 'Search MRR', v1: results1.embedding.searchMRR, v2: results2.embedding.searchMRR },
|
|
110
|
-
{ name: 'Search NDCG', v1: results1.embedding.searchNDCG, v2: results2.embedding.searchNDCG },
|
|
111
|
-
{ name: 'Cluster Purity', v1: results1.embedding.clusterPurity, v2: results2.embedding.clusterPurity },
|
|
112
|
-
{ name: 'Routing Latency (ms)', v1: results1.routing.avgLatencyMs, v2: results2.routing.avgLatencyMs, lowerBetter: true },
|
|
113
|
-
];
|
|
114
|
-
lines.push(`${'Metric'.padEnd(25)} ${results1.model.padEnd(15)} ${results2.model.padEnd(15)} Winner`);
|
|
115
|
-
lines.push('─'.repeat(70));
|
|
116
|
-
for (const m of metrics) {
|
|
117
|
-
const val1 = m.lowerBetter ? m.v1 : m.v1;
|
|
118
|
-
const val2 = m.lowerBetter ? m.v2 : m.v2;
|
|
119
|
-
let winner;
|
|
120
|
-
if (m.lowerBetter) {
|
|
121
|
-
winner = val1 < val2 ? results1.model : val2 < val1 ? results2.model : 'tie';
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
winner = val1 > val2 ? results1.model : val2 > val1 ? results2.model : 'tie';
|
|
125
|
-
}
|
|
126
|
-
const v1Str = m.lowerBetter ? val1.toFixed(2) : (val1 * 100).toFixed(1) + '%';
|
|
127
|
-
const v2Str = m.lowerBetter ? val2.toFixed(2) : (val2 * 100).toFixed(1) + '%';
|
|
128
|
-
lines.push(`${m.name.padEnd(25)} ${v1Str.padEnd(15)} ${v2Str.padEnd(15)} ${winner}`);
|
|
129
|
-
}
|
|
130
|
-
return lines.join('\n');
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2htYXJrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNILDRDQWVDO0FBS0QsOENBbURDO0FBS0Qsc0NBMENDO0FBckpELHNEQUFvQztBQUNwQyx3REFBc0M7QUFDdEMscURBQW1DO0FBRW5DLDJEQU02QjtBQStJM0IsbUdBakpBLHNDQUFrQixPQWlKQTtBQTdJcEIsK0RBTytCO0FBdUk3QixzR0EzSUEsMkNBQXFCLE9BMklBO0FBQ3JCLGtHQTNJQSx1Q0FBaUIsT0EySUE7QUFDakIsbUdBM0lBLHdDQUFrQixPQTJJQTtBQWhJcEI7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBK0QsRUFDL0QsUUFBb0MsRUFDcEMsWUFBa0QsRUFDbEQsWUFBb0IsU0FBUztJQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFBLHVDQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUEsMkNBQXFCLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWhFLE9BQU87UUFDTCxPQUFPO1FBQ1AsU0FBUztRQUNULFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQyxLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsT0FBNkI7SUFDN0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBRTNCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLCtFQUErRSxDQUFDLENBQUM7SUFDNUYsS0FBSyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO0lBQzVGLEtBQUssQ0FBQyxJQUFJLENBQUMsK0VB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Qy9FLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzlFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFOUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnV2TFRSQSBCZW5jaG1hcmsgU3VpdGVcbiAqXG4gKiBDb21wcmVoZW5zaXZlIGJlbmNobWFya3MgZm9yIGV2YWx1YXRpbmcgUnV2TFRSQSBtb2RlbHNcbiAqIG9uIENsYXVkZSBDb2RlLXNwZWNpZmljIHVzZSBjYXNlcy5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3JvdXRpbmctYmVuY2htYXJrJztcbmV4cG9ydCAqIGZyb20gJy4vZW1iZWRkaW5nLWJlbmNobWFyayc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLWNvbXBhcmlzb24nO1xuXG5pbXBvcnQge1xuICBydW5Sb3V0aW5nQmVuY2htYXJrLFxuICBmb3JtYXRSb3V0aW5nUmVzdWx0cyxcbiAgYmFzZWxpbmVLZXl3b3JkUm91dGVyLFxuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIHR5cGUgUm91dGluZ0JlbmNobWFya1Jlc3VsdHMsXG59IGZyb20gJy4vcm91dGluZy1iZW5jaG1hcmsnO1xuXG5pbXBvcnQge1xuICBydW5FbWJlZGRpbmdCZW5jaG1hcmssXG4gIGZvcm1hdEVtYmVkZGluZ1Jlc3VsdHMsXG4gIFNJTUlMQVJJVFlfVEVTVF9QQUlSUyxcbiAgU0VBUkNIX1RFU1RfQ0FTRVMsXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcbiAgdHlwZSBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzLFxufSBmcm9tICcuL2VtYmVkZGluZy1iZW5jaG1hcmsnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxCZW5jaG1hcmtSZXN1bHRzIHtcbiAgcm91dGluZzogUm91dGluZ0JlbmNobWFya1Jlc3VsdHM7XG4gIGVtYmVkZGluZzogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUnVuIGFsbCBiZW5jaG1hcmtzIHdpdGggYSBnaXZlbiBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuRnVsbEJlbmNobWFyayhcbiAgcm91dGVyOiAodGFzazogc3RyaW5nKSA9PiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9LFxuICBlbWJlZGRlcjogKHRleHQ6IHN0cmluZykgPT4gbnVtYmVyW10sXG4gIHNpbWlsYXJpdHlGbjogKGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSkgPT4gbnVtYmVyLFxuICBtb2RlbE5hbWU6IHN0cmluZyA9ICd1bmtub3duJ1xuKTogRnVsbEJlbmNobWFya1Jlc3VsdHMge1xuICBjb25zdCByb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhyb3V0ZXIpO1xuICBjb25zdCBlbWJlZGRpbmcgPSBydW5FbWJlZGRpbmdCZW5jaG1hcmsoZW1iZWRkZXIsIHNpbWlsYXJpdHlGbik7XG5cbiAgcmV0dXJuIHtcbiAgICByb3V0aW5nLFxuICAgIGVtYmVkZGluZyxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBtb2RlbDogbW9kZWxOYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCBmdWxsIGJlbmNobWFyayByZXN1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGdWxsUmVzdWx0cyhyZXN1bHRzOiBGdWxsQmVuY2htYXJrUmVzdWx0cyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKTtcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgICAgICBSVVZMVFJBIEJFTkNITUFSSyBTVUlURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XG4gIGxpbmVzLnB1c2goJ+KVkSAgICAgICAgICAgIENsYXVkZSBDb2RlIFVzZSBDYXNlIEV2YWx1YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcbiAgbGluZXMucHVzaChg4pWRICBNb2RlbDogJHtyZXN1bHRzLm1vZGVsLnBhZEVuZCg2NCl94pWRYCk7XG4gIGxpbmVzLnB1c2goYOKVkSAgRGF0ZTogICR7cmVzdWx0cy50aW1lc3RhbXAucGFkRW5kKDY0KX3ilZFgKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG5cbiAgbGluZXMucHVzaChmb3JtYXRSb3V0aW5nUmVzdWx0cyhyZXN1bHRzLnJvdXRpbmcpKTtcbiAgbGluZXMucHVzaChmb3JtYXRFbWJlZGRpbmdSZXN1bHRzKHJlc3VsdHMuZW1iZWRkaW5nKSk7XG5cbiAgLy8gT3ZlcmFsbCBhc3Nlc3NtZW50XG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcbiAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgICAgIE9WRVJBTEwgQVNTRVNTTUVOVCcpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcblxuICBjb25zdCByb3V0aW5nU2NvcmUgPSByZXN1bHRzLnJvdXRpbmcuYWNjdXJhY3k7XG4gIGNvbnN0IGVtYmVkZGluZ1Njb3JlID0gKFxuICAgIHJlc3VsdHMuZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSArXG4gICAgcmVzdWx0cy5lbWJlZGRpbmcuc2VhcmNoTVJSICtcbiAgICByZXN1bHRzLmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5XG4gICkgLyAzO1xuXG4gIGNvbnN0IG92ZXJhbGxTY29yZSA9IChyb3V0aW5nU2NvcmUgKyBlbWJlZGRpbmdTY29yZSkgLyAyO1xuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKGAgIFJvdXRpbmcgU2NvcmU6ICAgJHsocm91dGluZ1Njb3JlICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcbiAgbGluZXMucHVzaChgICBFbWJlZGRpbmcgU2NvcmU6ICR7KGVtYmVkZGluZ1Njb3JlICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcbiAgbGluZXMucHVzaChgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcbiAgbGluZXMucHVzaChgICBPdmVyYWxsIFNjb3JlOiAgICR7KG92ZXJhbGxTY29yZSAqIDEwMCkudG9GaXhlZCgxKX0lYCk7XG4gIGxpbmVzLnB1c2goJycpO1xuXG4gIGlmIChvdmVyYWxsU2NvcmUgPj0gMC44KSB7XG4gICAgbGluZXMucHVzaCgnICDinJMgRVhDRUxMRU5UIC0gSGlnaGx5IHN1aXRhYmxlIGZvciBDbGF1ZGUgQ29kZSB3b3JrZmxvd3MnKTtcbiAgfSBlbHNlIGlmIChvdmVyYWxsU2NvcmUgPj0gMC42KSB7XG4gICAgbGluZXMucHVzaCgnICB+IEdPT0QgLSBTdWl0YWJsZSBmb3IgbW9zdCBDbGF1ZGUgQ29kZSB1c2UgY2FzZXMnKTtcbiAgfSBlbHNlIGlmIChvdmVyYWxsU2NvcmUgPj0gMC40KSB7XG4gICAgbGluZXMucHVzaCgnICB+IEFDQ0VQVEFCTEUgLSBNYXkgd29yayBidXQgY29uc2lkZXIgYWx0ZXJuYXRpdmVzJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICDinJcgTkVFRFMgSU1QUk9WRU1FTlQgLSBDb25zaWRlciBkaWZmZXJlbnQgbW9kZWwgb3IgZmluZS10dW5pbmcnKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gbW9kZWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlTW9kZWxzKFxuICByZXN1bHRzMTogRnVsbEJlbmNobWFya1Jlc3VsdHMsXG4gIHJlc3VsdHMyOiBGdWxsQmVuY2htYXJrUmVzdWx0c1xuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICAgICAgICAgIE1PREVMIENPTVBBUklTT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG4gIGxpbmVzLnB1c2goJycpO1xuXG4gIGNvbnN0IG1ldHJpY3MgPSBbXG4gICAgeyBuYW1lOiAnUm91dGluZyBBY2N1cmFjeScsIHYxOiByZXN1bHRzMS5yb3V0aW5nLmFjY3VyYWN5LCB2MjogcmVzdWx0czIucm91dGluZy5hY2N1cmFjeSB9LFxuICAgIHsgbmFtZTogJ1NpbWlsYXJpdHkgRGV0ZWN0aW9uJywgdjE6IHJlc3VsdHMxLmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3ksIHYyOiByZXN1bHRzMi5lbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5IH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE1SUicsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuc2VhcmNoTVJSLCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNlYXJjaE1SUiB9LFxuICAgIHsgbmFtZTogJ1NlYXJjaCBORENHJywgdjE6IHJlc3VsdHMxLmVtYmVkZGluZy5zZWFyY2hORENHLCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfSxcbiAgICB7IG5hbWU6ICdDbHVzdGVyIFB1cml0eScsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuY2x1c3RlclB1cml0eSwgdjI6IHJlc3VsdHMyLmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IH0sXG4gICAgeyBuYW1lOiAnUm91dGluZyBMYXRlbmN5IChtcyknLCB2MTogcmVzdWx0czEucm91dGluZy5hdmdMYXRlbmN5TXMsIHYyOiByZXN1bHRzMi5yb3V0aW5nLmF2Z0xhdGVuY3lNcywgbG93ZXJCZXR0ZXI6IHRydWUgfSxcbiAgXTtcblxuICBsaW5lcy5wdXNoKGAkeydNZXRyaWMnLnBhZEVuZCgyNSl9ICR7cmVzdWx0czEubW9kZWwucGFkRW5kKDE1KX0gJHtyZXN1bHRzMi5tb2RlbC5wYWRFbmQoMTUpfSBXaW5uZXJgKTtcbiAgbGluZXMucHVzaCgn4pSAJy5yZXBlYXQoNzApKTtcblxuICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgIGNvbnN0IHZhbDEgPSBtLmxvd2VyQmV0dGVyID8gbS52MSA6IG0udjE7XG4gICAgY29uc3QgdmFsMiA9IG0ubG93ZXJCZXR0ZXIgPyBtLnYyIDogbS52MjtcblxuICAgIGxldCB3aW5uZXI6IHN0cmluZztcbiAgICBpZiAobS5sb3dlckJldHRlcikge1xuICAgICAgd2lubmVyID0gdmFsMSA8IHZhbDIgPyByZXN1bHRzMS5tb2RlbCA6IHZhbDIgPCB2YWwxID8gcmVzdWx0czIubW9kZWwgOiAndGllJztcbiAgICB9IGVsc2Uge1xuICAgICAgd2lubmVyID0gdmFsMSA+IHZhbDIgPyByZXN1bHRzMS5tb2RlbCA6IHZhbDIgPiB2YWwxID8gcmVzdWx0czIubW9kZWwgOiAndGllJztcbiAgICB9XG5cbiAgICBjb25zdCB2MVN0ciA9IG0ubG93ZXJCZXR0ZXIgPyB2YWwxLnRvRml4ZWQoMikgOiAodmFsMSAqIDEwMCkudG9GaXhlZCgxKSArICclJztcbiAgICBjb25zdCB2MlN0ciA9IG0ubG93ZXJCZXR0ZXIgPyB2YWwyLnRvRml4ZWQoMikgOiAodmFsMiAqIDEwMCkudG9GaXhlZCgxKSArICclJztcblxuICAgIGxpbmVzLnB1c2goYCR7bS5uYW1lLnBhZEVuZCgyNSl9ICR7djFTdHIucGFkRW5kKDE1KX0gJHt2MlN0ci5wYWRFbmQoMTUpfSAke3dpbm5lcn1gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLy8gRXhwb3J0IGNvbnN0YW50cyBmb3IgZXh0ZXJuYWwgdXNlXG5leHBvcnQge1xuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIFNJTUlMQVJJVFlfVEVTVF9QQUlSUyxcbiAgU0VBUkNIX1RFU1RfQ0FTRVMsXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcbn07XG4iXX0=
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Comparison Benchmark
|
|
3
|
-
*
|
|
4
|
-
* Head-to-head comparison between:
|
|
5
|
-
* - Qwen2.5-0.5B-Instruct (base model)
|
|
6
|
-
* - RuvLTRA Claude Code 0.5B (fine-tuned for Claude Code)
|
|
7
|
-
*
|
|
8
|
-
* Tests routing accuracy and embedding quality for Claude Code use cases.
|
|
9
|
-
*/
|
|
10
|
-
import { type RoutingBenchmarkResults } from './routing-benchmark';
|
|
11
|
-
import { type EmbeddingBenchmarkResults } from './embedding-benchmark';
|
|
12
|
-
/** Model configuration */
|
|
13
|
-
export interface ModelConfig {
|
|
14
|
-
id: string;
|
|
15
|
-
name: string;
|
|
16
|
-
url: string;
|
|
17
|
-
filename: string;
|
|
18
|
-
sizeBytes: number;
|
|
19
|
-
description: string;
|
|
20
|
-
}
|
|
21
|
-
/** Comparison models */
|
|
22
|
-
export declare const COMPARISON_MODELS: Record<string, ModelConfig>;
|
|
23
|
-
/** Comparison result */
|
|
24
|
-
export interface ComparisonResult {
|
|
25
|
-
modelId: string;
|
|
26
|
-
modelName: string;
|
|
27
|
-
routing: RoutingBenchmarkResults;
|
|
28
|
-
embedding: EmbeddingBenchmarkResults;
|
|
29
|
-
overallScore: number;
|
|
30
|
-
}
|
|
31
|
-
/** Full comparison results */
|
|
32
|
-
export interface FullComparisonResults {
|
|
33
|
-
timestamp: string;
|
|
34
|
-
baseline: ComparisonResult;
|
|
35
|
-
models: ComparisonResult[];
|
|
36
|
-
winner: string;
|
|
37
|
-
summary: string;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get models directory
|
|
41
|
-
*/
|
|
42
|
-
export declare function getModelsDir(): string;
|
|
43
|
-
/**
|
|
44
|
-
* Check if model is downloaded
|
|
45
|
-
*/
|
|
46
|
-
export declare function isModelDownloaded(modelId: string): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Download a model with progress
|
|
49
|
-
*/
|
|
50
|
-
export declare function downloadModel(modelId: string, onProgress?: (percent: number, speed: number) => void): Promise<string>;
|
|
51
|
-
/**
|
|
52
|
-
* Run comparison for a single model
|
|
53
|
-
*/
|
|
54
|
-
export declare function runModelComparison(modelId: string, modelName: string, embedder: (text: string) => number[]): ComparisonResult;
|
|
55
|
-
/**
|
|
56
|
-
* Format comparison results
|
|
57
|
-
*/
|
|
58
|
-
export declare function formatComparisonResults(results: FullComparisonResults): string;
|
|
59
|
-
/**
|
|
60
|
-
* Run full comparison
|
|
61
|
-
*/
|
|
62
|
-
export declare function runFullComparison(): Promise<FullComparisonResults>;
|
|
63
|
-
declare const _default: {
|
|
64
|
-
COMPARISON_MODELS: Record<string, ModelConfig>;
|
|
65
|
-
runFullComparison: typeof runFullComparison;
|
|
66
|
-
formatComparisonResults: typeof formatComparisonResults;
|
|
67
|
-
downloadModel: typeof downloadModel;
|
|
68
|
-
isModelDownloaded: typeof isModelDownloaded;
|
|
69
|
-
};
|
|
70
|
-
export default _default;
|
|
71
|
-
//# sourceMappingURL=model-comparison.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-comparison.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/model-comparison.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAwB;AACxB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiBzD,CAAC;AAEF,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,yBAAyB,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,8BAA8B;AAC9B,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS1D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,MAAM,CAAC,CA2EjB;AAyJD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,GACnC,gBAAgB,CAyBlB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CA8E9E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAqGxE;;;;;;;;AAED,wBAME"}
|