Maggio33 commited on
Commit
4a9515a
·
verified ·
1 Parent(s): 384c0cc

Space: approved N05 benchmark plan, no results (Projektant 768d8104)

Browse files
benchmarks-contract.js ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /* Local, dependency-free checks for the keyword subset used by N05's pinned
3
+ 05ff4733 schema. Not a general Draft2020 implementation. Unknown keywords
4
+ fail closed. The authoritative schema is benchmarks.schema.json. */
5
+ (() => {
6
+ const keywords = new Set(["$schema", "$id", "$defs", "$ref", "type", "const", "enum", "properties", "required", "additionalProperties", "items", "pattern", "minLength", "minimum", "maximum", "anyOf", "allOf", "if", "then", "else"]);
7
+ const own = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
8
+ const object = value => value !== null && typeof value === "object" && !Array.isArray(value);
9
+ function matches(value, rule, root) {
10
+ for (const key of Object.keys(rule)) if (!keywords.has(key)) throw new Error(`Unsupported schema keyword: ${key}`);
11
+ if (rule.$ref) {
12
+ if (!rule.$ref.startsWith("#/")) throw new Error("External schema references are not allowed");
13
+ let target = root;
14
+ for (const key of rule.$ref.slice(2).split("/")) {
15
+ if (!own(target, key)) throw new Error("Unresolved schema reference");
16
+ target = target[key];
17
+ }
18
+ if (!matches(value, target, root)) return false;
19
+ }
20
+ if (own(rule, "const") && value !== rule.const) return false;
21
+ if (rule.enum && !rule.enum.includes(value)) return false;
22
+ if (rule.type) {
23
+ const types = Array.isArray(rule.type) ? rule.type : [rule.type];
24
+ if (!types.some(type => type === "null" ? value === null : type === "array" ? Array.isArray(value) : type === "object" ? object(value) : type === "integer" ? Number.isInteger(value) : type === "number" ? typeof value === "number" && Number.isFinite(value) : typeof value === type)) return false;
25
+ }
26
+ if (typeof value === "string") {
27
+ if (rule.minLength !== undefined && [...value].length < rule.minLength) return false;
28
+ if (rule.pattern && !new RegExp(rule.pattern).test(value)) return false;
29
+ }
30
+ if (typeof value === "number") {
31
+ if (!Number.isFinite(value)) return false;
32
+ if (rule.minimum !== undefined && value < rule.minimum) return false;
33
+ if (rule.maximum !== undefined && value > rule.maximum) return false;
34
+ }
35
+ if (Array.isArray(value) && rule.items && !value.every(item => matches(item, rule.items, root))) return false;
36
+ if (object(value)) {
37
+ if (rule.required && !rule.required.every(key => own(value, key))) return false;
38
+ const props = rule.properties || {};
39
+ for (const key of Object.keys(value)) {
40
+ if (own(props, key)) {
41
+ if (!matches(value[key], props[key], root)) return false;
42
+ } else if (rule.additionalProperties === false) return false;
43
+ }
44
+ }
45
+ if (rule.anyOf && !rule.anyOf.some(part => matches(value, part, root))) return false;
46
+ if (rule.allOf && !rule.allOf.every(part => matches(value, part, root))) return false;
47
+ if (rule.if) {
48
+ const branch = matches(value, rule.if, root) ? rule.then : rule.else;
49
+ if (branch && !matches(value, branch, root)) return false;
50
+ }
51
+ return true;
52
+ }
53
+ const key = (...parts) => JSON.stringify(parts);
54
+ function unique(items, getKey, name) {
55
+ const map = new Map();
56
+ for (const item of items) {
57
+ const id = getKey(item);
58
+ if (map.has(id)) throw new Error(`Duplicate ${name}: ${id}`);
59
+ map.set(id, item);
60
+ }
61
+ return map;
62
+ }
63
+ function validCI(ci) {
64
+ if (ci !== null && ci.lower > ci.upper) throw new Error("CI lower exceeds upper");
65
+ }
66
+ function validate(packet, inventory, schema, inventoryRevision) {
67
+ if (!matches(packet, schema, schema)) throw new Error("Packet does not match the pinned N05 schema");
68
+ if (packet.provenance.kind !== "measurement") throw new Error("Contract example is not a measurement");
69
+ if (packet.provenance.inventory_commit !== inventoryRevision) throw new Error("Inventory revision differs from the displayed protocol");
70
+ if (![`${inventory.protocol}-panel200`, `${inventory.protocol}-fullB`].includes(packet.protocol_id)) throw new Error("Unknown protocol scale");
71
+ const models = unique(packet.models, m => m.model_id, "model");
72
+ const tasks = unique(packet.tasks, t => t.task_id, "task");
73
+ const plan = new Map(inventory.rows.map(t => [t.id, t]));
74
+ for (const task of tasks.values()) {
75
+ const item = plan.get(task.task_id);
76
+ if (!item || ["task", "family", "language", "split"].some(field => task[field] !== item[field])) throw new Error(`Task metadata differs: ${task.task_id}`);
77
+ }
78
+ const observations = unique(packet.observations, o => key(o.task_id, o.model_id, o.protocol_id), "observation");
79
+ for (const o of observations.values()) {
80
+ if (!tasks.has(o.task_id) || !models.has(o.model_id) || o.protocol_id !== packet.protocol_id) throw new Error("Unknown task, model or protocol in observation");
81
+ if ((o.n_selected !== null && o.n_scored > o.n_selected) || (o.n_selected !== null && o.n_population !== null && o.n_selected > o.n_population)) throw new Error("Inconsistent sample counts");
82
+ validCI(o.ci95);
83
+ }
84
+ const contrasts = unique(packet.contrasts, c => key(c.task_id, c.model_id, c.model_ref, c.protocol_id), "contrast");
85
+ for (const c of contrasts.values()) {
86
+ if (!tasks.has(c.task_id) || !models.has(c.model_id) || !models.has(c.model_ref) || c.protocol_id !== packet.protocol_id) throw new Error("Unknown key in contrast");
87
+ validCI(c.ci95);
88
+ if (c.verdict !== "withheld") {
89
+ const left = observations.get(key(c.task_id, c.model_id, c.protocol_id));
90
+ const right = observations.get(key(c.task_id, c.model_ref, c.protocol_id));
91
+ if (!left || !right || left.state !== "ok" || right.state !== "ok" || left.metric !== right.metric || left.unit !== right.unit || left.higher_is_better !== right.higher_is_better) throw new Error("Accepted contrast lacks comparable observations");
92
+ if ((c.verdict === "better" || c.verdict === "worse") && c.p_holm > 0.05) throw new Error("Decisive verdict conflicts with the declared Holm rule");
93
+ }
94
+ }
95
+ return {models, tasks, observations, contrasts};
96
+ }
97
+ const api = {validate, key,
98
+ revision: "326c4474393c223c77bb3a3ca6a82e001758d056",
99
+ inventorySHA: "67a751a0e53800203e6ec63100a9fd777dbc1f899171acee3181cf1cc8ab44b0",
100
+ schemaSHA: "68a3e5dc934ccf82748d12b26c3a44d7a1f338efaae5b113d22a2960108adc92"
101
+ };
102
+ if (typeof module !== "undefined" && module.exports) module.exports = api;
103
+ else window.N05Contract = api;
104
+ })();
benchmarks-feed.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "results": null
3
+ }
benchmarks-plan.json ADDED
@@ -0,0 +1,869 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "protocol": "N05-50-v0.2",
4
+ "counts": {
5
+ "rows": 50,
6
+ "PL": 25,
7
+ "EN": 25
8
+ },
9
+ "sources": {
10
+ "lm_eval_commit": "6d2abda4fd171e68a8789330c4149e37c1ca0bda",
11
+ "openpl_commit": "21d0ea9cf4fd6153dfff4d84d6ad0aab5488f302",
12
+ "openpl_about_snapshot": "Ewaluator/bielik/about_space_0d30867d.py"
13
+ },
14
+ "selection": {
15
+ "seed": 20261028,
16
+ "max_documents_per_task": 200,
17
+ "unit": "canonical source document; paired versions share membership",
18
+ "ordering": "SHA256(UTF8(\"20261028|\"+family+\"|\"+source_id)); ties by canonical source bytes",
19
+ "when": "freeze manifests before model scoring; no prefix limit",
20
+ "full_protocol_B": "separate full 23-task replication; never compare sample score to published full score",
21
+ "support_policy": "panel only: five support IDs ranked by SHA256(20261028|family|support|source_id); declared/fallback pool after process_docs; same-split support removed from scored population; record all demo IDs and actual_shots",
22
+ "context_policy": "panel lm-eval max_length4096 float32 batch1; drop support from end to fit prompt+YAML max_gen_toks; never silently cut query/options; fullB retains independently verified source protocol",
23
+ "harness_seed_tuple": {
24
+ "python": 0,
25
+ "numpy": 1234,
26
+ "torch": 1234,
27
+ "fewshot": 1234
28
+ }
29
+ },
30
+ "rows": [
31
+ {
32
+ "id": "T01",
33
+ "task": "blimp_glint",
34
+ "language": "EN",
35
+ "family": "blimp",
36
+ "metric": "accuracy",
37
+ "instrument": "custom_glint",
38
+ "split": "train",
39
+ "rationale": "minimal-pair grammar",
40
+ "shots": 0
41
+ },
42
+ {
43
+ "id": "T02",
44
+ "task": "arc_easy_glint",
45
+ "language": "EN",
46
+ "family": "arc_easy",
47
+ "metric": "accuracy",
48
+ "instrument": "custom_glint",
49
+ "split": "test",
50
+ "rationale": "school science",
51
+ "shots": 0
52
+ },
53
+ {
54
+ "id": "T03",
55
+ "task": "wikitext2_byte",
56
+ "language": "EN",
57
+ "family": "wikitext2",
58
+ "metric": "byte_perplexity",
59
+ "instrument": "custom_glint",
60
+ "split": "test",
61
+ "rationale": "language modelling",
62
+ "shots": 0
63
+ },
64
+ {
65
+ "id": "T04",
66
+ "task": "multiblimp_pl",
67
+ "language": "PL",
68
+ "family": "multiblimp",
69
+ "metric": "accuracy",
70
+ "instrument": "custom_pl",
71
+ "split": "pol/data.tsv",
72
+ "rationale": "Polish grammar",
73
+ "shots": 0
74
+ },
75
+ {
76
+ "id": "T05",
77
+ "task": "arc_easy_pl_eu20",
78
+ "language": "PL",
79
+ "family": "arc_easy",
80
+ "metric": "accuracy",
81
+ "instrument": "custom_pl",
82
+ "split": "test",
83
+ "rationale": "paired science EN/PL",
84
+ "shots": 0
85
+ },
86
+ {
87
+ "id": "T06",
88
+ "task": "hellaswag",
89
+ "language": "EN",
90
+ "family": "hellaswag",
91
+ "metric": "acc_norm",
92
+ "instrument": "lm_eval_0.4.8",
93
+ "split": "validation",
94
+ "rationale": "commonsense",
95
+ "shots": 0,
96
+ "definition": "lm_eval/tasks/hellaswag/hellaswag.yaml"
97
+ },
98
+ {
99
+ "id": "T07",
100
+ "task": "piqa",
101
+ "language": "EN",
102
+ "family": "piqa",
103
+ "metric": "acc_norm",
104
+ "instrument": "lm_eval_0.4.8",
105
+ "split": "validation",
106
+ "rationale": "physical reasoning",
107
+ "shots": 0,
108
+ "definition": "lm_eval/tasks/piqa/piqa.yaml"
109
+ },
110
+ {
111
+ "id": "T08",
112
+ "task": "arc_challenge",
113
+ "language": "EN",
114
+ "family": "arc_challenge",
115
+ "metric": "acc_norm",
116
+ "instrument": "lm_eval_0.4.8",
117
+ "split": "test",
118
+ "rationale": "science",
119
+ "shots": 0,
120
+ "definition": "lm_eval/tasks/arc/arc_challenge.yaml"
121
+ },
122
+ {
123
+ "id": "T09",
124
+ "task": "winogrande",
125
+ "language": "EN",
126
+ "family": "winogrande",
127
+ "metric": "acc",
128
+ "instrument": "lm_eval_0.4.8",
129
+ "split": "validation",
130
+ "rationale": "coreference",
131
+ "shots": 0,
132
+ "definition": "lm_eval/tasks/winogrande/default.yaml"
133
+ },
134
+ {
135
+ "id": "T10",
136
+ "task": "openbookqa",
137
+ "language": "EN",
138
+ "family": "openbookqa",
139
+ "metric": "acc_norm",
140
+ "instrument": "lm_eval_0.4.8",
141
+ "split": "test",
142
+ "rationale": "science",
143
+ "shots": 0,
144
+ "definition": "lm_eval/tasks/openbookqa/openbookqa.yaml"
145
+ },
146
+ {
147
+ "id": "T11",
148
+ "task": "sciq",
149
+ "language": "EN",
150
+ "family": "sciq",
151
+ "metric": "acc_norm",
152
+ "instrument": "lm_eval_0.4.8",
153
+ "split": "test",
154
+ "rationale": "science with provided support",
155
+ "shots": 0,
156
+ "definition": "lm_eval/tasks/sciq/sciq.yaml"
157
+ },
158
+ {
159
+ "id": "T12",
160
+ "task": "boolq",
161
+ "language": "EN",
162
+ "family": "boolq",
163
+ "metric": "acc",
164
+ "instrument": "lm_eval_0.4.8",
165
+ "split": "validation",
166
+ "rationale": "reading comprehension",
167
+ "shots": 0,
168
+ "definition": "lm_eval/tasks/super_glue/boolq/default.yaml"
169
+ },
170
+ {
171
+ "id": "T13",
172
+ "task": "copa",
173
+ "language": "EN",
174
+ "family": "copa",
175
+ "metric": "acc",
176
+ "instrument": "lm_eval_0.4.8",
177
+ "split": "validation",
178
+ "rationale": "causal reasoning",
179
+ "shots": 0,
180
+ "definition": "lm_eval/tasks/super_glue/copa/default.yaml"
181
+ },
182
+ {
183
+ "id": "T14",
184
+ "task": "cb",
185
+ "language": "EN",
186
+ "family": "cb",
187
+ "metric": "acc",
188
+ "instrument": "lm_eval_0.4.8",
189
+ "split": "validation",
190
+ "rationale": "entailment",
191
+ "shots": 0,
192
+ "definition": "lm_eval/tasks/super_glue/cb/default.yaml"
193
+ },
194
+ {
195
+ "id": "T15",
196
+ "task": "wic",
197
+ "language": "EN",
198
+ "family": "wic",
199
+ "metric": "acc",
200
+ "instrument": "lm_eval_0.4.8",
201
+ "split": "validation",
202
+ "rationale": "word sense",
203
+ "shots": 0,
204
+ "definition": "lm_eval/tasks/super_glue/wic/default.yaml"
205
+ },
206
+ {
207
+ "id": "T16",
208
+ "task": "wsc273",
209
+ "language": "EN",
210
+ "family": "wsc273",
211
+ "metric": "acc",
212
+ "instrument": "lm_eval_0.4.8",
213
+ "split": "test",
214
+ "rationale": "coreference",
215
+ "shots": 0,
216
+ "definition": "lm_eval/tasks/wsc273/default.yaml"
217
+ },
218
+ {
219
+ "id": "T17",
220
+ "task": "sglue_rte",
221
+ "language": "EN",
222
+ "family": "sglue_rte",
223
+ "metric": "acc",
224
+ "instrument": "lm_eval_0.4.8",
225
+ "split": "validation",
226
+ "rationale": "entailment",
227
+ "shots": 0,
228
+ "definition": "lm_eval/tasks/super_glue/rte/default.yaml"
229
+ },
230
+ {
231
+ "id": "T18",
232
+ "task": "anli_r1",
233
+ "language": "EN",
234
+ "family": "anli",
235
+ "metric": "acc",
236
+ "instrument": "lm_eval_0.4.8",
237
+ "split": "test_r1",
238
+ "rationale": "adversarial entailment",
239
+ "shots": 0,
240
+ "definition": "lm_eval/tasks/anli/anli_r1.yaml"
241
+ },
242
+ {
243
+ "id": "T19",
244
+ "task": "anli_r2",
245
+ "language": "EN",
246
+ "family": "anli",
247
+ "metric": "acc",
248
+ "instrument": "lm_eval_0.4.8",
249
+ "split": "test_r2",
250
+ "rationale": "adversarial entailment",
251
+ "shots": 0,
252
+ "definition": "lm_eval/tasks/anli/anli_r2.yaml"
253
+ },
254
+ {
255
+ "id": "T20",
256
+ "task": "anli_r3",
257
+ "language": "EN",
258
+ "family": "anli",
259
+ "metric": "acc",
260
+ "instrument": "lm_eval_0.4.8",
261
+ "split": "test_r3",
262
+ "rationale": "adversarial entailment",
263
+ "shots": 0,
264
+ "definition": "lm_eval/tasks/anli/anli_r3.yaml"
265
+ },
266
+ {
267
+ "id": "T21",
268
+ "task": "swag",
269
+ "language": "EN",
270
+ "family": "swag",
271
+ "metric": "acc_norm",
272
+ "instrument": "lm_eval_0.4.8",
273
+ "split": "validation",
274
+ "rationale": "continuation",
275
+ "shots": 0,
276
+ "definition": "lm_eval/tasks/swag/swag.yaml"
277
+ },
278
+ {
279
+ "id": "T22",
280
+ "task": "lambada_openai",
281
+ "language": "EN",
282
+ "family": "lambada_openai",
283
+ "metric": "acc",
284
+ "instrument": "lm_eval_0.4.8",
285
+ "split": "test",
286
+ "rationale": "last-word completion",
287
+ "shots": 0,
288
+ "definition": "lm_eval/tasks/lambada/lambada_openai.yaml"
289
+ },
290
+ {
291
+ "id": "T23",
292
+ "task": "logiqa",
293
+ "language": "EN",
294
+ "family": "logiqa",
295
+ "metric": "acc_norm",
296
+ "instrument": "lm_eval_0.4.8",
297
+ "split": "test",
298
+ "rationale": "logical reasoning",
299
+ "shots": 0,
300
+ "definition": "lm_eval/tasks/logiqa/logiqa.yaml"
301
+ },
302
+ {
303
+ "id": "T24",
304
+ "task": "mathqa",
305
+ "language": "EN",
306
+ "family": "mathqa",
307
+ "metric": "acc_norm",
308
+ "instrument": "lm_eval_0.4.8",
309
+ "split": "test",
310
+ "rationale": "arithmetic multiple choice",
311
+ "shots": 0,
312
+ "definition": "lm_eval/tasks/mathqa/mathqa.yaml"
313
+ },
314
+ {
315
+ "id": "T25",
316
+ "task": "prost",
317
+ "language": "EN",
318
+ "family": "prost",
319
+ "metric": "acc_norm",
320
+ "instrument": "lm_eval_0.4.8",
321
+ "split": "test",
322
+ "rationale": "physical reasoning",
323
+ "shots": 0,
324
+ "definition": "lm_eval/tasks/prost/corypaik_prost.yaml"
325
+ },
326
+ {
327
+ "id": "T26",
328
+ "task": "qnli",
329
+ "language": "EN",
330
+ "family": "qnli",
331
+ "metric": "acc",
332
+ "instrument": "lm_eval_0.4.8",
333
+ "split": "validation",
334
+ "rationale": "question entailment",
335
+ "shots": 0,
336
+ "definition": "lm_eval/tasks/glue/qnli/default.yaml"
337
+ },
338
+ {
339
+ "id": "T27",
340
+ "task": "sst2",
341
+ "language": "EN",
342
+ "family": "sst2",
343
+ "metric": "acc",
344
+ "instrument": "lm_eval_0.4.8",
345
+ "split": "validation",
346
+ "rationale": "sentiment",
347
+ "shots": 0,
348
+ "definition": "lm_eval/tasks/glue/sst2/default.yaml"
349
+ },
350
+ {
351
+ "id": "T28",
352
+ "task": "polemo2_in",
353
+ "language": "PL",
354
+ "family": "polemo2-in",
355
+ "metric": "exact_match,score-first",
356
+ "instrument": "openpl_polish4",
357
+ "split": "test",
358
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
359
+ "shots": 5,
360
+ "leaderboard_column": "polemo2-in_g",
361
+ "random_baseline_percent": 41.6,
362
+ "dataset_path": "allegro/klej-polemo2-in",
363
+ "dataset_config": null,
364
+ "dataset_revision_declared": null,
365
+ "definition_files": [
366
+ {
367
+ "path": "lm_eval/tasks/polemo2/polemo2_in.yaml",
368
+ "sha256": "55f52677240b29b17e212914b24d5a4d461480e39f39af6753108ed1b888b399"
369
+ }
370
+ ]
371
+ },
372
+ {
373
+ "id": "T29",
374
+ "task": "polemo2_in_multiple_choice",
375
+ "language": "PL",
376
+ "family": "polemo2-in",
377
+ "metric": "acc,none",
378
+ "instrument": "openpl_polish4",
379
+ "split": "test",
380
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
381
+ "shots": 5,
382
+ "leaderboard_column": "polemo2-in_mc",
383
+ "random_baseline_percent": 41.6,
384
+ "dataset_path": "allegro/klej-polemo2-in",
385
+ "dataset_config": null,
386
+ "dataset_revision_declared": null,
387
+ "definition_files": [
388
+ {
389
+ "path": "lm_eval/tasks/polemo2/polemo2_in_mc.yaml",
390
+ "sha256": "3cf0b8fc1b478a900fc484827b2caf35d3a7c5b249733f9c306ab144ec37c254"
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ "id": "T30",
396
+ "task": "polemo2_out",
397
+ "language": "PL",
398
+ "family": "polemo2-out",
399
+ "metric": "exact_match,score-first",
400
+ "instrument": "openpl_polish4",
401
+ "split": "test",
402
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
403
+ "shots": 5,
404
+ "leaderboard_column": "polemo2-out_g",
405
+ "random_baseline_percent": 36.8,
406
+ "dataset_path": "allegro/klej-polemo2-out",
407
+ "dataset_config": null,
408
+ "dataset_revision_declared": null,
409
+ "definition_files": [
410
+ {
411
+ "path": "lm_eval/tasks/polemo2/polemo2_in.yaml",
412
+ "sha256": "55f52677240b29b17e212914b24d5a4d461480e39f39af6753108ed1b888b399"
413
+ },
414
+ {
415
+ "path": "lm_eval/tasks/polemo2/polemo2_out.yaml",
416
+ "sha256": "e2bd578ebfe3fe5b92ad08caac1220ca1db02958f03697f5e993faab0dc08127"
417
+ }
418
+ ]
419
+ },
420
+ {
421
+ "id": "T31",
422
+ "task": "polemo2_out_multiple_choice",
423
+ "language": "PL",
424
+ "family": "polemo2-out",
425
+ "metric": "acc,none",
426
+ "instrument": "openpl_polish4",
427
+ "split": "test",
428
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
429
+ "shots": 5,
430
+ "leaderboard_column": "polemo2-out_mc",
431
+ "random_baseline_percent": 36.8,
432
+ "dataset_path": "allegro/klej-polemo2-out",
433
+ "dataset_config": null,
434
+ "dataset_revision_declared": null,
435
+ "definition_files": [
436
+ {
437
+ "path": "lm_eval/tasks/polemo2/polemo2_in_mc.yaml",
438
+ "sha256": "3cf0b8fc1b478a900fc484827b2caf35d3a7c5b249733f9c306ab144ec37c254"
439
+ },
440
+ {
441
+ "path": "lm_eval/tasks/polemo2/polemo2_out_mc.yaml",
442
+ "sha256": "634d051e40b1b91ad7ef2f29194c76f280cd404e6a54af8f40f9e6dc956c8057"
443
+ }
444
+ ]
445
+ },
446
+ {
447
+ "id": "T32",
448
+ "task": "polish_8tags_multiple_choice",
449
+ "language": "PL",
450
+ "family": "8tags",
451
+ "metric": "acc,none",
452
+ "instrument": "openpl_polish4",
453
+ "split": "test",
454
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
455
+ "shots": 5,
456
+ "leaderboard_column": "8tags_mc",
457
+ "random_baseline_percent": 14.3,
458
+ "dataset_path": "sdadas/8tags",
459
+ "dataset_config": null,
460
+ "dataset_revision_declared": null,
461
+ "definition_files": [
462
+ {
463
+ "path": "lm_eval/tasks/polish_8tags/8tags_mc.yaml",
464
+ "sha256": "fce252aaf70fc0220ea786c43b1798edc1cfd4e826c60666f040b418be2a39cd"
465
+ }
466
+ ]
467
+ },
468
+ {
469
+ "id": "T33",
470
+ "task": "polish_8tags_regex",
471
+ "language": "PL",
472
+ "family": "8tags",
473
+ "metric": "exact_match,score-first",
474
+ "instrument": "openpl_polish4",
475
+ "split": "test",
476
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
477
+ "shots": 5,
478
+ "leaderboard_column": "8tags_g",
479
+ "random_baseline_percent": 14.3,
480
+ "dataset_path": "sdadas/8tags",
481
+ "dataset_config": null,
482
+ "dataset_revision_declared": null,
483
+ "definition_files": [
484
+ {
485
+ "path": "lm_eval/tasks/polish_8tags/8tags_regex.yaml",
486
+ "sha256": "e389be0939f0c1a9be0e552659c1ea8950b77ca69254ecab4b6ded7c24314371"
487
+ }
488
+ ]
489
+ },
490
+ {
491
+ "id": "T34",
492
+ "task": "polish_belebele_mc",
493
+ "language": "PL",
494
+ "family": "belebele",
495
+ "metric": "acc,none",
496
+ "instrument": "openpl_polish4",
497
+ "split": "test",
498
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
499
+ "shots": 5,
500
+ "leaderboard_column": "belebele_mc",
501
+ "random_baseline_percent": 27.9,
502
+ "dataset_path": "facebook/belebele",
503
+ "dataset_config": "pol_Latn",
504
+ "dataset_revision_declared": null,
505
+ "definition_files": [
506
+ {
507
+ "path": "lm_eval/tasks/polish_belebele/belebele_mc.yaml",
508
+ "sha256": "eb9ae0c3398424dfda4641bc983ea8497d75d1cfcd11a9cdcbf4e346769d7ccf"
509
+ }
510
+ ]
511
+ },
512
+ {
513
+ "id": "T35",
514
+ "task": "polish_belebele_regex",
515
+ "language": "PL",
516
+ "family": "belebele",
517
+ "metric": "exact_match,score-first",
518
+ "instrument": "openpl_polish4",
519
+ "split": "test",
520
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
521
+ "shots": 5,
522
+ "leaderboard_column": "belebele_g",
523
+ "random_baseline_percent": 27.9,
524
+ "dataset_path": "facebook/belebele",
525
+ "dataset_config": "pol_Latn",
526
+ "dataset_revision_declared": null,
527
+ "definition_files": [
528
+ {
529
+ "path": "lm_eval/tasks/polish_belebele/belebele_regex.yaml",
530
+ "sha256": "9db37451b44dab22531f273dd690f5cd7b8518d0e4bb6d8d34e6bcc7b2507562"
531
+ }
532
+ ]
533
+ },
534
+ {
535
+ "id": "T36",
536
+ "task": "polish_dyk_multiple_choice",
537
+ "language": "PL",
538
+ "family": "dyk",
539
+ "metric": "f1,none",
540
+ "instrument": "openpl_polish4",
541
+ "split": "test",
542
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
543
+ "shots": 5,
544
+ "leaderboard_column": "dyk_mc",
545
+ "random_baseline_percent": 28.9,
546
+ "dataset_path": "allegro/klej-dyk",
547
+ "dataset_config": null,
548
+ "dataset_revision_declared": null,
549
+ "definition_files": [
550
+ {
551
+ "path": "lm_eval/tasks/polish_dyk/dyk_mc.yaml",
552
+ "sha256": "5ccbe634ee0222ce7f260b5f4932b1f015db6ccdd7f0a1d327d88184bf466f67"
553
+ }
554
+ ]
555
+ },
556
+ {
557
+ "id": "T37",
558
+ "task": "polish_dyk_regex",
559
+ "language": "PL",
560
+ "family": "dyk",
561
+ "metric": "f1,score-first",
562
+ "instrument": "openpl_polish4",
563
+ "split": "test",
564
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
565
+ "shots": 5,
566
+ "leaderboard_column": "dyk_g",
567
+ "random_baseline_percent": 28.9,
568
+ "dataset_path": "allegro/klej-dyk",
569
+ "dataset_config": null,
570
+ "dataset_revision_declared": null,
571
+ "definition_files": [
572
+ {
573
+ "path": "lm_eval/tasks/polish_dyk/dyk_regex.yaml",
574
+ "sha256": "b553c5dcf938d8baf1c1862282e96c21b36c9d65bfffda84856d506ef9fdf6dc"
575
+ }
576
+ ]
577
+ },
578
+ {
579
+ "id": "T38",
580
+ "task": "polish_ppc_multiple_choice",
581
+ "language": "PL",
582
+ "family": "ppc",
583
+ "metric": "acc,none",
584
+ "instrument": "openpl_polish4",
585
+ "split": "test",
586
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
587
+ "shots": 5,
588
+ "leaderboard_column": "ppc_mc",
589
+ "random_baseline_percent": 41.9,
590
+ "dataset_path": "sdadas/ppc",
591
+ "dataset_config": null,
592
+ "dataset_revision_declared": null,
593
+ "definition_files": [
594
+ {
595
+ "path": "lm_eval/tasks/polish_ppc/ppc_mc.yaml",
596
+ "sha256": "fd6a04fbcec596966b0bcc91b7b3451255f94a8fae59c131455af32fac930054"
597
+ }
598
+ ]
599
+ },
600
+ {
601
+ "id": "T39",
602
+ "task": "polish_ppc_regex",
603
+ "language": "PL",
604
+ "family": "ppc",
605
+ "metric": "exact_match,score-first",
606
+ "instrument": "openpl_polish4",
607
+ "split": "test",
608
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
609
+ "shots": 5,
610
+ "leaderboard_column": "ppc_g",
611
+ "random_baseline_percent": 41.9,
612
+ "dataset_path": "sdadas/ppc",
613
+ "dataset_config": null,
614
+ "dataset_revision_declared": null,
615
+ "definition_files": [
616
+ {
617
+ "path": "lm_eval/tasks/polish_ppc/ppc_regex.yaml",
618
+ "sha256": "02f1f211515c2085dc6d69bb6f002af9c3ecb23168f52f54ead81b6bfdde7f5d"
619
+ }
620
+ ]
621
+ },
622
+ {
623
+ "id": "T40",
624
+ "task": "polish_psc_multiple_choice",
625
+ "language": "PL",
626
+ "family": "psc",
627
+ "metric": "f1,none",
628
+ "instrument": "openpl_polish4",
629
+ "split": "test",
630
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
631
+ "shots": 5,
632
+ "leaderboard_column": "psc_mc",
633
+ "random_baseline_percent": 46.6,
634
+ "dataset_path": "allegro/klej-psc",
635
+ "dataset_config": null,
636
+ "dataset_revision_declared": null,
637
+ "definition_files": [
638
+ {
639
+ "path": "lm_eval/tasks/polish_psc/psc_mc.yaml",
640
+ "sha256": "51200832bcdb6752bc1c6cce40884cd853c1494217d3b6f4ae9f2392c859ef31"
641
+ }
642
+ ]
643
+ },
644
+ {
645
+ "id": "T41",
646
+ "task": "polish_psc_regex",
647
+ "language": "PL",
648
+ "family": "psc",
649
+ "metric": "f1,score-first",
650
+ "instrument": "openpl_polish4",
651
+ "split": "test",
652
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
653
+ "shots": 5,
654
+ "leaderboard_column": "psc_g",
655
+ "random_baseline_percent": 46.6,
656
+ "dataset_path": "allegro/klej-psc",
657
+ "dataset_config": null,
658
+ "dataset_revision_declared": null,
659
+ "definition_files": [
660
+ {
661
+ "path": "lm_eval/tasks/polish_psc/psc_regex.yaml",
662
+ "sha256": "c38ba8f17b47ba22a4a0fe02cbd7613cc31445db76013dd8d825f17e9e8b0278"
663
+ }
664
+ ]
665
+ },
666
+ {
667
+ "id": "T42",
668
+ "task": "polish_cbd_multiple_choice",
669
+ "language": "PL",
670
+ "family": "cbd",
671
+ "metric": "f1,none",
672
+ "instrument": "openpl_polish4",
673
+ "split": "test",
674
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
675
+ "shots": 5,
676
+ "leaderboard_column": "cbd_mc",
677
+ "random_baseline_percent": 14.9,
678
+ "dataset_path": "ptaszynski/PolishCyberbullyingDataset",
679
+ "dataset_config": null,
680
+ "dataset_revision_declared": null,
681
+ "definition_files": [
682
+ {
683
+ "path": "lm_eval/tasks/polish_cbd/cbd_mc.yaml",
684
+ "sha256": "acb5162e11544953ff0d63bf16159e9439f9aed945f9d8a1c082531c43d1687b"
685
+ }
686
+ ]
687
+ },
688
+ {
689
+ "id": "T43",
690
+ "task": "polish_cbd_regex",
691
+ "language": "PL",
692
+ "family": "cbd",
693
+ "metric": "f1,score-first",
694
+ "instrument": "openpl_polish4",
695
+ "split": "test",
696
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
697
+ "shots": 5,
698
+ "leaderboard_column": "cbd_g",
699
+ "random_baseline_percent": 14.9,
700
+ "dataset_path": "ptaszynski/PolishCyberbullyingDataset",
701
+ "dataset_config": null,
702
+ "dataset_revision_declared": null,
703
+ "definition_files": [
704
+ {
705
+ "path": "lm_eval/tasks/polish_cbd/cbd_regex.yaml",
706
+ "sha256": "bcb3321bf9538c7e784c6923a176906875fa30da0c77650f9152b6ff01e20b1d"
707
+ }
708
+ ]
709
+ },
710
+ {
711
+ "id": "T44",
712
+ "task": "polish_klej_ner_multiple_choice",
713
+ "language": "PL",
714
+ "family": "klej_ner",
715
+ "metric": "acc,none",
716
+ "instrument": "openpl_polish4",
717
+ "split": "test",
718
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
719
+ "shots": 5,
720
+ "leaderboard_column": "klej_ner_mc",
721
+ "random_baseline_percent": 34.3,
722
+ "dataset_path": "allegro/klej-nkjp-ner",
723
+ "dataset_config": null,
724
+ "dataset_revision_declared": null,
725
+ "definition_files": [
726
+ {
727
+ "path": "lm_eval/tasks/polish_klej_ner/klej_ner_mc.yaml",
728
+ "sha256": "cb2910d8d8e32d5826306c68bd9b2b8d00f14e9988ff889c2024aa5b8076dfe5"
729
+ }
730
+ ]
731
+ },
732
+ {
733
+ "id": "T45",
734
+ "task": "polish_klej_ner_regex",
735
+ "language": "PL",
736
+ "family": "klej_ner",
737
+ "metric": "exact_match,score-first",
738
+ "instrument": "openpl_polish4",
739
+ "split": "test",
740
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
741
+ "shots": 5,
742
+ "leaderboard_column": "klej_ner_g",
743
+ "random_baseline_percent": 34.3,
744
+ "dataset_path": "allegro/klej-nkjp-ner",
745
+ "dataset_config": null,
746
+ "dataset_revision_declared": null,
747
+ "definition_files": [
748
+ {
749
+ "path": "lm_eval/tasks/polish_klej_ner/klej_ner_regex.yaml",
750
+ "sha256": "fab9466e15bb9e4c9e9bcb5d302ee86e19ae908fb7f7a267105663e12d843639"
751
+ }
752
+ ]
753
+ },
754
+ {
755
+ "id": "T46",
756
+ "task": "polish_polqa_reranking_multiple_choice",
757
+ "language": "PL",
758
+ "family": "polqa",
759
+ "metric": "acc,none",
760
+ "instrument": "openpl_polish4",
761
+ "split": "test",
762
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
763
+ "shots": 5,
764
+ "leaderboard_column": "polqa_reranking_mc",
765
+ "random_baseline_percent": 53.35588953,
766
+ "dataset_path": "ipipan/polqa",
767
+ "dataset_config": null,
768
+ "dataset_revision_declared": null,
769
+ "definition_files": [
770
+ {
771
+ "path": "lm_eval/tasks/polish_polqa/polqa_reranking.yaml",
772
+ "sha256": "abc2914e338eb177260fa21e50ddb2a2df32174b43802c634ce173239ef34eda"
773
+ }
774
+ ]
775
+ },
776
+ {
777
+ "id": "T47",
778
+ "task": "polish_polqa_open_book",
779
+ "language": "PL",
780
+ "family": "polqa",
781
+ "metric": "levenshtein,none",
782
+ "instrument": "openpl_polish4",
783
+ "split": "test",
784
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
785
+ "shots": 5,
786
+ "leaderboard_column": "polqa_open_book_g",
787
+ "random_baseline_percent": 0.0,
788
+ "dataset_path": "ipipan/polqa",
789
+ "dataset_config": null,
790
+ "dataset_revision_declared": null,
791
+ "definition_files": [
792
+ {
793
+ "path": "lm_eval/tasks/polish_polqa/polqa_open_book.yaml",
794
+ "sha256": "59dcf0d577382fc0785301308120bb862159b8cccb2b50985a000c1d3b217b20"
795
+ }
796
+ ]
797
+ },
798
+ {
799
+ "id": "T48",
800
+ "task": "polish_polqa_closed_book",
801
+ "language": "PL",
802
+ "family": "polqa",
803
+ "metric": "levenshtein,none",
804
+ "instrument": "openpl_polish4",
805
+ "split": "test",
806
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
807
+ "shots": 5,
808
+ "leaderboard_column": "polqa_closed_book_g",
809
+ "random_baseline_percent": 0.0,
810
+ "dataset_path": "ipipan/polqa",
811
+ "dataset_config": null,
812
+ "dataset_revision_declared": null,
813
+ "definition_files": [
814
+ {
815
+ "path": "lm_eval/tasks/polish_polqa/polqa_closed_book.yaml",
816
+ "sha256": "8ed09d3d16daef754a31bb0ab609c268373f3bd11bec3103c73b5c24981da953"
817
+ }
818
+ ]
819
+ },
820
+ {
821
+ "id": "T49",
822
+ "task": "polish_poquad_open_book",
823
+ "language": "PL",
824
+ "family": "poquad",
825
+ "metric": "levenshtein,none",
826
+ "instrument": "openpl_polish4",
827
+ "split": "validation",
828
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
829
+ "shots": 5,
830
+ "leaderboard_column": "poquad_open_book",
831
+ "random_baseline_percent": 0.0,
832
+ "dataset_path": "clarin-pl/poquad",
833
+ "dataset_config": null,
834
+ "dataset_revision_declared": null,
835
+ "definition_files": [
836
+ {
837
+ "path": "lm_eval/tasks/polish_poquad/poquad_open_book.yaml",
838
+ "sha256": "c32d349dc6afbcb8b91c7d7f4cab70430e333b4e252016bc378e21e16ac64092"
839
+ }
840
+ ]
841
+ },
842
+ {
843
+ "id": "T50",
844
+ "task": "polish_eq_bench_first_turn",
845
+ "language": "PL",
846
+ "family": "eq_bench_first_turn",
847
+ "metric": "first_eqbench,none",
848
+ "instrument": "openpl_polish4",
849
+ "split": "validation",
850
+ "rationale": "complete official Open PL average; generation/MC variants are correlated protocols, not independent datasets",
851
+ "shots": 5,
852
+ "leaderboard_column": "eq_bench_first_turn",
853
+ "random_baseline_percent": 0.0,
854
+ "dataset_path": "speakleash/EQ-Bench-PL-first-turn",
855
+ "dataset_config": null,
856
+ "dataset_revision_declared": null,
857
+ "definition_files": [
858
+ {
859
+ "path": "lm_eval/tasks/polish_eq_bench/default.yaml",
860
+ "sha256": "0338e02cc0bac6ee9944bde8d228cf2412df97328a524d3b20515642a15ac5ad"
861
+ },
862
+ {
863
+ "path": "lm_eval/tasks/polish_eq_bench/first_turn.yaml",
864
+ "sha256": "b53960a2a36fcfdce3a7246f83e57b8f9a6123cb9cf970df68005c6e1fec610c"
865
+ }
866
+ ]
867
+ }
868
+ ]
869
+ }
benchmarks.css ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .bench-panel .bench-content{margin-top:20px;min-width:0;overflow-wrap:anywhere}
2
+ .bench-panel .bench-notice{border-left:3px solid var(--acc);padding:12px 16px;background:var(--card);color:var(--soft);max-width:82ch}
3
+ .bench-panel .bench-controls{display:flex;flex-wrap:wrap;align-items:end;gap:12px;margin:20px 0 12px}
4
+ .bench-panel label{display:grid;gap:6px;color:var(--muted);font-size:.88rem}
5
+ .bench-panel input,.bench-panel select,.bench-panel button{font:inherit;background:var(--card);color:var(--fg);border:1px solid var(--line2);border-radius:8px;padding:10px 12px;max-width:100%}
6
+ .bench-panel input{width:260px}
7
+ .bench-panel button{cursor:pointer}
8
+ .bench-panel :focus-visible{outline:2px solid var(--acc);outline-offset:3px}
9
+ .bench-panel .bench-summary{color:var(--soft);font-variant-numeric:tabular-nums;margin:12px 0}
10
+ .bench-panel .bench-explanation{color:var(--muted);font-size:.9rem;max-width:82ch}
11
+ .bench-panel .bench-wrap{overflow:auto;border:1px solid var(--line2);border-radius:12px;max-height:640px;scrollbar-gutter:stable}
12
+ .bench-panel table{min-width:820px;width:100%;border-collapse:separate;border-spacing:0}
13
+ .bench-panel th,.bench-panel td{padding:14px;text-align:left;white-space:normal;min-width:180px;vertical-align:top;border-bottom:1px solid var(--line)}
14
+ .bench-panel thead th{position:sticky;top:0;background:var(--card2);z-index:2;text-transform:none;letter-spacing:normal;font-size:.9rem}
15
+ .bench-panel th:first-child,.bench-panel td:first-child{position:sticky;left:0;width:250px;min-width:220px;background:var(--card);z-index:1}
16
+ .bench-panel thead th:first-child{z-index:3;background:var(--card2)}
17
+ .bench-panel .bench-task{font-weight:650;overflow-wrap:anywhere;text-transform:none;letter-spacing:normal;font-size:.9rem}
18
+ .bench-panel .bench-meta{display:block;color:var(--muted);font-size:.82rem;line-height:1.55;margin-top:6px;overflow-wrap:anywhere}
19
+ .bench-panel .bench-value{display:block;font-size:1.12rem;font-weight:650;font-variant-numeric:tabular-nums}
20
+ .bench-panel .bench-state{display:inline-block;color:var(--muted);font-size:.85rem;margin-top:4px}
21
+ .bench-panel .bench-verdict{display:block;margin:8px 0 0;font-size:.85rem}
22
+ .bench-panel details{margin:10px 0;font-size:.84rem;color:var(--muted)}
23
+ .bench-panel summary{cursor:pointer}
24
+ .bench-panel code{overflow-wrap:anywhere;white-space:normal}
25
+ .bench-panel .bench-provenance{margin-top:18px;color:var(--muted);font-size:.84rem;max-width:85ch}
26
+ .bench-panel [hidden]{display:none!important}
27
+ @media(max-width:640px){.bench-panel .bench-controls{display:grid;grid-template-columns:1fr}.bench-panel input,.bench-panel select,.bench-panel button{width:100%}.bench-panel th,.bench-panel td{padding:12px;min-width:180px}.bench-panel th:first-child,.bench-panel td:first-child{min-width:150px;width:150px}.bench-panel .bench-wrap{max-height:590px}.bench-panel table{min-width:760px}}
benchmarks.js ADDED
@@ -0,0 +1,216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ (() => {
3
+ const contract = window.N05Contract;
4
+ const plannedModels = [
5
+ {model_id:"planned-slayer", repo:"SlayerLab/Slayer1B-1.06"},
6
+ {model_id:"planned-bielik", repo:"speakleash/Bielik-1.5B-v3"},
7
+ {model_id:"planned-lfm", repo:"LiquidAI/LFM2.5-1.2B-Base"}
8
+ ];
9
+ const modelLabels = new Map(plannedModels.map(m => [m.repo, m.repo.split("/")[1]]));
10
+ const words = {
11
+ pl: {
12
+ search:"Szukaj zadania / rodziny", language:"Język", all:"Wszystkie", clear:"Wyczyść filtry",
13
+ inventory:"Inwentarz protokołu", shown:"Pokazano", of:"z", rows:"wierszy zadanie × protokół",
14
+ task:"Zadanie / rodzina", protocol:"Przyrząd / split", planned:"Plan · brak danych w widoku", absent:"Nie dostarczono obserwacji",
15
+ missingSource:"Źródło wyników nie jest jeszcze podłączone. Pokazuję wyłącznie plan, nie wyniki 50 benchmarków. Historyczne liczby powyżej nie zostały do niego przepisane.",
16
+ loadError:"Nie udało się wczytać przypiętego kontraktu. Nie pokazuję danych zastępczych.", invalidResults:"Wyniki ukryte — nie udało się odebrać paczki pomiarowej",
17
+ empty:"Brak zadań pasujących do filtrów.",
18
+ explanation:"Wartości zachowują własne jednostki. CI95 jest opisowy, nie „po Holmie”. Brak wyniku nie jest zerem; brak istotności nie oznacza remisu. UI nie wylicza werdyktów.",
19
+ sample:"Plan: min(200, N), WikiText — pełny test. Panel-200 nie jest pełną repliką Open PL. Powiązane warianty nie są niezależnymi korpusami. Shot przy zadaniu jest planem; actual_shots i odcięcia pochodzą z manifestu wykonania. T03 zachowuje wskaźnik kompatybilny z Glint tp^(N/B), nie deklarację dokładnego exp(NLL/B).",
20
+ planStatus:"Kontrakt zakresu — nie odebrany pakiet uruchomieniowy.", revision:"Rewizja inwentarza", measured:"obserwacji ok", supplied:"obserwacji dostarczonych", noResults:"bez odebranej paczki wyników",
21
+ ci:"CI95 opisowy", noCI:"Brak CI", against:"względem", review:"Odbiór kontrastu", provenance:"Pochodzenie", weights:"SHA wag", unknown:"nie dostarczono",
22
+ higher:"więcej ↑", lower:"mniej ↓", counts:"n: populacja / wybrane / ocenione", metrics:"miara", state:"Stan", run:"Bieg", scale:"Protokół / skala",
23
+ states:{ok:"Pomiar",not_run:"Nie uruchomiono",blocked_access:"Brak dostępu",blocked_runtime:"Blokada środowiska",blocked_security:"Blokada bezpieczeństwa",blocked_judge:"Brak odebranego sędziego",unsupported:"Nieobsługiwane",failed:"Błąd wykonania",skipped:"Pominięte"},
24
+ verdicts:{withheld:"Werdykt wstrzymany",better:"Lepszy",worse:"Gorszy",inconclusive:"Nierozstrzygnięte — nie remis"}
25
+ },
26
+ en: {
27
+ search:"Search task / family", language:"Language", all:"All", clear:"Clear filters",
28
+ inventory:"Protocol inventory", shown:"Showing", of:"of", rows:"task × protocol rows",
29
+ task:"Task / family", protocol:"Instrument / split", planned:"Planned · no data in this view", absent:"Observation not supplied",
30
+ missingSource:"The result source is not connected yet. This is the plan, not fifty benchmark results. Historical measurements above have not been copied into it.",
31
+ loadError:"The pinned contract could not be loaded. No substitute data is shown.", invalidResults:"Results hidden — measurement packet could not be accepted",
32
+ empty:"No tasks match the filters.",
33
+ explanation:"Values retain their own units. CI95 is descriptive, not “Holm-adjusted”. Missing results are not zero; lack of significance does not imply equivalence. The UI does not compute verdicts.",
34
+ sample:"Plan: min(200, N); WikiText uses the full test. Panel-200 is not full Open PL replication. Related variants are not independent datasets. A task's shot count is planned; actual_shots and truncation belong to the execution manifest. T03 retains the Glint-compatible tp^(N/B) indicator, not a claim of exact exp(NLL/B).",
35
+ planStatus:"Scope contract — not an accepted execution package.", revision:"Inventory revision", measured:"ok observations", supplied:"supplied observations", noResults:"no accepted result packet",
36
+ ci:"Descriptive CI95", noCI:"CI not supplied", against:"versus", review:"Contrast review", provenance:"Provenance", weights:"Weights SHA", unknown:"not supplied",
37
+ higher:"higher ↑", lower:"lower ↓", counts:"n: population / selected / scored", metrics:"metric", state:"State", run:"Run", scale:"Protocol / scale",
38
+ states:{ok:"Measured",not_run:"Not run",blocked_access:"Access blocked",blocked_runtime:"Runtime blocked",blocked_security:"Security blocked",blocked_judge:"Judge not accepted",unsupported:"Unsupported",failed:"Execution failed",skipped:"Skipped"},
39
+ verdicts:{withheld:"Verdict withheld",better:"Better",worse:"Worse",inconclusive:"Inconclusive — not equivalent"}
40
+ }
41
+ };
42
+ function el(tag, text, className) {
43
+ const node = document.createElement(tag);
44
+ if (text !== undefined) node.textContent = String(text);
45
+ if (className) node.className = className;
46
+ return node;
47
+ }
48
+ function option(value, text) { const node = el("option", text); node.value = value; return node; }
49
+ function label(text, input) { const node = el("label", text); node.append(input); return node; }
50
+ function modelName(model) { return modelLabels.get(model.repo) || model.repo; }
51
+ function number(value, locale, unit) {
52
+ const digits = unit === "percent" ? 2 : unit === "byte_ppl" ? 4 : 6;
53
+ return new Intl.NumberFormat(locale === "pl" ? "pl-PL" : "en-GB", {maximumFractionDigits:digits}).format(value);
54
+ }
55
+ function interval(ci, locale, unit, text) {
56
+ return ci === null ? text.noCI : `${text.ci}: [${number(ci.lower, locale, unit)}; ${number(ci.upper, locale, unit)}]`;
57
+ }
58
+ function detail(title, lines) {
59
+ const node = el("details");
60
+ node.append(el("summary", title));
61
+ for (const line of lines) node.append(el("p", line));
62
+ return node;
63
+ }
64
+ function observationCell(observation, task, model, context, locale, text) {
65
+ const cell = el("td");
66
+ if (!observation) {
67
+ cell.append(el("span", context.packet ? text.absent : text.planned, "bench-state"));
68
+ return cell;
69
+ }
70
+ const o = observation;
71
+ cell.append(el("span", text.states[o.state], "bench-state"));
72
+ if (o.state === "ok") {
73
+ const unit = o.unit === "percent" ? "%" : o.unit === "byte_ppl" ? "byte-PPL" : "score";
74
+ cell.append(el("span", `${number(o.value, locale, o.unit)} ${unit}`, "bench-value"),
75
+ el("span", `${text.metrics}: ${o.metric} · ${o.higher_is_better ? text.higher : text.lower}`, "bench-meta"),
76
+ el("span", interval(o.ci95, locale, o.unit, text), "bench-meta"));
77
+ }
78
+ cell.append(el("span", `${text.counts}: ${o.n_population ?? text.unknown} / ${o.n_selected ?? text.unknown} / ${o.n_scored}`, "bench-meta"));
79
+ for (const contrast of context.index.contrasts.values()) {
80
+ if (contrast.task_id !== task.id || contrast.model_id !== model.model_id) continue;
81
+ const ref = context.index.models.get(contrast.model_ref);
82
+ const heading = `${text.verdicts[contrast.verdict]} ${text.against} ${modelName(ref)}`;
83
+ cell.append(el("span", heading, "bench-verdict"));
84
+ if (contrast.verdict !== "withheld") {
85
+ cell.append(detail(text.review, [
86
+ `Δ: ${number(contrast.delta, locale, o.unit)}`,
87
+ interval(contrast.ci95, locale, o.unit, text),
88
+ `p_raw: ${contrast.p_raw}; p_holm: ${contrast.p_holm}; family_size: ${contrast.family_size}`,
89
+ `${contrast.review.actor} · artifact_sha256: ${contrast.review.artifact_sha256}`
90
+ ]));
91
+ }
92
+ }
93
+ cell.append(detail(text.provenance, [
94
+ `source_id_digest: ${o.source_id_digest ?? text.unknown}`,
95
+ `results_sha256: ${o.results_sha256 ?? text.unknown}`,
96
+ `runner_sha256: ${o.runner_sha256 ?? text.unknown}`
97
+ ]));
98
+ return cell;
99
+ }
100
+ function build(section, context) {
101
+ const locale = section.dataset.locale;
102
+ const text = words[locale];
103
+ const inventory = context.inventory;
104
+ const models = context.packet && context.packet.models.length ? context.packet.models : plannedModels;
105
+ const root = section.querySelector(".bench-content");
106
+ root.removeAttribute("role");
107
+ root.replaceChildren();
108
+ const message = context.error ? `${text.invalidResults}: ${context.error}` : context.packet ? `${text.run}: ${context.packet.run_id} · ${text.scale}: ${context.packet.protocol_id}` : text.missingSource;
109
+ const notice = el("p", message, "bench-notice");
110
+ const search = el("input");
111
+ search.type = "search";
112
+ const language = el("select");
113
+ language.append(option("all", text.all), option("PL", "PL"), option("EN", "EN"));
114
+ const clear = el("button", text.clear);
115
+ clear.type = "button";
116
+ const controls = el("div", undefined, "bench-controls");
117
+ controls.append(label(text.search, search), label(text.language, language), clear);
118
+ const summary = el("p", undefined, "bench-summary");
119
+ summary.setAttribute("role", "status");
120
+ summary.setAttribute("aria-live", "polite");
121
+ const explanation = el("p", text.explanation, "bench-explanation");
122
+ explanation.id = `bench-note-${locale}`;
123
+ const wrap = el("div", undefined, "bench-wrap");
124
+ wrap.tabIndex = 0;
125
+ wrap.setAttribute("role", "region");
126
+ wrap.setAttribute("aria-label", text.inventory);
127
+ const table = el("table");
128
+ table.setAttribute("aria-labelledby", `bench-title-${locale}`);
129
+ table.setAttribute("aria-describedby", explanation.id);
130
+ const head = el("thead");
131
+ const header = el("tr");
132
+ for (const name of [text.task, text.protocol]) { const th = el("th", name); th.scope = "col"; header.append(th); }
133
+ for (const model of models) {
134
+ const th = el("th", modelName(model));
135
+ th.scope = "col";
136
+ if (context.packet && context.index.models.has(model.model_id)) th.append(detail(text.provenance, [
137
+ `repo: ${model.repo}`, `revision: ${model.revision ?? text.unknown}`, `${text.weights}: ${model.weights_sha256 ?? text.unknown}`
138
+ ]));
139
+ header.append(th);
140
+ }
141
+ head.append(header);
142
+ const body = el("tbody");
143
+ table.append(head, body);
144
+ wrap.append(table);
145
+ const empty = el("p", text.empty);
146
+ const origin = el("div", undefined, "bench-provenance");
147
+ const planLink = el("a", "N05 · tasks_50_v01.json");
148
+ planLink.href = "benchmarks-plan.json";
149
+ const schemaLink = el("a", "N05 · results.schema.json");
150
+ schemaLink.href = "benchmarks.schema.json";
151
+ origin.append(el("p", text.planStatus), el("p", text.sample), planLink, el("span", " · "), schemaLink,
152
+ el("p", `${text.revision}: ${contract.revision}`), el("p", `inventory SHA-256: ${contract.inventorySHA}`));
153
+ if (context.packet) origin.append(el("p", `packet SHA-256: ${context.packetSHA}`));
154
+ root.append(notice, controls, summary, explanation, wrap, empty, origin);
155
+ function render() {
156
+ const query = search.value.trim().toLocaleLowerCase(locale);
157
+ const tasks = inventory.rows.filter(task => (language.value === "all" || task.language === language.value) &&
158
+ `${task.id} ${task.task} ${task.family}`.toLocaleLowerCase(locale).includes(query));
159
+ const fragment = document.createDocumentFragment();
160
+ for (const task of tasks) {
161
+ const row = el("tr");
162
+ const th = el("th", `${task.id} · ${task.task}`, "bench-task");
163
+ th.scope = "row";
164
+ th.append(el("span", `${task.language} · ${task.family}`, "bench-meta"));
165
+ const procedure = el("td", task.instrument);
166
+ procedure.append(el("span", `${task.split} · ${locale === "pl" ? "plan" : "planned"}: ${task.shots}-shot`, "bench-meta"), el("span", task.metric, "bench-meta"));
167
+ row.append(th, procedure);
168
+ for (const model of models) {
169
+ const o = context.index && context.index.observations.get(contract.key(task.id, model.model_id, context.packet.protocol_id));
170
+ row.append(observationCell(o, task, model, context, locale, text));
171
+ }
172
+ fragment.append(row);
173
+ }
174
+ body.replaceChildren(fragment);
175
+ const measured = context.packet ? `${context.packet.observations.filter(o => o.state === "ok").length} ${text.measured} / ${context.packet.observations.length} ${text.supplied}` : text.noResults;
176
+ summary.textContent = `${inventory.protocol} · ${text.shown} ${tasks.length} ${text.of} ${inventory.rows.length} ${text.rows} · ${measured}`;
177
+ empty.hidden = tasks.length !== 0;
178
+ wrap.hidden = tasks.length === 0;
179
+ }
180
+ search.addEventListener("input", render);
181
+ language.addEventListener("change", render);
182
+ clear.addEventListener("click", () => { search.value = ""; language.value = "all"; render(); search.focus(); });
183
+ render();
184
+ }
185
+ async function read(path, expectedSHA) {
186
+ const response = await fetch(path, {cache:"no-store"});
187
+ if (!response.ok) throw new Error(`${path}: HTTP ${response.status}`);
188
+ const bytes = await response.arrayBuffer();
189
+ const hash = await crypto.subtle.digest("SHA-256", bytes);
190
+ const sha = [...new Uint8Array(hash)].map(v => v.toString(16).padStart(2, "0")).join("");
191
+ if (expectedSHA && sha !== expectedSHA) throw new Error(`Pinned bytes changed: ${path}`);
192
+ return {data:JSON.parse(new TextDecoder().decode(bytes)), sha};
193
+ }
194
+ async function start() {
195
+ const [plan, schema] = await Promise.all([
196
+ read("benchmarks-plan.json", contract.inventorySHA), read("benchmarks.schema.json", contract.schemaSHA)
197
+ ]);
198
+ const context = {inventory:plan.data, packet:null, index:null, error:null, packetSHA:null};
199
+ try {
200
+ const feed = await read("benchmarks-feed.json");
201
+ if (feed.data.results !== null) {
202
+ if (feed.data.results !== "benchmarks-results.json") throw new Error("Only the local accepted result path is allowed");
203
+ const results = await read(feed.data.results);
204
+ context.index = contract.validate(results.data, plan.data, schema.data, contract.revision);
205
+ context.packet = results.data;
206
+ context.packetSHA = results.sha;
207
+ }
208
+ } catch (error) { context.error = error.message; }
209
+ document.querySelectorAll(".bench-panel").forEach(section => build(section, context));
210
+ }
211
+ start().catch(error => {
212
+ document.querySelectorAll(".bench-panel").forEach(section => {
213
+ section.querySelector(".bench-content").replaceChildren(el("p", `${words[section.dataset.locale].loadError} (${error.message})`, "bench-notice"));
214
+ });
215
+ });
216
+ })();
benchmarks.schema.json ADDED
@@ -0,0 +1,599 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:kolektyw:n05:benchmark-results:1",
4
+ "type": "object",
5
+ "properties": {
6
+ "schema_version": {
7
+ "const": 1
8
+ },
9
+ "protocol_id": {
10
+ "type": "string",
11
+ "minLength": 1
12
+ },
13
+ "run_id": {
14
+ "type": "string",
15
+ "minLength": 1
16
+ },
17
+ "models": {
18
+ "type": "array",
19
+ "items": {
20
+ "type": "object",
21
+ "properties": {
22
+ "model_id": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "repo": {
27
+ "type": "string",
28
+ "minLength": 1
29
+ },
30
+ "revision": {
31
+ "type": [
32
+ "string",
33
+ "null"
34
+ ]
35
+ },
36
+ "weights_sha256": {
37
+ "anyOf": [
38
+ {
39
+ "type": "string",
40
+ "pattern": "^[0-9a-f]{64}$"
41
+ },
42
+ {
43
+ "type": "null"
44
+ }
45
+ ]
46
+ }
47
+ },
48
+ "required": [
49
+ "model_id",
50
+ "repo",
51
+ "revision",
52
+ "weights_sha256"
53
+ ],
54
+ "additionalProperties": false
55
+ }
56
+ },
57
+ "tasks": {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "object",
61
+ "properties": {
62
+ "task_id": {
63
+ "type": "string",
64
+ "pattern": "^T(0[1-9]|[1-4][0-9]|50)$"
65
+ },
66
+ "task": {
67
+ "type": "string",
68
+ "minLength": 1
69
+ },
70
+ "family": {
71
+ "type": "string",
72
+ "minLength": 1
73
+ },
74
+ "language": {
75
+ "enum": [
76
+ "PL",
77
+ "EN"
78
+ ]
79
+ },
80
+ "split": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ }
84
+ },
85
+ "required": [
86
+ "task_id",
87
+ "task",
88
+ "family",
89
+ "language",
90
+ "split"
91
+ ],
92
+ "additionalProperties": false
93
+ }
94
+ },
95
+ "observations": {
96
+ "type": "array",
97
+ "items": {
98
+ "$ref": "#/$defs/observation"
99
+ }
100
+ },
101
+ "contrasts": {
102
+ "type": "array",
103
+ "items": {
104
+ "$ref": "#/$defs/contrast"
105
+ }
106
+ },
107
+ "provenance": {
108
+ "type": "object",
109
+ "properties": {
110
+ "inventory_commit": {
111
+ "type": "string",
112
+ "minLength": 1
113
+ },
114
+ "kind": {
115
+ "enum": [
116
+ "measurement",
117
+ "contract_example"
118
+ ]
119
+ }
120
+ },
121
+ "required": [
122
+ "inventory_commit",
123
+ "kind"
124
+ ],
125
+ "additionalProperties": false
126
+ }
127
+ },
128
+ "required": [
129
+ "schema_version",
130
+ "protocol_id",
131
+ "run_id",
132
+ "models",
133
+ "tasks",
134
+ "observations",
135
+ "contrasts",
136
+ "provenance"
137
+ ],
138
+ "additionalProperties": false,
139
+ "$defs": {
140
+ "ci95": {
141
+ "type": "object",
142
+ "properties": {
143
+ "lower": {
144
+ "type": "number"
145
+ },
146
+ "upper": {
147
+ "type": "number"
148
+ },
149
+ "level": {
150
+ "const": 0.95
151
+ },
152
+ "method": {
153
+ "const": "paired_bootstrap"
154
+ },
155
+ "replicates": {
156
+ "const": 10000
157
+ },
158
+ "seed": {
159
+ "const": 20261028
160
+ }
161
+ },
162
+ "required": [
163
+ "lower",
164
+ "upper",
165
+ "level",
166
+ "method",
167
+ "replicates",
168
+ "seed"
169
+ ],
170
+ "additionalProperties": false
171
+ },
172
+ "observation": {
173
+ "type": "object",
174
+ "properties": {
175
+ "task_id": {
176
+ "type": "string",
177
+ "pattern": "^T(0[1-9]|[1-4][0-9]|50)$"
178
+ },
179
+ "model_id": {
180
+ "type": "string",
181
+ "minLength": 1
182
+ },
183
+ "protocol_id": {
184
+ "type": "string",
185
+ "minLength": 1
186
+ },
187
+ "metric": {
188
+ "type": "string",
189
+ "minLength": 1
190
+ },
191
+ "unit": {
192
+ "enum": [
193
+ "percent",
194
+ "score",
195
+ "byte_ppl"
196
+ ]
197
+ },
198
+ "higher_is_better": {
199
+ "type": "boolean"
200
+ },
201
+ "n_population": {
202
+ "type": [
203
+ "integer",
204
+ "null"
205
+ ],
206
+ "minimum": 0
207
+ },
208
+ "n_selected": {
209
+ "type": [
210
+ "integer",
211
+ "null"
212
+ ],
213
+ "minimum": 0
214
+ },
215
+ "n_scored": {
216
+ "type": "integer",
217
+ "minimum": 0
218
+ },
219
+ "state": {
220
+ "enum": [
221
+ "ok",
222
+ "not_run",
223
+ "blocked_access",
224
+ "blocked_runtime",
225
+ "blocked_security",
226
+ "blocked_judge",
227
+ "unsupported",
228
+ "failed",
229
+ "skipped"
230
+ ]
231
+ },
232
+ "value": {
233
+ "type": [
234
+ "number",
235
+ "null"
236
+ ]
237
+ },
238
+ "ci95": {
239
+ "anyOf": [
240
+ {
241
+ "type": "object",
242
+ "properties": {
243
+ "lower": {
244
+ "type": "number"
245
+ },
246
+ "upper": {
247
+ "type": "number"
248
+ },
249
+ "level": {
250
+ "const": 0.95
251
+ },
252
+ "method": {
253
+ "const": "paired_bootstrap"
254
+ },
255
+ "replicates": {
256
+ "const": 10000
257
+ },
258
+ "seed": {
259
+ "const": 20261028
260
+ }
261
+ },
262
+ "required": [
263
+ "lower",
264
+ "upper",
265
+ "level",
266
+ "method",
267
+ "replicates",
268
+ "seed"
269
+ ],
270
+ "additionalProperties": false
271
+ },
272
+ {
273
+ "type": "null"
274
+ }
275
+ ]
276
+ },
277
+ "source_id_digest": {
278
+ "anyOf": [
279
+ {
280
+ "type": "string",
281
+ "pattern": "^[0-9a-f]{64}$"
282
+ },
283
+ {
284
+ "type": "null"
285
+ }
286
+ ]
287
+ },
288
+ "results_sha256": {
289
+ "anyOf": [
290
+ {
291
+ "type": "string",
292
+ "pattern": "^[0-9a-f]{64}$"
293
+ },
294
+ {
295
+ "type": "null"
296
+ }
297
+ ]
298
+ },
299
+ "runner_sha256": {
300
+ "anyOf": [
301
+ {
302
+ "type": "string",
303
+ "pattern": "^[0-9a-f]{64}$"
304
+ },
305
+ {
306
+ "type": "null"
307
+ }
308
+ ]
309
+ }
310
+ },
311
+ "required": [
312
+ "task_id",
313
+ "model_id",
314
+ "protocol_id",
315
+ "metric",
316
+ "unit",
317
+ "higher_is_better",
318
+ "n_population",
319
+ "n_selected",
320
+ "n_scored",
321
+ "state",
322
+ "value",
323
+ "ci95",
324
+ "source_id_digest",
325
+ "results_sha256",
326
+ "runner_sha256"
327
+ ],
328
+ "additionalProperties": false,
329
+ "allOf": [
330
+ {
331
+ "if": {
332
+ "properties": {
333
+ "state": {
334
+ "const": "ok"
335
+ }
336
+ }
337
+ },
338
+ "then": {
339
+ "properties": {
340
+ "value": {
341
+ "type": "number"
342
+ },
343
+ "n_scored": {
344
+ "type": "integer",
345
+ "minimum": 1
346
+ },
347
+ "source_id_digest": {
348
+ "type": "string",
349
+ "pattern": "^[0-9a-f]{64}$"
350
+ },
351
+ "results_sha256": {
352
+ "type": "string",
353
+ "pattern": "^[0-9a-f]{64}$"
354
+ },
355
+ "runner_sha256": {
356
+ "type": "string",
357
+ "pattern": "^[0-9a-f]{64}$"
358
+ }
359
+ }
360
+ },
361
+ "else": {
362
+ "properties": {
363
+ "value": {
364
+ "type": "null"
365
+ },
366
+ "ci95": {
367
+ "type": "null"
368
+ }
369
+ }
370
+ }
371
+ }
372
+ ]
373
+ },
374
+ "contrast": {
375
+ "type": "object",
376
+ "properties": {
377
+ "task_id": {
378
+ "type": "string",
379
+ "pattern": "^T(0[1-9]|[1-4][0-9]|50)$"
380
+ },
381
+ "model_id": {
382
+ "type": "string",
383
+ "minLength": 1
384
+ },
385
+ "protocol_id": {
386
+ "type": "string",
387
+ "minLength": 1
388
+ },
389
+ "model_ref": {
390
+ "type": "string",
391
+ "minLength": 1
392
+ },
393
+ "delta": {
394
+ "type": [
395
+ "number",
396
+ "null"
397
+ ]
398
+ },
399
+ "ci95": {
400
+ "anyOf": [
401
+ {
402
+ "type": "object",
403
+ "properties": {
404
+ "lower": {
405
+ "type": "number"
406
+ },
407
+ "upper": {
408
+ "type": "number"
409
+ },
410
+ "level": {
411
+ "const": 0.95
412
+ },
413
+ "method": {
414
+ "const": "paired_bootstrap"
415
+ },
416
+ "replicates": {
417
+ "const": 10000
418
+ },
419
+ "seed": {
420
+ "const": 20261028
421
+ }
422
+ },
423
+ "required": [
424
+ "lower",
425
+ "upper",
426
+ "level",
427
+ "method",
428
+ "replicates",
429
+ "seed"
430
+ ],
431
+ "additionalProperties": false
432
+ },
433
+ {
434
+ "type": "null"
435
+ }
436
+ ]
437
+ },
438
+ "p_raw": {
439
+ "type": [
440
+ "number",
441
+ "null"
442
+ ],
443
+ "minimum": 0,
444
+ "maximum": 1
445
+ },
446
+ "p_holm": {
447
+ "type": [
448
+ "number",
449
+ "null"
450
+ ],
451
+ "minimum": 0,
452
+ "maximum": 1
453
+ },
454
+ "family_size": {
455
+ "type": "integer",
456
+ "minimum": 1
457
+ },
458
+ "verdict": {
459
+ "enum": [
460
+ "withheld",
461
+ "better",
462
+ "worse",
463
+ "inconclusive"
464
+ ]
465
+ },
466
+ "review": {
467
+ "type": "object",
468
+ "properties": {
469
+ "status": {
470
+ "enum": [
471
+ "pending",
472
+ "accepted",
473
+ "rejected"
474
+ ]
475
+ },
476
+ "actor": {
477
+ "type": [
478
+ "string",
479
+ "null"
480
+ ]
481
+ },
482
+ "artifact_sha256": {
483
+ "anyOf": [
484
+ {
485
+ "type": "string",
486
+ "pattern": "^[0-9a-f]{64}$"
487
+ },
488
+ {
489
+ "type": "null"
490
+ }
491
+ ]
492
+ }
493
+ },
494
+ "required": [
495
+ "status",
496
+ "actor",
497
+ "artifact_sha256"
498
+ ],
499
+ "additionalProperties": false,
500
+ "allOf": [
501
+ {
502
+ "if": {
503
+ "properties": {
504
+ "status": {
505
+ "const": "accepted"
506
+ }
507
+ }
508
+ },
509
+ "then": {
510
+ "properties": {
511
+ "actor": {
512
+ "type": "string",
513
+ "minLength": 1
514
+ },
515
+ "artifact_sha256": {
516
+ "type": "string",
517
+ "pattern": "^[0-9a-f]{64}$"
518
+ }
519
+ }
520
+ }
521
+ }
522
+ ]
523
+ }
524
+ },
525
+ "required": [
526
+ "task_id",
527
+ "model_id",
528
+ "protocol_id",
529
+ "model_ref",
530
+ "delta",
531
+ "ci95",
532
+ "p_raw",
533
+ "p_holm",
534
+ "family_size",
535
+ "verdict",
536
+ "review"
537
+ ],
538
+ "additionalProperties": false,
539
+ "allOf": [
540
+ {
541
+ "if": {
542
+ "properties": {
543
+ "verdict": {
544
+ "enum": [
545
+ "better",
546
+ "worse",
547
+ "inconclusive"
548
+ ]
549
+ }
550
+ }
551
+ },
552
+ "then": {
553
+ "properties": {
554
+ "review": {
555
+ "properties": {
556
+ "status": {
557
+ "const": "accepted"
558
+ }
559
+ }
560
+ },
561
+ "delta": {
562
+ "type": "number"
563
+ },
564
+ "p_raw": {
565
+ "type": "number"
566
+ },
567
+ "p_holm": {
568
+ "type": "number"
569
+ }
570
+ }
571
+ }
572
+ },
573
+ {
574
+ "if": {
575
+ "properties": {
576
+ "review": {
577
+ "properties": {
578
+ "status": {
579
+ "enum": [
580
+ "pending",
581
+ "rejected"
582
+ ]
583
+ }
584
+ }
585
+ }
586
+ }
587
+ },
588
+ "then": {
589
+ "properties": {
590
+ "verdict": {
591
+ "const": "withheld"
592
+ }
593
+ }
594
+ }
595
+ }
596
+ ]
597
+ }
598
+ }
599
+ }
import-benchmarks.cjs ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ // Offline adapter, not a scorer or publisher. Validates N05's pinned wire
3
+ // contract and cross-field invariants before replacing the local result feed.
4
+ // Usage: node import-benchmarks.cjs PATH_TO_MEASUREMENT_PACKET.json
5
+ const fs = require("node:fs");
6
+ const path = require("node:path");
7
+ const crypto = require("node:crypto");
8
+ const contract = require("./benchmarks-contract.js");
9
+ function pinned(name, expected) {
10
+ const raw = fs.readFileSync(path.join(__dirname, name));
11
+ if (crypto.createHash("sha256").update(raw).digest("hex") !== expected) throw new Error(`Pinned input changed: ${name}`);
12
+ return JSON.parse(raw.toString("utf8"));
13
+ }
14
+ function main() {
15
+ if (process.argv.length !== 3) throw new Error("Usage: node import-benchmarks.cjs PACKET.json");
16
+ const inventory = pinned("benchmarks-plan.json", contract.inventorySHA);
17
+ const schema = pinned("benchmarks.schema.json", contract.schemaSHA);
18
+ const raw = fs.readFileSync(process.argv[2]);
19
+ const packet = JSON.parse(raw.toString("utf8"));
20
+ contract.validate(packet, inventory, schema, contract.revision);
21
+ // Validation happens before any write. Feed configuration is written last.
22
+ const output = path.join(__dirname, "benchmarks-results.json");
23
+ const staging = output + ".new";
24
+ fs.writeFileSync(staging, raw);
25
+ fs.renameSync(staging, output);
26
+ const feed = path.join(__dirname, "benchmarks-feed.json");
27
+ fs.writeFileSync(feed + ".new", '{\n "results": "benchmarks-results.json"\n}\n');
28
+ fs.renameSync(feed + ".new", feed);
29
+ console.log(JSON.stringify({run_id:packet.run_id,protocol_id:packet.protocol_id,kind:packet.provenance.kind,
30
+ observations:packet.observations.length,results_sha256:crypto.createHash("sha256").update(raw).digest("hex")}));
31
+ }
32
+ try { main(); } catch (error) { console.error(`STOP: ${error.message}`); process.exitCode = 1; }
index.html CHANGED
@@ -95,6 +95,9 @@
95
  figure:has(> img) img { width:760px; max-width:none; }
