| |
| |
|
|
| (function () { |
| const COMPONENTS = [ |
| { id: 'resid_pre', label: 'resid_pre', kind: 'residual' }, |
| { id: 'attn_out', label: 'attn_out', kind: 'attention' }, |
| { id: 'attn_pattern', label: 'attn_patt', kind: 'attention' }, |
| { id: 'mlp_pre', label: 'mlp_pre', kind: 'mlp' }, |
| { id: 'mlp_gate', label: 'mlp_gate', kind: 'mlp' }, |
| { id: 'mlp_out', label: 'mlp_out', kind: 'mlp' }, |
| { id: 'resid_mid', label: 'resid_mid', kind: 'residual' }, |
| { id: 'resid_post', label: 'resid_post', kind: 'residual' }, |
| ]; |
|
|
| const N_LAYERS = 35; |
| const N_HEADS = 16; |
|
|
| const BEHAVIORS = [ |
| { id: 'coding', label: 'Coding', glyph: '〈/〉' }, |
| { id: 'reasoning', label: 'Reasoning', glyph: '⇄' }, |
| { id: 'math', label: 'Math', glyph: '∑' }, |
| { id: 'creative', label: 'Creative', glyph: '✿' }, |
| { id: 'refusal', label: 'Refusal', glyph: '◐' }, |
| { id: 'humor', label: 'Humor', glyph: '☻' }, |
| { id: 'factual', label: 'Factual recall',glyph: '◇' }, |
| { id: 'multiling', label: 'Multilingual', glyph: '⌘' }, |
| { id: 'sentiment', label: 'Sentiment', glyph: '♡' }, |
| { id: 'safety', label: 'Safety / harm', glyph: '✦' }, |
| ]; |
|
|
| |
| function rng(seed) { |
| let t = seed >>> 0; |
| return function () { |
| t += 0x6D2B79F5; |
| let r = t; |
| r = Math.imul(r ^ (r >>> 15), r | 1); |
| r ^= r + Math.imul(r ^ (r >>> 7), r | 61); |
| return ((r ^ (r >>> 14)) >>> 0) / 4294967296; |
| }; |
| } |
|
|
| |
| |
| function behaviorCurve(behaviorId, layer) { |
| const x = layer / (N_LAYERS - 1); |
| const g = (mu, sigma) => Math.exp(-((x - mu) ** 2) / (2 * sigma * sigma)); |
| switch (behaviorId) { |
| case 'coding': return 0.18 + 0.85 * g(0.62, 0.18); |
| case 'reasoning': return 0.10 + 0.95 * g(0.74, 0.14) + 0.25 * g(0.45, 0.10); |
| case 'math': return 0.12 + 0.80 * g(0.68, 0.13); |
| case 'creative': return 0.22 + 0.70 * g(0.55, 0.22); |
| case 'refusal': return 0.05 + 1.00 * g(0.88, 0.09); |
| case 'humor': return 0.18 + 0.55 * g(0.50, 0.20) + 0.40 * g(0.80, 0.08); |
| case 'factual': return 0.30 + 0.65 * g(0.40, 0.16) + 0.30 * g(0.72, 0.10); |
| case 'multiling': return 0.40 + 0.55 * g(0.20, 0.13) + 0.35 * g(0.60, 0.14); |
| case 'sentiment': return 0.20 + 0.70 * g(0.30, 0.18) + 0.30 * g(0.78, 0.10); |
| case 'safety': return 0.08 + 0.90 * g(0.92, 0.08) + 0.30 * g(0.55, 0.10); |
| default: return 0.30; |
| } |
| } |
|
|
| |
| function compAffinity(compId, behaviorId) { |
| const A = { |
| coding: { mlp_gate: 1.0, mlp_out: 0.92, attn_pattern: 0.7, attn_out: 0.65, resid_post: 0.55, mlp_pre: 0.5, resid_mid: 0.45, resid_pre: 0.25 }, |
| reasoning: { attn_pattern: 1.0, attn_out: 0.95, resid_post: 0.75, mlp_gate: 0.65, mlp_out: 0.55, resid_mid: 0.55, mlp_pre: 0.40, resid_pre: 0.25 }, |
| math: { mlp_gate: 0.95, mlp_out: 0.90, attn_pattern: 0.78, attn_out: 0.62, resid_post: 0.50, resid_mid: 0.42, mlp_pre: 0.42, resid_pre: 0.20 }, |
| creative: { mlp_out: 0.85, resid_post: 0.78, mlp_gate: 0.70, attn_out: 0.62, resid_mid: 0.55, attn_pattern: 0.48, mlp_pre: 0.40, resid_pre: 0.35 }, |
| refusal: { resid_post: 1.0, attn_out: 0.85, mlp_out: 0.80, mlp_gate: 0.65, attn_pattern: 0.62, resid_mid: 0.55, mlp_pre: 0.35, resid_pre: 0.20 }, |
| humor: { mlp_out: 0.85, resid_post: 0.78, mlp_gate: 0.68, attn_pattern: 0.58, attn_out: 0.55, resid_mid: 0.50, mlp_pre: 0.40, resid_pre: 0.32 }, |
| factual: { mlp_gate: 0.95, mlp_out: 0.88, mlp_pre: 0.65, attn_pattern: 0.55, attn_out: 0.50, resid_mid: 0.55, resid_post: 0.62, resid_pre: 0.30 }, |
| multiling: { resid_pre: 0.78, mlp_gate: 0.85, mlp_out: 0.78, attn_out: 0.55, attn_pattern: 0.50, resid_mid: 0.62, mlp_pre: 0.55, resid_post: 0.50 }, |
| sentiment: { attn_out: 0.82, mlp_out: 0.78, resid_post: 0.72, attn_pattern: 0.70, mlp_gate: 0.62, resid_mid: 0.50, mlp_pre: 0.42, resid_pre: 0.32 }, |
| safety: { resid_post: 1.0, attn_out: 0.90, mlp_out: 0.78, mlp_gate: 0.62, resid_mid: 0.60, attn_pattern: 0.62, mlp_pre: 0.40, resid_pre: 0.22 }, |
| }; |
| return (A[behaviorId] && A[behaviorId][compId]) || 0.4; |
| } |
|
|
| |
| function buildFstatMatrix() { |
| const rand = rng(2042); |
| const m = []; |
| for (let l = 0; l < N_LAYERS; l++) { |
| const row = []; |
| for (let c = 0; c < COMPONENTS.length; c++) { |
| const comp = COMPONENTS[c]; |
| |
| let energy = 0; |
| for (const b of BEHAVIORS) energy += behaviorCurve(b.id, l) * compAffinity(comp.id, b.id); |
| energy /= BEHAVIORS.length; |
| |
| const kindBias = comp.kind === 'attention' ? 0.05 : comp.kind === 'mlp' ? 0.10 : -0.05; |
| |
| const lx = l / (N_LAYERS - 1); |
| const posBias = 0.18 * Math.exp(-((lx - 0.55) ** 2) / 0.18); |
| const noise = (rand() - 0.5) * 0.18; |
| const v = Math.max(0.02, Math.min(1.0, energy * 1.45 + kindBias + posBias + noise)); |
| row.push(+v.toFixed(3)); |
| } |
| m.push(row); |
| } |
| return m; |
| } |
|
|
| |
| function buildBehaviorMatrix(behaviorId) { |
| const rand = rng(behaviorId.split('').reduce((a, c) => a + c.charCodeAt(0), 7)); |
| const m = []; |
| for (let l = 0; l < N_LAYERS; l++) { |
| const row = []; |
| for (let c = 0; c < COMPONENTS.length; c++) { |
| const comp = COMPONENTS[c]; |
| const v = behaviorCurve(behaviorId, l) * compAffinity(comp.id, behaviorId); |
| const noise = (rand() - 0.5) * 0.10; |
| row.push(+Math.max(0.0, Math.min(1.0, v + noise)).toFixed(3)); |
| } |
| m.push(row); |
| } |
| return m; |
| } |
|
|
| const FSTAT = buildFstatMatrix(); |
| const BEHAVIOR_MATRICES = Object.fromEntries(BEHAVIORS.map(b => [b.id, buildBehaviorMatrix(b.id)])); |
|
|
| |
| const FEATURE_DESCRIPTIONS = [ |
| 'cleanup of stale punctuation after parenthetical aside', |
| 'tracks pronoun antecedent across sentence boundary', |
| 'detects code-block opening fence', |
| 'sycophantic agreement preamble ("Great question!")', |
| 'numeric magnitude estimation, base-10', |
| 'currency symbol context (USD/EUR/JPY)', |
| 'detection of ALL-CAPS shouting register', |
| 'over-cautious refusal preamble for benign cooking q', |
| 'list-continuation bullet bias', |
| 'german compound-noun segmentation', |
| 'sentiment flip on "however"', |
| 'detection of jailbreak roleplay framing', |
| 'enforces JSON brace closure', |
| 'tracks SQL identifier scope', |
| 'emoji-as-bullet substitution', |
| 'detects mathematical proof step boundary', |
| 'meta-commentary about being an AI', |
| 'apology cascade after correction', |
| 'inline-citation pattern (Author, year)', |
| 'french elision before vowel', |
| 'detects polite imperative vs command', |
| 'over-formal register lock-in', |
| 'em-dash overuse driver', |
| 'trailing-summary-paragraph compulsion', |
| 'rhetorical "but more importantly" pivot', |
| 'rust borrow-checker hint emission', |
| 'detects whitespace-significant language (Python/YAML)', |
| 'gendered pronoun default ("he" for engineer)', |
| 'detects question-vs-statement intonation in text', |
| 'parses ISO 8601 dates', |
| ]; |
|
|
| function buildSurgicalTargets() { |
| const rand = rng(31415); |
| const rows = []; |
| for (let i = 0; i < FEATURE_DESCRIPTIONS.length; i++) { |
| const layer = Math.floor(rand() * N_LAYERS); |
| const comp = COMPONENTS[Math.floor(rand() * COMPONENTS.length)]; |
| const fid = Math.floor(rand() * 65536); |
| const bouncer = +(0.55 + rand() * 0.44).toFixed(2); |
| const topicF = +(0.02 + rand() * 0.20).toFixed(2); |
| const ablate = +((bouncer - topicF) * 100).toFixed(1); |
| const examples = Math.floor(40 + rand() * 380); |
| rows.push({ |
| id: `L${layer}.${comp.id}.f${fid}`, |
| layer, component: comp.id, feature: fid, |
| desc: FEATURE_DESCRIPTIONS[i], |
| bouncer, topicF, ablate, examples, |
| }); |
| } |
| return rows.sort((a, b) => b.ablate - a.ablate); |
| } |
|
|
| |
| function headBreakdown(layer) { |
| const rand = rng(layer * 977 + 11); |
| const heads = []; |
| const ROLES = [ |
| 'previous-token', 'induction', 'name-mover', 'duplicate-token', |
| 'punctuation', 'subject-verb', 'syntax-bracket', 'positional', |
| 'topic', 'refusal-routing', 'numeric', 'multilingual', |
| 'code-scope', 'list-tracking', 'sentiment', 'self-reference', |
| ]; |
| for (let h = 0; h < N_HEADS; h++) { |
| const role = ROLES[Math.floor(rand() * ROLES.length)]; |
| const f = +(0.15 + rand() * 0.85).toFixed(2); |
| heads.push({ head: h, role, fstat: f }); |
| } |
| return heads.sort((a, b) => b.fstat - a.fstat); |
| } |
|
|
| |
| function topFeatures(layer, compId) { |
| const rand = rng(layer * 131 + compId.charCodeAt(0) * 17 + compId.length); |
| const out = []; |
| for (let i = 0; i < 6; i++) { |
| const desc = FEATURE_DESCRIPTIONS[Math.floor(rand() * FEATURE_DESCRIPTIONS.length)]; |
| out.push({ |
| feature: Math.floor(rand() * 65536), |
| desc, |
| fstat: +(0.30 + rand() * 0.70).toFixed(2), |
| density: +(0.001 + rand() * 0.18).toFixed(3), |
| }); |
| } |
| return out.sort((a, b) => b.fstat - a.fstat); |
| } |
|
|
| window.AtlasData = { |
| N_LAYERS, N_HEADS, |
| COMPONENTS, BEHAVIORS, |
| FSTAT, BEHAVIOR_MATRICES, |
| SURGICAL: buildSurgicalTargets(), |
| headBreakdown, topFeatures, |
| META: { |
| model: 'gemma-4-e2b-it', |
| paramCount: '2.06B (eff.)', |
| probes: 7421, |
| promptsScanned: 184_320, |
| datasetCoverage: 0.51, |
| ingested: '2026-05-15T07:22Z', |
| authorHandle: 'juiceb0xc0de', |
| }, |
| }; |
| })(); |
|
|