Solution 0x652a4c8d8d614a77a0eafb2df15ecc122e7733c2d0939ac32325dd8c8b78002d
All checks were successful
elffuss/validation Validation passed

T2T-Item: 0x652a4c8d8d614a77a0eafb2df15ecc122e7733c2d0939ac32325dd8c8b78002d
T2T-Issue: 0x848d97f788f6a99d51bb5fed8b5045346c66a05c693b03fbe211bd811ee80443
This commit is contained in:
2026-10-02 06:50:38 +00:00
committed by elffuss-bot
parent 42a4a9a67c
commit 6b8f44119e
3 changed files with 96 additions and 3 deletions

View File

@@ -397,6 +397,12 @@ async function pickLocalBrain() {
}
// heurística vieja como último recurso síncrono
const defaultBrain = () => !realGPU ? 'onnx' : (isMobile() ? 'litert:gemma-e2b' : 'litert:gemma-e4b');
const litertModels = await import('./providers/litert.js').then(m => m.MODELS || {});
for (const [id, model] of Object.entries(litertModels)) {
if (realGPU) {
opts.push({ id: `litert:${id}`, label: model.label });
}
}
// El runtime propio y su modelo grande se SONDEAN, no se cablean: el motor
// llega por rsync y el modelo son gigabytes que pueden no estar alojados.
@@ -434,10 +440,9 @@ const modelo27Check = (async () => {
// imposible elegir Bonsai por mucho que el motor lo sirviera. Es justo el modo
// de fallo que avisa el comentario de `modelo27Check`: un nombre duplicado es un
// nombre que se queda viejo.
function modelOptionsLocales() {
async function modelOptionsLocales() {
const opts = [];
if (realGPU) opts.push({ id: 'litert:gemma-e4b', label: 'Gemma-4 E4B · LiteRT-LM (~4 GB) ★' });
if (realGPU) opts.push({ id: 'litert:gemma-e2b', label: 'Gemma-4 E2B · LiteRT-LM (~2 GB)' });
opts.push({ id: 'onnx', label: 'Elffuss LM (healed · 850 MB) — ligero' });
opts.push({ id: 'onnx:qwen3.5-0.8b', label: 'Qwen3.5-0.8B · WebGPU (~600 MB)' });
if (realGPU && ENGINE_READY) opts.push({ id: 'engine:qwen35-0.8b', label: 'Qwen3.5-0.8B · Elffuss Engine (~800 MB)' });