File size: 3,000 Bytes
9eae420 a18f21e 9eae420 0738753 9eae420 a18f21e 9eae420 6165d33 9eae420 358a1f8 1b6a6a3 a17d382 1b6a6a3 a17d382 1b6a6a3 a17d382 1b6a6a3 9eae420 1b6a6a3 358a1f8 1b6a6a3 9eae420 1b6a6a3 9eae420 1b6a6a3 a17d382 9eae420 0738753 9eae420 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | let models = [];
let descending = true;
const paramFilter = document.getElementById("paramFilter");
const table = document.getElementById("leaderboard");
const sortSelect = document.getElementById("sortSelect");
const directionButton = document.getElementById("direction");
fetch("models.json")
.then(response => response.json())
.then(data => {
models = data;
render();
});
function formatParams(num) {
if (num >= 1e9)
return (num / 1e9).toFixed(1) + "B";
return (num / 1e6).toFixed(0) + "M";
}
function render() {
table.innerHTML = ""; // clear old rows
const sort = sortSelect.value;
let sorted = [...models];
const filter = paramFilter.value;
if (filter === "200m") {
sorted = sorted.filter(m => m.parameters < 200_000_000);
}
if (filter === "500m") {
sorted = sorted.filter(m => m.parameters < 500_000_000);
}
if (filter === "1b") {
sorted = sorted.filter(m => m.parameters < 1_000_000_000);
}
if (filter === "2b") {
sorted = sorted.filter(m => m.parameters < 2_000_000_000);
}
if (filter === "4b") {
sorted = sorted.filter(m => m.parameters < 4_000_000_000);
}
sorted.forEach(model => {
model.efficiency = model.parameters / model.overall;
});
sorted.sort((a, b) => {
let result;
if (sort === "parameters")
result = a.parameters - b.parameters;
else if (sort === "ctx")
result = a.ctx - b.ctx;
else if (sort === "efficiency")
result = a.efficiency - b.efficiency;
else
result = a[sort] - b[sort];
return descending ? -result : result;
});
sorted.forEach((model, index) => {
const row = document.createElement("tr");
row.innerHTML = `
<td>${index + 1}</td>
<td>
<a href="${model.hf}" target="_blank">
${model.name}
</a>
</td>
<td>${model.parameters_display || formatParams(model.parameters)}</td>
<td>${model.ctx}</td>
<td>${model.type || "Unknown"}</td>
<td>
${(model.efficiency / 1000000).toFixed(2)}M
</td>
<td>${model.overall.toFixed(2)}</td>
<td>${model.knowledge.toFixed(2)}</td>
<td>${model.reasoning.toFixed(2)}</td>
<td>${model.instructions.toFixed(2)}</td>
<td>${model.coding.toFixed(2)}</td>
<td>${model.math.toFixed(2)}</td>
<td class="notes">
${model.notes || ""}
</td>
`;
table.appendChild(row);
});
}
sortSelect.addEventListener(
"change",
render
);
paramFilter.addEventListener(
"change",
render
);
directionButton.addEventListener(
"click",
() => {
descending = !descending;
directionButton.textContent =
descending
? "↓ Descending"
: "↑ Ascending";
render();
}
); |