kristaller486 commited on
Commit
7c92275
·
verified ·
1 Parent(s): c8f0688
Files changed (1) hide show
  1. index.html +987 -19
index.html CHANGED
@@ -1,19 +1,987 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>RuQualBench Leaderboard </title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <style>
9
+ /* Фикс места под иконку и отсутствие "дёргания" заголовков */
10
+ th .sort-toggle {
11
+ width: 16px;
12
+ height: 16px;
13
+ line-height: 0;
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ vertical-align: middle;
18
+ margin-left: 6px;
19
+ position: relative;
20
+ }
21
+ th .sort-toggle svg {
22
+ position: absolute;
23
+ top: 0;
24
+ left: 0;
25
+ width: 14px;
26
+ height: 14px;
27
+ transition: opacity 0.15s ease;
28
+ /* fill: currentColor; // уже задано inline, дублирование не мешает */
29
+ }
30
+ /* Запрет переноса текста в заголовках и лёгкая подстройка вертикального выравнивания кнопки */
31
+ thead th{ white-space:nowrap; }
32
+ thead th .sort-toggle{ top:1px; }
33
+ </style>
34
+ </head>
35
+ <body>
36
+ <div class="container">
37
+ <header>
38
+ <h1>RuQualBench Leaderboard <span class="frog">🐸</span></h1>
39
+ <p class="subtitle">Бенчмарк качества русского языка для LLM</p>
40
+ <div class="view-toggle" role="group" aria-label="Переключение вида">
41
+ <button class="toggle-btn is-active" data-mode="table" type="button">Таблица</button>
42
+ <button class="toggle-btn" data-mode="cards" type="button">Карточки</button>
43
+ </div>
44
+ </header>
45
+
46
+ <div class="leaderboard">
47
+ <div class="table-wrap">
48
+ <table>
49
+ <thead>
50
+ <tr>
51
+ <th class="sticky-0" data-col="0" data-type="num">#
52
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
53
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
54
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
55
+ </button>
56
+ </th>
57
+ <th class="sticky-1" data-col="1" data-type="str">Модель
58
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
59
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
60
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
61
+ </button>
62
+ </th>
63
+ <th data-col="2" data-type="num">Критичные/1000
64
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
65
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
66
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
67
+ </button>
68
+ </th>
69
+ <th data-col="3" data-type="num">Обычные/1000
70
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
71
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
72
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
73
+ </button>
74
+ </th>
75
+ <th data-col="4" data-type="num">Доп./1000
76
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
77
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
78
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
79
+ </button>
80
+ </th>
81
+ <th class="score-col" data-col="5" data-type="num">Нормировано ошибок
82
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
83
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
84
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
85
+ </button>
86
+ </th>
87
+ <th data-col="6" data-type="num">Всего токенов
88
+ <button class="sort-toggle" aria-label="Сортировать" title="Сортировать" data-state="off" style="border:none;background:none;cursor:pointer;margin-left:6px;display:inline-flex;align-items:center;vertical-align:middle;padding:0;">
89
+ <svg class="icon-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 9.97H11.03V18.89L13.04 18.92V9.97H17.03L12.03 4.97Z" /></svg>
90
+ <svg class="icon-down" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="width:14px;height:14px;display:none;fill:currentColor;"><path d="M7.03 13.92H11.03V5L13.04 4.97V13.92H17.03L12.03 18.92Z" /></svg>
91
+ </button>
92
+ </th>
93
+ </tr>
94
+ </thead>
95
+ <tbody>
96
+
97
+ <tr>
98
+ <td class="rank mono sticky-0" data-label="#">#1</td>
99
+ <td class="model-name sticky-1" data-label="Модель">Claude Sonnet 4.5</td>
100
+ <td class="num mono" data-label="Критичные/1000">
101
+
102
+ 0.07 ± 0.01
103
+
104
+ </td>
105
+ <td class="num mono" data-label="Обычные/1000">
106
+
107
+ 0.18 ± 0.02
108
+
109
+ </td>
110
+ <td class="num mono" data-label="Доп./1000">
111
+
112
+ 0.12 ± 0.01
113
+
114
+ </td>
115
+ <td data-label="Нормировано ошибок">
116
+ <div class="score-cell">
117
+ <div class="progress-bar">
118
+
119
+
120
+
121
+ <div class="progress-fill" style="width: 86.28158844765343%"></div>
122
+ </div>
123
+ <span class="score-value">
124
+
125
+ 0.38 ± 0.04
126
+
127
+ </span>
128
+ </div>
129
+ </td>
130
+ <td class="num mono" data-label="Всего токенов">121,783</td>
131
+ </tr>
132
+
133
+ <tr>
134
+ <td class="rank mono sticky-0" data-label="#">#2</td>
135
+ <td class="model-name sticky-1" data-label="Модель">GPT-4o</td>
136
+ <td class="num mono" data-label="Критичные/1000">
137
+
138
+ 0.03 ± 0.01
139
+
140
+ </td>
141
+ <td class="num mono" data-label="Обычные/1000">
142
+
143
+ 0.21 ± 0.05
144
+
145
+ </td>
146
+ <td class="num mono" data-label="Доп./1000">
147
+
148
+ 0.34 ± 0.08
149
+
150
+ </td>
151
+ <td data-label="Нормировано ошибок">
152
+ <div class="score-cell">
153
+ <div class="progress-bar">
154
+
155
+
156
+
157
+ <div class="progress-fill" style="width: 84.11552346570397%"></div>
158
+ </div>
159
+ <span class="score-value">
160
+
161
+ 0.44 ± 0.04
162
+
163
+ </span>
164
+ </div>
165
+ </td>
166
+ <td class="num mono" data-label="Всего токенов">55,547</td>
167
+ </tr>
168
+
169
+ <tr>
170
+ <td class="rank mono sticky-0" data-label="#">#3</td>
171
+ <td class="model-name sticky-1" data-label="Модель">Gemini 2.5 Flash (GA)</td>
172
+ <td class="num mono" data-label="Критичные/1000">
173
+
174
+ 0.08 ± 0.02
175
+
176
+ </td>
177
+ <td class="num mono" data-label="Обычные/1000">
178
+
179
+ 0.21 ± 0.03
180
+
181
+ </td>
182
+ <td class="num mono" data-label="Доп./1000">
183
+
184
+ 0.24 ± 0.01
185
+
186
+ </td>
187
+ <td data-label="Нормировано ошибок">
188
+ <div class="score-cell">
189
+ <div class="progress-bar">
190
+
191
+
192
+
193
+ <div class="progress-fill" style="width: 82.67148014440433%"></div>
194
+ </div>
195
+ <span class="score-value">
196
+
197
+ 0.48 ± 0.03
198
+
199
+ </span>
200
+ </div>
201
+ </td>
202
+ <td class="num mono" data-label="Всего токенов">151,942</td>
203
+ </tr>
204
+
205
+ <tr>
206
+ <td class="rank mono sticky-0" data-label="#">#4</td>
207
+ <td class="model-name sticky-1" data-label="Модель">Vikhrmodels/Vistral-24B-Instruct (SGLang)</td>
208
+ <td class="num mono" data-label="Критичные/1000">
209
+
210
+ 0.08 ± 0.02
211
+
212
+ </td>
213
+ <td class="num mono" data-label="Обычные/1000">
214
+
215
+ 0.31 ± 0.04
216
+
217
+ </td>
218
+ <td class="num mono" data-label="Доп./1000">
219
+
220
+ 0.12 ± 0.03
221
+
222
+ </td>
223
+ <td data-label="Нормировано ошибок">
224
+ <div class="score-cell">
225
+ <div class="progress-bar">
226
+
227
+
228
+
229
+ <div class="progress-fill" style="width: 80.86642599277978%"></div>
230
+ </div>
231
+ <span class="score-value">
232
+
233
+ 0.53 ± 0.02
234
+
235
+ </span>
236
+ </div>
237
+ </td>
238
+ <td class="num mono" data-label="Всего токенов">85,900</td>
239
+ </tr>
240
+
241
+ <tr>
242
+ <td class="rank mono sticky-0" data-label="#">#5</td>
243
+ <td class="model-name sticky-1" data-label="Модель">Gemma-3-27b-it (SGLang)</td>
244
+ <td class="num mono" data-label="Критичные/1000">
245
+
246
+ 0.08 ± 0.02
247
+
248
+ </td>
249
+ <td class="num mono" data-label="Обычные/1000">
250
+
251
+ 0.28 ± 0.02
252
+
253
+ </td>
254
+ <td class="num mono" data-label="Доп./1000">
255
+
256
+ 0.31 ± 0.05
257
+
258
+ </td>
259
+ <td data-label="Нормировано ошибок">
260
+ <div class="score-cell">
261
+ <div class="progress-bar">
262
+
263
+
264
+
265
+ <div class="progress-fill" style="width: 78.70036101083033%"></div>
266
+ </div>
267
+ <span class="score-value">
268
+
269
+ 0.59 ± 0.06
270
+
271
+ </span>
272
+ </div>
273
+ </td>
274
+ <td class="num mono" data-label="Всего токенов">101,336</td>
275
+ </tr>
276
+
277
+ <tr>
278
+ <td class="rank mono sticky-0" data-label="#">#6</td>
279
+ <td class="model-name sticky-1" data-label="Модель">Mistral-Small-3.2-24B-Instruct-2506 (vllm)</td>
280
+ <td class="num mono" data-label="Критичные/1000">
281
+
282
+ 0.10 ± 0.03
283
+
284
+ </td>
285
+ <td class="num mono" data-label="Обычные/1000">
286
+
287
+ 0.41 ± 0.02
288
+
289
+ </td>
290
+ <td class="num mono" data-label="Доп./1000">
291
+
292
+ 0.17 ± 0.02
293
+
294
+ </td>
295
+ <td data-label="Нормировано ошибок">
296
+ <div class="score-cell">
297
+ <div class="progress-bar">
298
+
299
+
300
+
301
+ <div class="progress-fill" style="width: 75.09025270758123%"></div>
302
+ </div>
303
+ <span class="score-value">
304
+
305
+ 0.69 ± 0.05
306
+
307
+ </span>
308
+ </div>
309
+ </td>
310
+ <td class="num mono" data-label="Всего токенов">74,469</td>
311
+ </tr>
312
+
313
+ <tr>
314
+ <td class="rank mono sticky-0" data-label="#">#7</td>
315
+ <td class="model-name sticky-1" data-label="Модель">DeepSeek V3 (Novita API)</td>
316
+ <td class="num mono" data-label="Критичные/1000">
317
+
318
+ 0.15
319
+
320
+ </td>
321
+ <td class="num mono" data-label="Обычные/1000">
322
+
323
+ 0.34 ± 0.03
324
+
325
+ </td>
326
+ <td class="num mono" data-label="Доп./1000">
327
+
328
+ 0.12 ± 0.02
329
+
330
+ </td>
331
+ <td data-label="Нормировано ошибок">
332
+ <div class="score-cell">
333
+ <div class="progress-bar">
334
+
335
+
336
+
337
+ <div class="progress-fill" style="width: 74.72924187725631%"></div>
338
+ </div>
339
+ <span class="score-value">
340
+
341
+ 0.70 ± 0.02
342
+
343
+ </span>
344
+ </div>
345
+ </td>
346
+ <td class="num mono" data-label="Всего токенов">75,606</td>
347
+ </tr>
348
+
349
+ <tr>
350
+ <td class="rank mono sticky-0" data-label="#">#8</td>
351
+ <td class="model-name sticky-1" data-label="Модель">RefalMachine/RuadaptQwen3-32B-Instruct (SGLang)</td>
352
+ <td class="num mono" data-label="Критичные/1000">
353
+
354
+ 0.09 ± 0.02
355
+
356
+ </td>
357
+ <td class="num mono" data-label="Обычные/1000">
358
+
359
+ 0.39 ± 0.05
360
+
361
+ </td>
362
+ <td class="num mono" data-label="Доп./1000">
363
+
364
+ 0.26 ± 0.06
365
+
366
+ </td>
367
+ <td data-label="Нормировано ошибок">
368
+ <div class="score-cell">
369
+ <div class="progress-bar">
370
+
371
+
372
+
373
+ <div class="progress-fill" style="width: 74.36823104693141%"></div>
374
+ </div>
375
+ <span class="score-value">
376
+
377
+ 0.71 ± 0.12
378
+
379
+ </span>
380
+ </div>
381
+ </td>
382
+ <td class="num mono" data-label="Всего токенов">163,424</td>
383
+ </tr>
384
+
385
+ <tr>
386
+ <td class="rank mono sticky-0" data-label="#">#9</td>
387
+ <td class="model-name sticky-1" data-label="Модель">yandex/YandexGPT-5-Lite-8B-instruct (SGLang)</td>
388
+ <td class="num mono" data-label="Критичные/1000">
389
+
390
+ 0.09
391
+
392
+ </td>
393
+ <td class="num mono" data-label="Обычные/1000">
394
+
395
+ 0.26 ± 0.03
396
+
397
+ </td>
398
+ <td class="num mono" data-label="Доп./1000">
399
+
400
+ 0.69 ± 0.04
401
+
402
+ </td>
403
+ <td data-label="Нормировано ошибок">
404
+ <div class="score-cell">
405
+ <div class="progress-bar">
406
+
407
+
408
+
409
+ <div class="progress-fill" style="width: 71.84115523465704%"></div>
410
+ </div>
411
+ <span class="score-value">
412
+
413
+ 0.78 ± 0.05
414
+
415
+ </span>
416
+ </div>
417
+ </td>
418
+ <td class="num mono" data-label="Всего токенов">47,060</td>
419
+ </tr>
420
+
421
+ <tr>
422
+ <td class="rank mono sticky-0" data-label="#">#10</td>
423
+ <td class="model-name sticky-1" data-label="Модель">Claude Haiku 4.5</td>
424
+ <td class="num mono" data-label="Критичные/1000">
425
+
426
+ 0.12 ± 0.02
427
+
428
+ </td>
429
+ <td class="num mono" data-label="Обычные/1000">
430
+
431
+ 0.47 ± 0.03
432
+
433
+ </td>
434
+ <td class="num mono" data-label="Доп./1000">
435
+
436
+ 0.25 ± 0.06
437
+
438
+ </td>
439
+ <td data-label="Нормировано ошибок">
440
+ <div class="score-cell">
441
+ <div class="progress-bar">
442
+
443
+
444
+
445
+ <div class="progress-fill" style="width: 69.67509025270758%"></div>
446
+ </div>
447
+ <span class="score-value">
448
+
449
+ 0.84 ± 0.02
450
+
451
+ </span>
452
+ </div>
453
+ </td>
454
+ <td class="num mono" data-label="Всего токенов">114,212</td>
455
+ </tr>
456
+
457
+ <tr>
458
+ <td class="rank mono sticky-0" data-label="#">#11</td>
459
+ <td class="model-name sticky-1" data-label="Модель">GigaChat-20B-A3B-instruct-v1.5 (SGLang)</td>
460
+ <td class="num mono" data-label="Критичные/1000">
461
+
462
+ 0.06 ± 0.01
463
+
464
+ </td>
465
+ <td class="num mono" data-label="Обычные/1000">
466
+
467
+ 0.40 ± 0.02
468
+
469
+ </td>
470
+ <td class="num mono" data-label="Доп./1000">
471
+
472
+ 1.03 ± 0.06
473
+
474
+ </td>
475
+ <td data-label="Нормировано ошибок">
476
+ <div class="score-cell">
477
+ <div class="progress-bar">
478
+
479
+
480
+
481
+ <div class="progress-fill" style="width: 62.454873646209386%"></div>
482
+ </div>
483
+ <span class="score-value">
484
+
485
+ 1.04 ± 0.01
486
+
487
+ </span>
488
+ </div>
489
+ </td>
490
+ <td class="num mono" data-label="Всего токенов">74,836</td>
491
+ </tr>
492
+
493
+ <tr>
494
+ <td class="rank mono sticky-0" data-label="#">#12</td>
495
+ <td class="model-name sticky-1" data-label="Модель">Deepseek V3.2-Exp (Deepseek API)</td>
496
+ <td class="num mono" data-label="Критичные/1000">
497
+
498
+ 0.26 ± 0.02
499
+
500
+ </td>
501
+ <td class="num mono" data-label="Обычные/1000">
502
+
503
+ 0.47 ± 0.04
504
+
505
+ </td>
506
+ <td class="num mono" data-label="Доп./1000">
507
+
508
+ 0.24 ± 0.05
509
+
510
+ </td>
511
+ <td data-label="Нормировано ошибок">
512
+ <div class="score-cell">
513
+ <div class="progress-bar">
514
+
515
+
516
+
517
+ <div class="progress-fill" style="width: 60.28880866425992%"></div>
518
+ </div>
519
+ <span class="score-value">
520
+
521
+ 1.10 ± 0.03
522
+
523
+ </span>
524
+ </div>
525
+ </td>
526
+ <td class="num mono" data-label="Всего токенов">135,889</td>
527
+ </tr>
528
+
529
+ <tr>
530
+ <td class="rank mono sticky-0" data-label="#">#13</td>
531
+ <td class="model-name sticky-1" data-label="Модель">Qwen3-Next-80B-A3B-Instruct (Alibaba API)</td>
532
+ <td class="num mono" data-label="Критичные/1000">
533
+
534
+ 0.19 ± 0.02
535
+
536
+ </td>
537
+ <td class="num mono" data-label="Обычные/1000">
538
+
539
+ 0.73 ± 0.03
540
+
541
+ </td>
542
+ <td class="num mono" data-label="Доп./1000">
543
+
544
+ 0.23 ± 0.03
545
+
546
+ </td>
547
+ <td data-label="Нормировано ошибок">
548
+ <div class="score-cell">
549
+ <div class="progress-bar">
550
+
551
+
552
+
553
+ <div class="progress-fill" style="width: 55.95667870036101%"></div>
554
+ </div>
555
+ <span class="score-value">
556
+
557
+ 1.22 ± 0.02
558
+
559
+ </span>
560
+ </div>
561
+ </td>
562
+ <td class="num mono" data-label="Всего токенов">175,847</td>
563
+ </tr>
564
+
565
+ <tr>
566
+ <td class="rank mono sticky-0" data-label="#">#14</td>
567
+ <td class="model-name sticky-1" data-label="Модель">t-tech/T-pro-it-2.0 (SGLang, without reasoning)</td>
568
+ <td class="num mono" data-label="Критичные/1000">
569
+
570
+ 0.26 ± 0.05
571
+
572
+ </td>
573
+ <td class="num mono" data-label="Обычные/1000">
574
+
575
+ 0.68 ± 0.04
576
+
577
+ </td>
578
+ <td class="num mono" data-label="Доп./1000">
579
+
580
+ 0.15 ± 0.02
581
+
582
+ </td>
583
+ <td data-label="Нормировано ошибок">
584
+ <div class="score-cell">
585
+ <div class="progress-bar">
586
+
587
+
588
+
589
+ <div class="progress-fill" style="width: 54.15162454873646%"></div>
590
+ </div>
591
+ <span class="score-value">
592
+
593
+ 1.27 ± 0.11
594
+
595
+ </span>
596
+ </div>
597
+ </td>
598
+ <td class="num mono" data-label="Всего токенов">132,071</td>
599
+ </tr>
600
+
601
+ <tr>
602
+ <td class="rank mono sticky-0" data-label="#">#15</td>
603
+ <td class="model-name sticky-1" data-label="Модель">Qwen3-235B-A22B-2507-Instruct (Alibaba API)</td>
604
+ <td class="num mono" data-label="Критичные/1000">
605
+
606
+ 0.46 ± 0.19
607
+
608
+ </td>
609
+ <td class="num mono" data-label="Обычные/1000">
610
+
611
+ 0.56 ± 0.04
612
+
613
+ </td>
614
+ <td class="num mono" data-label="Доп./1000">
615
+
616
+ 0.16 ± 0.01
617
+
618
+ </td>
619
+ <td data-label="Нормировано ошибок">
620
+ <div class="score-cell">
621
+ <div class="progress-bar">
622
+
623
+
624
+
625
+ <div class="progress-fill" style="width: 44.04332129963899%"></div>
626
+ </div>
627
+ <span class="score-value">
628
+
629
+ 1.55 ± 0.35
630
+
631
+ </span>
632
+ </div>
633
+ </td>
634
+ <td class="num mono" data-label="Всего токенов">137,855</td>
635
+ </tr>
636
+
637
+ <tr>
638
+ <td class="rank mono sticky-0" data-label="#">#16</td>
639
+ <td class="model-name sticky-1" data-label="Модель">GLM-4.6 (Z.ai API)</td>
640
+ <td class="num mono" data-label="Критичные/1000">
641
+
642
+ 0.49 ± 0.07
643
+
644
+ </td>
645
+ <td class="num mono" data-label="Обычные/1000">
646
+
647
+ 0.71 ± 0.07
648
+
649
+ </td>
650
+ <td class="num mono" data-label="Доп./1000">
651
+
652
+ 0.17 ± 0.03
653
+
654
+ </td>
655
+ <td data-label="Нормировано ошибок">
656
+ <div class="score-cell">
657
+ <div class="progress-bar">
658
+
659
+
660
+
661
+ <div class="progress-fill" style="width: 35.74007220216606%"></div>
662
+ </div>
663
+ <span class="score-value">
664
+
665
+ 1.78 ± 0.17
666
+
667
+ </span>
668
+ </div>
669
+ </td>
670
+ <td class="num mono" data-label="Всего токенов">151,775</td>
671
+ </tr>
672
+
673
+ <tr>
674
+ <td class="rank mono sticky-0" data-label="#">#17</td>
675
+ <td class="model-name sticky-1" data-label="Модель">GPT-5 (reasoning: minimal)</td>
676
+ <td class="num mono" data-label="Критичные/1000">
677
+
678
+ 0.30 ± 0.05
679
+
680
+ </td>
681
+ <td class="num mono" data-label="Обычные/1000">
682
+
683
+ 1.09 ± 0.04
684
+
685
+ </td>
686
+ <td class="num mono" data-label="Доп./1000">
687
+
688
+ 0.28 ± 0.03
689
+
690
+ </td>
691
+ <td data-label="Нормировано ошибок">
692
+ <div class="score-cell">
693
+ <div class="progress-bar">
694
+
695
+
696
+
697
+ <div class="progress-fill" style="width: 33.57400722021661%"></div>
698
+ </div>
699
+ <span class="score-value">
700
+
701
+ 1.84 ± 0.05
702
+
703
+ </span>
704
+ </div>
705
+ </td>
706
+ <td class="num mono" data-label="Всего токенов">163,827</td>
707
+ </tr>
708
+
709
+ <tr>
710
+ <td class="rank mono sticky-0" data-label="#">#18</td>
711
+ <td class="model-name sticky-1" data-label="Модель">GPT-5 (reasoning: low)</td>
712
+ <td class="num mono" data-label="Критичные/1000">
713
+
714
+ 0.25 ± 0.01
715
+
716
+ </td>
717
+ <td class="num mono" data-label="Обычные/1000">
718
+
719
+ 1.40 ± 0.13
720
+
721
+ </td>
722
+ <td class="num mono" data-label="Доп./1000">
723
+
724
+ 0.40 ± 0.01
725
+
726
+ </td>
727
+ <td data-label="Нормировано ошибок">
728
+ <div class="score-cell">
729
+ <div class="progress-bar">
730
+
731
+
732
+
733
+ <div class="progress-fill" style="width: 24.548736462093867%"></div>
734
+ </div>
735
+ <span class="score-value">
736
+
737
+ 2.09 ± 0.12
738
+
739
+ </span>
740
+ </div>
741
+ </td>
742
+ <td class="num mono" data-label="Всего токенов">165,854</td>
743
+ </tr>
744
+
745
+ <tr>
746
+ <td class="rank mono sticky-0" data-label="#">#19</td>
747
+ <td class="model-name sticky-1" data-label="Модель">GPT-OSS-120B (Vertex AI API)</td>
748
+ <td class="num mono" data-label="Критичные/1000">
749
+
750
+ 0.37 ± 0.05
751
+
752
+ </td>
753
+ <td class="num mono" data-label="Обычные/1000">
754
+
755
+ 1.36 ± 0.08
756
+
757
+ </td>
758
+ <td class="num mono" data-label="Доп./1000">
759
+
760
+ 0.40 ± 0.01
761
+
762
+ </td>
763
+ <td data-label="Нормировано ошибок">
764
+ <div class="score-cell">
765
+ <div class="progress-bar">
766
+
767
+
768
+
769
+ <div class="progress-fill" style="width: 17.32851985559567%"></div>
770
+ </div>
771
+ <span class="score-value">
772
+
773
+ 2.29 ± 0.17
774
+
775
+ </span>
776
+ </div>
777
+ </td>
778
+ <td class="num mono" data-label="Всего токенов">183,215</td>
779
+ </tr>
780
+
781
+ <tr>
782
+ <td class="rank mono sticky-0" data-label="#">#20</td>
783
+ <td class="model-name sticky-1" data-label="Модель">Mistral-Nemo (Mistral API)</td>
784
+ <td class="num mono" data-label="Критичные/1000">
785
+
786
+ 0.51 ± 0.07
787
+
788
+ </td>
789
+ <td class="num mono" data-label="Обычные/1000">
790
+
791
+ 1.17 ± 0.09
792
+
793
+ </td>
794
+ <td class="num mono" data-label="Доп./1000">
795
+
796
+ 1.15 ± 0.12
797
+
798
+ </td>
799
+ <td data-label="Нормировано ошибок">
800
+ <div class="score-cell">
801
+ <div class="progress-bar">
802
+
803
+
804
+
805
+ <div class="progress-fill" style="width: 0.0%"></div>
806
+ </div>
807
+ <span class="score-value">
808
+
809
+ 2.77 ± 0.24
810
+
811
+ </span>
812
+ </div>
813
+ </td>
814
+ <td class="num mono" data-label="Всего токенов">53,243</td>
815
+ </tr>
816
+
817
+ </tbody>
818
+ </table>
819
+ </div>
820
+ </div>
821
+
822
+ <div class="legend">
823
+ <p>
824
+ <p>Метрики показывают ошибки русского языка, подсчитанные на 1000 токенов ответа: </p>
825
+ <p>"Критичные" - грубые нарушения (проблемы в соглавсовании слов, вставки на других языках, наиболее неестественные придуманные слова);</p>
826
+ <p>"Обычные" - заметные ошибки (кальки, согласование и т.п.);</p>
827
+ <p>"Дополнительные" - малозначимые нарушения, почти не влияющие на читаемость.</p>
828
+ </p>
829
+ <p>
830
+ Значения нормированы на 1000 токенов o200k_base текста; "±" - стандартная ошибка (SE) по серии прогонов, если запусков было несколько.
831
+ Чем меньше "Нормировано ошибок", тем лучше.
832
+ </p>
833
+ <p>
834
+ "Нормировано ошибок" - взвешенная метрика: критичные ошибки умножаются на 2, обычные - на 1, дополнительные - на 0.5; сумма нормируется на 1000 токенов ответа.
835
+ </p>
836
+ <p>Результаты для Gemini 2.5 Flash Lite могут быть завышеными.</p>
837
+ </div>
838
+ <p class="info-text">Если хотите, чтобы я добавил ту или иную модель в лидерборд - не стесняйтесь открыть issue/pull request на Github.</p>
839
+ <p class="info-text">
840
+ Обновлено: 2025-10-21 15:00:37 | Всего моделей: 20 | <a href="https://github.com/kristaller486/RuQualBench">GitHub</a> | <a href="https://t.me/krists">Telegram</a>
841
+ </p>
842
+ </div>
843
+ <script>
844
+ document.addEventListener('DOMContentLoaded', function() {
845
+ const h1 = document.querySelector('h1');
846
+ const frogSpan = document.querySelector('.frog');
847
+ let isKva = false;
848
+
849
+ frogSpan.style.cursor = 'pointer';
850
+
851
+ frogSpan.addEventListener('click', function() {
852
+ isKva = !isKva;
853
+ const textNode = h1.firstChild;
854
+ textNode.textContent = isKva ? 'RuКваlBench Leaderboard ' : 'RuQualBench Leaderboard ';
855
+ });
856
+ });
857
+ </script>
858
+ <script>
859
+ document.addEventListener('DOMContentLoaded', function() {
860
+ const table = document.querySelector('.leaderboard table');
861
+ if (!table || !table.tHead || !table.tBodies.length) return;
862
+
863
+ const thead = table.tHead;
864
+ const tbody = table.tBodies[0];
865
+
866
+ // Зафиксируем исходный порядок строк, чтобы можно было вернуть "выключено"
867
+ Array.from(tbody.querySelectorAll('tr')).forEach((r, i) => r.dataset.initIndex = i);
868
+
869
+ function parseNumeric(text) {
870
+ if (!text) return NaN;
871
+ let base = text.split('±')[0];
872
+ base = base.replace(/[^0-9\.\-]/g, '');
873
+ const num = parseFloat(base);
874
+ return isNaN(num) ? NaN : num;
875
+ }
876
+
877
+ function getCellValue(row, col, type) {
878
+ const td = row.children[col];
879
+ if (!td) return type === 'num' ? NaN : '';
880
+ if (type === 'num') {
881
+ let text;
882
+ // Для "Нормировано ошибок" берём число из span.score-value
883
+ if (col === 5) {
884
+ const sv = td.querySelector('.score-value');
885
+ text = sv ? sv.textContent : td.textContent;
886
+ } else {
887
+ text = td.textContent;
888
+ }
889
+ return parseNumeric(text);
890
+ } else {
891
+ return td.textContent.trim().toLowerCase();
892
+ }
893
+ }
894
+
895
+ function resort(col, type, state) {
896
+ const rows = Array.from(tbody.querySelectorAll('tr'));
897
+ if (state === 'off') {
898
+ rows.sort((a, b) => (parseInt(a.dataset.initIndex, 10) - parseInt(b.dataset.initIndex, 10)));
899
+ } else {
900
+ const dir = state === 'asc' ? 1 : -1;
901
+ rows.sort((r1, r2) => {
902
+ const v1 = getCellValue(r1, col, type);
903
+ const v2 = getCellValue(r2, col, type);
904
+ let cmp = 0;
905
+ if (type === 'num') {
906
+ if (isNaN(v1) && isNaN(v2)) cmp = 0;
907
+ else if (isNaN(v1)) cmp = 1;
908
+ else if (isNaN(v2)) cmp = -1;
909
+ else cmp = v1 - v2;
910
+ } else {
911
+ cmp = v1.localeCompare(v2, 'ru');
912
+ }
913
+ return cmp * dir;
914
+ });
915
+ }
916
+ rows.forEach(r => tbody.appendChild(r));
917
+ // Пересчёт колонки "#"
918
+ Array.from(tbody.querySelectorAll('tr')).forEach((r, idx) => {
919
+ const rankCell = r.children[0];
920
+ if (rankCell) rankCell.textContent = '#' + (idx + 1);
921
+ });
922
+ }
923
+
924
+ function updateThIcon(th) {
925
+ const state = th.dataset.state || 'off';
926
+ const btn = th.querySelector('.sort-toggle');
927
+ if (!btn) return;
928
+ const up = btn.querySelector('.icon-up');
929
+ const down = btn.querySelector('.icon-down');
930
+ // Не скрываем элемент целиком — только прозрачность, чтобы не было сдвигов
931
+ if (up) {
932
+ up.style.display = 'block';
933
+ up.style.opacity = (state === 'asc') ? '1' : '0';
934
+ }
935
+ if (down) {
936
+ down.style.display = 'block';
937
+ // В "off" показываем бледную вниз-стрелку как неактивную подсказку
938
+ down.style.opacity = (state === 'off') ? '0.35' : (state === 'desc' ? '1' : '0');
939
+ }
940
+ }
941
+
942
+ function clearOtherStates(activeTh) {
943
+ thead.querySelectorAll('th[data-col]').forEach(th => {
944
+ if (th !== activeTh) {
945
+ th.dataset.state = 'off';
946
+ updateThIcon(th);
947
+ }
948
+ });
949
+ }
950
+
951
+ thead.querySelectorAll('th[data-col]').forEach(th => {
952
+ th.dataset.state = 'off';
953
+ updateThIcon(th);
954
+ const btn = th.querySelector('.sort-toggle');
955
+ if (!btn) return;
956
+ btn.addEventListener('click', () => {
957
+ const current = th.dataset.state || 'off';
958
+ const next = current === 'off' ? 'desc' : (current === 'desc' ? 'asc' : 'off');
959
+ clearOtherStates(th);
960
+ th.dataset.state = next;
961
+ updateThIcon(th);
962
+ const col = parseInt(th.getAttribute('data-col'), 10);
963
+ const type = th.getAttribute('data-type') || 'str';
964
+ resort(col, type, next);
965
+ });
966
+ });
967
+ });
968
+ </script>
969
+ <script>
970
+ document.addEventListener('DOMContentLoaded', function(){
971
+ const root = document.body;
972
+ const btns = document.querySelectorAll('.view-toggle .toggle-btn');
973
+ function setMode(mode){
974
+ if(mode === 'cards'){
975
+ root.classList.add('cards-mode');
976
+ }else{
977
+ root.classList.remove('cards-mode');
978
+ }
979
+ btns.forEach(b => b.classList.toggle('is-active', b.dataset.mode === mode));
980
+ }
981
+ const preferCards = window.matchMedia && window.matchMedia('(max-width: 640px)').matches;
982
+ setMode(preferCards ? 'cards' : 'table');
983
+ btns.forEach(b => b.addEventListener('click', () => setMode(b.dataset.mode)));
984
+ });
985
+ </script>
986
+ </body>
987
+ </html>