Skip to content

Instantly share code, notes, and snippets.

@daaronr
Created January 9, 2026 17:26
Show Gist options
  • Select an option

  • Save daaronr/2207b5a88a8fbd87804d0302dbb2581d to your computer and use it in GitHub Desktop.

Select an option

Save daaronr/2207b5a88a8fbd87804d0302dbb2581d to your computer and use it in GitHub Desktop.
Toby Ord's Intellectual Neighborhood - Interactive 3D visualization of researchers by semantic similarity to his themes (RL Scaling, X-Risk, Infinite Ethics)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Toby Ord's Intellectual Neighborhood</title>
<script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #0d1117;
color: #e6edf3;
min-height: 100vh;
}
.container { max-width: 1400px; margin: 0 auto; padding: 20px; }
h1 { text-align: center; margin-bottom: 5px; font-size: 2em; }
.subtitle { text-align: center; color: #8b949e; margin-bottom: 20px; }
#plot3d { width: 100%; height: 600px; border-radius: 12px; background: #161b22; }
.legend-box {
background: #161b22;
border-radius: 12px;
padding: 20px;
margin-top: 20px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
}
.legend-item {
display: flex;
align-items: center;
gap: 10px;
padding: 10px;
background: #21262d;
border-radius: 8px;
}
.dot {
width: 16px;
height: 16px;
border-radius: 50%;
flex-shrink: 0;
}
.gold { background: #FFD700; }
.red { background: #FF4444; }
.orange { background: #FFA500; }
.blue { background: #4682B4; }
.insights {
background: #161b22;
border-radius: 12px;
padding: 20px;
margin-top: 20px;
}
.insights h3 { color: #58a6ff; margin-bottom: 15px; }
.insight-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 15px;
}
.insight-card {
background: #21262d;
padding: 15px;
border-radius: 8px;
border-left: 3px solid;
}
.insight-card.rl { border-color: #00BFFF; }
.insight-card.xrisk { border-color: #FF6B6B; }
.insight-card.inf { border-color: #4ECDC4; }
.insight-card h4 { margin-bottom: 10px; }
.insight-card ul { margin-left: 20px; color: #8b949e; }
.insight-card li { margin: 5px 0; }
</style>
</head>
<body>
<div class="container">
<h1>Toby Ord's Intellectual Neighborhood</h1>
<p class="subtitle">3D visualization of researchers by semantic similarity to his three main themes</p>
<div id="plot3d"></div>
<div class="legend-box">
<div class="legend-item">
<div class="dot gold"></div>
<div><strong>Toby Ord</strong> - The reference point</div>
</div>
<div class="legend-item">
<div class="dot red"></div>
<div><strong>All 3 themes</strong> - Rare multi-domain overlap (Kaj_Sotala)</div>
</div>
<div class="legend-item">
<div class="dot orange"></div>
<div><strong>2 themes</strong> - Significant overlap (DragonGod, Cole Wyeth...)</div>
</div>
<div class="legend-item">
<div class="dot blue"></div>
<div><strong>1 theme</strong> - Domain specialists</div>
</div>
</div>
<div class="insights">
<h3>Key Insights</h3>
<div class="insight-grid">
<div class="insight-card rl">
<h4 style="color: #00BFFF;">RL Scaling (Closest Match)</h4>
<ul>
<li><strong>1a3orn</strong> - "Parameter Scaling Comes for RL"</li>
<li><strong>Pablo Villalobos</strong> - Training/inference compute tradeoffs</li>
<li><strong>Matrice Jacobine</strong> - Does RL incentivize reasoning?</li>
<li><strong>Ryan Kidd</strong> - Inference scaling safety implications</li>
</ul>
</div>
<div class="insight-card xrisk">
<h4 style="color: #FF6B6B;">Existential Risk</h4>
<ul>
<li><strong>Kaj_Sotala</strong> - S-risks, long-term trajectories</li>
<li><strong>DragonGod</strong> - X-risk and longtermism</li>
<li><strong>fowlertm</strong> - Existential risk analysis</li>
<li><strong>Nick Bostrom</strong> references throughout</li>
</ul>
</div>
<div class="insight-card inf">
<h4 style="color: #4ECDC4;">Infinite Ethics</h4>
<ul>
<li><strong>Chris_Leong</strong> - "Surreal Decisions" summary</li>
<li><strong>Cleo Nardo</strong> - Decision theory overlaps</li>
<li><strong>Stuart_Armstrong</strong> - Bounded utility functions</li>
<li>Pascal's wager/mugging discussions</li>
</ul>
</div>
</div>
</div>
</div>
<script>
// Data from ExoPriors Alignment Scry
const data = [
["Toby_Ord", 0.922, 0.5, 0.5],
["1a3orn", 0.857, 0.5, 0.5],
["Pablo Villalobos", 0.850, 0.5, 0.5],
["Matrice Jacobine", 0.832, 0.5, 0.5],
["Lukas Finnveden", 0.831, 0.5, 0.5],
["ryan_greenblatt", 0.821, 0.707, 0.5],
["Kaj_Sotala", 0.792, 0.818, 0.719],
["RogerDearnaley", 0.818, 0.5, 0.5],
["Ryan Kidd", 0.812, 0.5, 0.5],
["Nadav Brandes", 0.811, 0.5, 0.5],
["Cole Wyeth", 0.808, 0.709, 0.716],
["DragonGod", 0.792, 0.807, 0.715],
["eggsyntax", 0.805, 0.5, 0.5],
["Cleo Nardo", 0.803, 0.5, 0.730],
["Shmi", 0.800, 0.748, 0.5],
["fowlertm", 0.714, 0.800, 0.5],
["Rohin Shah", 0.796, 0.756, 0.5],
["Johannes Treutlein", 0.795, 0.750, 0.5],
["Zach Stein-Perlman", 0.795, 0.744, 0.5],
["Eric Drexler", 0.796, 0.5, 0.5],
["nostalgebraist", 0.795, 0.5, 0.5],
["Stuart_Armstrong", 0.78, 0.74, 0.68],
["Chris_Leong", 0.78, 0.5, 0.793],
];
// Process data
const authors = data.map(d => d[0]);
const rl = data.map(d => d[1]);
const xrisk = data.map(d => d[2]);
const inf = data.map(d => d[3]);
// Assign colors and sizes
const colors = [];
const sizes = [];
const texts = [];
data.forEach((d, i) => {
const author = d[0];
const themes = [];
if (d[1] > 0.72) themes.push("RL");
if (d[2] > 0.72) themes.push("X-Risk");
if (d[3] > 0.70) themes.push("Infinite");
if (author === "Toby_Ord") {
colors.push('#FFD700');
sizes.push(25);
texts.push(author);
} else if (themes.length === 3) {
colors.push('#FF4444');
sizes.push(20);
texts.push(author);
} else if (themes.length === 2) {
colors.push('#FFA500');
sizes.push(16);
texts.push(author);
} else if (d[1] > 0.83 || d[2] > 0.79) {
colors.push('#4682B4');
sizes.push(12);
texts.push(author);
} else {
colors.push('#4682B4');
sizes.push(10);
texts.push('');
}
});
// Create hover text
const hoverTexts = data.map((d, i) => {
const themes = [];
if (d[1] > 0.72) themes.push("RL Scaling");
if (d[2] > 0.72) themes.push("X-Risk");
if (d[3] > 0.70) themes.push("Infinite Ethics");
return `<b>${d[0]}</b><br>` +
`Themes: ${themes.length ? themes.join(', ') : 'Adjacent'}<br>` +
`RL: ${d[1].toFixed(2)}<br>` +
`X-Risk: ${d[2].toFixed(2)}<br>` +
`Infinite: ${d[3].toFixed(2)}`;
});
const trace = {
x: rl,
y: xrisk,
z: inf,
mode: 'markers+text',
type: 'scatter3d',
marker: {
size: sizes,
color: colors,
opacity: 0.9,
line: { width: 1, color: 'white' }
},
text: texts,
textposition: 'top center',
textfont: { size: 10, color: 'white' },
hovertext: hoverTexts,
hoverinfo: 'text'
};
// Sweet spot marker
const sweetSpot = {
x: [1],
y: [1],
z: [1],
mode: 'markers+text',
type: 'scatter3d',
marker: {
size: 10,
color: 'white',
opacity: 0.4,
symbol: 'diamond'
},
text: ["Toby's Sweet Spot"],
textposition: 'bottom center',
textfont: { size: 9, color: 'rgba(255,255,255,0.6)' },
hoverinfo: 'skip',
showlegend: false
};
const layout = {
scene: {
xaxis: {
title: { text: 'RL Scaling Similarity', font: { color: '#00BFFF' } },
range: [0.5, 1],
gridcolor: 'rgba(255,255,255,0.1)',
tickfont: { color: 'white' }
},
yaxis: {
title: { text: 'X-Risk Similarity', font: { color: '#FF6B6B' } },
range: [0.5, 1],
gridcolor: 'rgba(255,255,255,0.1)',
tickfont: { color: 'white' }
},
zaxis: {
title: { text: 'Infinite Ethics Similarity', font: { color: '#4ECDC4' } },
range: [0.5, 1],
gridcolor: 'rgba(255,255,255,0.1)',
tickfont: { color: 'white' }
},
bgcolor: '#161b22',
camera: {
eye: { x: 1.8, y: 1.8, z: 1.3 }
}
},
paper_bgcolor: '#161b22',
plot_bgcolor: '#161b22',
margin: { l: 0, r: 0, t: 30, b: 0 },
showlegend: false
};
Plotly.newPlot('plot3d', [trace, sweetSpot], layout, {
responsive: true,
displayModeBar: true,
modeBarButtonsToRemove: ['toImage', 'sendDataToCloud']
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment