CircuitScope / frontend /src /components /BlogIndex.js
Gaurav711's picture
feat: complete live cpu inference, research sweep, blog & production build
2d4e3e5
Raw
History Blame Contribute Delete
8.14 kB
import React from 'react';
import { useNavigate } from 'react-router-dom';
import { Calendar, Clock, ArrowRight, BookOpen } from 'lucide-react';
import { BlogLayout } from './BlogLayout';
export const BLOG_POSTS = [
{
slug: 'ioi-circuit-variance',
title: 'Phonetic Shifts and Pronoun Clues: Analyzing Causal Path Variance across 50 IOI Prompts',
subtitle: 'How phonetic names, relative clauses, and anaphoric coreference reshape mechanistic pathways',
abstract: 'We perform a systematic 50-prompt causal tracing sweep across four experimental groups. We discover that multi-token name splits break the Induction pathway (Layer 5) by over 60%, forcing reliance on semantic S-Inhibition (Layer 7), while pronoun cues prime coreference circuits to maximize logit recovery.',
badges: [{ text: 'Original Research', color: 'green' }, { text: 'Causal Sweep', color: 'blue' }, { text: 'TransformerLens', color: 'violet' }],
readTime: '15 min',
date: '2026',
keyFinding: 'Multi-token names degrade Induction recovery by 60%, compensated by Layer 7 S-Inhibition',
color: '#00E676',
},
{
slug: 'induction-heads-python-shadowing',
title: 'Induction Heads Partially Activate on Python Variable Shadowing',
subtitle: 'Evidence for Mechanistic Universality in GPT-2 Small',
abstract: 'We test whether the induction heads in GPT-2 Small\'s IOI circuit generalize beyond English name coreference to Python variable shadowing — and find partial activation at 37–52% of IOI-level, suggesting the mechanism detects syntactic repetition in general.',
badges: [{ text: 'Original Research', color: 'green' }, { text: 'Induction Heads', color: 'blue' }],
readTime: '18 min',
date: '2025',
keyFinding: '37–52% activation on Python variable shadowing vs IOI baseline',
color: '#00E676',
},
{
slug: 'backup-name-movers',
title: 'Backup Name Mover Heads: The Hidden Redundancy in GPT-2\'s IOI Circuit',
subtitle: 'How ablation reveals dormant circuit components that activate under failure',
abstract: 'When we ablate the primary Name Mover Heads (L9H9, L10H0), backup heads at layers 10–11 activate to partially recover the IOI task. This built-in redundancy suggests transformers develop fault-tolerant circuits during training — with implications for alignment.',
badges: [{ text: 'Circuit Analysis', color: 'teal' }, { text: 'Ablation Study', color: 'amber' }],
readTime: '14 min',
date: '2025',
keyFinding: 'Backup heads recover 34% of logit difference when primaries ablated',
color: '#00D9C0',
},
{
slug: 'cross-layer-features',
title: 'Cross-Layer Feature Composition: How SAE Features Build on Each Other',
subtitle: 'Training SAEs on layers 4, 6, and 8 reveals hierarchical feature composition',
abstract: 'We train separate sparse autoencoders on layers 4, 6, and 8 of GPT-2 Small and measure feature overlap. ~30% of high-level features at layer 6 have identifiable lower-level components at layer 4, consistent with Anthropic\'s findings on hierarchical representation.',
badges: [{ text: 'SAE Analysis', color: 'violet' }, { text: 'Feature Hierarchy', color: 'blue' }],
readTime: '16 min',
date: '2025',
keyFinding: '30% of layer 6 features compose from layer 4 sub-features',
color: '#9B59F5',
},
{
slug: 'dead-feature-graveyard',
title: 'The Dead Feature Graveyard: Neuron Resampling and the Limits of Sparse Autoencoders',
subtitle: 'Why 7% of SAE features never activate and what we can do about it',
abstract: 'Despite neuron resampling every 50K steps, our SAE retains ~7% dead features — directions in the encoder that never activate on any validation text. We characterize these dead features, compare resampling strategies, and identify the fundamental tension between sparsity and feature utilization.',
badges: [{ text: 'SAE Training', color: 'red' }, { text: 'Dead Features', color: 'amber' }],
readTime: '12 min',
date: '2025',
keyFinding: 'Neuron resampling reduces dead features from 25% to 7% — but no further',
color: '#FFB347',
},
];
export const BlogIndex = () => {
const navigate = useNavigate();
return (
<BlogLayout>
<div className="section-container" style={{ maxWidth: 900, padding: '60px 16px 80px' }}>
{/* Header */}
<div className="flex items-center gap-2 mb-4">
<BookOpen size={20} style={{ color: '#00D9C0' }} />
<span className="badge-teal">Research Findings</span>
</div>
<h1 data-testid="blog-index-title" style={{ fontFamily: "'Space Grotesk', sans-serif", fontWeight: 700, fontSize: 'clamp(32px, 5vw, 48px)', lineHeight: 1.1, color: '#E8EEF8', marginBottom: 12 }}>
CircuitScope Research Blog
</h1>
<p style={{ fontSize: 16, color: '#8A9BC4', maxWidth: 600, lineHeight: 1.75, marginBottom: 40 }}>
Original findings from reproducing Anthropic's mechanistic interpretability research. Each post documents a specific observation that required running experiments and thinking about the results.
</p>
<div style={{ fontSize: 13, color: '#4A5A7A', marginBottom: 24 }}>{BLOG_POSTS.length} posts</div>
{/* Post Cards */}
<div className="space-y-5">
{BLOG_POSTS.map((post, i) => (
<article
key={post.slug}
data-testid={`blog-card-${post.slug}`}
className="research-card cursor-pointer"
onClick={() => navigate(`/blog/${post.slug}`)}
style={{
borderLeft: `3px solid ${post.color}`,
transition: 'border-color 200ms, box-shadow 200ms',
cursor: 'pointer',
}}
onMouseEnter={e => { e.currentTarget.style.boxShadow = `0 0 0 1px ${post.color}22, 0 4px 20px ${post.color}08`; e.currentTarget.style.borderLeftColor = post.color; }}
onMouseLeave={e => { e.currentTarget.style.boxShadow = 'none'; }}
>
<div className="flex items-center gap-2 mb-3 flex-wrap">
{post.badges.map((b, j) => <span key={j} className={`badge-${b.color}`}>{b.text}</span>)}
<span style={{ fontSize: 11, color: '#4A5A7A', marginLeft: 'auto' }} className="flex items-center gap-1">
<Calendar size={11} /> {post.date}
<span style={{ margin: '0 4px' }}>·</span>
<Clock size={11} /> {post.readTime}
</span>
</div>
<h2 style={{ fontFamily: "'Space Grotesk', sans-serif", fontWeight: 600, fontSize: 20, color: '#E8EEF8', marginBottom: 4, lineHeight: 1.3 }}>
{post.title}
</h2>
<p style={{ fontSize: 13, color: '#4A5A7A', marginBottom: 10, fontStyle: 'italic' }}>{post.subtitle}</p>
<p style={{ fontSize: 14, color: '#8A9BC4', lineHeight: 1.7, marginBottom: 12 }}>{post.abstract}</p>
<div className="flex items-center justify-between flex-wrap gap-3">
<div style={{ fontSize: 12, color: post.color, fontFamily: "'JetBrains Mono', monospace" }}>
Key finding: {post.keyFinding}
</div>
<span className="flex items-center gap-1" style={{ fontSize: 13, color: '#00D9C0', fontWeight: 600 }}>
Read post <ArrowRight size={14} />
</span>
</div>
</article>
))}
</div>
{/* Bottom note */}
<div className="mt-10" style={{ borderTop: '1px solid #1E2B45', paddingTop: 24 }}>
<p style={{ fontSize: 13, color: '#4A5A7A', lineHeight: 1.7 }}>
These findings emerged from reproducing the IOI circuit (Wang et al., 2022) and training sparse autoencoders (Bricken et al., 2023) on GPT-2 Small. Each observation required running actual experiments — not just reading the papers. Even small findings are research contributions when they're honest and methodologically sound.
</p>
</div>
</div>
</BlogLayout>
);
};