Fix local AI checks and consent caching
Build and publish static assets / publish (push) Failing after 4s
Build and publish static assets / publish (push) Failing after 4s
This commit is contained in:
+6
-3
@@ -187,12 +187,15 @@
|
|||||||
}
|
}
|
||||||
localStorage.setItem(acceptanceKey(manifest), manifest.license.acceptance_id);
|
localStorage.setItem(acceptanceKey(manifest), manifest.license.acceptance_id);
|
||||||
enabled = true; localStorage.setItem('ai-spel-local-ai-enabled', 'true');
|
enabled = true; localStorage.setItem('ai-spel-local-ai-enabled', 'true');
|
||||||
|
if (!('indexedDB' in global)) return 'Ditt godkännande sparades. Webbläsaren saknar lokal lagring som krävs för Gemma, men spelet fungerar utan lokal AI.';
|
||||||
announce('Godkännandet sparades för det här kontot och den här versionen av villkoren. Hämtar nu modellen från static-servern.');
|
announce('Godkännandet sparades för det här kontot och den här versionen av villkoren. Hämtar nu modellen från static-servern.');
|
||||||
try { await engine(); return 'Tack. Godkännandet sparades på den här enheten och modellen hämtas nu från static-servern.'; }
|
engine().catch(() => {});
|
||||||
catch (_) { return 'Godkännandet sparades. Modellen kunde inte starta just nu; spelet fungerar fortfarande utan lokal AI.'; }
|
return 'Tack. Godkännandet sparades på den här enheten och modellen hämtas nu från static-servern.';
|
||||||
}
|
}
|
||||||
if (normalized === 'lokal ai avvisa villkor') {
|
if (normalized === 'lokal ai avvisa villkor') {
|
||||||
const manifest = await getManifest();
|
let manifest;
|
||||||
|
try { manifest = await getManifest(); }
|
||||||
|
catch (_) { enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false'); return 'Static-servern kunde inte läsa villkorsversionen. Ingen Gemma-modell startas; spelet fungerar utan lokal AI.'; }
|
||||||
localStorage.removeItem(acceptanceKey(manifest));
|
localStorage.removeItem(acceptanceKey(manifest));
|
||||||
enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false');
|
enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false');
|
||||||
downloadAbort?.abort(); loadedEngine?.instance.exit?.(); loadedEngine = undefined;
|
downloadAbort?.abort(); loadedEngine?.instance.exit?.(); loadedEngine = undefined;
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ for (const file of voiceFiles) {
|
|||||||
const downloaded = join(output, 'voices', file.path);
|
const downloaded = join(output, 'voices', file.path);
|
||||||
if ((await stat(downloaded)).size !== file.size) throw new Error(`Missing verified voice file: ${file.path}`);
|
if ((await stat(downloaded)).size !== file.size) throw new Error(`Missing verified voice file: ${file.path}`);
|
||||||
}
|
}
|
||||||
console.log(`Static Piper assets prepared at ${output}`);
|
console.log(`Static voice and local AI assets prepared at ${output}`);
|
||||||
|
|
||||||
async function downloadVerified(url, destination, expectedSize, expectedSha256) {
|
async function downloadVerified(url, destination, expectedSize, expectedSha256) {
|
||||||
await mkdir(join(destination, '..'), {recursive: true});
|
await mkdir(join(destination, '..'), {recursive: true});
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ test('local assistance includes preflight, bounded continuity, and unsaved offli
|
|||||||
assert.match(source, /async function assist\(/);
|
assert.match(source, /async function assist\(/);
|
||||||
assert.match(source, /async function offline\(/);
|
assert.match(source, /async function offline\(/);
|
||||||
assert.match(source, /slice\(-12\)/);
|
assert.match(source, /slice\(-12\)/);
|
||||||
assert.match(source, /Lokalt, osparat förslag/);
|
assert.match(source, /Jag kan inte skapa ett lokalt förslag/);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('local diagnostics are opt-in, stored in IndexedDB, exportable, and deletable', () => {
|
test('local diagnostics are opt-in, stored in IndexedDB, exportable, and deletable', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user