83 lines
3.5 KiB
Plaintext
83 lines
3.5 KiB
Plaintext
diff --git a/tests/acceptance/7/CRITERIA.json b/tests/acceptance/7/CRITERIA.json
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..4e2dbaa28b6ee66b629a86874cfbbb6070cfae75
|
|
--- /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 0000000000000000000000000000000000000000..da4d195c6d9ba38ad91b6dedd61ad757c9da45e3
|
|
--- /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 b42c64109c68f5d95209e6f2eb7ba3847099e7ad..fbc5595aa000794888b55080d1dd1f7dc49593af 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 ───────────────────────────
|