Compare commits

...

1 Commits

Author SHA1 Message Date
elffuss-bot
f0bf4465c7 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
2026-10-05 17:59:10 +00:00
3 changed files with 50 additions and 2 deletions

View File

@@ -0,0 +1,12 @@
{
"schema": "elffuss-t2t/criteria@2",
"issue": 7,
"criteria": [
{
"index": 1,
"tests": [
"tests/acceptance/7/criteria.test.js::criterion 1"
]
}
]
}

View File

@@ -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'))
})

View File

@@ -12,6 +12,7 @@
// el de juegos ejecuta el juego generado y lo puntúa mirándolo correr. // el de juegos ejecuta el juego generado y lo puntúa mirándolo correr.
import { DEFAULTS, packHistoryACER, estimateTokens } from './acer-core.js'; import { DEFAULTS, packHistoryACER, estimateTokens } from './acer-core.js';
import { TASKS } from './swe-tasks.js'; import { TASKS } from './swe-tasks.js';
import { MODELS } from './providers/litert.js';
const $ = s => document.querySelector(s); 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; }; 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 = [ const BRAINS = [
['rules', 'Reglas (sin GPU)', 'Determinista. Valida el arnés sin bajar pesos.'], ['rules', 'Reglas (sin GPU)', 'Determinista. Valida el arnés sin bajar pesos.'],
['onnx', 'Elffuss LM (CPU/wasm)', 'LFM2.5-1.2B por transformers.js.'], ['onnx', 'Elffuss LM (CPU/wasm)', 'LFM2.5-1.2B por transformers.js.'],
['litert:gemma-e2b', 'Gemma-4 E2B (~2 GB)', 'WebGPU.'], ...['gemma-e2b', 'gemma-e4b'].map(k => ['litert:' + k, MODELS[k].label, MODELS[k].tag]),
['litert:gemma-e4b', 'Gemma-4 E4B (~3 GB)', 'WebGPU. El mejor.'],
]; ];
// ─────────────────────────── consola ─────────────────────────── // ─────────────────────────── consola ───────────────────────────