CompactAI commited on
Commit
a6fe553
·
verified ·
1 Parent(s): 9c6c7cb

Delete index.html

Browse files
Files changed (1) hide show
  1. index.html +0 -2233
index.html DELETED
@@ -1,2233 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Tiny-ML Leaderboard</title>
7
- <script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>
8
- <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns@3"></script>
9
- <style>
10
- :root {
11
- --bg: #0d1117;
12
- --bg-warm: #161b22;
13
- --card: #161b22;
14
- --card-hover: #1c2129;
15
- --border: #30363d;
16
- --border-light: #21262d;
17
- --text: #c9d1d9;
18
- --text-secondary: #8b949e;
19
- --text-muted: #484f58;
20
- --accent: #58a6ff;
21
- --green: #3fb950;
22
- --orange: #d29922;
23
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.3);
24
- --shadow-md: 0 4px 12px rgba(0,0,0,0.35);
25
- --radius: 12px;
26
- --radius-sm: 8px;
27
- --radius-xs: 6px;
28
- --transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
29
- --glintresearch: #3fb950;
30
- --supralabs: #58a6ff;
31
- --axiomiclabs: #c2b6ff;
32
- --mihaipopa: #93c6aa;
33
- --cromia: #ffffff;
34
- --wop: #ff9b50;
35
- --GODELEV: #1a56db;
36
- --finnianx: #06b6d4;
37
- --ivmelabs: #ff0000;
38
- --rtc: #e8a87c;
39
- --huggingface: #ffcc00;
40
- --facebook: #1877f2;
41
- --openai: #10a37f;
42
- --eleutherai: #ef4444;
43
- --stentor: #ff6bcb;
44
- --eclipsesenpai: #06b6d4;
45
- --minimalabs: #4961e6;
46
- --sandroeth: #84cc16;
47
- --thingai: #b45309;
48
- --veyraai: #d45672;
49
- --fromzero: #d2b48c;
50
- --joelhenwang: #e5e7eb;
51
- --jhuclsp: #2563eb;
52
- --liodonai: #6366f1;
53
- --smalldoge: #ec4899;
54
- --quazim0t0: #0ea5e9;
55
- --small56ai: #22c55e;
56
- --lhtechai: #f97316;
57
- --56m: #a855f7;
58
- }
59
- * { margin: 0; padding: 0; box-sizing: border-box; }
60
- html { scroll-behavior: smooth; }
61
- body {
62
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
63
- background: var(--bg);
64
- color: var(--text);
65
- line-height: 1.5;
66
- -webkit-font-smoothing: antialiased;
67
- }
68
- .shell {
69
- max-width: 100%;
70
- margin: 0 auto;
71
- padding: 1.25rem 1.75rem;
72
- }
73
- .welcome { padding: 1rem 0 1.5rem; }
74
- .welcome h1 {
75
- font-size: 1.8rem;
76
- font-weight: 700;
77
- letter-spacing: -0.02em;
78
- margin-bottom: 4px;
79
- }
80
- .welcome p { color: var(--text-secondary); font-size: 0.95rem; }
81
- .stat-row {
82
- display: grid;
83
- grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
84
- gap: 12px;
85
- margin-bottom: 1.5rem;
86
- }
87
- .stat-pill {
88
- background: var(--card);
89
- border: 1px solid var(--border);
90
- border-radius: var(--radius-sm);
91
- padding: 1rem 1.15rem;
92
- transition: box-shadow var(--transition), transform var(--transition);
93
- }
94
- .stat-pill:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); }
95
- .stat-pill .label {
96
- font-size: 0.72rem; font-weight: 600; text-transform: uppercase;
97
- letter-spacing: 0.06em; color: var(--text-muted); margin-bottom: 3px;
98
- }
99
- .stat-pill .value { font-size: 1.4rem; font-weight: 700; letter-spacing: -0.02em; }
100
- .stat-pill .sub { font-size: 0.75rem; color: var(--text-secondary); margin-top: 1px; }
101
- .info-banner {
102
- background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-sm);
103
- padding: 1rem 1.15rem; margin-bottom: 1.5rem; font-size: 0.88rem; line-height: 1.6;
104
- display: flex; align-items: flex-start; gap: 10px;
105
- }
106
- .info-banner svg { width: 18px; height: 18px; flex-shrink: 0; margin-top: 2px; color: var(--accent); }
107
- .info-banner a { color: var(--accent); text-decoration: none; }
108
- .info-banner a:hover { text-decoration: underline; }
109
- .info-banner.clickable { cursor: pointer; user-select: none; }
110
- .info-banner.clickable:hover { border-color: var(--accent); }
111
- .banner-expand {
112
- max-height: 0; overflow: hidden;
113
- transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease, margin 0.3s ease;
114
- opacity: 0; margin-top: 0;
115
- }
116
- .banner-expand.open {
117
- max-height: 300px; opacity: 1; margin-top: 10px;
118
- }
119
- .banner-expand-inner {
120
- padding: 0.85rem 1rem; background: var(--bg); border-radius: var(--radius-xs);
121
- border: 1px solid var(--border-light); font-size: 0.84rem; color: var(--text-secondary); line-height: 1.65;
122
- }
123
- .banner-expand-inner code {
124
- background: rgba(88,166,255,0.1); padding: 1px 5px; border-radius: 3px;
125
- font-family: 'SF Mono', 'Fira Code', monospace; font-size: 0.82rem; color: var(--accent);
126
- }
127
- .banner-hint {
128
- font-size: 0.75rem; color: var(--text-muted); margin-left: 6px;
129
- transition: transform 0.25s ease; display: inline-block;
130
- }
131
- .banner-hint.rotated { transform: rotate(180deg); }
132
- .section { margin-bottom: 1.1rem; }
133
- .timeline-toolbar {
134
- display: flex; align-items: center; gap: 6px;
135
- margin-bottom: 10px;
136
- overflow-x: auto; -webkit-overflow-scrolling: touch;
137
- scrollbar-width: none;
138
- padding-bottom: 2px;
139
- }
140
- .timeline-toolbar::-webkit-scrollbar { display: none; }
141
- .tl-sep {
142
- width: 1px; height: 18px; background: var(--border);
143
- margin: 0 4px; flex-shrink: 0;
144
- }
145
- .timeline {
146
- background: var(--card);
147
- border: 1px solid var(--border);
148
- border-radius: var(--radius);
149
- overflow: hidden;
150
- }
151
- .tl-month {
152
- display: flex;
153
- align-items: center;
154
- gap: 12px;
155
- padding: 10px 16px;
156
- background: var(--bg-warm);
157
- border-bottom: 1px solid var(--border);
158
- font-size: 0.78rem;
159
- font-weight: 700;
160
- text-transform: uppercase;
161
- letter-spacing: 0.08em;
162
- color: var(--text-secondary);
163
- position: sticky;
164
- top: 0;
165
- z-index: 1;
166
- }
167
- .tl-month .tl-month-count {
168
- margin-left: auto;
169
- font-weight: 500;
170
- text-transform: none;
171
- letter-spacing: 0;
172
- color: var(--text-muted);
173
- font-size: 0.74rem;
174
- }
175
- .tl-row {
176
- display: grid;
177
- grid-template-columns: 92px 1fr auto auto;
178
- align-items: center;
179
- gap: 14px;
180
- padding: 11px 16px;
181
- border-bottom: 1px solid var(--border-light);
182
- transition: background var(--transition);
183
- }
184
- .tl-row:last-child { border-bottom: none; }
185
- .tl-row:hover { background: var(--card-hover); }
186
- .tl-date {
187
- font-variant-numeric: tabular-nums;
188
- font-size: 0.8rem;
189
- color: var(--text-muted);
190
- display: flex;
191
- align-items: center;
192
- gap: 8px;
193
- }
194
- .tl-date::before {
195
- content: '';
196
- width: 8px;
197
- height: 8px;
198
- border-radius: 50%;
199
- background: var(--org-color, var(--text-muted));
200
- flex-shrink: 0;
201
- box-shadow: 0 0 0 3px rgba(255,255,255,0.04);
202
- }
203
- .tl-name {
204
- display: flex;
205
- align-items: center;
206
- gap: 8px;
207
- min-width: 0;
208
- }
209
- .tl-name a {
210
- color: var(--text);
211
- text-decoration: none;
212
- font-weight: 600;
213
- font-size: 0.88rem;
214
- letter-spacing: -0.01em;
215
- overflow: hidden;
216
- text-overflow: ellipsis;
217
- white-space: nowrap;
218
- }
219
- .tl-name a:hover { color: var(--accent); }
220
- .tl-params {
221
- font-size: 0.75rem;
222
- color: var(--text-muted);
223
- font-variant-numeric: tabular-nums;
224
- white-space: nowrap;
225
- }
226
- .tl-org {
227
- display: inline-flex;
228
- align-items: center;
229
- gap: 5px;
230
- padding: 2px 9px;
231
- border-radius: 4px;
232
- font-size: 0.72rem;
233
- font-weight: 600;
234
- white-space: nowrap;
235
- }
236
- @media (max-width: 640px) {
237
- .tl-row {
238
- grid-template-columns: 78px 1fr;
239
- grid-template-areas: "date name" "date extras";
240
- row-gap: 4px;
241
- }
242
- .tl-date { grid-area: date; }
243
- .tl-name { grid-area: name; }
244
- .tl-params { grid-area: extras; justify-self: end; }
245
- .tl-org { grid-area: extras; justify-self: end; }
246
- }
247
- .tl-empty {
248
- padding: 24px 16px;
249
- text-align: center;
250
- color: var(--text-muted);
251
- font-size: 0.84rem;
252
- }
253
- .section-head {
254
- display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem;
255
- }
256
- .section-head h2 { font-size: 1.15rem; font-weight: 700; letter-spacing: -0.02em; }
257
- .section-head .badge {
258
- font-size: 0.72rem; font-weight: 600; padding: 3px 10px; border-radius: 100px;
259
- background: var(--bg-warm); color: var(--text-secondary); border: 1px solid var(--border);
260
- }
261
- .section-head .head-right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
262
- .sort-control {
263
- display: inline-flex; align-items: center; gap: 6px;
264
- background: var(--bg-warm); border: 1px solid var(--border);
265
- border-radius: 100px; padding: 2px 4px 2px 12px;
266
- font-size: 0.68rem; font-weight: 600; color: var(--text-muted);
267
- text-transform: uppercase; letter-spacing: 0.05em;
268
- }
269
- .sort-control select {
270
- background: transparent; border: none; color: var(--text);
271
- font-size: 0.76rem; font-weight: 600; text-transform: none; letter-spacing: 0;
272
- padding: 4px 26px 4px 8px; border-radius: 100px; cursor: pointer; outline: none;
273
- appearance: none; -webkit-appearance: none; -moz-appearance: none;
274
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%238b949e' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
275
- background-repeat: no-repeat; background-position: right 8px center;
276
- transition: background-color var(--transition);
277
- }
278
- .sort-control select:hover { background-color: var(--bg); }
279
- .sort-control select:focus { box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.3); }
280
- .sort-control select option { background: var(--bg-warm); color: var(--text); }
281
- .table-wrap {
282
- background: var(--card); border: 1px solid var(--border);
283
- border-radius: var(--radius); overflow: hidden;
284
- }
285
- .table-toolbar {
286
- display: flex; align-items: center; gap: 6px; padding: 8px 12px;
287
- border-bottom: 1px solid var(--border-light); overflow-x: auto; -webkit-overflow-scrolling: touch;
288
- }
289
- .filter-chip {
290
- display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px;
291
- border-radius: 100px; font-size: 0.74rem; font-weight: 500; color: var(--text-secondary);
292
- background: var(--bg); border: 1px solid var(--border); cursor: pointer;
293
- transition: all var(--transition); white-space: nowrap; user-select: none;
294
- }
295
- .filter-chip:hover { border-color: var(--accent); color: var(--text); }
296
- .filter-chip.active { background: var(--accent); border-color: var(--accent); color: #fff; }
297
- .filter-chip .dot { width: 7px; height: 7px; border-radius: 50%; }
298
- .table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; max-height: 78vh; }
299
- table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }
300
- thead { position: sticky; top: 0; z-index: 2; }
301
- th {
302
- background: #1c2129; padding: 6px 10px; text-align: left; font-weight: 600;
303
- font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em;
304
- color: var(--text-muted); border-bottom: 1px solid var(--border); white-space: nowrap;
305
- }
306
- td {
307
- padding: 5px 10px; border-bottom: 1px solid var(--border-light);
308
- transition: background var(--transition);
309
- line-height: 1.3;
310
- }
311
- tr:last-child td { border-bottom: none; }
312
- tbody tr { transition: background var(--transition); }
313
- .lb-row.hover td { background: var(--bg-warm); }
314
- .cell-rank { width: 38px; text-align: center; font-weight: 700; color: var(--text-muted); font-size: 0.78rem; }
315
- .cell-rank .medal { font-size: 1rem; }
316
- .cell-rank.rank-1 { color: #ffd700; }
317
- .cell-rank.rank-2 { color: #c0c0c0; }
318
- .cell-rank.rank-3 { color: #cd7f32; }
319
- .cell-model { min-width: 140px; }
320
- .model-name { font-weight: 600; letter-spacing: -0.01em; font-size: 0.82rem; }
321
- .model-params { font-size: 0.7rem; color: var(--text-muted); margin-top: 1px; }
322
- .org-tag {
323
- display: inline-flex; align-items: center; gap: 4px; padding: 1px 7px;
324
- border-radius: 4px; font-size: 0.7rem; font-weight: 600; white-space: nowrap;
325
- }
326
- .org-tag .org-dot { width: 6px; height: 6px; border-radius: 50%; }
327
- .cell-metric { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; min-width: 68px; font-size: 0.78rem; }
328
- .info-icon { cursor: help; opacity: 0.5; font-size: 0.85em; vertical-align: middle; }
329
- .info-icon:hover { opacity: 1; }
330
- .metric-val { font-weight: 600; font-size: 0.8rem; }
331
- .metric-na { color: var(--text-muted); font-style: italic; font-weight: 400; font-size: 0.72rem; }
332
- .best { color: var(--green); font-weight: 700; }
333
- .cell-links { white-space: nowrap; }
334
- .cell-links a {
335
- display: inline-flex; align-items: center; gap: 3px; padding: 1px 6px;
336
- border-radius: var(--radius-xs); font-size: 0.7rem; font-weight: 500;
337
- color: var(--accent); text-decoration: none; transition: all var(--transition);
338
- }
339
- .cell-links a:hover { background: rgba(88,166,255,0.1); }
340
- .cell-tokens { font-size: 0.76rem; color: var(--text-secondary); white-space: nowrap; }
341
- .cell-date { font-size: 0.74rem; color: var(--text-muted); white-space: nowrap; }
342
- .chart-grid {
343
- display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 1.25rem;
344
- }
345
- .chart-card {
346
- background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
347
- padding: 1rem; transition: box-shadow var(--transition);
348
- }
349
- .chart-card:hover { box-shadow: var(--shadow-sm); }
350
- .chart-card.full { grid-column: 1 / -1; }
351
- .chart-card h3 { font-size: 0.85rem; font-weight: 600; margin-bottom: 3px; }
352
- .chart-card .chart-sub { font-size: 0.72rem; color: var(--text-muted); margin-bottom: 8px; }
353
- .chart-card canvas { max-height: 420px; }
354
- .legend-bar { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; }
355
- .legend-bar .legend-item { display: flex; align-items: center; gap: 6px; font-size: 0.76rem; color: var(--text-secondary); }
356
- .legend-bar .ldot { width: 8px; height: 8px; border-radius: 50%; }
357
- .eff-note { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 6px; font-size: 0.7rem; color: var(--text-muted); }
358
- .eff-note span { display: flex; align-items: center; gap: 5px; }
359
- .eff-note .line-sample { width: 18px; height: 2px; border-radius: 1px; }
360
- .timeline-bubble-wrap { position: relative; }
361
- .timeline-custom-tooltip {
362
- position: absolute; pointer-events: none; background: #1c2129;
363
- border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px;
364
- font-size: 0.78rem; color: var(--text); box-shadow: var(--shadow-md);
365
- opacity: 0; transition: opacity 0.15s ease; z-index: 10; white-space: nowrap;
366
- }
367
- .timeline-custom-tooltip.visible { opacity: 1; }
368
- .timeline-custom-tooltip .tt-name { font-weight: 600; margin-bottom: 2px; }
369
- .timeline-custom-tooltip .tt-val { color: var(--text-secondary); }
370
- .wiki-bubble-wrap { position: relative; }
371
- .wiki-custom-tooltip {
372
- position: absolute; pointer-events: none; background: #1c2129;
373
- border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px;
374
- font-size: 0.78rem; color: var(--text); box-shadow: var(--shadow-md);
375
- opacity: 0; transition: opacity 0.15s ease; z-index: 10; white-space: nowrap;
376
- }
377
- .wiki-custom-tooltip.visible { opacity: 1; }
378
- .wiki-custom-tooltip .tt-name { font-weight: 600; margin-bottom: 2px; }
379
- .wiki-custom-tooltip .tt-val { color: var(--text-secondary); }
380
- .cta-card {
381
- background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
382
- padding: 1.25rem; display: flex; align-items: center; justify-content: space-between;
383
- gap: 1rem; margin-bottom: 1.5rem; flex-wrap: wrap;
384
- }
385
- .cta-card h3 { font-size: 1rem; font-weight: 700; margin-bottom: 3px; }
386
- .cta-card p { font-size: 0.84rem; color: var(--text-secondary); max-width: 520px; line-height: 1.55; }
387
- .cta-btn {
388
- display: inline-flex; align-items: center; gap: 6px; padding: 9px 18px;
389
- border-radius: var(--radius-sm); background: var(--accent); color: #fff;
390
- font-size: 0.84rem; font-weight: 600; text-decoration: none; border: none;
391
- cursor: pointer; transition: all var(--transition); flex-shrink: 0;
392
- }
393
- .cta-btn:hover { opacity: 0.88; transform: translateY(-1px); box-shadow: var(--shadow-md); }
394
- footer {
395
- margin-top: 1rem; padding: 1.25rem 0; border-top: 1px solid var(--border);
396
- font-size: 0.78rem; color: var(--text-muted); text-align: center; line-height: 1.6;
397
- }
398
- footer a { color: var(--accent); text-decoration: none; }
399
- footer a:hover { text-decoration: underline; }
400
- @keyframes fadeUp {
401
- from { opacity: 0; transform: translateY(10px); }
402
- to { opacity: 1; transform: translateY(0); }
403
- }
404
- .anim { animation: fadeUp 0.45s cubic-bezier(0.4,0,0.2,1) both; }
405
- .d1 { animation-delay: .04s; }
406
- .d2 { animation-delay: .08s; }
407
- .d3 { animation-delay: .12s; }
408
- .d4 { animation-delay: .16s; }
409
- .d5 { animation-delay: .20s; }
410
- .d6 { animation-delay: .24s; }
411
- ::-webkit-scrollbar { width: 6px; height: 6px; }
412
- ::-webkit-scrollbar-track { background: transparent; }
413
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 100px; }
414
- ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
415
- @media (max-width: 1024px) {
416
- .chart-grid { grid-template-columns: 1fr; }
417
- .chart-card.full { grid-column: 1; }
418
- }
419
- @media (max-width: 768px) {
420
- .shell { padding: 1rem; }
421
- .stat-row { grid-template-columns: repeat(2, 1fr); }
422
- .welcome h1 { font-size: 1.4rem; }
423
- table { font-size: 0.76rem; }
424
- th, td { padding: 7px 8px; }
425
- .cta-card { flex-direction: column; align-items: flex-start; }
426
- }
427
- @media (max-width: 480px) {
428
- .stat-row { grid-template-columns: 1fr; }
429
- }
430
- </style>
431
- </head>
432
- <body>
433
- <div id="main-content">
434
- <div class="shell">
435
-
436
- <div id="submitModal" class="modal-overlay" style="display:none;">
437
- <div class="modal-card">
438
- <span class="close-btn" onclick="closeModal()">&times;</span>
439
- <h3>Agree to Terms</h3>
440
- <p>Before submitting your model, please confirm that you agree to the following terms:</p>
441
- <ul>
442
- <li>Your model uses acc_norm for evaluation.</li>
443
- <li>For WikiText-2 benchmarks, you have used byte perplexity.</li>
444
- </ul>
445
- <button id="modalAgreeBtn" class="cta-btn">I Agree</button>
446
- <button id="modalCancelBtn" class="cta-btn" style="margin-left:10px;background:var(--border);color:var(--text);">Cancel</button>
447
- </div>
448
- </div>
449
-
450
- <div class="welcome anim">
451
- <h1>Tiny-ML Leaderboard</h1>
452
- <p>Sub-150M parameter language models, same eval harness, transparent methodology.</p>
453
- </div>
454
- <div class="stat-row anim d1" id="stat-row"></div>
455
- <div class="info-banner anim d2">
456
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
457
- <div>
458
- <strong>Why this exists.</strong> The community deserves a single place to compare tiny LMs fairly.
459
- We include every model with verifiable benchmarks — ours, our competitors', yours.
460
- <a href="https://huggingface.co/spaces/Glint-Research/Tiny-ML-Leaderboard/discussions" target="_blank">Submit a model via PR.</a>
461
- </div>
462
- </div>
463
- <div class="info-banner anim d2 clickable" id="unknown-banner" onclick="toggleUnknownBanner()">
464
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>
465
- <div style="flex:1">
466
- <div style="display:flex;align-items:center;gap:4px;flex-wrap:wrap">
467
- <strong>Unknown org?</strong>
468
- <span>The "Unknown" tag is for model makers submitting their model ahead of official release.</span>
469
- <span>If that's you — DM <strong>glintresearch</strong> on Discord.</span>
470
- <span class="banner-hint" id="banner-hint">▼</span>
471
- </div>
472
- <div class="banner-expand" id="banner-expand">
473
- <div class="banner-expand-inner">
474
- Model makers can submit their model's benchmarks before the official release so it appears on the leaderboard immediately when announced. The <strong>Unknown</strong> tag is temporary — once you DM <strong>glintresearch</strong> on Discord we can update it to your organization name and color.
475
- </div>
476
- </div>
477
- </div>
478
- </div>
479
-
480
- <div class="section anim d3" id="table-section">
481
- <div class="section-head">
482
- <h2>Detailed Results</h2>
483
- <div class="head-right">
484
- <span class="badge" id="model-count-badge"></span>
485
- <div class="sort-control">
486
- <span>Sort</span>
487
- <select id="sort-select" aria-label="Sort leaderboard by">
488
- <option value="efficiency">Efficiency ⚡</option>
489
- <option value="score">Overall Score</option>
490
- <option value="wiki">WikiText-2 byte_ppl</option>
491
- <option value="blimp">BLiMP</option>
492
- <option value="arc">ARC-Easy</option>
493
- <option value="params">Parameters</option>
494
- <option value="date">Release Date</option>
495
- </select>
496
- </div>
497
- </div>
498
- </div>
499
- <div class="table-wrap">
500
- <div class="table-toolbar" id="org-filters"></div>
501
- <div class="table-scroll">
502
- <table>
503
- <thead>
504
- <tr>
505
- <th>#</th>
506
- <th>Model</th>
507
- <th>Org</th>
508
- <th>Params</th>
509
- <th class="cell-metric">Eff. ⚡</th>
510
- <th class="cell-metric">WikiText-2 byte_ppl ↓</th>
511
- <th class="cell-metric">BLiMP ↑</th>
512
- <th class="cell-metric">ARC-Easy ↑</th>
513
- <th>Training Tokens</th>
514
- <th>Released</th>
515
- <th>Links</th>
516
- </tr>
517
- </thead>
518
- <tbody id="leaderboard-body"></tbody>
519
- </table>
520
- </div>
521
- </div>
522
- </div>
523
- <div class="section anim d4" id="timeline-section">
524
- <div class="section-head">
525
- <h2>Model Release Timeline</h2>
526
- <span class="badge">Most recent first</span>
527
- </div>
528
- <div class="timeline" id="timeline-list"></div>
529
- </div>
530
- <div class="section anim d5" id="charts-section">
531
- <div class="section-head"><h2>Benchmark Overview</h2></div>
532
- <div class="legend-bar" id="legend-bar"></div>
533
- <div class="chart-grid">
534
- <div class="chart-card">
535
- <h3>BLiMP ↑</h3>
536
- <p class="chart-sub">Higher is better</p>
537
- <canvas id="blimpChart"></canvas>
538
- </div>
539
- <div class="chart-card">
540
- <h3>ARC-Easy ↑</h3>
541
- <p class="chart-sub">Higher is better</p>
542
- <canvas id="arcChart"></canvas>
543
- </div>
544
- <div class="chart-card full wiki-bubble-wrap">
545
- <h3>WikiText-2 Byte-Level Perplexity ↓</h3>
546
- <p class="chart-sub">Lower is better · byte_ppl = exp(−loglik / total_bytes) · bubble size = perplexity (smaller bubble = better)</p>
547
- <canvas id="wikiChart"></canvas>
548
- <div class="wiki-custom-tooltip" id="wikiTooltip">
549
- <div class="tt-name"></div>
550
- <div class="tt-val"></div>
551
- </div>
552
- </div>
553
- </div>
554
- </div>
555
- <div class="section anim d6">
556
- <div class="section-head">
557
- <h2>Model Efficiency</h2>
558
- <span class="badge">Leaderboard Score vs Params</span>
559
- </div>
560
- <div class="chart-grid">
561
- <div class="chart-card full">
562
- <h3>Parameters vs Leaderboard Score</h3>
563
- <p class="chart-sub">Scatter of each model's overall score vs its parameter count. Points above the dashed threshold line are &ge;1&sigma; above the trend. Top 3 marked.</p>
564
- <canvas id="efficiencyChart" style="max-height:400px"></canvas>
565
- <div class="eff-note">
566
- <span><span class="line-sample" style="border-top:2px dashed rgba(255,200,0,0.4)"></span> Avg trend</span>
567
- <span><span class="line-sample" style="border-top:2px dashed rgba(255,200,0,0.8)"></span> High-efficiency threshold</span>
568
- <span><span class="line-sample" style="background:rgba(255,230,0,0.1);height:8px"></span> Outperforming zone</span>
569
- </div>
570
- </div>
571
- <div class="chart-card full">
572
- <h3>Models Released by Org</h3>
573
- <canvas id="orgCountChart" style="max-height:260px"></canvas>
574
- </div>
575
- </div>
576
- </div>
577
- <footer>
578
- Tiny-ML Leaderboard by <a href="https://huggingface.co/Glint-Research">Glint Research</a>.
579
- Not affiliated with SupraLabs or LH-Tech-AI.
580
- All benchmark data is self-reported by model authors unless otherwise noted.
581
- </footer>
582
- </div>
583
- </div>
584
- <script>
585
- const models = [
586
- {
587
- name: "MicroSupra-1k",
588
- org: "supralabs",
589
- params: "1K",
590
- blimp: 58.61,
591
- arc: 26.39,
592
- wiki: 11.27,
593
- tokens: "—",
594
- releaseDate: "2026-05-13",
595
- links: {
596
- card: "https://huggingface.co/SupraLabs/MicroSupra-1k"
597
- }
598
- },
599
- {
600
- name: "Glint-0.1",
601
- org: "glintresearch",
602
- params: "1M",
603
- blimp: 46.7,
604
- arc: 21,
605
- wiki: 4106963.13,
606
- tokens: "~100M",
607
- releaseDate: "2026-03-09",
608
- links: {
609
- card: "https://huggingface.co/Glint-Research/Glint-0.1"
610
- }
611
- },
612
- {
613
- name: "Supra-Mini-v2",
614
- org: "supralabs",
615
- params: "168K",
616
- blimp: 53.5,
617
- arc: 26.8,
618
- wiki: 7.79,
619
- tokens: "—",
620
- releaseDate: "2026-05-12",
621
- links: {
622
- card: "https://huggingface.co/SupraLabs/Supra-Mini-v2-0.1M"
623
- }
624
- },
625
- {
626
- name: "Glint-0.2",
627
- org: "glintresearch",
628
- params: "1M",
629
- blimp: 49.8,
630
- arc: 27,
631
- wiki: 636.4,
632
- tokens: "~100M",
633
- releaseDate: "2026-03-22",
634
- links: {
635
- card: "https://huggingface.co/Glint-Research/Glint-0.2"
636
- }
637
- },
638
- {
639
- name: "Glint-0.3",
640
- org: "glintresearch",
641
- params: "1M",
642
- blimp: 47.3,
643
- arc: 25.5,
644
- wiki: 7.87,
645
- tokens: "~100M",
646
- releaseDate: "2026-04-04",
647
- links: {
648
- card: "https://huggingface.co/Glint-Research/Glint-0.3"
649
- }
650
- },
651
- {
652
- name: "CinnabarLM 1.4M",
653
- org: "mihaipopa",
654
- params: "1.51M",
655
- blimp: 60.7,
656
- arc: 24.58,
657
- wiki: 4.09,
658
- tokens: "~30M",
659
- releaseDate: "2026-05-19",
660
- links: {
661
- card: "https://huggingface.co/MihaiPopa-1/CinnabarLM-1.4M-Base"
662
- }
663
- },
664
- {
665
- name: "Glint-0.4",
666
- org: "glintresearch",
667
- params: "1M",
668
- blimp: 58.5,
669
- arc: 31,
670
- wiki: 5.01,
671
- tokens: "10B",
672
- releaseDate: "2026-04-19",
673
- links: {
674
- card: "https://huggingface.co/Glint-Research/Glint-0.4"
675
- }
676
- },
677
- {
678
- name: "CinnabarLM 1.5M",
679
- org: "mihaipopa",
680
- params: "1.71M",
681
- blimp: 60.51,
682
- arc: 26.68,
683
- wiki: 4.23,
684
- tokens: "~50M",
685
- releaseDate: "2026-05-19",
686
- links: {
687
- card: "https://huggingface.co/MihaiPopa-1/CinnabarLM-1.5M-Base"
688
- }
689
- },
690
- {
691
- name: "PotentSulfurLM 500K",
692
- org: "mihaipopa",
693
- params: "587K",
694
- blimp: 59.01,
695
- arc: 27.06,
696
- wiki: 4.52,
697
- tokens: "~200M",
698
- releaseDate: "2026-05-27",
699
- links: {
700
- card: "https://huggingface.co/MihaiPopa-1/PotentSulfurLM-500K-Base"
701
- }
702
- },
703
- {
704
- name: "MicroLM2-1M",
705
- org: "cromia",
706
- params: "1.71M",
707
- blimp: 54.2,
708
- arc: 27.4,
709
- wiki: 4.82,
710
- tokens: "~4.5B",
711
- releaseDate: "2026-05-22",
712
- links: {
713
- card: "https://huggingface.co/CromIA/MicroLM2-1M"
714
- }
715
- },
716
- {
717
- name: "Glint-1",
718
- org: "glintresearch",
719
- params: "1M",
720
- blimp: 61.2,
721
- arc: 32,
722
- wiki: 4.45,
723
- tokens: "100B",
724
- releaseDate: "2026-05-02",
725
- links: {
726
- card: "https://huggingface.co/Glint-Research/Glint-1"
727
- }
728
- },
729
- {
730
- name: "Supra-Mini-v3",
731
- org: "supralabs",
732
- params: "468K",
733
- blimp: 55.3,
734
- arc: 27.3,
735
- wiki: 4.49,
736
- tokens: "—",
737
- releaseDate: "2026-05-14",
738
- links: {
739
- card: "https://huggingface.co/SupraLabs/Supra-Mini-v3-0.5M"
740
- }
741
- },
742
- {
743
- name: "Cosmos-T-80M",
744
- org: "wop",
745
- params: "79.7M",
746
- blimp: 50.47,
747
- arc: 27.82,
748
- wiki: 12.42,
749
- tokens: "~21M",
750
- releaseDate: "2026-05-30",
751
- links: {
752
- card: "https://huggingface.co/wop/Cosmos-T-80M"
753
- }
754
- },
755
- {
756
- name: "Cosmos-T2-80M-Test",
757
- org: "wop",
758
- params: "87.60M",
759
- blimp: 57.61,
760
- arc: 25,
761
- wiki: 11.24,
762
- tokens: "~18M",
763
- releaseDate: "2026-05-31",
764
- links: {
765
- card: "https://huggingface.co/wop/Cosmos-T2-80M-Test"
766
- }
767
- },
768
- {
769
- name: "Supra-Mini-v4",
770
- org: "supralabs",
771
- params: "2.62M",
772
- blimp: 60.7,
773
- arc: 31.5,
774
- wiki: 3.17,
775
- tokens: "—",
776
- releaseDate: "2026-05-14",
777
- links: {
778
- card: "https://huggingface.co/SupraLabs/Supra-Mini-v4-2M"
779
- }
780
- },
781
- {
782
- name: "CinnabarLM 4M",
783
- org: "mihaipopa",
784
- params: "4.23M",
785
- blimp: 62.87,
786
- arc: 27.36,
787
- wiki: 3.77,
788
- tokens: "~80M",
789
- releaseDate: "2026-05-05",
790
- links: {
791
- card: "https://huggingface.co/MihaiPopa-1/CinnabarLM-4M-Base"
792
- }
793
- },
794
- {
795
- name: "Cosmos-T2-Accelerate-beta",
796
- org: "wop",
797
- params: "5.03M",
798
- blimp: 54.3,
799
- arc: 26.3,
800
- wiki: 6.26,
801
- tokens: "~22M",
802
- releaseDate: "2026-06-02",
803
- links: {
804
- card: "https://huggingface.co/wop/Cosmos-T2-Accelerate-beta"
805
- }
806
- },
807
- {
808
- name: "Cosmos-T2A-low",
809
- org: "wop",
810
- params: "9.96M",
811
- blimp: 47.8,
812
- arc: 31,
813
- wiki: 5.31,
814
- tokens: "~46.7M",
815
- releaseDate: "2026-06-04",
816
- links: {
817
- card: "https://huggingface.co/wop/Cosmos-T2A-low"
818
- }
819
- },
820
- {
821
- name: "Cosmos-T2-Accelerate-Beta2",
822
- org: "wop",
823
- params: "9.96M",
824
- blimp: 69,
825
- arc: 28,
826
- wiki: 6.72,
827
- tokens: "~10M",
828
- releaseDate: "2026-06-03",
829
- links: {
830
- card: "https://huggingface.co/wop/Cosmos-T2-Accelerate-Beta2"
831
- }
832
- },
833
- {
834
- name: "StorySupra-10M",
835
- org: "supralabs",
836
- params: "12.6M",
837
- blimp: 61.47,
838
- arc: 28.45,
839
- wiki: 8.76,
840
- tokens: "—",
841
- releaseDate: "2026-05-15",
842
- links: {
843
- card: "https://huggingface.co/SupraLabs/StorySupra-10M"
844
- }
845
- },
846
- {
847
- name: "Supra-Mini-v5",
848
- org: "supralabs",
849
- params: "7.87M",
850
- blimp: 63.5,
851
- arc: 34.4,
852
- wiki: 2.73,
853
- tokens: "—",
854
- releaseDate: "2026-05-16",
855
- links: {
856
- card: "https://huggingface.co/SupraLabs/Supra-Mini-v5-8M"
857
- }
858
- },
859
- {
860
- name: "Cosmos-T2-Accelerate-Preview",
861
- org: "wop",
862
- params: "9.96M",
863
- blimp: 56.95,
864
- arc: 26.8,
865
- wiki: 6.73,
866
- tokens: "462M",
867
- releaseDate: "2026-06-01",
868
- links: {
869
- card: "https://huggingface.co/wop/Cosmos-T2-Accelerate-Preview",
870
- demo: "https://huggingface.co/spaces/wop/Cosmos-T2-Chat"
871
- }
872
- },
873
- {
874
- name: "Glint-1.3 (merged)",
875
- org: "glintresearch",
876
- params: "982K",
877
- blimp: 68.7,
878
- arc: 32.5,
879
- wiki: 3.08,
880
- tokens: "100B",
881
- releaseDate: "2026-05-13",
882
- links: {
883
- card: "https://huggingface.co/Glint-Research/Glint-1.3"
884
- }
885
- },
886
- {
887
- name: "Supra-Mini-v6",
888
- org: "supralabs",
889
- params: "1.41M",
890
- blimp: 61.86,
891
- arc: 30.26,
892
- wiki: 3,
893
- tokens: "—",
894
- releaseDate: "2026-05-30",
895
- links: {
896
- card: "https://huggingface.co/SupraLabs/Supra-Mini-v6-1M"
897
- }
898
- },
899
- {
900
- name: "GPT-S-5M",
901
- org: "axiomiclabs",
902
- params: "5.16M",
903
- blimp: 72.27,
904
- arc: 35.69,
905
- wiki: 2.57,
906
- tokens: "25B",
907
- releaseDate: "2026-05-19",
908
- links: {
909
- card: "https://huggingface.co/AxiomicLabs/GPT-S-5M"
910
- }
911
- },
912
- {
913
- name: "Archaea-74M",
914
- org: "GODELEV",
915
- params: "74M",
916
- blimp: 74.91,
917
- arc: 39.06,
918
- wiki: 2.2,
919
- tokens: "~1.2B",
920
- releaseDate: "2026-06-01",
921
- links: {
922
- card: "https://huggingface.co/GODELEV/Archaea-74M"
923
- }
924
- },
925
- {
926
- name: "Supra-50M-Instruct",
927
- org: "supralabs",
928
- params: "51.8M",
929
- blimp: 76.3,
930
- arc: 52.2,
931
- wiki: 2.56,
932
- tokens: "20B",
933
- releaseDate: "2026-05-21",
934
- links: {
935
- card: "https://huggingface.co/SupraLabs/Supra-50M-Instruct",
936
- base: "https://huggingface.co/SupraLabs/Supra-50M-Base"
937
- }
938
- },
939
- {
940
- name: "Michel-Tiny",
941
- org: "finnianx",
942
- params: "55.7M",
943
- blimp: 74.08,
944
- arc: 37.33,
945
- wiki: 2.29,
946
- tokens: "1.3B",
947
- releaseDate: "2026-06-05",
948
- links: {
949
- card: "https://huggingface.co/finnianx/michel-tiny"
950
- }
951
- },
952
- {
953
- name: "Gros-Michel-90m-Base",
954
- org: "finnianx",
955
- params: "91.1M",
956
- blimp: 78.35,
957
- arc: 41.5,
958
- wiki: 2.07,
959
- tokens: "6.5B",
960
- releaseDate: "2026-06-28",
961
- links: {
962
- card: "https://huggingface.co/finnianx/Gros-Michel-90m-Base"
963
- }
964
- },
965
- {
966
- name: "Michel-Nano-v2",
967
- org: "finnianx",
968
- params: "9.94M",
969
- blimp: 72.52,
970
- arc: 35.9,
971
- wiki: 2.46,
972
- tokens: "6.5B",
973
- releaseDate: "2026-06-13",
974
- links: {
975
- card: "https://huggingface.co/finnianx/michel-nano-v2"
976
- }
977
- },
978
- {
979
- name: "Michel-Nano",
980
- org: "finnianx",
981
- params: "5.96M",
982
- blimp: 65.23,
983
- arc: 33.38,
984
- wiki: 3.25,
985
- tokens: "1.1B",
986
- releaseDate: "2026-06-10",
987
- links: {
988
- card: "https://huggingface.co/finnianx/michel-nano"
989
- }
990
- },
991
- {
992
- name: "Gros-Michel-90m-Base-v2",
993
- org: "finnianx",
994
- params: "95M",
995
- blimp: 80.20,
996
- arc: 43.18,
997
- wiki: 2.08,
998
- tokens: "9B",
999
- releaseDate: "2026-07-06",
1000
- links: {
1001
- card: "https://huggingface.co/finnianx/Gros-Michel-90m-Base-v2"
1002
- }
1003
- },
1004
- {
1005
- name: "Michel-Micro",
1006
- org: "finnianx",
1007
- params: "28.4M",
1008
- blimp: 69.75,
1009
- arc: 38.59,
1010
- wiki: 2.3,
1011
- tokens: "2.6B",
1012
- releaseDate: "2026-06-09",
1013
- links: {
1014
- card: "https://huggingface.co/finnianx/michel-micro"
1015
- }
1016
- },
1017
- {
1018
- name: "Ivme-Conversate-v1-Base",
1019
- org: "ivmelabs",
1020
- params: "22.03M",
1021
- blimp: 61.4,
1022
- arc: 30.85,
1023
- wiki: 3.14,
1024
- tokens: "~1.57B",
1025
- releaseDate: "2026-06-05",
1026
- links: {
1027
- card: "https://huggingface.co/IvmeLabs/Ivme-Conversate-22M-Base"
1028
- }
1029
- },
1030
- {
1031
- name: "kirk-tung",
1032
- org: "rtc",
1033
- params: "53.1M",
1034
- blimp: 72.81,
1035
- arc: 30.3,
1036
- wiki: 2.38,
1037
- tokens: "1.1B",
1038
- releaseDate: "2026-06-09",
1039
- links: {
1040
- card: "https://huggingface.co/rtc2022/kirk-tung"
1041
- }
1042
- },
1043
- {
1044
- name: "Supra-Mini-0.1M",
1045
- org: "supralabs",
1046
- params: "117K",
1047
- blimp: 51.77,
1048
- arc: 26.39,
1049
- wiki: 25.17,
1050
- tokens: "500M",
1051
- releaseDate: "2026-05-18",
1052
- links: {
1053
- card: "https://huggingface.co/SupraLabs/Supra-Mini-0.1M"
1054
- }
1055
- },
1056
- {
1057
- name: "Supra-50M-Base",
1058
- org: "supralabs",
1059
- params: "51.8M",
1060
- blimp: 76.3,
1061
- arc: 46.0,
1062
- wiki: 2.04,
1063
- tokens: "20B",
1064
- releaseDate: "2026-05-27",
1065
- links: {
1066
- card: "https://huggingface.co/SupraLabs/Supra-50M-Base"
1067
- }
1068
- },
1069
- {
1070
- name: "Supra-50M-Reasoning",
1071
- org: "supralabs",
1072
- params: "51.8M",
1073
- blimp: 64.14,
1074
- arc: 45.16,
1075
- wiki: 2.6,
1076
- tokens: "20B",
1077
- releaseDate: "2026-06-04",
1078
- links: {
1079
- card: "https://huggingface.co/SupraLabs/Supra-50M-Reasoning",
1080
- demo: "https://huggingface.co/spaces/SupraLabs/Supra-50M-Reasoning-Demo"
1081
- }
1082
- },
1083
- {
1084
- name: "Escarda-86M-Base",
1085
- org: "quazim0t0",
1086
- params: "85.7M",
1087
- blimp: 71.44,
1088
- arc: 38.01,
1089
- wiki: 2.2228,
1090
- tokens: "~20B",
1091
- releaseDate: "2026-05-22",
1092
- links: {
1093
- card: "https://huggingface.co/Quazim0t0/Escarda-86M-Base",
1094
- discussion: "https://huggingface.co/spaces/Glint-Research/Tiny-ML-Leaderboard/discussions/21"
1095
- }
1096
- },
1097
- {
1098
- name: "KeyLM-75M",
1099
- org: "minimalabs",
1100
- params: "75M",
1101
- blimp: 76.10,
1102
- arc: 35.65,
1103
- wiki: 2.08,
1104
- tokens: "~18B",
1105
- releaseDate: "2026-05-29",
1106
- links: {
1107
- card: "https://huggingface.co/MinimaLabs/KeyLM-75M"
1108
- }
1109
-
1110
- },
1111
- {
1112
- name: "KeyLM-75M-Instruct",
1113
- org: "minimalabs",
1114
- params: "75M",
1115
- blimp: 76.02,
1116
- arc: 39.10,
1117
- wiki: 2.17,
1118
- tokens: "~18B",
1119
- releaseDate: "2026-05-29",
1120
- links: {
1121
- card: "https://huggingface.co/MinimaLabs/KeyLM-75M-Instruct",
1122
- base: "https://huggingface.co/MinimaLabs/KeyLM-75M"
1123
- }
1124
- },
1125
- {
1126
- name: "Glimmer 1",
1127
- org: "glintresearch",
1128
- params: "11.9K",
1129
- blimp: 52.43,
1130
- arc: 25.46,
1131
- wiki: 14.73,
1132
- tokens: "500K",
1133
- releaseDate: "2026-06-16",
1134
- links: {
1135
- card: "https://huggingface.co/Glint-Research/Glimmer-1-Base"
1136
- }
1137
- },
1138
- {
1139
- name: "Echo88-150M-Instruct",
1140
- org: "exnivo",
1141
- params: "150M",
1142
- blimp: 72.67,
1143
- arc: 31.40,
1144
- wiki: 2.45,
1145
- tokens: "~1.47B",
1146
- releaseDate: "2026-05-05",
1147
- links: {
1148
- card: "https://huggingface.co/exnivo/Echo88-150M-Instruct"
1149
- }
1150
- },
1151
- {
1152
- name: "Byrne-86M-Base",
1153
- org: "quazim0t0",
1154
- params: "86M",
1155
- blimp: 73.56,
1156
- arc: 39.31,
1157
- wiki: 2.3753,
1158
- tokens: "—",
1159
- releaseDate: "2026-06-18",
1160
- links: {
1161
- card: "https://huggingface.co/Quazim0t0/Byrne-86M-Base",
1162
- base: "https://huggingface.co/Quazim0t0/Byrne-86M"
1163
- }
1164
- },
1165
- {
1166
- name: "Byrne-86M",
1167
- org: "quazim0t0",
1168
- params: "86M",
1169
- blimp: 70.33,
1170
- arc: 34.68,
1171
- wiki: 2.6839,
1172
- tokens: "—",
1173
- releaseDate: "2026-06-18",
1174
- links: {
1175
- card: "https://huggingface.co/Quazim0t0/Byrne-86M",
1176
- base: "https://huggingface.co/Quazim0t0/Byrne-86M-Base"
1177
- }
1178
- },
1179
- {
1180
- name: "Blink-1-Base",
1181
- org: "glintresearch",
1182
- params: "1.09K",
1183
- blimp: 52.84,
1184
- arc: 26.60,
1185
- wiki: 71.35,
1186
- tokens: "100B",
1187
- releaseDate: "2026-06-21",
1188
- links: {
1189
- card: "https://huggingface.co/Glint-Research/Blink-1-Base"
1190
- }
1191
- },
1192
- {
1193
- name: "Blink-1-Instruct",
1194
- org: "glintresearch",
1195
- params: "1.09K",
1196
- blimp: 52.46,
1197
- arc: 26.80,
1198
- wiki: 70.44,
1199
- tokens: "100B",
1200
- releaseDate: "2026-06-21",
1201
- links: {
1202
- card: "https://huggingface.co/Glint-Research/Blink-1-Base",
1203
- base: "https://huggingface.co/Glint-Research/Blink-1-Base"
1204
- }
1205
- },
1206
- {
1207
- name: "Dumb-1.2-Preview-0625",
1208
- org: "56m",
1209
- params: "34.6M",
1210
- blimp: 64.05,
1211
- arc: 32.79,
1212
- wiki: 2.875,
1213
- tokens: "~115~165M",
1214
- releaseDate: "2026-06-25",
1215
- links: {
1216
- card: "https://huggingface.co/56m/Dumb-1.2-Preview-0625"
1217
- }
1218
- },
1219
- {
1220
- name: "Dumb-1.2-RC1",
1221
- org: "56m",
1222
- params: "34.6M",
1223
- blimp: 64.87,
1224
- arc: 34.13,
1225
- wiki: 2.838,
1226
- tokens: "210M",
1227
- releaseDate: "2026-06-28",
1228
- links: {
1229
- card: "https://huggingface.co/56m/Dumb-1.2-RC1"
1230
- }
1231
- },
1232
- {
1233
- name: "GPT-X2-125M",
1234
- org: "axiomiclabs",
1235
- params: "125M",
1236
- blimp: 81.28,
1237
- arc: 57.07,
1238
- wiki: 1.86,
1239
- tokens: "75B",
1240
- releaseDate: "2026-04-22",
1241
- links: {
1242
- card: "https://huggingface.co/AxiomicLabs/GPT-X2-125M"
1243
- }
1244
- },
1245
- {
1246
- name: "Unknown-2026-0628",
1247
- org: "unknown",
1248
- params: "34.6M",
1249
- blimp: 64.28,
1250
- arc: 32.09,
1251
- wiki: 2.872,
1252
- tokens: "—",
1253
- links: {}
1254
- },
1255
- {
1256
- name: "TinyMoE-100m-2x8",
1257
- org: "flamef0x",
1258
- params: "99.8M",
1259
- blimp: 61.13,
1260
- arc: 25.88,
1261
- wiki: 3.878,
1262
- tokens: "~625M",
1263
- releaseDate: "2026-06-15",
1264
- links: {
1265
- card: "https://huggingface.co/FlameF0X/TinyMoE-100m-2x8"
1266
- }
1267
- },
1268
- {
1269
- name: "TinyMoE-100m-2x8-retrained",
1270
- org: "flamef0x",
1271
- params: "99.8M",
1272
- blimp: 66.01,
1273
- arc: 33.88,
1274
- wiki: 2.879,
1275
- tokens: "—",
1276
- releaseDate: "2026-07-05",
1277
- links: {
1278
- card: "https://huggingface.co/FlameF0X/TinyMoE-100m-2x8-retrained"
1279
- }
1280
- },
1281
- {
1282
- name: "SRLM-1M",
1283
- org: "martico2432",
1284
- params: "904k",
1285
- blimp: 53.1,
1286
- arc: 28.66,
1287
- wiki: 4.455,
1288
- tokens: "~16M",
1289
- releaseDate: "2026-07-04",
1290
- links: {
1291
- card: "https://huggingface.co/Martico2432/srlm-1m"
1292
- }
1293
- },
1294
- {
1295
- name: "CreekwardGoat-500K",
1296
- org: "wonderfulmonkey",
1297
- params: "500k",
1298
- blimp: 60.61,
1299
- arc: 30.35,
1300
- wiki: 4.1228,
1301
- tokens: "300M",
1302
- releaseDate: "2026-07-16",
1303
- links: {
1304
- card: "https://huggingface.co/wonderfulmonkey/CreekwardGoat-500K"
1305
- }
1306
- },
1307
- {
1308
- name: "Ivme-Conversate-v2-Base",
1309
- org: "ivmelabs",
1310
- params: "23.85M",
1311
- blimp: 75.09,
1312
- arc: 39.98,
1313
- wiki: 2.2250,
1314
- tokens: "~12.85B",
1315
- releaseDate: "2026-07-07",
1316
- links: {
1317
- card: "https://huggingface.co/IvmeLabs/Ivme-Conversate-v2-Base",
1318
- demo: "https://huggingface.co/spaces/IvmeLabs/Ivme-Conversate-Demo"
1319
- }
1320
- },
1321
-
1322
- ];
1323
-
1324
- const orgNameMap = {
1325
- glintresearch: 'Glint Research',
1326
- supralabs: 'SupraLabs',
1327
- axiomiclabs: 'Axiomic Labs',
1328
- mihaipopa: 'Mihai Popa',
1329
- cromia: 'CromIA',
1330
- wop: 'wop',
1331
- GODELEV: 'GODELEV',
1332
- finnianx: 'finnianx',
1333
- ivmelabs: 'IvmeLabs',
1334
- rtc: 'RTC',
1335
- huggingface: 'HuggingFace',
1336
- facebook: 'Meta',
1337
- openai: 'OpenAI',
1338
- eleutherai: 'EleutherAI',
1339
- stentor: 'StentorLabs',
1340
- eclipsesenpai: 'Eclipse-Senpai',
1341
- minimalabs: 'Minima Labs',
1342
- sandroeth: 'Sandroeth',
1343
- thingai: 'ThingAI',
1344
- veyraai: 'veyra-ai',
1345
- fromzero: 'FromZero',
1346
- joelhenwang: 'joelhenwang',
1347
- jhuclsp: 'JHU CLSP',
1348
- liodonai: 'Liodon AI',
1349
- smalldoge: 'SmallDoge',
1350
- quazim0t0: 'Quazim0t0',
1351
- small56ai: 'Small56.AI',
1352
- lhtechai: 'LH-Tech-AI',
1353
- harleyml: 'Harley ML',
1354
- exnivo: 'Exnivo',
1355
- '56m': '56m',
1356
- unknown: 'Unknown',
1357
- flamef0x: 'FlameF0X',
1358
- martico2432: 'Martico2432',
1359
- wonderfulmonkey: 'Wonderful Monkey'
1360
- };
1361
-
1362
- const colorMap = {
1363
- glintresearch: '#3fb950',
1364
- supralabs: '#58a6ff',
1365
- axiomiclabs: '#c2b6ff',
1366
- mihaipopa: '#93c6aa',
1367
- cromia: '#d0d7de',
1368
- wop: '#ff9b50',
1369
- GODELEV: '#1a56db',
1370
- finnianx: '#06b6d4',
1371
- ivmelabs: '#ff0000',
1372
- rtc: '#e8a87c',
1373
- huggingface: '#ffcc00',
1374
- facebook: '#1877f2',
1375
- openai: '#10a37f',
1376
- eleutherai: '#ef4444',
1377
- stentor: '#ff6bcb',
1378
- eclipsesenpai: '#06b6d4',
1379
- minimalabs: '#4961e6',
1380
- sandroeth: '#84cc16',
1381
- thingai: '#b45309',
1382
- veyraai: '#d45672',
1383
- fromzero: '#d2b48c',
1384
- joelhenwang: '#9ca3af',
1385
- jhuclsp: '#2563eb',
1386
- liodonai: '#6366f1',
1387
- smalldoge: '#ec4899',
1388
- quazim0t0: '#0ea5e9',
1389
- small56ai: '#22c55e',
1390
- lhtechai: '#f97316',
1391
- exnivo: '#8B4513',
1392
- unknown: '#fbbf24',
1393
- '56m': '#a855f7',
1394
- flamef0x: '#cc5218',
1395
- martico2432: '#6cf01a',
1396
- wonderfulmonkey: '#f0f8ff'
1397
- };
1398
-
1399
- const bgMap = {};
1400
- Object.keys(colorMap).forEach(k => {
1401
- const c = colorMap[k];
1402
- const r = parseInt(c.slice(1, 3), 16);
1403
- const g = parseInt(c.slice(3, 5), 16);
1404
- const b = parseInt(c.slice(5, 7), 16);
1405
- bgMap[k] = `rgba(${r},${g},${b},0.7)`;
1406
- });
1407
-
1408
- function parseParams(s) {
1409
- if (!s || typeof s !== 'string') return NaN;
1410
- const u = s.toUpperCase().replace(/,/g, '');
1411
- if (u.endsWith('B')) return parseFloat(u) * 1e9;
1412
- if (u.endsWith('M')) return parseFloat(u) * 1e6;
1413
- if (u.endsWith('K')) return parseFloat(u) * 1e3;
1414
- return parseFloat(u) || NaN;
1415
- }
1416
-
1417
- const WIKI_PPL_CAP = 500;
1418
- const wikiScoreLogs = models
1419
- .filter(m => m.wiki !== null && typeof m.wiki === 'number' && m.wiki > 0)
1420
- .map(m => Math.log(Math.min(m.wiki, WIKI_PPL_CAP)));
1421
- const wikiMinLog = Math.min(...wikiScoreLogs);
1422
- const wikiMaxLog = Math.max(...wikiScoreLogs);
1423
-
1424
- function getWikiScore(m) {
1425
- if (m.wiki === null || typeof m.wiki !== 'number' || m.wiki <= 0 || wikiMinLog === wikiMaxLog) return null;
1426
- const cappedLog = Math.log(Math.min(m.wiki, WIKI_PPL_CAP));
1427
- const normalized = 1 - ((cappedLog - wikiMinLog) / (wikiMaxLog - wikiMinLog));
1428
- return Math.max(0, Math.min(1, normalized)) * 100;
1429
- }
1430
-
1431
- function getScore(m) {
1432
- const wikiScore = getWikiScore(m);
1433
- const hasBlimp = typeof m.blimp === 'number';
1434
- const hasArc = typeof m.arc === 'number';
1435
- const hasWiki = wikiScore !== null;
1436
- if (!hasBlimp && !hasArc && !hasWiki) return -1;
1437
- const blimpScore = hasBlimp ? m.blimp : 0;
1438
- const arcScore = hasArc ? m.arc : 0;
1439
- const wikiVal = hasWiki ? wikiScore : 0;
1440
- return (blimpScore + arcScore + wikiVal) / 3;
1441
- }
1442
-
1443
- function getEfficiencyScore(m) {
1444
- const score = getScore(m);
1445
- if (score <= 0) return -1;
1446
- return score;
1447
- }
1448
-
1449
- function orgTint(orgKey, alpha) {
1450
- const c = colorMap[orgKey];
1451
- const r = parseInt(c.slice(1, 3), 16);
1452
- const g = parseInt(c.slice(3, 5), 16);
1453
- const b = parseInt(c.slice(5, 7), 16);
1454
- return `rgba(${r},${g},${b},${alpha})`;
1455
- }
1456
-
1457
- const worstGreen = [255, 255, 255];
1458
- const bestGreen = [63, 185, 80];
1459
-
1460
- function getColor(value, min, max, lowerIsBetter, useLog = false) {
1461
- if (value === null || isNaN(value) || min === max) return '';
1462
- let v = value, mn = min, mx = max;
1463
- if (useLog) { v = Math.log(v); mn = Math.log(mn); mx = Math.log(mx); }
1464
- let p = (v - mn) / (mx - mn);
1465
- if (lowerIsBetter) p = 1 - p;
1466
- const a = Math.pow(Math.max(0, Math.min(1, p)), 2.5);
1467
- const r = Math.round(worstGreen[0] + (bestGreen[0] - worstGreen[0]) * a);
1468
- const g = Math.round(worstGreen[1] + (bestGreen[1] - worstGreen[1]) * a);
1469
- const b = Math.round(worstGreen[2] + (bestGreen[2] - worstGreen[2]) * a);
1470
- return `color:rgb(${r},${g},${b})`;
1471
- }
1472
-
1473
- /* ─── Stats ─── */
1474
-
1475
- function renderStats() {
1476
- const orgs = new Set(models.map(m => m.org));
1477
- const blimps = models.filter(m => m.blimp).map(m => m.blimp);
1478
- const arcs = models.filter(m => m.arc).map(m => m.arc);
1479
- const bestB = Math.max(...blimps);
1480
- const bestA = Math.max(...arcs);
1481
- document.getElementById('stat-row').innerHTML = `
1482
- <div class="stat-pill"><div class="label">Models</div><div class="value">${models.length}</div><div class="sub">On leaderboard</div></div>
1483
- <div class="stat-pill"><div class="label">Organizations</div><div class="value">${orgs.size}</div><div class="sub">Contributing</div></div>
1484
- <div class="stat-pill"><div class="label">Best BLiMP</div><div class="value" style="color:var(--green)">${bestB}%</div><div class="sub">${models.find(m => m.blimp === bestB).name}</div></div>
1485
- <div class="stat-pill"><div class="label">Best ARC-E</div><div class="value" style="color:var(--green)">${bestA}%</div><div class="sub">${models.find(m => m.arc === bestA).name}</div></div>
1486
- `;
1487
- document.getElementById('model-count-badge').textContent = `${models.length} models`;
1488
- }
1489
-
1490
- /* ─── Filters ─── */
1491
-
1492
- let activeFilter = 'all';
1493
- let activeSort = 'efficiency';
1494
-
1495
- const sortComparators = {
1496
- score: (a, b) => getScore(b) - getScore(a),
1497
- wiki: (a, b) => {
1498
- if (a.wiki == null) return 1;
1499
- if (b.wiki == null) return -1;
1500
- return a.wiki - b.wiki;
1501
- },
1502
- blimp: (a, b) => {
1503
- if (a.blimp == null) return 1;
1504
- if (b.blimp == null) return -1;
1505
- return b.blimp - a.blimp;
1506
- },
1507
- arc: (a, b) => {
1508
- if (a.arc == null) return 1;
1509
- if (b.arc == null) return -1;
1510
- return b.arc - a.arc;
1511
- },
1512
- efficiency: (a, b) => getEfficiencyScore(b) - getEfficiencyScore(a),
1513
- params: (a, b) => parseParams(a.params) - parseParams(b.params),
1514
- date: (a, b) => {
1515
- if (!a.releaseDate) return 1;
1516
- if (!b.releaseDate) return -1;
1517
- return new Date(b.releaseDate) - new Date(a.releaseDate);
1518
- }
1519
- };
1520
-
1521
- function sizeBucket(params) {
1522
- const n = parseParams(params);
1523
- if (isNaN(n) || n < 1e6) return 'small';
1524
- if (n < 1e7) return 'medium';
1525
- return 'large';
1526
- }
1527
-
1528
- function matchesFilter(m) {
1529
- if (activeFilter === 'all') return true;
1530
- if (activeFilter === 'small' || activeFilter === 'medium' || activeFilter === 'large') {
1531
- return sizeBucket(m.params) === activeFilter;
1532
- }
1533
- return m.org === activeFilter;
1534
- }
1535
-
1536
- function getFilteredModels() {
1537
- return models.filter(matchesFilter);
1538
- }
1539
-
1540
- function setupSortControl() {
1541
- const sel = document.getElementById('sort-select');
1542
- if (!sel) return;
1543
- sel.value = activeSort;
1544
- sel.addEventListener('change', e => {
1545
- activeSort = e.target.value;
1546
- renderTable();
1547
- });
1548
- }
1549
-
1550
- function renderFilteredViews() {
1551
- renderTable();
1552
- buildLegend();
1553
- renderTimeline();
1554
- buildBarChart('blimpChart', 'blimp', false);
1555
- buildBarChart('arcChart', 'arc', false);
1556
- buildWikiChart();
1557
- buildEfficiencyChart();
1558
- buildOrgCountChart();
1559
- }
1560
-
1561
- function buildFilters() {
1562
- const tb = document.getElementById('org-filters');
1563
- if (!tb) return;
1564
-
1565
- const sizeChips = [
1566
- { key: 'all', label: 'All' },
1567
- { key: 'small', label: '< 1M' },
1568
- { key: 'medium', label: '1–10M' },
1569
- { key: 'large', label: '10M+' }
1570
- ];
1571
- sizeChips.forEach(({ key, label }) => {
1572
- const c = document.createElement('div');
1573
- c.className = 'filter-chip' + (key === 'all' ? ' active' : '');
1574
- c.dataset.filter = key;
1575
- c.textContent = label;
1576
- tb.appendChild(c);
1577
- });
1578
-
1579
- const sep = document.createElement('div');
1580
- sep.className = 'tl-sep';
1581
- tb.appendChild(sep);
1582
-
1583
- const orgs = [...new Set(models.map(m => m.org))];
1584
- orgs.forEach(org => {
1585
- const c = document.createElement('div');
1586
- c.className = 'filter-chip';
1587
- c.dataset.filter = org;
1588
- c.innerHTML = `<span class="dot" style="background:${colorMap[org]}"></span>${orgNameMap[org]}`;
1589
- tb.appendChild(c);
1590
- });
1591
-
1592
- tb.addEventListener('click', e => {
1593
- const chip = e.target.closest('.filter-chip');
1594
- if (!chip) return;
1595
- tb.querySelectorAll('.filter-chip').forEach(c => c.classList.remove('active'));
1596
- chip.classList.add('active');
1597
- activeFilter = chip.dataset.filter;
1598
- renderFilteredViews();
1599
- });
1600
- }
1601
-
1602
- /* ─── Table ─── */
1603
-
1604
- function formatDate(dateStr) {
1605
- if (!dateStr) return '—';
1606
- const date = new Date(dateStr);
1607
- return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
1608
- }
1609
-
1610
- function renderTable() {
1611
- const tbody = document.getElementById('leaderboard-body');
1612
- const cmp = sortComparators[activeSort] || sortComparators.score;
1613
- const filtered = getFilteredModels().sort(cmp);
1614
- document.getElementById('model-count-badge').textContent = activeFilter === 'all'
1615
- ? `${models.length} models`
1616
- : `${filtered.length} of ${models.length} models`;
1617
- const blimps = models.filter(m => m.blimp).map(m => m.blimp);
1618
- const arcs = models.filter(m => m.arc).map(m => m.arc);
1619
- const wikis = models.filter(m => m.wiki).map(m => m.wiki);
1620
- const effs = models.filter(m => getEfficiencyScore(m) >= 0).map(m => getEfficiencyScore(m));
1621
- const bMin = Math.min(...blimps), bMax = Math.max(...blimps);
1622
- const aMin = Math.min(...arcs), aMax = Math.max(...arcs);
1623
- const wMin = Math.min(...wikis), wMax = Math.max(...wikis);
1624
- const eMin = Math.min(...effs), eMax = Math.max(...effs);
1625
-
1626
- tbody.innerHTML = filtered.map((m, idx) => {
1627
- const oc = colorMap[m.org];
1628
- const orgBg = orgTint(m.org, 0.15);
1629
- const isBestBlimp = m.blimp && m.blimp === bMax;
1630
- const isBestArc = m.arc && m.arc === aMax;
1631
- const isBestWiki = m.wiki && m.wiki === wMin;
1632
- const rank = idx + 1;
1633
- const rankClass = rank <= 3 ? ` rank-${rank}` : '';
1634
- return `<tr class="lb-row" onmouseenter="this.classList.add('hover')" onmouseleave="this.classList.remove('hover')">
1635
- <td class="cell-rank${rankClass}">#${rank}</td>
1636
- <td class="cell-model">
1637
- <div class="model-name">${m.name}</div>
1638
- </td>
1639
- <td><span class="org-tag" style="background:${orgBg};color:${oc}"><span class="org-dot" style="background:${oc}"></span>${orgNameMap[m.org]}</span></td>
1640
- <td>${m.params}</td>
1641
- <td class="cell-metric" style="${getColor(getEfficiencyScore(m), eMin, eMax, false)}">
1642
- ${getEfficiencyScore(m) >= 0
1643
- ? `<span class="metric-val${getEfficiencyScore(m) >= eMax ? ' best' : ''}">${getEfficiencyScore(m).toFixed(2)}</span>`
1644
- : '<span class="metric-na">TBD</span>'}
1645
- </td>
1646
- <td class="cell-metric ${m.wiki === null ? '' : ''}" style="${getColor(m.wiki, wMin, wMax, true, true)}">
1647
- ${m.wiki !== null
1648
- ? `<span class="metric-val${isBestWiki ? ' best' : ''}">${m.wiki}</span>`
1649
- : '<span class="metric-na">TBD</span>'}
1650
- </td>
1651
- <td class="cell-metric" style="${getColor(m.blimp, bMin, bMax, false)}">
1652
- ${m.blimp !== null
1653
- ? `<span class="metric-val${isBestBlimp ? ' best' : ''}">${m.blimp}%</span>`
1654
- : '<span class="metric-na">TBD</span>'}
1655
- </td>
1656
- <td class="cell-metric" style="${getColor(m.arc, aMin, aMax, false)}">
1657
- ${m.arc !== null
1658
- ? `<span class="metric-val${isBestArc ? ' best' : ''}">${m.arc}%</span>`
1659
- : '<span class="metric-na">TBD</span>'}
1660
- </td>
1661
- <td class="cell-tokens">${m.tokens}</td>
1662
- <td class="cell-date">${formatDate(m.releaseDate)}</td>
1663
- <td class="cell-links">
1664
- ${m.links.card ? `<a href="${m.links.card}" target="_blank">card</a>` : '<span class="metric-na">—</span>'}
1665
- ${m.links.base ? `<a href="${m.links.base}" target="_blank">base</a>` : ''}
1666
- ${m.links.demo ? `<a href="${m.links.demo}" target="_blank">demo</a>` : ''}
1667
- </td>
1668
- </tr>`;
1669
- }).join('');
1670
- }
1671
-
1672
- /* ─── Legend ─── */
1673
-
1674
- function buildLegend() {
1675
- const bar = document.getElementById('legend-bar');
1676
- const orgs = [...new Set(getFilteredModels().map(m => m.org))];
1677
- bar.innerHTML = orgs.map(org =>
1678
- `<span class="legend-item"><span class="ldot" style="background:${colorMap[org]}"></span>${orgNameMap[org]}</span>`
1679
- ).join('');
1680
- }
1681
-
1682
- /* ─── Chart defaults ─── */
1683
-
1684
- Chart.defaults.color = '#8b949e';
1685
- Chart.defaults.borderColor = 'rgba(255,255,255,0.06)';
1686
- Chart.defaults.font.family = "-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif";
1687
- Chart.defaults.font.size = 11;
1688
- Chart.defaults.plugins.legend.display = false;
1689
-
1690
- const tooltipStyle = {
1691
- backgroundColor: '#1c2129',
1692
- titleColor: '#c9d1d9',
1693
- bodyColor: '#8b949e',
1694
- borderColor: '#30363d',
1695
- borderWidth: 1,
1696
- cornerRadius: 8,
1697
- padding: 10,
1698
- displayColors: false
1699
- };
1700
-
1701
- /* ─── Timeline ─── */
1702
-
1703
- function renderTimeline() {
1704
- const container = document.getElementById('timeline-list');
1705
- if (!container) return;
1706
-
1707
- const sorted = getFilteredModels()
1708
- .filter(m => m.releaseDate)
1709
- .sort((a, b) => new Date(b.releaseDate) - new Date(a.releaseDate));
1710
-
1711
- const monthKey = d => {
1712
- const [y, m] = d.split('-');
1713
- return `${y}-${m}`;
1714
- };
1715
- const monthLabel = key => {
1716
- const [y, m] = key.split('-');
1717
- const dt = new Date(parseInt(y), parseInt(m) - 1, 1);
1718
- return dt.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });
1719
- };
1720
- const dayLabel = d => {
1721
- const [y, m, day] = d.split('-').map(Number);
1722
- const dt = new Date(y, m - 1, day);
1723
- return dt.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
1724
- };
1725
-
1726
- if (sorted.length === 0) {
1727
- container.innerHTML = '<div class="tl-empty">No models match this filter.</div>';
1728
- return;
1729
- }
1730
-
1731
- const groups = {};
1732
- sorted.forEach(m => {
1733
- const k = monthKey(m.releaseDate);
1734
- (groups[k] = groups[k] || []).push(m);
1735
- });
1736
-
1737
- container.innerHTML = Object.keys(groups).map(key => {
1738
- const items = groups[key];
1739
- const rows = items.map(m => {
1740
- const oc = colorMap[m.org];
1741
- const orgBg = orgTint(m.org, 0.15);
1742
- return `<div class="tl-row" style="--org-color:${oc}">
1743
- <div class="tl-date">${dayLabel(m.releaseDate)}</div>
1744
- <div class="tl-name">
1745
- <a href="${m.links.card}" target="_blank" rel="noopener">${m.name}</a>
1746
- </div>
1747
- <div class="tl-params">${m.params} params</div>
1748
- <div class="tl-org" style="background:${orgBg};color:${oc}">${orgNameMap[m.org]}</div>
1749
- </div>`;
1750
- }).join('');
1751
- return `<div class="tl-month">
1752
- <span>${monthLabel(key)}</span>
1753
- <span class="tl-month-count">${items.length} model${items.length === 1 ? '' : 's'}</span>
1754
- </div>${rows}`;
1755
- }).join('');
1756
- }
1757
-
1758
- /* ─── Bar charts ─── */
1759
-
1760
- function buildBarChart(canvasId, metric, reverse) {
1761
- const canvas = document.getElementById(canvasId);
1762
- const existing = Chart.getChart(canvas);
1763
- if (existing) existing.destroy();
1764
-
1765
- const fmt = v => v.toFixed(1) + '%';
1766
- const sorted = getFilteredModels()
1767
- .filter(d => d[metric] !== null && typeof d[metric] === 'number')
1768
- .sort((a, b) => reverse ? a[metric] - b[metric] : b[metric] - a[metric]);
1769
-
1770
- new Chart(canvas, {
1771
- type: 'bar',
1772
- data: {
1773
- labels: sorted.map(d => d.name),
1774
- datasets: [{
1775
- data: sorted.map(d => d[metric]),
1776
- backgroundColor: sorted.map(d => bgMap[d.org]),
1777
- borderColor: sorted.map(d => colorMap[d.org]),
1778
- borderWidth: 1,
1779
- borderRadius: 3,
1780
- borderSkipped: false
1781
- }]
1782
- },
1783
- options: {
1784
- indexAxis: 'y',
1785
- responsive: true,
1786
- maintainAspectRatio: false,
1787
- animation: { duration: 600, easing: 'easeOutQuart' },
1788
- plugins: {
1789
- tooltip: {
1790
- callbacks: { label: ctx => fmt(ctx.parsed.x) },
1791
- ...tooltipStyle
1792
- }
1793
- },
1794
- scales: {
1795
- x: {
1796
- beginAtZero: true,
1797
- grid: { drawBorder: false },
1798
- ticks: { callback: v => v + '%' }
1799
- },
1800
- y: {
1801
- grid: { display: false },
1802
- ticks: {
1803
- font: { size: 9 },
1804
- autoSkip: false,
1805
- callback: function(v) {
1806
- const l = this.getLabelForValue(v);
1807
- return l.length > 18 ? l.slice(0, 17) + '…' : l;
1808
- }
1809
- }
1810
- }
1811
- }
1812
- }
1813
- });
1814
- }
1815
-
1816
- /* ─── WikiText-2 Bubble ─── */
1817
-
1818
- function buildWikiChart() {
1819
- const canvas = document.getElementById('wikiChart');
1820
- const existing = Chart.getChart(canvas);
1821
- if (existing) existing.destroy();
1822
-
1823
- const data = getFilteredModels()
1824
- .filter(d => d.wiki !== null && typeof d.wiki === 'number')
1825
- .filter(d => d.name !== 'Glint-0.1' && d.name !== 'Glint-0.2')
1826
- .map(d => ({
1827
- name: d.name,
1828
- org: d.org,
1829
- wiki: d.wiki,
1830
- logWiki: Math.log10(Math.max(d.wiki, 0.1)),
1831
- params: d.params
1832
- }))
1833
- .sort((a, b) => a.wiki - b.wiki);
1834
-
1835
- const ySpread = [];
1836
- const used = [];
1837
- data.forEach(d => {
1838
- let y = 0.5;
1839
- const logX = d.logWiki;
1840
- for (let attempt = 0; attempt < 40; attempt++) {
1841
- const candidateY = 0.15 + (attempt % 8) * 0.1 + Math.floor(attempt / 8) * 0.02;
1842
- let overlap = false;
1843
- for (const u of used) {
1844
- const dx = Math.abs(logX - u.logX);
1845
- const dy = Math.abs(candidateY - u.y);
1846
- if (dx < 0.15 && dy < 0.08) { overlap = true; break; }
1847
- }
1848
- if (!overlap) { y = candidateY; break; }
1849
- }
1850
- used.push({ logX, y });
1851
- ySpread.push(y);
1852
- });
1853
-
1854
- const logVals = data.map(d => d.logWiki);
1855
- const logMin = Math.min(...logVals);
1856
- const logMax = Math.max(...logVals);
1857
-
1858
- function getRadius(logW) {
1859
- if (logMax === logMin) return 12;
1860
- const t = (logW - logMin) / (logMax - logMin);
1861
- return 6 + t * 26;
1862
- }
1863
-
1864
- const tooltip = document.getElementById('wikiTooltip');
1865
- tooltip.classList.remove('visible');
1866
-
1867
- new Chart(canvas, {
1868
- type: 'bubble',
1869
- data: {
1870
- datasets: [{
1871
- data: data.map((d, i) => ({
1872
- x: d.wiki,
1873
- y: ySpread[i],
1874
- r: getRadius(d.logWiki),
1875
- _name: d.name,
1876
- _org: d.org,
1877
- _wiki: d.wiki,
1878
- _params: d.params
1879
- })),
1880
- backgroundColor: data.map(d => orgTint(d.org, 0.5)),
1881
- borderColor: data.map(d => colorMap[d.org]),
1882
- borderWidth: 1.5,
1883
- hoverBorderWidth: 2.5,
1884
- hoverBackgroundColor: data.map(d => orgTint(d.org, 0.75))
1885
- }]
1886
- },
1887
- options: {
1888
- responsive: true,
1889
- maintainAspectRatio: true,
1890
- animation: { duration: 700, easing: 'easeOutQuart' },
1891
- layout: { padding: { top: 10, bottom: 10, left: 10, right: 10 } },
1892
- scales: {
1893
- x: {
1894
- type: 'logarithmic',
1895
- title: { display: true, text: 'byte_ppl (log scale)', color: '#8b949e', font: { size: 11 } },
1896
- grid: { drawBorder: false, color: 'rgba(255,255,255,0.04)' },
1897
- ticks: {
1898
- color: '#8b949e',
1899
- callback: function(v) {
1900
- if (v >= 1000) return (v / 1000).toFixed(v >= 10000 ? 0 : 1) + 'K';
1901
- if (v >= 1) return v.toFixed(v >= 100 ? 0 : v >= 10 ? 1 : 2);
1902
- return v.toString();
1903
- }
1904
- }
1905
- },
1906
- y: { display: false, min: 0, max: 1 }
1907
- },
1908
- plugins: {
1909
- legend: { display: false },
1910
- tooltip: { enabled: false }
1911
- }
1912
- },
1913
- plugins: [
1914
- {
1915
- id: 'customLabels',
1916
- afterDraw(chart) {
1917
- const ctx = chart.ctx;
1918
- const meta = chart.getDatasetMeta(0);
1919
- meta.data.forEach((point, i) => {
1920
- const d = chart.data.datasets[0].data[i];
1921
- if (d.r >= 12) {
1922
- ctx.save();
1923
- ctx.font = `500 ${Math.min(d.r * 0.55, 11)}px -apple-system,BlinkMacSystemFont,sans-serif`;
1924
- ctx.fillStyle = 'rgba(255,255,255,0.85)';
1925
- ctx.textAlign = 'center';
1926
- ctx.textBaseline = 'middle';
1927
- let label = d._name;
1928
- const maxW = d.r * 1.6;
1929
- if (ctx.measureText(label).width > maxW) {
1930
- label = label.slice(0, Math.floor(maxW / ctx.measureText('A').width)) + '…';
1931
- }
1932
- ctx.fillText(label, point.x, point.y);
1933
- ctx.restore();
1934
- }
1935
- });
1936
- }
1937
- },
1938
- {
1939
- id: 'customTooltip',
1940
- afterEvent(chart, args) {
1941
- const evt = args.event;
1942
- if (evt.type === 'mouseout') {
1943
- tooltip.classList.remove('visible');
1944
- return;
1945
- }
1946
- const elements = chart.getElementsAtEventForMode(evt, 'nearest', { intersect: true }, false);
1947
- if (elements.length > 0) {
1948
- const el = elements[0];
1949
- const d = chart.data.datasets[0].data[el.index];
1950
- const point = chart.getDatasetMeta(0).data[el.index];
1951
- tooltip.querySelector('.tt-name').textContent = d._name;
1952
- tooltip.querySelector('.tt-val').innerHTML =
1953
- `byte_ppl: <strong>${d._wiki.toLocaleString()}</strong> · ${d._params} params`;
1954
- let left = point.x + 14;
1955
- let top = point.y - 20;
1956
- const ttW = 250;
1957
- if (left + ttW > canvas.width) left = point.x - ttW - 10;
1958
- if (top < 0) top = 10;
1959
- tooltip.style.left = left + 'px';
1960
- tooltip.style.top = top + 'px';
1961
- tooltip.classList.add('visible');
1962
- } else {
1963
- tooltip.classList.remove('visible');
1964
- }
1965
- }
1966
- }
1967
- ]
1968
- });
1969
- }
1970
-
1971
- /* ─── Efficiency ─── */
1972
-
1973
- function buildEfficiencyChart() {
1974
- const canvas = document.getElementById('efficiencyChart');
1975
- const existing = Chart.getChart(canvas);
1976
- if (existing) existing.destroy();
1977
-
1978
- const valid = getFilteredModels()
1979
- .filter(d => getScore(d) >= 0)
1980
- .filter(d => d.name !== 'MicroSupra-1k')
1981
- .map(d => ({ ...d, paramsNum: parseParams(d.params), avgScore: getScore(d) }))
1982
- .filter(d => !isNaN(d.paramsNum) && d.paramsNum > 0);
1983
-
1984
- if (valid.length < 2) return;
1985
-
1986
- const ranked = [...valid].sort((a, b) => b.avgScore - a.avgScore);
1987
- const rankMap = new Map();
1988
- ranked.forEach((m, i) => rankMap.set(m.name, i + 1));
1989
- valid.forEach(m => m.rank = rankMap.get(m.name));
1990
-
1991
- const logP = valid.map(d => Math.log10(d.paramsNum));
1992
- const scores = valid.map(d => d.avgScore);
1993
- const n = valid.length;
1994
- const sx = logP.reduce((a, v) => a + v, 0);
1995
- const sy = scores.reduce((a, v) => a + v, 0);
1996
- const sxy = logP.reduce((a, v, i) => a + v * scores[i], 0);
1997
- const sx2 = logP.reduce((a, v) => a + v * v, 0);
1998
- const slope = (n * sxy - sx * sy) / (n * sx2 - sx * sx);
1999
- const intercept = (sy - slope * sx) / n;
2000
- const res = valid.map(d => d.avgScore - (intercept + slope * Math.log10(d.paramsNum)));
2001
- const resStd = Math.sqrt(res.reduce((a, v) => a + v * v, 0) / n);
2002
- const shift = Math.max(resStd, 3);
2003
- const sorted = [...valid].sort((a, b) => a.paramsNum - b.paramsNum);
2004
-
2005
- const axMin = 500, axMax = 1.5e8;
2006
- const regData = [], threshData = [];
2007
- for (let i = 0; i <= 80; i++) {
2008
- const lx = Math.log10(axMin) + (Math.log10(axMax) - Math.log10(axMin)) * (i / 80);
2009
- const x = Math.pow(10, lx);
2010
- regData.push({ x, y: intercept + slope * lx });
2011
- threshData.push({ x, y: intercept + slope * lx + shift });
2012
- }
2013
-
2014
- new Chart(canvas, {
2015
- type: 'line',
2016
- data: {
2017
- datasets: [
2018
- {
2019
- label: 'Models',
2020
- data: sorted.map(d => ({ x: d.paramsNum, y: d.avgScore })),
2021
- showLine: false,
2022
- backgroundColor: sorted.map(d => colorMap[d.org]),
2023
- borderColor: sorted.map(d => colorMap[d.org]),
2024
- pointRadius: 6,
2025
- pointHoverRadius: 9
2026
- },
2027
- {
2028
- label: 'Trend',
2029
- data: regData,
2030
- showLine: true,
2031
- borderColor: 'rgba(255,200,0,0.5)',
2032
- borderWidth: 1.5,
2033
- borderDash: [4, 4],
2034
- pointRadius: 0,
2035
- fill: false
2036
- },
2037
- {
2038
- label: 'Threshold',
2039
- data: threshData,
2040
- showLine: true,
2041
- borderColor: 'rgba(255,200,0,0.8)',
2042
- borderWidth: 2,
2043
- borderDash: [6, 4],
2044
- pointRadius: 0,
2045
- fill: false
2046
- }
2047
- ]
2048
- },
2049
- options: {
2050
- parsing: false,
2051
- responsive: true,
2052
- maintainAspectRatio: true,
2053
- animation: { duration: 700, easing: 'easeOutQuart' },
2054
- scales: {
2055
- x: {
2056
- type: 'logarithmic',
2057
- min: axMin,
2058
- max: axMax,
2059
- title: { display: true, text: 'Parameters', color: '#8b949e' },
2060
- grid: { drawBorder: false },
2061
- ticks: {
2062
- color: '#8b949e',
2063
- callback: v => v >= 1e6
2064
- ? (v / 1e6).toFixed(v >= 1e7 ? 0 : 1) + 'M'
2065
- : v >= 1e3
2066
- ? (v / 1e3).toFixed(v >= 1e4 ? 0 : 1) + 'K'
2067
- : v.toString()
2068
- }
2069
- },
2070
- y: {
2071
- title: { display: true, text: 'Leaderboard Score (avg of available benchmarks)', color: '#8b949e' },
2072
- min: 20,
2073
- max: 80,
2074
- grid: { drawBorder: false },
2075
- ticks: { color: '#8b949e', callback: v => v + '%' }
2076
- }
2077
- },
2078
- plugins: {
2079
- legend: { display: false },
2080
- tooltip: {
2081
- callbacks: {
2082
- label: ctx => {
2083
- if (ctx.dataset.label !== 'Models') return '';
2084
- const d = sorted[ctx.dataIndex];
2085
- return `#${d.rank} ${d.name}: ${d.params}, ${d.avgScore.toFixed(1)}%`;
2086
- }
2087
- },
2088
- ...tooltipStyle
2089
- }
2090
- }
2091
- },
2092
- plugins: [
2093
- {
2094
- id: 'zone',
2095
- beforeDraw(chart) {
2096
- const ctx = chart.ctx, xs = chart.scales.x, ys = chart.scales.y;
2097
- const { left, right, top, bottom } = chart.chartArea;
2098
- const lY = intercept + slope * Math.log10(Math.max(xs.min, 1)) + shift;
2099
- const rY = intercept + slope * Math.log10(Math.max(xs.max, 1)) + shift;
2100
- ctx.save();
2101
- ctx.beginPath();
2102
- ctx.rect(left, top, right - left, bottom - top);
2103
- ctx.clip();
2104
- ctx.beginPath();
2105
- ctx.moveTo(left, ys.getPixelForValue(lY));
2106
- ctx.lineTo(left, top);
2107
- ctx.lineTo(right, top);
2108
- ctx.lineTo(right, ys.getPixelForValue(rY));
2109
- ctx.closePath();
2110
- ctx.fillStyle = 'rgba(255,230,0,0.06)';
2111
- ctx.fill();
2112
- ctx.restore();
2113
- }
2114
- },
2115
- {
2116
- id: 'rankLabels',
2117
- afterDatasetsDraw(chart) {
2118
- const ctx = chart.ctx;
2119
- const meta = chart.getDatasetMeta(0);
2120
- const medalColors = { 1: '#ffd700', 2: '#c0c0c0', 3: '#cd7f32' };
2121
- meta.data.forEach((point, i) => {
2122
- const d = sorted[i];
2123
- if (d.rank <= 3) {
2124
- ctx.save();
2125
- ctx.font = '700 10px -apple-system,BlinkMacSystemFont,sans-serif';
2126
- ctx.fillStyle = medalColors[d.rank];
2127
- ctx.textAlign = 'left';
2128
- ctx.textBaseline = 'middle';
2129
- ctx.fillText(`#${d.rank}`, point.x + 11, point.y - 1);
2130
- ctx.restore();
2131
- }
2132
- });
2133
- }
2134
- }
2135
- ]
2136
- });
2137
- }
2138
-
2139
- /* ─── Org Count ─── */
2140
-
2141
- function buildOrgCountChart() {
2142
- const canvas = document.getElementById('orgCountChart');
2143
- const existing = Chart.getChart(canvas);
2144
- if (existing) existing.destroy();
2145
-
2146
- const counts = {};
2147
- getFilteredModels().forEach(m => counts[m.org] = (counts[m.org] || 0) + 1);
2148
- const orgs = Object.keys(counts).sort((a, b) => counts[b] - counts[a]);
2149
-
2150
- new Chart(canvas, {
2151
- type: 'doughnut',
2152
- data: {
2153
- labels: orgs.map(o => orgNameMap[o]),
2154
- datasets: [{
2155
- data: orgs.map(o => counts[o]),
2156
- backgroundColor: orgs.map(o => colorMap[o]),
2157
- borderColor: '#161b22',
2158
- borderWidth: 2,
2159
- hoverOffset: 6
2160
- }]
2161
- },
2162
- options: {
2163
- responsive: true,
2164
- maintainAspectRatio: true,
2165
- cutout: '58%',
2166
- animation: { duration: 700, easing: 'easeOutQuart' },
2167
- plugins: {
2168
- legend: {
2169
- display: true,
2170
- position: 'bottom',
2171
- labels: {
2172
- color: '#c9d1d9',
2173
- padding: 14,
2174
- usePointStyle: true,
2175
- pointStyle: 'circle',
2176
- font: { size: 11 }
2177
- }
2178
- }
2179
- }
2180
- }
2181
- });
2182
- }
2183
-
2184
- /* ─── Toggle Banner ─── */
2185
-
2186
- function toggleUnknownBanner() {
2187
- const expand = document.getElementById('banner-expand');
2188
- const hint = document.getElementById('banner-hint');
2189
- if (!expand) return;
2190
- const isOpen = expand.classList.contains('open');
2191
- expand.classList.toggle('open');
2192
- if (hint) hint.classList.toggle('rotated');
2193
- }
2194
-
2195
- /* Modal functions */
2196
- function closeModal() {
2197
- document.getElementById('submitModal').style.display = 'none';
2198
- }
2199
- function handleSubmit() {
2200
- document.getElementById('submitModal').style.display = 'flex';
2201
- }
2202
- document.getElementById('modalAgreeBtn').addEventListener('click', function() {
2203
- document.getElementById('submitModal').style.display = 'none';
2204
- const randomNum = Math.floor(Math.random() * 100000);
2205
- const agreementText = 'I agreed to terms. Please include this number in your submission: ' + randomNum;
2206
- document.getElementById('submitBtn').innerHTML = agreementText;
2207
- document.getElementById('submitBtn').onclick = null;
2208
- setTimeout(function() {
2209
- window.open('https://huggingface.co/spaces/Glint-Research/Tiny-ML-Leaderboard/discussions', '_blank');
2210
- }, 1500);
2211
- });
2212
- document.getElementById('modalCancelBtn').addEventListener('click', closeModal);
2213
- // Close modal when clicking outside the modal card
2214
- window.addEventListener('click', function(event) {
2215
- const modal = document.getElementById('submitModal');
2216
- if (event.target === modal) {
2217
- modal.style.display = 'none';
2218
- }
2219
- });
2220
-
2221
- /* ─── Init ─── */
2222
-
2223
- window.addEventListener('DOMContentLoaded', () => {
2224
- renderStats();
2225
- buildFilters();
2226
- setupSortControl();
2227
- renderFilteredViews();
2228
- });
2229
-
2230
-
2231
- </script>
2232
- </body>
2233
- </html>