96
  }
97
  </style>
 
 
 
98
  </head>
99
  <body data-lang="en">
100
  <nav class="lang" aria-label="Language"><button type="button" data-set="en" aria-pressed="true">EN</button><button type="button" data-set="pl" aria-pressed="false">PL</button></nav>
@@ -242,6 +245,13 @@
242
  used a constant learning rate; a final decay has not been applied, so these are not end-of-training numbers for the model line.</p>
243
  </section>
244
 
 
 
 
 
 
 
 
245
  <section>
246
  <h2>How we do it</h2>
247
  <ol class="steps">
@@ -421,6 +431,13 @@
421
  szła przy stałym tempie uczenia; końcowego wygaszania nie zastosowano, więc to nie są końcowe liczby tej linii modelu.</p>
422
  </section>
423
 
 
 
 
 
 
 
 
424
  <section>
425
  <h2>Jak to robimy</h2>
426
  <ol class="steps">
 
95
  figure:has(> img) img { width:760px; max-width:none; }
96
  }
97
  </style>
98
+ <link rel="stylesheet" href="benchmarks.css">
99
+ <script src="benchmarks-contract.js" defer></script>
100
+ <script src="benchmarks.js" defer></script>
101
  </head>
102
  <body data-lang="en">
103
  <nav class="lang" aria-label="Language"><button type="button" data-set="en" aria-pressed="true">EN</button><button type="button" data-set="pl" aria-pressed="false">PL</button></nav>
 
