Model-Genome-Korea / index.html
mayafree's picture
Upload index.html with huggingface_hub
12773b9 verified
Raw
History Blame Contribute Delete
48.6 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AI Model Genome — Korean LLM/VLM DNA Test</title>
<meta name="description" content="Architecture-fingerprint genome test of Korean sovereign LLM/VLM foundation models.">
<script src="https://unpkg.com/three@0.155.0/build/three.min.js"></script>
<script src="https://unpkg.com/3d-force-graph@1.73.4/dist/3d-force-graph.min.js"></script>
<script src="https://unpkg.com/three-spritetext@1.8.2/dist/three-spritetext.min.js"></script>
<style>
:root{
--bg:#F7F9FB; --panel:#FFFFFF; --ink:#16202E; --muted:#5C6B7F; --line:#E4EAF0;
--accent:#0E7C7B; --accent2:#2563EB; --chip:#EEF3F8;
--endemic:#16A34A; --chimera:#2563EB; --hybrid:#D97706; --derivative:#DC2626;
--qwen:#7C3AED; --llama:#0EA5E9; --deepseek:#0891B2; --mistral:#EA580C; --selfbase:#16A34A;
--shadow:0 1px 2px rgba(16,32,46,.06),0 8px 24px rgba(16,32,46,.06);
--radius:14px; --mono:ui-monospace,"SFMono-Regular","JetBrains Mono",Menlo,Consolas,monospace;
--sans:"Inter",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans KR","Noto Sans SC",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.5}
a{color:var(--accent2);text-decoration:none} a:hover{text-decoration:underline}
.wrap{max-width:1240px;margin:0 auto;padding:0 20px}
header{position:relative;overflow:hidden;background:
radial-gradient(1200px 300px at 80% -40%, #DCEFEF 0%, transparent 60%),
radial-gradient(900px 260px at 10% -30%, #E5ECFF 0%, transparent 60%), var(--panel);
border-bottom:1px solid var(--line)}
.hz{position:absolute;right:-30px;top:-20px;opacity:.45;pointer-events:none}
.head-in{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px 0 16px}
.brand{display:flex;gap:14px;align-items:center}
h1{font-size:23px;margin:0;letter-spacing:-.02em;font-weight:800}
.sub{color:var(--muted);font-size:13px;margin-top:3px;max-width:64ch}
.ctx-link{display:inline-block;margin-top:7px;font-size:12px;color:var(--accent2);font-weight:700;text-decoration:none}
.ctx-link:hover{text-decoration:underline}
.lang{display:flex;gap:3px;background:var(--chip);border-radius:999px;padding:4px;flex:0 0 auto}
.lang button{border:0;background:transparent;color:var(--muted);font-weight:700;font-size:12.5px;padding:6px 11px;border-radius:999px;cursor:pointer;white-space:nowrap}
.lang button.on{background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
.stat{display:flex;gap:22px;flex-wrap:wrap;padding:0 0 18px}
.stat div{font-size:12px;color:var(--muted)}
.stat b{display:block;font-size:19px;color:var(--ink);font-weight:800;font-variant-numeric:tabular-nums}
.controls{position:sticky;top:0;z-index:30;background:rgba(247,249,251,.9);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:11px 0}
.ctrl-row{display:flex;gap:9px;flex-wrap:wrap;align-items:center}
.search{flex:1 1 220px;position:relative;min-width:180px}
.search input{width:100%;border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:9px 12px 9px 33px;font-size:14px;color:var(--ink)}
.search svg{position:absolute;left:10px;top:10px;opacity:.5}
select{border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:8px 9px;font-size:12.5px;color:var(--ink);cursor:pointer}
.legend{display:flex;gap:13px;flex-wrap:wrap;padding:10px 0 0;font-size:11.5px;color:var(--muted)}
.lg{display:inline-flex;align-items:center;gap:6px} .dot{width:10px;height:10px;border-radius:3px;display:inline-block}
main{padding:16px 0 50px}
/* 3D graph */
.graph-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;position:relative;margin-bottom:16px}
.graph-head{display:flex;justify-content:space-between;align-items:center;padding:11px 15px;border-bottom:1px solid var(--line)}
.graph-head h2{font-size:14px;margin:0;font-weight:800} .graph-head .hint{font-size:11.5px;color:var(--muted)}
#graph3d{width:100%;height:460px;background:var(--bg)}
#graph3d canvas{display:block}
.gfallback{display:none;padding:40px;text-align:center;color:var(--muted);font-size:13px}
/* list */
.listcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.list-head{padding:11px 15px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.list-head h2{font-size:14px;margin:0;font-weight:800}
.tbl-scroll{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:12.5px;min-width:900px}
thead th{position:sticky;top:0;background:var(--chip);text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);font-weight:800;padding:9px 12px;white-space:nowrap;cursor:pointer;user-select:none}
thead th[title]{text-decoration:underline dotted rgba(120,136,155,.5);text-underline-offset:3px}
tbody td{padding:9px 12px;border-top:1px solid var(--line);vertical-align:middle}
tbody tr:hover{background:#FAFCFE}
.co-b{font-size:10.5px;font-weight:800;color:var(--muted);letter-spacing:.03em}
.nm{font-weight:800;font-size:13px} .nm small{display:block;color:var(--muted);font-weight:500;font-size:11px}
.geno-b{display:inline-flex;align-items:center;gap:5px;font-weight:800;font-size:11px;padding:3px 9px;border-radius:999px;color:#fff;white-space:nowrap}
.pill{font-family:var(--mono);font-size:10.5px;padding:2px 7px;border-radius:6px;font-weight:600;white-space:nowrap}
.pill.self{background:#E7F6EC;color:#137A3B}.pill.partial{background:#FDF0DD;color:#9A5B08}.pill.foreign{background:#FBE7E9;color:#B21D2A}.pill.measuring{background:#EEF0F3;color:#5C6B7F}
.axcell{display:flex;flex-direction:column;gap:3px}
.lin{font-family:var(--mono);font-size:11px;color:var(--muted)}
.fp-mini{font-family:var(--mono);font-size:10px;color:var(--muted)}
.lic-b{font-family:var(--mono);font-size:10.5px;font-weight:700}
.chk{display:inline-flex;width:19px;height:19px;border:1.5px solid #D0D8E0;border-radius:5px;align-items:center;justify-content:center;font-size:12px;color:#C0C8D2;font-weight:800}
.chk.on{background:#16A34A;border-color:#16A34A;color:#fff}
.whyrow td{padding:0 12px 11px;border-top:0}
.why{font-size:10.5px;color:#78899B;font-style:italic;line-height:1.55}
.empty{text-align:center;color:var(--muted);padding:44px 0;font-size:14px}
.footnote{color:var(--muted);font-size:12px;margin-top:16px;line-height:1.7}
.footnote b{color:var(--ink)}
.disclaimer{background:#FFF8EC;border-bottom:1px solid #F0E4C8;color:#6B5B3E}
.disclaimer .wrap{padding:9px 20px;display:flex;gap:9px;flex-wrap:wrap;align-items:baseline;font-size:12px}
.dtag{font-weight:800;color:#9A6B1A;white-space:nowrap}
.disclaimer details{flex-basis:100%;margin-top:3px}
.disclaimer summary{cursor:pointer;color:#9A6B1A;font-weight:700;font-size:11.5px;display:inline-block}
.disclaimer .dfull{margin-top:7px;line-height:1.65;color:#6B5B3E;font-size:11px;max-width:96ch}
footer{border-top:1px solid var(--line);color:var(--muted);font-size:12px;padding:20px 0 36px;text-align:center}
@media(max-width:640px){.head-in{flex-direction:column}#graph3d{height:360px}}
@media(prefers-color-scheme:dark){
:root{--bg:#0E1621;--panel:#17212E;--ink:#E6EDF3;--muted:#8F9DB0;--line:#273241;--chip:#1B2733;--accent2:#5B9BF5}
header{background:radial-gradient(1200px 300px at 80% -40%,#0F2033 0%,transparent 60%),radial-gradient(900px 260px at 10% -30%,#15233F 0%,transparent 60%),var(--panel)}
.controls{background:rgba(14,22,33,.9)}
.disclaimer{background:#241F10;border-color:#3A3016;color:#C4B384}
.dtag,.disclaimer summary{color:#E0B84A}
.disclaimer .dfull{color:#C4B384}
thead th{background:#1B2733}
tbody tr:hover{background:#1B2733}
.pill.self{background:#12301F;color:#4ADE80}.pill.partial{background:#31280F;color:#FBBF24}.pill.foreign{background:#31171A;color:#F87171}.pill.measuring{background:#222C38;color:#96A2B2}
.chk{border-color:#3A4656;color:#5A6676}
.why{color:#8593A5}
.search input,select{background:#17212E;border-color:#273241;color:#E6EDF3}
#graph3d{background:#0E1621}
}
</style>
</head>
<body>
<header>
<div class="hz"><svg width="220" height="140" viewBox="0 0 220 140" fill="none">
<g stroke="#0E7C7B" stroke-width="2" opacity="0.5"><path d="M20 10 C 110 38, 110 102, 20 130"/><path d="M85 10 C -5 38, -5 102, 85 130"/><path d="M120 10 C 210 38, 210 102, 120 130"/><path d="M185 10 C 95 38, 95 102, 185 130"/></g>
<g stroke="#2563EB" stroke-width="2" opacity="0.35"><line x1="26" y1="28" x2="78" y2="28"/><line x1="20" y1="52" x2="85" y2="52"/><line x1="20" y1="88" x2="85" y2="88"/><line x1="26" y1="112" x2="78" y2="112"/><line x1="126" y1="28" x2="178" y2="28"/><line x1="120" y1="52" x2="185" y2="52"/><line x1="120" y1="88" x2="185" y2="88"/></g></svg></div>
<div class="wrap">
<div class="head-in">
<div class="brand">
<div><svg width="46" height="46" viewBox="0 0 46 46" fill="none"><rect width="46" height="46" rx="12" fill="#0E7C7B"/><g stroke="#fff" stroke-width="2.4" stroke-linecap="round"><path d="M15 9 C 33 17, 33 29, 15 37"/><path d="M31 9 C 13 17, 13 29, 31 37"/><line x1="18" y1="14" x2="28" y2="14"/><line x1="14" y1="23" x2="32" y2="23"/><line x1="18" y1="32" x2="28" y2="32"/></g></svg></div>
<div><h1 data-i="title">AI Model Genome</h1><div class="sub" data-i="sub">DNA test of Korean sovereign LLM/VLM foundation models.</div><a class="ctx-link" data-i="ctx" href="https://www.zhihu.com/question/2067512422555029717" target="_blank" rel="noopener">📍 the debate →</a></div>
</div>
<div class="lang">
<button id="lang-en" class="on" onclick="setLang('en')">EN</button>
<button id="lang-zh" onclick="setLang('zh')">中文</button>
<button id="lang-ko" onclick="setLang('ko')">한국어</button>
</div>
</div>
<div class="stat">
<div><b id="s-models"></b><span data-i="s_models">models</span></div>
<div><b id="s-end"></b><span data-i="s_endemic">endemic</span></div>
<div><b id="s-der"></b><span data-i="s_derivative">derivative</span></div>
<div><b id="s-co">9</b><span data-i="s_orgs">organizations</span></div>
</div>
</div>
</header>
<div class="disclaimer"><div class="wrap">
<span class="dtag" data-i="disc_tag">⚠️ Research &amp; informational use only</span>
<span data-i="disc_short">Automated estimates from public metadata — not an allegation of infringement or wrongdoing.</span>
<details><summary data-i="disc_more">Read full disclaimer</summary><div class="dfull" data-i="disc_full"></div></details>
</div></div>
<div class="controls"><div class="wrap">
<div class="ctrl-row">
<div class="search"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.5" y2="16.5"/></svg><input id="q" type="text" oninput="apply()"></div>
<select id="f-co" onchange="apply()"></select>
<select id="f-geno" onchange="apply()"></select>
<select id="f-base" onchange="apply()"></select>
<select id="f-task" onchange="apply()"></select>
</div>
<div class="legend" id="legend"></div>
</div></div>
<main class="wrap">
<div class="graph-card">
<div class="graph-head"><h2 data-i="graph_title">🕸️ Genome Ontology — 3D lineage network</h2><span class="hint" data-i="graph_hint">drag to rotate · scroll to zoom · click node → open on HF</span></div>
<div id="graph3d"></div>
<div class="gfallback" id="gfallback"></div>
</div>
<div class="listcard">
<div class="list-head"><h2 data-i="list_title">Models</h2><span class="hint" id="list-count"></span></div>
<div class="tbl-scroll"><table id="tbl"><thead id="thead"></thead><tbody id="tbody"></tbody></table></div>
<div class="empty" id="empty" style="display:none" data-i="none">No models match your filters.</div>
</div>
<div class="footnote" id="foot"></div>
</main>
<footer><span data-i="footer">Measured from public config.json + tokenizer.json + embedding CKA. Neutral provenance tool — not an accusation; building on open-weight bases is standard practice.</span></footer>
<script>
const I18N={
en:{title:"AI Model Genome",sub:"DNA test of Korean sovereign LLM/VLM foundation models — architecture & weights fingerprints.",ctx:"📍 Why this tool? The Zhihu debate (2.7M views) →",
s_models:"models",s_endemic:"native",s_derivative:"ported",s_orgs:"organizations",
graph_title:"🕸️ Genome Ontology — 3D lineage network",graph_hint:"drag to rotate · scroll to zoom · click node → open on HF",
list_title:"Models",none:"No models match your filters.",count:"showing",
allco:"All organizations",allgeno:"All genotypes",allbase:"All lineages",alltask:"All types",
th_org:"Org",th_model:"Model",th_geno:"Genotype",th_arch:"Architecture",th_weight:"Weights",th_tok:"Tokenizer",th_attn:"Attention originality",th_lin:"Lineage",th_fp:"Fingerprint",
self:"self",partial:"partial",foreign:"foreign",measuring:"measuring",inherited:"inherited",scratch:"from-scratch",
ph:"Search model, org, base…",lineage:"lineage",sovereign:"Sovereign / self-built",
g_endemic:"Native",g_chimera:"Adapted",g_hybrid:"Mixed",g_derivative:"Ported",
th_lic:"License",th_open:"Open-source",lic_open:"open",lic_nc:"non-comm",lic_none:"unspecified",lic_custom:"custom",
footer:"Measured from public config.json + embedding similarity. Neutral provenance tool — not an accusation; building on open-weight bases is standard practice.",
foot:"<b>Method.</b> Architecture = model_type + (hidden·intermediate·layers) match vs foreign open-weights. Weights = embedding similarity (rotation-invariant): self = from-scratch, inherited = continued-pretraining. Attention = number of distinct attention mechanisms = architecture originality. <b>Genotype (architecture × weights):</b> Native = self arch+weights · Adapted = mostly self · Mixed = partial inheritance · Ported = foreign architecture+weights.",
disc_tag:"⚠️ Research &amp; informational use only",disc_short:"Automated estimates from public metadata — not an allegation of infringement or wrongdoing. Building on open-weight bases is legitimate, standard practice.",disc_more:"Read full disclaimer",disc_full:"This tool is provided for research, educational and informational purposes only, on an &quot;as is&quot; basis without warranty of any kind. All data is derived from publicly available model metadata and may contain errors or omissions. The genotype labels (Native / Adapted / Mixed / Ported) are interpretive classifications of architectural and weight similarity and do NOT constitute allegations of copyright infringement, plagiarism, license violation, or any wrongdoing. Building foundation models on open-weight bases (such as Qwen, Llama, DeepSeek or Mistral) is a widespread, legitimate and typically license-compliant engineering practice. All company names, model names and trademarks are the property of their respective owners. Corrections and disputes are welcome via the Community tab and will be addressed promptly.",
tt_geno:"Overall verdict from architecture + weights: Native, Adapted, Mixed, or Ported.",tt_arch:"Whether model_type and shape (hidden·intermediate·layers) match a foreign open-weight model.",tt_weight:"Embedding similarity: from-scratch pretraining vs continued-pretraining on a foreign base.",tt_attn:"Number of distinct attention mechanisms — more types means more architectural originality.",tt_lic:"Distribution license: Apache/MIT (open), other (custom), CC-BY-NC (non-commercial).",tt_open:"Truly open-source: training data, recipe and weights all public and reproducible (vs open-weight only).",tt_lin:"Which foreign open-weight base the model derives from, if any.",tt_fp:"Measured config: vocabulary size, hidden size, intermediate size, layer count.",
gflag:"3D network needs WebGL + CDN (three.js). Your environment blocked it — the list below has the full data."},
zh:{title:"AI模型基因检测",sub:"韩国主权LLM/VLM基础模型的DNA检测 — 架构与权重指纹。",ctx:"📍 为何做此工具?知乎讨论 (271万浏览) →",
s_models:"模型",s_endemic:"本土",s_derivative:"移植",s_orgs:"企业",
graph_title:"🕸️ 基因本体 — 3D血统网络",graph_hint:"拖拽旋转 · 滚轮缩放 · 点击节点 → 打开HF",
list_title:"模型",none:"没有符合条件的模型。",count:"显示",
allco:"全部企业",allgeno:"全部基因型",allbase:"全部血统",alltask:"全部类型",
th_org:"企业",th_model:"模型",th_geno:"基因型",th_arch:"架构",th_weight:"权重",th_tok:"分词器",th_attn:"注意力独创性",th_lin:"血统",th_fp:"指纹",
self:"自主",partial:"部分",foreign:"外源",measuring:"测量中",inherited:"继承",scratch:"从零训练",
ph:"搜索模型、企业、基础…",lineage:"血统",sovereign:"主权 / 自建",
g_endemic:"本土",g_chimera:"改造",g_hybrid:"混合",g_derivative:"移植",
th_lic:"许可证",th_open:"开源",lic_open:"开放",lic_nc:"非商业",lic_none:"未指定",lic_custom:"自定义",
footer:"基于公开 config.json + 嵌入相似度 实测。中立血统工具 — 非指控;基于开源权重构建是行业惯例。",
foot:"<b>方法。</b> 架构 = model_type + (hidden·intermediate·layers) 与外源开源权重匹配。权重 = 嵌入相似度(旋转不变):自主=从零训练,继承=持续预训练。注意力 = 不同注意力机制数量 = 架构独创性。<b>基因型(架构 × 权重):</b>本土=架构+权重自主 · 改造=大部分自主 · 混合=部分继承 · 移植=架构+权重外源。",
disc_tag:"⚠️ 仅供研究与信息用途",disc_short:"基于公开元数据的自动估算 — 并非侵权或不当行为指控。基于开源权重构建是合法且标准的做法。",disc_more:"查看完整免责声明",disc_full:"本工具仅供研究、教育和信息用途,按&quot;现状&quot;提供,不作任何形式的保证。所有数据均来自公开的模型元数据,可能存在错误或遗漏。基因型标签(本土/改造/混合/移植)是对架构与权重相似性的解释性分类,并不构成对版权侵权、抄袭、许可证违规或任何不当行为的指控。基于开源权重(如 Qwen、Llama、DeepSeek 或 Mistral)构建基础模型是业界广泛、合法且通常符合许可证的工程实践。所有公司名称、模型名称和商标均归其各自所有者所有。欢迎通过 Community 标签页提出更正与异议,我们将及时处理。",
tt_geno:"架构+权重的综合判定:本土、改造、混合或移植。",tt_arch:"model_type与形状(hidden·intermediate·layers)是否与外源开源权重匹配。",tt_weight:"嵌入相似度:从零训练 vs 在外源基础上持续预训练。",tt_attn:"不同注意力机制的数量 — 越多架构独创性越高。",tt_lic:"发布许可证:Apache/MIT(开放)、other(自定义)、CC-BY-NC(非商业)。",tt_open:"真正开源:训练数据、配方和权重全部公开且可复现(区别于仅开源权重)。",tt_lin:"派生自哪个外源开源权重基础模型。",tt_fp:"实测config:词表大小、hidden、intermediate、层数。",
gflag:"3D网络需要WebGL+CDN(three.js)。当前环境被拦截 — 下方列表包含完整数据。"},
ko:{title:"AI 모델 유전자 검사",sub:"한국 소버린 LLM/VLM 파운데이션 모델의 DNA 검사 — 아키텍처·가중치 지문.",ctx:"📍 왜 만들었나? 즈후 논쟁 (271만 조회) →",
s_models:"모델",s_endemic:"토종",s_derivative:"이식",s_orgs:"기업",
graph_title:"🕸️ 유전자 온톨로지 — 3D 계보 네트워크",graph_hint:"드래그 회전 · 스크롤 확대 · 노드 클릭 → HF 열기",
list_title:"모델",none:"조건에 맞는 모델이 없습니다.",count:"표시",
allco:"전체 기업",allgeno:"전체 유전자형",allbase:"전체 계보",alltask:"전체 유형",
th_org:"기업",th_model:"모델",th_geno:"유전자형",th_arch:"아키텍처",th_weight:"가중치",th_tok:"토크나이저",th_attn:"어텐션 독창성",th_lin:"계보",th_fp:"지문",
self:"자체",partial:"부분",foreign:"외산",measuring:"측정중",inherited:"상속",scratch:"프롬스크래치",
ph:"모델·기업·베이스 검색…",lineage:"계보",sovereign:"소버린 / 자체구축",
g_endemic:"토종",g_chimera:"개조",g_hybrid:"혼합",g_derivative:"이식",
th_lic:"라이선스",th_open:"오픈소스",lic_open:"오픈",lic_nc:"비상업",lic_none:"미지정",lic_custom:"자체",
footer:"공개 config.json + 임베딩 유사도 실측. 중립적 계보 도구이며 부정행위 고발이 아닙니다 — 오픈웨이트 베이스 활용은 업계 표준입니다.",
foot:"<b>측정 방법.</b> 아키텍처 = model_type + (hidden·intermediate·layers)가 외산 오픈웨이트와 일치. 가중치 = 임베딩 유사도(회전 불변): 자체=프롬스크래치, 상속=연속학습. 어텐션 = 서로 다른 어텐션 메커니즘 수 = 아키텍처 독창성. <b>유전자형(아키텍처 × 가중치):</b> 토종=아키텍처+가중치 자체 · 개조=대부분 자체 · 혼합=부분 상속 · 이식=아키텍처+가중치 외산.",
disc_tag:"⚠️ 연구·정보 목적 전용",disc_short:"공개 메타데이터 기반 자동 추정치입니다 — 침해·부정행위 주장이 아닙니다. 오픈웨이트 베이스 활용은 합법적이고 표준적인 관행입니다.",disc_more:"전체 면책 조항 보기",disc_full:"본 도구는 연구·교육·정보 제공 목적으로만, 어떠한 종류의 보증도 없이 &quot;있는 그대로(as-is)&quot; 제공됩니다. 모든 데이터는 공개된 모델 메타데이터에서 추출되었으며 오류나 누락이 있을 수 있습니다. 유전자형 라벨(토종/개조/혼합/이식)은 아키텍처 및 가중치 유사성에 대한 해석적 분류이며, 저작권 침해·표절·라이선스 위반 또는 여하한 부정행위에 대한 주장을 구성하지 않습니다. 오픈웨이트 베이스(Qwen·Llama·DeepSeek·Mistral 등)를 기반으로 파운데이션 모델을 구축하는 것은 업계에 널리 퍼진 합법적이며 통상 라이선스에 부합하는 엔지니어링 관행입니다. 모든 회사명·모델명·상표는 각 소유자의 자산입니다. 정정 및 이의는 Community 탭을 통해 제기해 주시면 신속히 반영하겠습니다.",
tt_geno:"아키텍처+가중치 종합 판정: 토종·개조·혼합·이식.",tt_arch:"model_type과 형상(hidden·intermediate·layers)이 외산 오픈웨이트와 일치하는지.",tt_weight:"임베딩 유사도: 프롬스크래치 vs 외산 기반 연속학습 구분.",tt_attn:"서로 다른 어텐션 메커니즘 수 — 많을수록 아키텍처 독창성 높음.",tt_lic:"배포 라이선스: Apache/MIT(오픈)·other(자체)·CC-BY-NC(비상업).",tt_open:"진짜 오픈소스: 학습 데이터+레시피+가중치 전부 공개·재현 가능(오픈웨이트와 구분).",tt_lin:"어느 외산 오픈웨이트 베이스에서 파생되었는지.",tt_fp:"실측 config: 어휘 크기·hidden·intermediate·레이어 수.",
gflag:"3D 네트워크는 WebGL+CDN(three.js)이 필요합니다. 현재 환경에서 차단됨 — 아래 리스트에 전체 데이터가 있습니다."}
};
const GENOS={endemic:{c:"#16A34A",k:"g_endemic"},chimera:{c:"#2563EB",k:"g_chimera"},hybrid:{c:"#D97706",k:"g_hybrid"},derivative:{c:"#DC2626",k:"g_derivative"}};
const BASES={"qwen2.5":{n:"Qwen2.5",v:"Alibaba",c:"#7C3AED"},"qwen3":{n:"Qwen3",v:"Alibaba",c:"#7C3AED"},"llama3":{n:"Llama-3.x",v:"Meta",c:"#0EA5E9"},"deepseekv3":{n:"DeepSeek-V3",v:"DeepSeek",c:"#0891B2"},"mistral":{n:"Mistral/Mixtral",v:"Mistral",c:"#EA580C"},"self":{n:"Self-built",v:"—",c:"#16A34A"}};
const M=[
{co:"LG AI",name:"EXAONE-3.5-7.8B",ko:"엑사원 3.5 7.8B",zh:"EXAONE-3.5-7.8B",size:"7.8B",task:"LLM",hf:"LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct",yr:"2024",mt:"exaone",voc:102400,hid:4096,int:14336,lay:32,base:"self",archAx:"partial",tokAx:"self",tok:0.51,wAx:"self",geno:"chimera"},
{co:"LG AI",name:"EXAONE-4.0-32B",ko:"엑사원 4.0 32B",zh:"EXAONE-4.0-32B",size:"32B",task:"LLM",hf:"LGAI-EXAONE/EXAONE-4.0-32B",yr:"2025",mt:"exaone4",voc:102400,hid:5120,int:27392,lay:64,base:"self",archAx:"self",tokAx:"self",tok:0.50,wAx:"self",geno:"endemic"},
{co:"LG AI",name:"EXAONE-4.5-33B",ko:"엑사원 4.5 33B (VLM)",zh:"EXAONE-4.5-33B (VLM)",size:"33B",task:"VLM",hf:"LGAI-EXAONE/EXAONE-4.5-33B",yr:"2026",mt:"exaone4_5",voc:153600,hid:0,int:0,lay:0,base:"self",archAx:"self",tokAx:"self",tok:0.50,wAx:"self",geno:"endemic"},
{co:"LG AI",name:"K-EXAONE-236B-A23B",ko:"K-엑사원 236B",zh:"K-EXAONE-236B",size:"236B·MoE",task:"LLM",hf:"LGAI-EXAONE/K-EXAONE-236B-A23B",yr:"2025",mt:"exaone_moe",voc:153600,hid:6144,int:18432,lay:48,base:"self",archAx:"self",tokAx:"self",tok:0.50,wAx:"self",geno:"endemic"},
{co:"LG AI",name:"K-EXAONE-2.0-750B",ko:"K-엑사원 2.0 750B",zh:"K-EXAONE-2.0-750B",size:"750B·MoE",task:"LLM",hf:"LGAI-EXAONE/K-EXAONE-2.0-750B-A37B",yr:"2026",mt:"exaone_moe",voc:153600,hid:6144,int:18432,lay:78,base:"self",archAx:"self",tokAx:"self",tok:0.50,wAx:"self",geno:"endemic"},
{co:"Upstage",name:"SOLAR-10.7B",ko:"솔라 10.7B",zh:"SOLAR-10.7B",size:"10.7B",task:"LLM",hf:"upstage/SOLAR-10.7B-v1.0",yr:"2023",mt:"llama",voc:32000,hid:4096,int:14336,lay:48,base:"mistral",archAx:"foreign",tokAx:"self",tok:0.33,wAx:"inherited",geno:"chimera"},
{co:"Upstage",name:"Solar-Open-100B",ko:"솔라 오픈 100B",zh:"Solar-Open-100B",size:"100B·MoE",task:"LLM",hf:"upstage/Solar-Open-100B",yr:"2025",mt:"solar_open",voc:196608,hid:4096,int:10240,lay:48,base:"self",archAx:"self",tokAx:"self",tok:0.53,wAx:"self",geno:"endemic"},
{co:"Upstage",name:"Solar-Open2-250B",ko:"솔라 오픈2 250B",zh:"Solar-Open2-250B",size:"250B·MoE",task:"LLM",hf:"upstage/Solar-Open2-250B",yr:"2026",mt:"solar_open2",voc:196608,hid:4096,int:10240,lay:48,base:"self",archAx:"self",tokAx:"self",tok:0.53,wAx:"self",geno:"endemic"},
{co:"SKT",name:"A.X-4.0-Light",ko:"에이닷 X 4.0 라이트",zh:"A.X-4.0-Light",size:"7B",task:"LLM",hf:"skt/A.X-4.0-Light",yr:"2025",mt:"qwen2",voc:102400,hid:3584,int:18944,lay:28,base:"qwen2.5",archAx:"foreign",tokAx:"self",tok:0.39,wAx:"inherited",geno:"chimera"},
{co:"SKT",name:"A.X-4.0",ko:"에이닷 X 4.0",zh:"A.X-4.0",size:"72B",task:"LLM",hf:"skt/A.X-4.0",yr:"2025",mt:"qwen2",voc:102400,hid:8192,int:29568,lay:80,base:"qwen2.5",archAx:"foreign",tokAx:"self",tok:0.39,wAx:"inherited",geno:"chimera"},
{co:"SKT",name:"A.X-K2",ko:"에이닷 X K2",zh:"A.X-K2",size:"MoE",task:"LLM",hf:"skt/A.X-K2",yr:"2026",mt:"axk2",voc:163840,hid:7168,int:18432,lay:61,base:"deepseekv3",archAx:"foreign",tokAx:"partial",tok:0.60,wAx:"inherited",geno:"hybrid"},
{co:"SKT",name:"A.X-4.0-VL-Light",ko:"에이닷 X 4.0 VL",zh:"A.X-4.0-VL-Light",size:"7B",task:"VLM",hf:"skt/A.X-4.0-VL-Light",yr:"2025",mt:"qwen2",voc:102400,hid:3584,int:18944,lay:28,base:"qwen2.5",archAx:"foreign",tokAx:"self",tok:0.39,wAx:"inherited",geno:"chimera"},
{co:"SKT",name:"A.X-3.1",ko:"에이닷 X 3.1",zh:"A.X-3.1",size:"34B",task:"LLM",hf:"skt/A.X-3.1",yr:"2025",mt:"llama",voc:102400,hid:8192,int:21824,lay:48,base:"self",archAx:"partial",tokAx:"self",tok:0.39,wAx:"self",geno:"chimera"},
{co:"NCSOFT",name:"VARCO-VISION-2.0-14B",ko:"바르코 비전 2.0 14B",zh:"VARCO-VISION-2.0-14B",size:"14B",task:"VLM",hf:"NCSOFT/VARCO-VISION-2.0-14B",yr:"2025",mt:"qwen3",voc:151681,hid:5120,int:17408,lay:40,base:"qwen3",archAx:"foreign",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"derivative"},
{co:"NCSOFT",name:"VARCO-VISION-2.0-1.7B",ko:"바르코 비전 2.0 1.7B",zh:"VARCO-VISION-2.0-1.7B",size:"1.7B",task:"VLM",hf:"NCSOFT/VARCO-VISION-2.0-1.7B",yr:"2025",mt:"qwen3",voc:151681,hid:2048,int:6144,lay:28,base:"qwen3",archAx:"foreign",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"derivative"},
{co:"NCSOFT",name:"Llama-VARCO-8B",ko:"라마 바르코 8B",zh:"Llama-VARCO-8B",size:"8B",task:"LLM",hf:"NCSOFT/Llama-VARCO-8B-Instruct",yr:"2024",mt:"llama",voc:128256,hid:4096,int:14336,lay:32,base:"llama3",archAx:"foreign",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"derivative"},
{co:"NAVER",name:"HyperCLOVAX-Think-32B",ko:"하이퍼클로바X 씽크 32B",zh:"HyperCLOVAX-Think-32B",size:"32B",task:"VLM",hf:"naver-hyperclovax/HyperCLOVAX-SEED-Think-32B",yr:"2025",mt:"vlm",voc:128256,hid:5120,int:24192,lay:72,base:"self",archAx:"partial",tokAx:"foreign",tok:0.93,wAx:"partial",geno:"hybrid"},
{co:"NAVER",name:"HyperCLOVAX-Think-14B",ko:"하이퍼클로바X 씽크 14B",zh:"HyperCLOVAX-Think-14B",size:"14B",task:"LLM",hf:"naver-hyperclovax/HyperCLOVAX-SEED-Think-14B",yr:"2025",mt:"hyperclovax",voc:110592,hid:6144,int:14336,lay:38,base:"self",archAx:"partial",tokAx:"partial",tok:0.93,wAx:"partial",geno:"hybrid"},
{co:"NAVER",name:"HyperCLOVAX-Vision-3B",ko:"하이퍼클로바X 비전 3B",zh:"HyperCLOVAX-Vision-3B",size:"3B",task:"VLM",hf:"naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B",yr:"2025",mt:"hyperclovax_vlm",voc:110592,hid:3072,int:7168,lay:32,base:"self",archAx:"partial",tokAx:"partial",tok:0.90,wAx:"partial",geno:"hybrid"},
{co:"NAVER",name:"HyperCLOVAX-Omni-8B",ko:"하이퍼클로바X 옴니 8B",zh:"HyperCLOVAX-Omni-8B",size:"8B",task:"VLM",hf:"naver-hyperclovax/HyperCLOVAX-SEED-Omni-8B",yr:"2025",mt:"vlm",voc:200704,hid:4096,int:12288,lay:36,base:"self",archAx:"self",tokAx:"self",tok:0.45,wAx:"self",geno:"endemic"},
{co:"Kakao",name:"kanana-1.5-8b",ko:"카나나 1.5 8B",zh:"kanana-1.5-8b",size:"8B",task:"LLM",hf:"kakaocorp/kanana-1.5-8b-instruct-2505",yr:"2025",mt:"llama",voc:128259,hid:4096,int:14336,lay:32,base:"llama3",archAx:"foreign",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"derivative"},
{co:"Kakao",name:"kanana-2-30b-a3b",ko:"카나나 2 30B",zh:"kanana-2-30b-a3b",size:"30B·MoE",task:"LLM",hf:"kakaocorp/kanana-2-30b-a3b-instruct-2601",yr:"2026",mt:"deepseek_v3",voc:128256,hid:2048,int:6144,lay:48,base:"deepseekv3",archAx:"foreign",tokAx:"partial",tok:0.57,wAx:"partial",geno:"hybrid"},
{co:"Kakao",name:"kanana-2-3b",ko:"카나나 2 3B",zh:"kanana-2-3b",size:"3B",task:"LLM",hf:"kakaocorp/kanana-2-3b-instruct",yr:"2026",mt:"qwen3",voc:128256,hid:2560,int:8192,lay:32,base:"qwen3",archAx:"foreign",tokAx:"partial",tok:0.57,wAx:"partial",geno:"hybrid"},
{co:"Kakao",name:"kanana-1.5-v-3b",ko:"카나나 1.5 비전 3B",zh:"kanana-1.5-v-3b",size:"3B",task:"VLM",hf:"kakaocorp/kanana-1.5-v-3b-instruct",yr:"2025",mt:"kanana-1.5-v",voc:128259,hid:2048,int:9216,lay:32,base:"llama3",archAx:"partial",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"hybrid"},
{co:"Kakao",name:"kanana-1.5-15.7b-a3b",ko:"카나나 1.5 15.7B",zh:"kanana-1.5-15.7b",size:"15.7B·MoE",task:"LLM",hf:"kakaocorp/kanana-1.5-15.7b-a3b-instruct",yr:"2025",mt:"mixtral",voc:128259,hid:2048,int:1152,lay:32,base:"mistral",archAx:"foreign",tokAx:"foreign",tok:1.00,wAx:"inherited",geno:"derivative"},
{co:"KT",name:"Mi:dm-2.0-Base",ko:"믿음 2.0 베이스",zh:"Mi:dm-2.0-Base",size:"11.5B",task:"LLM",hf:"K-intelligence/Midm-2.0-Base-Instruct",yr:"2025",mt:"llama",voc:131384,hid:4096,int:14336,lay:48,base:"llama3",archAx:"partial",tokAx:"partial",tok:0.63,wAx:"partial",geno:"hybrid"},
{co:"KT",name:"Mi:dm-2.0-Mini",ko:"믿음 2.0 미니",zh:"Mi:dm-2.0-Mini",size:"2.3B",task:"LLM",hf:"K-intelligence/Midm-2.0-Mini-Instruct",yr:"2025",mt:"llama",voc:131392,hid:1792,int:4608,lay:48,base:"llama3",archAx:"partial",tokAx:"partial",tok:0.62,wAx:"partial",geno:"hybrid"},
{co:"Motif",name:"Motif-3-Beta",ko:"모티프 3 베타",zh:"Motif-3-Beta",size:"~30B·MoE",task:"LLM",hf:"Motif-Technologies/Motif-3-Beta",yr:"2026",mt:"Motif",voc:220160,hid:4096,int:12288,lay:53,base:"self",archAx:"self",tokAx:"self",tok:0.65,wAx:"self",geno:"endemic"},
{co:"Motif",name:"Motif-2-12.7B",ko:"모티프 2 12.7B",zh:"Motif-2-12.7B",size:"12.7B",task:"LLM",hf:"Motif-Technologies/Motif-2-12.7B-Base",yr:"2025",mt:"Motif",voc:219520,hid:4096,int:16384,lay:40,base:"self",archAx:"self",tokAx:"self",tok:0.65,wAx:"self",geno:"endemic"},
{co:"Motif",name:"Motif-2.6B",ko:"모티프 2.6B",zh:"Motif-2.6B",size:"2.6B",task:"LLM",hf:"Motif-Technologies/Motif-2.6B",yr:"2025",mt:"Motif",voc:219520,hid:2048,int:8192,lay:32,base:"self",archAx:"self",tokAx:"self",tok:0.65,wAx:"self",geno:"endemic"},
{co:"VIDRAFT",name:"AETHER-7B-5Attn",ko:"에테르 7B 5Attn",zh:"AETHER-7B-5Attn",size:"7B·MoE",task:"LLM",hf:"FINAL-Bench/Aether-7B-5Attn",yr:"2026",mt:"aether_v2_7way",voc:151936,hid:2048,int:6144,lay:49,base:"self",archAx:"self",tokAx:"foreign",tok:1.00,wAx:"self",geno:"endemic",ours:true},
{co:"VIDRAFT",name:"AETHER-7B-7Attn",ko:"에테르 7B 7Attn",zh:"AETHER-7B-7Attn",size:"7B·MoE",task:"LLM",hf:"FINAL-Bench/AETHER-7B-7Attn-base",yr:"2026",mt:"aether_v2_7way",voc:151936,hid:2048,int:6144,lay:49,base:"self",archAx:"self",tokAx:"foreign",tok:1.00,wAx:"self",geno:"endemic",ours:true},
{co:"VIDRAFT",name:"AETHER-6B-11Attn",ko:"에테르 6B 11Attn",zh:"AETHER-6B-11Attn",size:"6B",task:"LLM",hf:"FINAL-Bench/Aether-6B-11Attn-base",yr:"2026",mt:"aether_v2_11attn",voc:151936,hid:1024,int:512,lay:121,base:"self",archAx:"self",tokAx:"foreign",tok:1.00,wAx:"self",geno:"endemic",ours:true}
];
const CO_ORDER=["LG AI","SKT","Upstage","Motif","VIDRAFT","NAVER","Kakao","KT","NCSOFT"];
function coSort(a,b){const d=CO_ORDER.indexOf(a.co)-CO_ORDER.indexOf(b.co);return d!==0?d:0;}
/* HF 공개일(createdAt) — 기본 정렬: 최신순 */
const DATE={
"LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct":"2024-12-01","LGAI-EXAONE/EXAONE-4.0-32B":"2025-07-11","LGAI-EXAONE/EXAONE-4.5-33B":"2026-04-04","LGAI-EXAONE/K-EXAONE-236B-A23B":"2025-12-26","LGAI-EXAONE/K-EXAONE-2.0-750B-A37B":"2026-07-29",
"upstage/SOLAR-10.7B-v1.0":"2023-12-12","upstage/Solar-Open-100B":"2025-12-10","upstage/Solar-Open2-250B":"2026-07-22",
"skt/A.X-4.0-Light":"2025-07-02","skt/A.X-4.0":"2025-07-02","skt/A.X-K2":"2026-07-28","skt/A.X-4.0-VL-Light":"2025-07-28","skt/A.X-3.1":"2025-07-23",
"NCSOFT/VARCO-VISION-2.0-14B":"2025-07-08","NCSOFT/VARCO-VISION-2.0-1.7B":"2025-07-08","NCSOFT/Llama-VARCO-8B-Instruct":"2024-09-12",
"naver-hyperclovax/HyperCLOVAX-SEED-Think-32B":"2025-12-23","naver-hyperclovax/HyperCLOVAX-SEED-Think-14B":"2025-07-21","naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B":"2025-04-22","naver-hyperclovax/HyperCLOVAX-SEED-Omni-8B":"2025-12-23",
"kakaocorp/kanana-1.5-8b-instruct-2505":"2025-05-21","kakaocorp/kanana-2-30b-a3b-instruct-2601":"2026-01-14","kakaocorp/kanana-2-3b-instruct":"2026-07-24","kakaocorp/kanana-1.5-v-3b-instruct":"2025-07-23","kakaocorp/kanana-1.5-15.7b-a3b-instruct":"2025-07-23",
"K-intelligence/Midm-2.0-Base-Instruct":"2025-07-03","K-intelligence/Midm-2.0-Mini-Instruct":"2025-07-03",
"Motif-Technologies/Motif-3-Beta":"2026-07-20","Motif-Technologies/Motif-2-12.7B-Base":"2025-10-20","Motif-Technologies/Motif-2.6B":"2025-06-06",
"FINAL-Bench/Aether-7B-5Attn":"2026-07-17","FINAL-Bench/AETHER-7B-7Attn-base":"2026-07-20","FINAL-Bench/Aether-6B-11Attn-base":"2026-07-20"
};
function dateOf(m){return DATE[m.hf]||(m.yr+"-06-01");}
let sortCol="date", sortDir=-1; /* 기본: 공개일 내림차순(최신 먼저) */
function sortBy(col){ if(sortCol===col) sortDir=-sortDir; else { sortCol=col; sortDir=(col==="date")?-1:1; } apply(); }
const GORD={endemic:0,chimera:1,hybrid:2,derivative:3}, AXORD={self:0,partial:1,foreign:2,inherited:2,measuring:3};
function sortVal(m){
switch(sortCol){
case "co": return CO_ORDER.indexOf(m.co);
case "date": return dateOf(m);
case "geno": return GORD[genoOf(m)];
case "arch": return AXORD[m.archAx];
case "weight": return AXORD[m.wAx];
case "attn": return attnOf(m).n;
case "lic": return licOf(m);
case "open": return reproOf(m)?0:1;
case "base": return m.base==='self'?'~':BASES[m.base].n;
default: return dateOf(m);
}
}
function cmp(a,b){
const va=sortVal(a), vb=sortVal(b);
if(va<vb) return -sortDir; if(va>vb) return sortDir;
const da=dateOf(a), db=dateOf(b); return da<db?1:da>db?-1:0; /* tie-break: 최신 먼저 */
}
/* 어텐션 종류 수 = 아키텍처 독창성 (config 실측 기반; 미기재=표준 단일 GQA/MLA) */
const ATTN={
"FINAL-Bench/Aether-6B-11Attn-base":{n:11,k:"mamba2·hyena·MLA·linear·GDN·NSA·sliding"},
"FINAL-Bench/AETHER-7B-7Attn-base":{n:7,k:"7-way heterogeneous"},
"FINAL-Bench/Aether-7B-5Attn":{n:5,k:"5-way heterogeneous"},
"LGAI-EXAONE/EXAONE-4.0-32B":{n:2,k:"full + sliding"},
"LGAI-EXAONE/EXAONE-4.5-33B":{n:2,k:"full + sliding"},
"Motif-Technologies/Motif-3-Beta":{n:2,k:"GDLA + sliding (self)"},
"upstage/Solar-Open2-250B":{n:2,k:"linear + full"},
"upstage/Solar-Open-100B":{n:2,k:"linear + full"},
"skt/A.X-K2":{n:1,k:"gated MLA"}
};
function attnOf(m){return ATTN[m.hf]||{n:1,k:"single (GQA/MLA std.)"};}
/* 오픈소스 라이선스 (HF 카드 실측) */
const LIC={
"LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct":"other","LGAI-EXAONE/EXAONE-4.0-32B":"other","LGAI-EXAONE/EXAONE-4.5-33B":"other","LGAI-EXAONE/K-EXAONE-236B-A23B":"other","LGAI-EXAONE/K-EXAONE-2.0-750B-A37B":"apache-2.0",
"upstage/SOLAR-10.7B-v1.0":"apache-2.0","upstage/Solar-Open-100B":"other","upstage/Solar-Open2-250B":"other",
"skt/A.X-4.0-Light":"apache-2.0","skt/A.X-4.0":"other","skt/A.X-K2":"apache-2.0","skt/A.X-4.0-VL-Light":"apache-2.0","skt/A.X-3.1":"apache-2.0",
"NCSOFT/VARCO-VISION-2.0-14B":"cc-by-nc-4.0","NCSOFT/VARCO-VISION-2.0-1.7B":"cc-by-nc-4.0","NCSOFT/Llama-VARCO-8B-Instruct":"llama3.1",
"naver-hyperclovax/HyperCLOVAX-SEED-Think-32B":"other","naver-hyperclovax/HyperCLOVAX-SEED-Think-14B":"other","naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B":"other","naver-hyperclovax/HyperCLOVAX-SEED-Omni-8B":"other",
"kakaocorp/kanana-1.5-8b-instruct-2505":"apache-2.0","kakaocorp/kanana-2-30b-a3b-instruct-2601":"other","kakaocorp/kanana-2-3b-instruct":"other","kakaocorp/kanana-1.5-v-3b-instruct":"other","kakaocorp/kanana-1.5-15.7b-a3b-instruct":"other",
"K-intelligence/Midm-2.0-Base-Instruct":"mit","K-intelligence/Midm-2.0-Mini-Instruct":"mit",
"Motif-Technologies/Motif-3-Beta":"unlicensed","Motif-Technologies/Motif-2-12.7B-Base":"apache-2.0","Motif-Technologies/Motif-2.6B":"apache-2.0",
"FINAL-Bench/Aether-7B-5Attn":"apache-2.0","FINAL-Bench/AETHER-7B-7Attn-base":"apache-2.0","FINAL-Bench/Aether-6B-11Attn-base":"apache-2.0"
};
function licOf(m){return LIC[m.hf]||"other";}
/* 완전 오픈소스(재현가능) = 학습 데이터셋 공개 + from-scratch + 가중치 공개. open-weight(가중치만)와 구분 */
const REPRO={"FINAL-Bench/Aether-7B-5Attn":true};
function reproOf(m){return REPRO[m.hf]===true;}
function licTier(l){
if(l==="apache-2.0"||l==="mit")return{c:"#16A34A",lab:t('lic_open')};
if(l&&l.indexOf("nc")>=0)return{c:"#DC2626",lab:t('lic_nc')};
if(l==="unlicensed")return{c:"#94A3B4",lab:t('lic_none')};
return{c:"#D97706",lab:t('lic_custom')};
}
function noteOf(m){
const P=[],ko=LANG==='ko',zh=LANG==='zh';
const bn=m.base==='self'?(ko?'표준':zh?'标准':'std.'):BASES[m.base].n;
if(m.archAx==='foreign')P.push(ko?`${bn} 구조 완전일치`:zh?`${bn}架构完全匹配`:`${bn} arch exact-match`);
else if(m.archAx==='partial')P.push(ko?`${bn} 치수 차용`:zh?`借用${bn}尺寸`:`${bn} dims borrowed`);
else P.push(ko?`자체 아키텍처(${m.mt})`:zh?`自主架构(${m.mt})`:`self architecture (${m.mt})`);
if(m.wAx==='self')P.push(ko?'from-scratch(자체 학습)':zh?'从零训练':'from-scratch');
else if(m.wAx==='inherited')P.push(ko?'가중치 상속(연속학습 추정)':zh?'权重继承':'weights inherited');
else if(m.wAx==='partial')P.push(ko?'가중치 부분상속':zh?'权重部分继承':'weights partial');
const a=attnOf(m);if(a.n>=2)P.push(`${a.n}× ${ko?'이종 어텐션':zh?'异构注意力':'attn'}: ${a.k}`);
return P.join(' · ');
}
/* 유전자형 = 아키텍처 × 가중치 2축 (토크나이저 제외) */
function genoOf(m){
const a=m.archAx==='self'?2:m.archAx==='partial'?1:0;
const w=(m.wAx==='self')?2:(m.wAx==='partial')?1:0;
if(a===2&&w===2)return 'endemic';
if(a===0&&w===0)return 'derivative';
if(a+w>=3)return 'chimera';
return 'hybrid';
}
let LANG=(function(){const l=(navigator.language||"en").toLowerCase();return l.startsWith("ko")?"ko":l.startsWith("zh")?"zh":"en";})();
let Graph=null, graphInited=false;
function t(k){return I18N[LANG][k]!==undefined?I18N[LANG][k]:k;}
function dispName(m){return LANG==='ko'&&m.ko?m.ko:(LANG==='zh'&&m.zh?m.zh:m.name);}
function setLang(l){LANG=l;['en','zh','ko'].forEach(x=>document.getElementById('lang-'+x).classList.toggle('on',x===l));document.documentElement.lang=l;applyStatic();buildFilters();apply();}
function applyStatic(){
document.querySelectorAll('[data-i]').forEach(e=>{const k=e.getAttribute('data-i');if(I18N[LANG][k]!==undefined)e.innerHTML=I18N[LANG][k];});
document.getElementById('q').placeholder=t('ph');
document.getElementById('foot').innerHTML=t('foot');
document.getElementById('gfallback').textContent=t('gflag');
document.getElementById('legend').innerHTML=Object.keys(GENOS).map(g=>`<span class="lg"><span class="dot" style="background:${GENOS[g].c}"></span>${t(GENOS[g].k)}</span>`).join('');
const _cols=[['co',t('th_org'),''],['date',t('th_model'),''],['geno',t('th_geno'),t('tt_geno')],['arch',t('th_arch'),t('tt_arch')],['weight',t('th_weight'),t('tt_weight')],['attn',t('th_attn'),t('tt_attn')],['lic',t('th_lic'),t('tt_lic')],['open',t('th_open'),t('tt_open')],['base',t('th_lin'),t('tt_lin')],['',t('th_fp'),t('tt_fp')]];
document.getElementById('thead').innerHTML='<tr>'+_cols.map(c=>{const ar=c[0]&&sortCol===c[0]?(sortDir>0?' ▲':' ▼'):'';return `<th ${c[0]?`onclick="sortBy('${c[0]}')"`:''} title="${c[2]}">${c[1]}${ar}</th>`;}).join('')+'</tr>';
}
function fill(id,all,opts){const s=document.getElementById(id),cur=s.value;s.innerHTML=`<option value="">${all}</option>`+opts.map(o=>`<option value="${o[0]}">${o[1]}</option>`).join('');s.value=cur;}
function buildFilters(){
fill('f-co',t('allco'),CO_ORDER.filter(c=>M.some(m=>m.co===c)).map(c=>[c,c]));
fill('f-geno',t('allgeno'),Object.keys(GENOS).map(g=>[g,t(GENOS[g].k)]));
fill('f-base',t('allbase'),[...new Set(M.map(m=>m.base))].map(b=>[b,b==='self'?t('sovereign'):BASES[b].n]));
fill('f-task',t('alltask'),[...new Set(M.map(m=>m.task))].map(x=>[x,x]));
}
function filtered(){
const q=document.getElementById('q').value.trim().toLowerCase();
const fco=document.getElementById('f-co').value,fg=document.getElementById('f-geno').value,fb=document.getElementById('f-base').value,ft=document.getElementById('f-task').value;
return M.filter(m=>{
if(fco&&m.co!==fco)return false;if(fg&&genoOf(m)!==fg)return false;if(fb&&m.base!==fb)return false;if(ft&&m.task!==ft)return false;
if(q){const hay=(m.name+' '+m.co+' '+(m.ko||'')+' '+(m.zh||'')+' '+(BASES[m.base]?BASES[m.base].n:'')+' '+m.mt).toLowerCase();if(!hay.includes(q))return false;}
return true;}).sort(cmp);
}
function pill(ax,axis){
const label=ax==='self'?(axis==='weight'?t('scratch'):t('self')):ax==='inherited'?t('inherited'):ax==='measuring'?t('measuring'):t(ax);
let cls=ax==='self'?'self':ax==='partial'?'partial':ax==='measuring'?'measuring':'foreign';
return `<span class="pill ${cls}">${label}</span>`;
}
function apply(){
const list=filtered();
document.getElementById('s-models').textContent=M.length;
document.getElementById('s-end').textContent=M.filter(m=>genoOf(m)==='endemic').length;
document.getElementById('s-der').textContent=M.filter(m=>genoOf(m)==='derivative').length;
document.getElementById('s-co').textContent=new Set(M.map(m=>m.co)).size;
document.getElementById('list-count').textContent=`${t('count')} ${list.length} / ${M.length}`;
const tb=document.getElementById('tbody');
document.getElementById('empty').style.display=list.length?'none':'';
tb.innerHTML=list.map(m=>{
const g=GENOS[genoOf(m)];const lin=m.base==='self'?t('sovereign'):`${BASES[m.base].n}`;
const fp=m.hid?`v${(m.voc/1000).toFixed(0)}k·h${m.hid}·i${m.int}·L${m.lay}`:`v${(m.voc/1000).toFixed(0)}k`;
const a=attnOf(m);const ac=a.n>=5?'#0E7C7B':a.n>=2?'#2563EB':'#94A3B4';const os=a.n>=5?5:a.n>=2?2:1;
const lc=licOf(m);const lt=licTier(lc);
return `<tr>
<td><span class="co-b">${m.co}</span></td>
<td><span class="nm">${dispName(m)}<small>${m.size} · ${m.task} · ${dateOf(m).slice(0,7)} · <span style="font-family:var(--mono)">${m.mt}</span></small></span></td>
<td><span class="geno-b" style="background:${g.c}">🧬 ${t(g.k)}</span></td>
<td>${pill(m.archAx,'arch')}</td>
<td>${pill(m.wAx,'weight')}</td>
<td><b style="color:${ac};font-variant-numeric:tabular-nums;font-size:13px">${a.n}×</b> <span style="color:${ac};font-size:10px;letter-spacing:-.5px">${'★'.repeat(os)}${'☆'.repeat(5-os)}</span><br><span class="fp-mini">${a.k}</span></td>
<td><span class="lic-b" style="color:${lt.c}">${lc}</span> <span class="fp-mini">${lt.lab}</span></td>
<td style="text-align:center">${reproOf(m)?'<span class="chk on" title="public datasets + reproducible + open weights">✓</span>':'<span class="chk" title="open-weight only">✗</span>'}</td>
<td><span class="lin">${m.base!=='self'?'🧬 ':''}${lin}</span></td>
<td><span class="fp-mini">${fp}</span> <a href="https://hf.co/${m.hf}" target="_blank" rel="noopener">HF↗</a></td>
</tr><tr class="whyrow"><td colspan="10"><span class="why">📌 ${noteOf(m)}</span></td></tr>`;}).join('');
updateGraph(list);
}
/* ---------- 3D ontology network ---------- */
function graphData(list){
const nodes=[],links=[];
const bs=[...new Set(list.map(m=>m.base))];
bs.forEach(b=>nodes.push({id:'B:'+b,name:b==='self'?t('sovereign'):BASES[b].n,kind:'base',color:BASES[b].c,val:20}));
[...new Set(list.map(m=>m.co))].forEach(c=>nodes.push({id:'C:'+c,name:c,kind:'company',color:'#8896A6',val:9}));
list.forEach(m=>{
const pv=parseFloat(m.size);const val=isNaN(pv)?6:Math.max(4,Math.min(15,4+Math.log2(pv+1)*1.5));
const gc=GENOS[genoOf(m)].c;
nodes.push({id:m.hf,name:dispName(m),kind:'model',color:gc,val,hf:m.hf,ours:m.ours});
links.push({source:m.hf,target:'B:'+m.base,color:gc});
links.push({source:m.hf,target:'C:'+m.co,color:'#D3DBE4'});
});
return {nodes,links};
}
function initGraph(){
if(graphInited)return;
if(typeof ForceGraph3D==='undefined'||typeof THREE==='undefined'){
document.getElementById('graph3d').style.display='none';
document.getElementById('gfallback').style.display='block';return;
}
graphInited=true;
const el=document.getElementById('graph3d');
const dark=window.matchMedia&&window.matchMedia('(prefers-color-scheme:dark)').matches;
Graph=ForceGraph3D()(el)
.backgroundColor(dark?'#0E1621':'#F7F9FB')
.width(el.clientWidth).height(460)
.nodeThreeObject(n=>{
const s=new SpriteText(n.name);
const isM=n.kind==='model';
s.color=isM?'#FFFFFF':(n.kind==='base'?n.color:(dark?'#AEBBCB':'#31404F'));
s.fontSize=140;
s.fontWeight=isM?'700':'800';
s.textHeight=n.kind==='base'?12:n.kind==='company'?9:7.5;
s.backgroundColor=isM?n.color:(dark?'rgba(23,33,46,.94)':'rgba(255,255,255,.92)');
s.borderColor=isM?'rgba(255,255,255,.8)':'rgba(0,0,0,0)';
s.borderWidth=isM?0.6:0;
s.padding=isM?3.2:3;s.borderRadius=4;
return s;
}).nodeThreeObjectExtend(false)
.linkColor(l=>l.color).linkOpacity(0.4).linkWidth(0.6).linkCurvature(0.06)
.linkDirectionalParticles(0)
.onNodeClick(n=>{if(n.hf)window.open('https://hf.co/'+n.hf,'_blank');else if(Graph){const d=Graph.cameraPosition();Graph.cameraPosition({x:n.x,y:n.y,z:(n.z||0)+120},n,900);}})
.onNodeHover(n=>{el.style.cursor=n?'pointer':'default'});
Graph.d3Force('charge').strength(-90);
window.addEventListener('resize',()=>{if(Graph)Graph.width(el.clientWidth);});
}
function updateGraph(list){
if(!graphInited)initGraph();
if(Graph)Graph.graphData(graphData(list));
}
applyStatic();buildFilters();apply();
</script>
</body>
</html>