const HF = "https://huggingface.co/"; const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c])); const link = (id, text) => `${esc(text)}`; function card(m) { const org = m.owner === "Hebrish"; const badges = []; if (m.status) badges.push(`${esc(m.status)}`); if (m.gated) badges.push('Access request'); const facts = []; if (m.base_model) facts.push(["Base", link(m.base_model, m.base_model.split("/")[1])]); if (m.license) facts.push(["License", esc(m.license)]); if (m.variants.length) facts.push(["Formats", m.variants.map((v) => link(v.id, v.label)).join("")]); return `
${esc(m.owner)} ยท ${esc(m.type)}

${link(m.id, m.name)}

${esc(m.summary)}

${badges.length ? `
${badges.join("")}
` : ""} ${facts.length ? `
${facts.map(([k, v]) => `
${k}
${v}
`).join("")}
` : ""}
`; } (async () => { const data = await (await fetch("data.json")).json(); const q = document.getElementById("q"), out = document.getElementById("list"), tabs = document.getElementById("tabs"); const cards = data.groups.reduce((n, g) => n + g.models.length, 0); document.getElementById("built").textContent = data.built; document.getElementById("count").textContent = `${cards} models across ${data.repos} repositories.`; const draw = () => { const current = data.groups.find((g) => g.slug === location.hash.slice(1)) || data.groups[0]; const term = q.value.trim().toLowerCase(); tabs.innerHTML = data.groups.map((g) => `${esc(g.tab)} (${g.models.length})`).join(""); const grid = (list) => `
${list.map(card).join("")}
`; if (!term) { out.innerHTML = `

${esc(current.name)}

` + grid(current.models); return; } const match = (m) => [m.id, m.name, m.type, m.summary, m.base_model, ...m.variants.flatMap((v) => [v.id, v.label])].join(" ").toLowerCase().includes(term); out.innerHTML = data.groups.map((g) => [g, g.models.filter(match)]).filter(([, hit]) => hit.length) .map(([g, hit]) => `

${esc(g.name)}

` + grid(hit)).join("") || '

No models match.

'; }; q.addEventListener("input", draw); addEventListener("hashchange", () => { q.value = ""; draw(); }); draw(); })();