245
  used a constant learning rate; a final decay has not been applied, so these are not end-of-training numbers for the model line.</p>
246
  </section>
247
 
248
+ <section class="bench-panel" data-locale="en" aria-labelledby="bench-title-en">
249
+ <h2 id="bench-title-en">Benchmark campaign · N05-50</h2>
250
+ <p class="note">Protocol inventory, not fifty completed measurements. Related variants are not independent datasets. Panel-200 and full Open PL replication must remain separate.</p>
251
+ <div class="bench-content" role="status">Loading protocol inventory…</div>
252
+ <noscript><p>JavaScript is required for filtering. <a href="benchmarks-plan.json">Download the pinned task inventory</a>.</p></noscript>
253
+ </section>
254
+
255
  <section>
256
  <h2>How we do it</h2>
257
  <ol class="steps">
 
431
  szła przy stałym tempie uczenia; końcowego wygaszania nie zastosowano, więc to nie są końcowe liczby tej linii modelu.</p>
432
  </section>
433
 
434
+ <section class="bench-panel" data-locale="pl" aria-labelledby="bench-title-pl">
435
+ <h2 id="bench-title-pl">Kampania benchmarków · N05-50</h2>
436
+ <p class="note">Inwentarz protokołu, nie pięćdziesiąt wykonanych pomiarów. Powiązane warianty nie są niezależnymi zbiorami. Panel-200 i pełna replika Open PL pozostają osobnymi skalami.</p>
437
+ <div class="bench-content" role="status">Wczytuję inwentarz protokołu…</div>
438
+ <noscript><p>Filtrowanie wymaga JavaScript. <a href="benchmarks-plan.json">Pobierz przypięty inwentarz zadań</a>.</p></noscript>
439
+ </section>
440
+
441
  <section>
442
  <h2>Jak to robimy</h2>
443
  <ol class="steps">