<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ai maya</title>
    <description>The latest articles on DEV Community by ai maya (@ai_maya_063fc568e157562fd).</description>
    <link>https://dev.to/ai_maya_063fc568e157562fd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069009%2Fa4caeae1-9a05-4aab-9c0e-474a721e6624.png</url>
      <title>DEV Community: ai maya</title>
      <link>https://dev.to/ai_maya_063fc568e157562fd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ai_maya_063fc568e157562fd"/>
    <language>en</language>
    <item>
      <title>AI This Week (Aug 2026): Qwen3.8 Max, DeepSeek V4-Flash, and Models Shipping Like Patches</title>
      <dc:creator>ai maya</dc:creator>
      <pubDate>Sat, 08 Aug 2026 16:19:17 +0000</pubDate>
      <link>https://dev.to/ai_maya_063fc568e157562fd/ai-this-week-aug-2026-qwen38-max-deepseek-v4-flash-and-models-shipping-like-patches-17fc</link>
      <guid>https://dev.to/ai_maya_063fc568e157562fd/ai-this-week-aug-2026-qwen38-max-deepseek-v4-flash-and-models-shipping-like-patches-17fc</guid>
      <description>&lt;p&gt;If you blinked this week, you missed three frontier model releases. August 2026 is making one thing very clear: large language models now ship like software patches, not like moon landings.&lt;/p&gt;

&lt;p&gt;Here's the AI news that actually matters for builders right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qwen3.8 Max lands
&lt;/h2&gt;

&lt;p&gt;Alibaba pushed &lt;strong&gt;Qwen3.8 Max&lt;/strong&gt; at the start of the month — the newest flagship in a line that has become the default open-weight baseline for a lot of teams. The interesting part isn't a single headline number; it's the cadence. Qwen has gone from "the model you try" to "the model you benchmark against" in about a year, and each point release keeps tightening the gap with closed frontier models on reasoning and coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev takeaway:&lt;/strong&gt; if your eval harness still pins an old open baseline, it's already stale. Re-run against the current Qwen point release before you claim a win over "open source."&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepSeek V4-Flash quietly beats its big sibling
&lt;/h2&gt;

&lt;p&gt;The story engineers keep repeating: the &lt;strong&gt;DeepSeek-V4-Flash&lt;/strong&gt; retrain reportedly edges out V4-Pro on agentic coding benchmarks — at &lt;em&gt;flash&lt;/em&gt; pricing. Read that twice. A smaller, cheaper, faster model beating the flagship on the workload developers care most about (multi-step tool use and code) is the clearest signal yet that the "bigger is always better" era is over for a lot of tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev takeaway:&lt;/strong&gt; for agent workloads, start with the small/fast tier and only escalate to the flagship when your evals prove you need it. Default-to-flagship is now a cost bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAI's GPT-5.6 "Luna"
&lt;/h2&gt;

&lt;p&gt;OpenAI's active lineup now includes &lt;strong&gt;GPT-5.6 Luna&lt;/strong&gt; as a fresh flagship name. Details are thin, but the pattern is familiar: incremental version bumps, multimodal by default, and reasoning modes that trade latency for accuracy on demand. The headline isn't any one capability — it's that "reasoning vs. speed" is now a &lt;em&gt;dial you set per request&lt;/em&gt;, not a model you pick once.&lt;/p&gt;

&lt;h2&gt;
  
  
  NVIDIA open-sources NOOA
&lt;/h2&gt;

&lt;p&gt;Less flashy but arguably more useful for practitioners: &lt;strong&gt;NVIDIA open-sourced NOOA&lt;/strong&gt; (Object-Oriented Agents), a model-agnostic Python framework for building agents. Model-agnostic is the key word — the tooling layer is decoupling from any single provider, which is exactly what you want if you're tired of rewriting your agent stack every time a new model drops.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real trend: models as patches
&lt;/h2&gt;

&lt;p&gt;Release trackers are now counting &lt;strong&gt;300+ model releases&lt;/strong&gt; across major labs. When frontier capability ships every few weeks, three things follow for teams:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your benchmarks decay fast.&lt;/strong&gt; Treat evals as living infrastructure, not a one-time report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small + fast is the new default.&lt;/strong&gt; Efficiency gains keep delivering last-year's flagship quality at a fraction of the cost. Reach for the big model deliberately, not reflexively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bet on the tooling layer, not the model.&lt;/strong&gt; Model-agnostic agent frameworks (like NOOA) protect you from churn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The models will keep coming. The winning move isn't chasing every release — it's building an eval + tooling layer that lets you swap the engine in an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What shipped this week that you're actually putting into production? Drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>llm</category>
      <category>news</category>
    </item>
    <item>
      <title>"How to Tell If an LLM Was Really Trained From Scratch: A Reproducible Fingerprinting Method"</title>
      <dc:creator>ai maya</dc:creator>
      <pubDate>Sat, 08 Aug 2026 15:52:49 +0000</pubDate>
      <link>https://dev.to/ai_maya_063fc568e157562fd/how-to-tell-if-an-llm-was-really-trained-from-scratch-a-reproducible-fingerprinting-method-l4e</link>
      <guid>https://dev.to/ai_maya_063fc568e157562fd/how-to-tell-if-an-llm-was-really-trained-from-scratch-a-reproducible-fingerprinting-method-l4e</guid>
      <description>&lt;h1&gt;
  
  
  How to Tell If an LLM Was Really Trained From Scratch: A Reproducible Fingerprinting Method
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Detect whether an LLM was trained from scratch or derived from Qwen, Llama, or DeepSeek — by fingerprinting architecture, tokenizer, and weight provenance from public Hugging Face artifacts. Includes the two traps almost everyone hits.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt; LLM provenance · model fingerprinting · from-scratch vs fine-tuned · architecture signature · tokenizer overlap · embedding CKA · model lineage · Korean sovereign AI · open-weight derivatives&lt;/p&gt;




&lt;p&gt;When a lab announces a "from-scratch, self-developed" foundation model, can an outsider verify that claim — using nothing but public files?&lt;/p&gt;

