From f0bf4465c7b2c9c58ca12b934548b20d27b13cbd Mon Sep 17 00:00:00 2001 From: elffuss-bot Date: Mon, 5 Oct 2026 17:59:10 +0000 Subject: [PATCH] Apply item 0x054ca82f for issue #7 Squash of the patch of item 0x054ca82fe89ff53664b84304b335f216bd1dfbeca76588ee9d0169e905dac9ef, final in the elffuss ledger. Solver 0xa472b6bac297911f562335db561c6cbf33e5c32e; 2 approvals of round 0. T2T-Item: 0x054ca82fe89ff53664b84304b335f216bd1dfbeca76588ee9d0169e905dac9ef T2T-Issue: 0x7bf84a053d2bd6ce83a7ce9d2799aadf280de622b31dbf03026d0e69d76d3a9a T2T-Event: 0xc4d14ab5f340035493bca3a09c233287a16a2fd49c720b5d91e1fae2301ccfd7 --- tests/acceptance/7/CRITERIA.json | 12 ++++++++++ tests/acceptance/7/criteria.test.js | 36 +++++++++++++++++++++++++++++ web/js/lab.js | 4 ++-- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 tests/acceptance/7/CRITERIA.json create mode 100644 tests/acceptance/7/criteria.test.js diff --git a/tests/acceptance/7/CRITERIA.json b/tests/acceptance/7/CRITERIA.json new file mode 100644 index 0000000..4e2dbaa --- /dev/null +++ b/tests/acceptance/7/CRITERIA.json @@ -0,0 +1,12 @@ +{ + "schema": "elffuss-t2t/criteria@2", + "issue": 7, + "criteria": [ + { + "index": 1, + "tests": [ + "tests/acceptance/7/criteria.test.js::criterion 1" + ] + } + ] +} diff --git a/tests/acceptance/7/criteria.test.js b/tests/acceptance/7/criteria.test.js new file mode 100644 index 0000000..da4d195 --- /dev/null +++ b/tests/acceptance/7/criteria.test.js @@ -0,0 +1,36 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { MODELS } from '../../../web/js/providers/litert.js' + +// Minimal stand-in for the page so the lab module can run and render its lists. +class Node { + constructor(tag) { this.tag = tag; this.children = []; this.style = {}; this.className = ''; this.textContent = ''; this.innerHTML = ''; this.scrollTop = 0; this.scrollHeight = 0 } + appendChild(c) { this.children.push(c); return c } + append(...cs) { cs.forEach(c => this.children.push(c)) } + querySelector(s) { return this.slot(s) } + slot(s) { return slots.get(s) } +} +const slots = new Map() +const pick = s => { if (!slots.has(s)) { const n = new Node('slot'); n.id = s.slice(1); slots.set(s, n) } return slots.get(s) } +Node.prototype.querySelector = function (s) { return pick(s) } +globalThis.document = { querySelector: pick, createElement: t => new Node(t) } +const store = new Map() +globalThis.localStorage = { getItem: k => (store.has(k) ? store.get(k) : null), setItem: (k, v) => store.set(k, String(v)), removeItem: k => store.delete(k) } +globalThis.window = { open() {} } + +await import('../../../web/js/lab.js') + +function titlesOf(node, out = []) { + if (node.className === 't') out.push(node.textContent) + node.children.forEach(c => titlesOf(c, out)) + return out +} + +test('criterion 1', () => { + const titles = titlesOf(pick('#brains')) + assert.equal(titles.length, 4) + assert.equal(titles[2], MODELS['gemma-e2b'].label) + assert.equal(titles[3], MODELS['gemma-e4b'].label) + assert.ok(titles[0].startsWith('Reglas')) + assert.ok(titles[1].startsWith('Elffuss LM')) +}) diff --git a/web/js/lab.js b/web/js/lab.js index b42c641..fbc5595 100644 --- a/web/js/lab.js +++ b/web/js/lab.js @@ -12,6 +12,7 @@ // el de juegos ejecuta el juego generado y lo puntúa mirándolo correr. import { DEFAULTS, packHistoryACER, estimateTokens } from './acer-core.js'; import { TASKS } from './swe-tasks.js'; +import { MODELS } from './providers/litert.js'; const $ = s => document.querySelector(s); const el = (t, c, x) => { const n = document.createElement(t); if (c) n.className = c; if (x != null) n.textContent = x; return n; }; @@ -68,8 +69,7 @@ const BENCHES = [ const BRAINS = [ ['rules', 'Reglas (sin GPU)', 'Determinista. Valida el arnés sin bajar pesos.'], ['onnx', 'Elffuss LM (CPU/wasm)', 'LFM2.5-1.2B por transformers.js.'], - ['litert:gemma-e2b', 'Gemma-4 E2B (~2 GB)', 'WebGPU.'], - ['litert:gemma-e4b', 'Gemma-4 E4B (~3 GB)', 'WebGPU. El mejor.'], + ...['gemma-e2b', 'gemma-e4b'].map(k => ['litert:' + k, MODELS[k].label, MODELS[k].tag]), ]; // ─────────────────────────── consola ───────────────────────────