Remove model download count from the home page
Browse filesRestores index.html, site/site.js and site/site.css to 1806095 (before the download stats changes).
- index.html +0 -1
- site/site.css +0 -1
- site/site.js +1 -18
index.html
CHANGED
|
@@ -32,7 +32,6 @@
|
|
| 32 |
<main id="landing">
|
| 33 |
<section class="wrap hero">
|
| 34 |
<p class="eyebrow"><img src="app/build/icon.png" alt="">Arx - Fine-tuned AI Model</p>
|
| 35 |
-
<p class="tiny muted model-dl" id="modelDownloads" hidden></p>
|
| 36 |
<h1>Is your computer secure?<br><span class="grad">Find out in a minute.</span></h1>
|
| 37 |
<p class="lead">A free audit of your Mac, Windows or Linux computer: <b><span data-count>70</span> checks</b> mapped to <b>ISO 27001</b>, <b>GDPR</b> and the <b>EU AI Act</b>. A small AI on your computer writes the report, and on Mac and Linux Arx can <b>fix problems for you</b>. It runs offline. <u>Nothing is uploaded.</u></p>
|
| 38 |
|
|
|
|
| 32 |
<main id="landing">
|
| 33 |
<section class="wrap hero">
|
| 34 |
<p class="eyebrow"><img src="app/build/icon.png" alt="">Arx - Fine-tuned AI Model</p>
|
|
|
|
| 35 |
<h1>Is your computer secure?<br><span class="grad">Find out in a minute.</span></h1>
|
| 36 |
<p class="lead">A free audit of your Mac, Windows or Linux computer: <b><span data-count>70</span> checks</b> mapped to <b>ISO 27001</b>, <b>GDPR</b> and the <b>EU AI Act</b>. A small AI on your computer writes the report, and on Mac and Linux Arx can <b>fix problems for you</b>. It runs offline. <u>Nothing is uploaded.</u></p>
|
| 37 |
|
site/site.css
CHANGED
|
@@ -62,7 +62,6 @@ p { margin: 0; }
|
|
| 62 |
.hero { text-align: center; padding: 56px 16px 32px; }
|
| 63 |
.eyebrow { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; color: var(--muted); margin-bottom: 18px; }
|
| 64 |
.eyebrow img { width: 22px; height: 22px; border-radius: 5px; }
|
| 65 |
-
.model-dl { margin: -12px 0 18px; }
|
| 66 |
.hero h1 { font-size: clamp(32px, 6vw, 54px); line-height: 1.08; font-weight: 800; margin-bottom: 18px; }
|
| 67 |
.lead { max-width: 640px; margin: 0 auto 28px; color: var(--muted); font-size: 16px; }
|
| 68 |
.lead b { color: var(--fg); font-weight: 600; }
|
|
|
|
| 62 |
.hero { text-align: center; padding: 56px 16px 32px; }
|
| 63 |
.eyebrow { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; color: var(--muted); margin-bottom: 18px; }
|
| 64 |
.eyebrow img { width: 22px; height: 22px; border-radius: 5px; }
|
|
|
|
| 65 |
.hero h1 { font-size: clamp(32px, 6vw, 54px); line-height: 1.08; font-weight: 800; margin-bottom: 18px; }
|
| 66 |
.lead { max-width: 640px; margin: 0 auto 28px; color: var(--muted); font-size: 16px; }
|
| 67 |
.lead b { color: var(--fg); font-weight: 600; }
|
site/site.js
CHANGED
|
@@ -105,23 +105,6 @@ async function initDownloads() {
|
|
| 105 |
} catch { /* keep the version written in the page */ }
|
| 106 |
}
|
| 107 |
|
| 108 |
-
// ---------- model downloads: read live from the Hugging Face API on every page load ----------
|
| 109 |
-
// The app downloads its AI model from the three MLC builds (q0f16 on most computers, q4f32_1 on graphics chips without
|
| 110 |
-
// 16-bit maths, q4f16_1 4-bit), so their all-time downloads together are the real count. Hugging Face counts per repo,
|
| 111 |
-
// not per version tag, so this covers every model version the app has loaded.
|
| 112 |
-
const MODEL_BUILDS = /^Devseis\/endpoint-auditor-0\.5b-.+-MLC$/;
|
| 113 |
-
async function initModelDownloads() {
|
| 114 |
-
try {
|
| 115 |
-
const r = await fetch('https://huggingface.co/api/models?author=Devseis&limit=100&expand[]=downloadsAllTime', { cache: 'no-store' });
|
| 116 |
-
if (!r.ok) throw new Error(`models: HTTP ${r.status}`);
|
| 117 |
-
const total = (await r.json()).filter(m => MODEL_BUILDS.test(m.id)).reduce((n, m) => n + (m.downloadsAllTime || 0), 0);
|
| 118 |
-
if (!total) return;
|
| 119 |
-
const el = $('modelDownloads');
|
| 120 |
-
el.textContent = `${total.toLocaleString('en-GB')} downloads so far`;
|
| 121 |
-
el.hidden = false;
|
| 122 |
-
} catch (e) { console.warn(e); /* leave the line hidden */ }
|
| 123 |
-
}
|
| 124 |
-
|
| 125 |
// ---------- checks ----------
|
| 126 |
async function loadLibrary() {
|
| 127 |
const get = async path => { const r = await fetch(path); if (!r.ok) throw new Error(`${path}: HTTP ${r.status}`); return r.json(); };
|
|
@@ -261,7 +244,7 @@ function handedOverReport() {
|
|
| 261 |
}
|
| 262 |
|
| 263 |
async function init() {
|
| 264 |
-
initDevice(); initDownloads();
|
| 265 |
try { await loadLibrary(); } catch (e) { $('checkCount').textContent = 'Could not load the check list.'; console.warn(e); return; }
|
| 266 |
document.querySelectorAll('[data-count]').forEach(el => { el.textContent = state.checks.length; });
|
| 267 |
renderRail(); renderFilters(); renderTable();
|
|
|
|
| 105 |
} catch { /* keep the version written in the page */ }
|
| 106 |
}
|
| 107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
// ---------- checks ----------
|
| 109 |
async function loadLibrary() {
|
| 110 |
const get = async path => { const r = await fetch(path); if (!r.ok) throw new Error(`${path}: HTTP ${r.status}`); return r.json(); };
|
|
|
|
| 244 |
}
|
| 245 |
|
| 246 |
async function init() {
|
| 247 |
+
initDevice(); initDownloads();
|
| 248 |
try { await loadLibrary(); } catch (e) { $('checkCount').textContent = 'Could not load the check list.'; console.warn(e); return; }
|
| 249 |
document.querySelectorAll('[data-count]').forEach(el => { el.textContent = state.checks.length; });
|
| 250 |
renderRail(); renderFilters(); renderTable();
|