&lt;p&gt;In late July 2026, several Korean labs shipped DeepSeek-rivaling "self-developed" models (e.g. LG's 750B K-EXAONE 2.0). The claim triggered a debate that spilled well beyond Korea: a single &lt;a href="https://www.zhihu.com/question/2067512422555029717" rel="noopener noreferrer"&gt;Zhihu thread&lt;/a&gt; crossed &lt;strong&gt;2.7 million views&lt;/strong&gt;, asking whether these models were trained from scratch or quietly built on Qwen / Llama / DeepSeek.&lt;/p&gt;

&lt;p&gt;That question is answerable — quantitatively, reproducibly, from public artifacts. This post is the method. Everything below runs against any two repos on the Hugging Face Hub, and there's a live tool at the end.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Framing up front:&lt;/strong&gt; building on open-weight bases (Qwen, Llama, DeepSeek, Mistral) is a &lt;em&gt;legitimate, industry-standard&lt;/em&gt; practice. This is about &lt;strong&gt;provenance transparency&lt;/strong&gt;, not accusation. The same yardstick applies to every model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The idea: three independent fingerprints
&lt;/h2&gt;

&lt;p&gt;A model leaves three separable fingerprints in its public files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Architecture&lt;/strong&gt; — the shape declared in &lt;code&gt;config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenizer&lt;/strong&gt; — the vocabulary in &lt;code&gt;tokenizer.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weights&lt;/strong&gt; — the learned representation in &lt;code&gt;model.safetensors&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each answers a different question, and — crucially — they can disagree. That disagreement is where the signal lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fingerprint 1 — Architecture (&lt;code&gt;config.json&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;transformers&lt;/code&gt; checkpoint ships a &lt;code&gt;config.json&lt;/code&gt;. Six fields form a surprisingly discriminative signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vocab_size&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hidden_size&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;intermediate_size&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_hidden_layers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_attention_heads&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_key_value_heads&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;arch_fingerprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://huggingface.co/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/resolve/main/config.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genome/1.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;FIELDS&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shape tuple &lt;code&gt;(hidden_size, intermediate_size, num_hidden_layers, heads, kv)&lt;/code&gt; is effectively a fingerprint of the &lt;em&gt;reference architecture&lt;/em&gt;. One matching field is a coincidence; five matching simultaneously is not. A few real matches I measured:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shape (hidden · inter · layers · heads · kv)&lt;/th&gt;
&lt;th&gt;Exact match&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3584 · 18944 · 28 · 28 · 4&lt;/td&gt;
&lt;td&gt;Qwen2.5-7B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8192 · 29568 · 80 · 64 · 8&lt;/td&gt;
&lt;td&gt;Qwen2.5-72B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5120 · 17408 · 40 · 40 · 8&lt;/td&gt;
&lt;td&gt;Qwen3-14B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4096 · 14336 · 32 · 32 · 8&lt;/td&gt;
&lt;td&gt;Llama-3.1-8B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7168 · 18432 · 61 · (moe 2048)&lt;/td&gt;
&lt;td&gt;DeepSeek-V3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An exact tuple match is strong evidence the architecture was &lt;strong&gt;adopted&lt;/strong&gt;, not independently designed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fingerprint 2 — Tokenizer (a paternity test)
&lt;/h2&gt;

&lt;p&gt;Architecture alone can mislead: a model can adopt a foreign architecture but train a genuinely new tokenizer (or vice-versa). Measure the tokenizer directly, comparing vocabularies with a &lt;strong&gt;min-overlap ratio&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;vocab_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://huggingface.co/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/resolve/main/tokenizer.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vocab&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# BPE: {token: id}
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tokenizer_overlap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;vocab_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;vocab_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;   &lt;span class="c1"&gt;# 1.0 == one is a subset of the other
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This surfaces what &lt;code&gt;config&lt;/code&gt; hides. One model matched &lt;strong&gt;Qwen2.5-7B's architecture exactly&lt;/strong&gt;, yet its tokenizer overlapped Qwen by only ~0.38 — a &lt;strong&gt;"foreign brain, own language"&lt;/strong&gt; case: adopted architecture, freshly trained (Korean) tokenizer. Others reused a base tokenizer verbatim (overlap = 1.000), confirming a straight fine-tune.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why &lt;code&gt;min&lt;/code&gt;, not union?&lt;/strong&gt; Using &lt;code&gt;min(|A|, |B|)&lt;/code&gt; in the denominator makes a &lt;em&gt;reduced&lt;/em&gt; vocabulary that is a strict subset of a larger one score ~1.0 — the correct signal for "carved out of the base." A Jaccard (union) denominator would wrongly dilute that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fingerprint 3 — Weights (here be dragons)
&lt;/h2&gt;

&lt;p&gt;The gold-standard question: were the weights trained &lt;strong&gt;from scratch&lt;/strong&gt;, or &lt;strong&gt;continued-pretrained&lt;/strong&gt; on a foreign base? Load the token embeddings and compare. Two traps await.&lt;/p&gt;

&lt;p&gt;First, a helper to pull only the embedding tensor (no need to download the whole model):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;huggingface_hub&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hf_hub_download&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;safetensors&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;safe_open&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_embedding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hf_hub_download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.safetensors.index.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;shard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weight_map&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.embed_tokens.weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;shard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.safetensors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hf_hub_download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shard&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;safe_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;framework&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;embed_tokens.weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Trap 1 — row-wise cosine is useless
&lt;/h3&gt;

&lt;p&gt;The naive approach: for shared tokens, average the row-wise cosine similarity of the two embedding matrices. Shared lineage → similar embeddings, right?&lt;/p&gt;

&lt;p&gt;Wrong — &lt;strong&gt;even when lineage is obvious.&lt;/strong&gt; I measured near-zero mean cosine for &lt;em&gt;both&lt;/em&gt; a known from-scratch model &lt;em&gt;and&lt;/em&gt; a known Llama-derivative. The culprit is &lt;strong&gt;rotational invariance&lt;/strong&gt;: a Transformer's hidden space has no privileged basis, so two models can encode identical information under an arbitrary orthogonal rotation. Row-wise cosine reads rotation as dissimilarity and tells you nothing about lineage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trap 2 — CKA helps, but is not conclusive
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Linear CKA (Centered Kernel Alignment)&lt;/strong&gt; is invariant to rotation and isotropic scaling — the right tool for comparing representations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;linear_cka&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tensor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tensor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# X: (n, d1), Y: (n, d2) — SAME token order (shared vocabulary)
&lt;/span&gt;    &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;keepdim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;keepdim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;norm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;den&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;norm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;norm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;den&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A from-scratch model scored &lt;strong&gt;near-zero CKA&lt;/strong&gt; against its candidate base — clean evidence of independent pretraining. But a continued-pretrained derivative scored only ~0.25 — barely above the ~0.21 baseline between two &lt;em&gt;unrelated&lt;/em&gt; models of the same family. Large-scale training reshapes embeddings enough that CKA loses discriminative power &lt;strong&gt;on the derivative side&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest conclusion:&lt;/strong&gt; the weights axis reliably confirms &lt;em&gt;from-scratch&lt;/em&gt; (near-zero CKA), but it is &lt;strong&gt;not&lt;/strong&gt; a strong detector of &lt;em&gt;derivation&lt;/em&gt;. For that, architecture + tokenizer fingerprints stay primary. Report the weights axis as &lt;strong&gt;supporting evidence&lt;/strong&gt;, never as a standalone verdict. (This is the single most important caveat in the whole method — and the one most write-ups omit.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus fingerprint — attention diversity as an originality proxy
&lt;/h2&gt;

&lt;p&gt;Most models declare one attention mechanism; a few mix several. The count of distinct mechanisms in &lt;code&gt;config.json&lt;/code&gt; is a cheap proxy for architectural originality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;KEYS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;layer_types&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;linear_attn_config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sliding_window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mamba2_d_state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hyena_filter_order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mla_kv_lora_rank&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;attention_cls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;attention_diversity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# e.g. layer_types = [full_attention×16, sliding_attention×48] -&amp;gt; hybrid (2 kinds)
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;KEYS&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my sweep, most models used a single grouped-query or multi-head-latent attention; some used a &lt;strong&gt;hybrid&lt;/strong&gt; (&lt;code&gt;layer_types=[full×16, sliding×48]&lt;/code&gt;); the most diverse combined mamba2, hyena, MLA, linear attention, gated-delta-net, native-sparse-attention, and sliding-window in one stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Combining axes → a single genotype
&lt;/h2&gt;

&lt;p&gt;Collapse the two primary axes (architecture × weights) into one label:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Genotype&lt;/th&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Weights&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;Native&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;self&lt;/td&gt;
&lt;td&gt;from-scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔵 &lt;strong&gt;Adapted&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;mostly self&lt;/td&gt;
&lt;td&gt;one axis borrowed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;Mixed&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;partial inheritance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;Ported&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;foreign (exact match)&lt;/td&gt;
&lt;td&gt;inherited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keep tokenizer overlap and attention diversity &lt;strong&gt;beside&lt;/strong&gt; the verdict, not folded into it, so readers can audit the raw evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results: nine organizations, one yardstick
&lt;/h2&gt;

&lt;p&gt;Applying the identical pipeline to nine organizations' public foundation models (spanning large enterprises, telcos, mid-size firms, and startups), the picture is &lt;strong&gt;not uniform&lt;/strong&gt;: some models match a foreign architecture &lt;em&gt;and&lt;/em&gt; tokenizer exactly (Ported); others are self-built with no foreign match (Native); many sit in between. The per-model breakdown — 3D lineage graph, search, EN/中文/한국어, light + dark mode — is in the interactive tool below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it yourself
&lt;/h2&gt;

&lt;p&gt;The functions above &lt;em&gt;are&lt;/em&gt; the method. Point them at any two Hub repos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;arch_fingerprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;some/model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;tokenizer_overlap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;some/model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Qwen/Qwen3-14B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# weights (shared-vocab pair):
&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_embedding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;candidate/model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_embedding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Qwen/Qwen3-1.7B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CKA:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;linear_cka&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;   &lt;span class="c1"&gt;# near-zero =&amp;gt; from-scratch
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Limitations &amp;amp; honesty
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not an accusation.&lt;/strong&gt; Open-weight reuse is legitimate and widespread. This reports lineage, not wrongdoing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weights axis is supporting, not conclusive&lt;/strong&gt; (Trap 2).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same yardstick for every model&lt;/strong&gt;, without exception.&lt;/li&gt;
&lt;li&gt;All inputs are public; corrections are welcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How can you tell if an LLM was trained from scratch or fine-tuned from another model?
&lt;/h3&gt;

&lt;p&gt;Compare its &lt;code&gt;config.json&lt;/code&gt; shape signature (hidden size, intermediate size, layer count) and its &lt;code&gt;tokenizer.json&lt;/code&gt; vocabulary against known open-weight bases. An exact architecture match plus high tokenizer overlap indicates a derivative; a self-designed architecture with near-zero embedding CKA against candidate bases indicates from-scratch training.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is CKA (Centered Kernel Alignment), and why use it instead of cosine similarity?
&lt;/h3&gt;

&lt;p&gt;CKA is a rotation- and isotropic-scale-invariant similarity measure for neural-network representations. A Transformer's hidden space has no privileged basis, so plain row-wise cosine similarity is fooled by arbitrary orthogonal rotations between two models. CKA is not — which makes it the correct tool for comparing embeddings across models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it legal to build an LLM on top of Qwen, Llama, or DeepSeek?
&lt;/h3&gt;

&lt;p&gt;Yes. Using open-weight foundation models under their licenses (e.g. Apache-2.0 for many Qwen releases, the Llama Community License for Llama) is a legitimate, industry-standard practice. Provenance analysis reports lineage, not wrongdoing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are Korean sovereign-AI models built from scratch or based on Chinese/US models?
&lt;/h3&gt;

&lt;p&gt;It varies by model. Some match a foreign architecture (Qwen, Llama, DeepSeek) exactly and are best described as "Ported"; others use fully self-built architectures and weights with no foreign match ("Native"); many are in between. The genotype of each is shown in the interactive tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you measure model provenance without downloading the full model?
&lt;/h3&gt;

&lt;p&gt;Architecture and tokenizer fingerprints need only &lt;code&gt;config.json&lt;/code&gt; and &lt;code&gt;tokenizer.json&lt;/code&gt; (kilobytes to a few megabytes). For the weight axis, download just the &lt;code&gt;embed_tokens.weight&lt;/code&gt; tensor via safetensors partial loading instead of the whole checkpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does an exact architecture match prove a model is copied?
&lt;/h3&gt;

&lt;p&gt;No. Reusing an open-weight architecture is standard and legitimate. An exact &lt;code&gt;config.json&lt;/code&gt; match shows the architecture was &lt;em&gt;adopted&lt;/em&gt;; whether the weights were inherited or trained from scratch is a separate question, answered (with caveats) by the embedding-CKA axis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧪 &lt;strong&gt;Interactive tool (full dataset, 3D graph, 3 languages):&lt;/strong&gt; &lt;a href="https://huggingface.co/spaces/mayafree/Model-Genome-Korea" rel="noopener noreferrer"&gt;https://huggingface.co/spaces/mayafree/Model-Genome-Korea&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;The debate that started it (Zhihu, 2.7M views):&lt;/strong&gt; &lt;a href="https://www.zhihu.com/question/2067512422555029717" rel="noopener noreferrer"&gt;https://www.zhihu.com/question/2067512422555029717&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Model names, companies, and licenses are the property of their respective owners.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: #machinelearning #llm #ai #opensource #huggingface #transformers&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
