Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
9430791
evo2 SAE recipe: feature-explorer dashboard (viz)
polinabinder1 Jun 10, 2026
dc56c4d
evo2 dashboard: read user-provided atlas data (no samples) + launch_d…
polinabinder1 Jun 10, 2026
f461bc0
evo2 dashboard: make launch_dashboard --data-dir optional
polinabinder1 Jun 10, 2026
d956b03
evo2 dashboard: docs reflect optional --data-dir (launcher docstring …
polinabinder1 Jun 10, 2026
6f900f5
evo2 dashboard: add Sequence UMAP panel (4th tab)
polinabinder1 Jun 10, 2026
2c4e69e
evo2 infer: add /gene_embed endpoint for the Sequence-UMAP dashboard tab
polinabinder1 Jun 10, 2026
b2ef4db
Merge remote-tracking branch 'origin/pbinder/evo2-sae-serve' into pbi…
polinabinder1 Jun 11, 2026
3284d12
Merge remote-tracking branch 'origin/pbinder/evo2-sae-serve' into pbi…
polinabinder1 Jun 11, 2026
dd4563d
Merge remote-tracking branch 'origin/pbinder/evo2-sae-serve' into pbi…
polinabinder1 Jun 11, 2026
efbadc4
evo2 dashboard: GPU-free mock backend + Playwright e2e smoke
polinabinder1 Jun 11, 2026
5778f00
evo2 dashboard: e2e README — zero-GPU prereqs + run/watch commands
polinabinder1 Jun 11, 2026
6352d27
evo2 infer: add `generate` CLI mode — steer from the command line
polinabinder1 Jun 11, 2026
9eedf70
evo2 dashboard: address review — fix the still-valid findings
polinabinder1 Jun 11, 2026
108f964
evo2 dashboard: e2e README — use the explicit recipe path, not bare '…
polinabinder1 Jun 11, 2026
9a1d0be
evo2 dashboard: mock --demo-data writes fake atlas parquets (full loc…
polinabinder1 Jun 11, 2026
53152cf
evo2 dashboard: remove the mock backend + Playwright e2e
polinabinder1 Jun 11, 2026
35954d9
evo2 dashboard: add scripts/dashboard.py to generate the atlas parquets
polinabinder1 Jun 11, 2026
dde5ea8
evo2 SAE steering: shared clamp primitive + dose-response harness (on…
polinabinder1 Jun 11, 2026
a7d0463
evo2 dashboard: scope dashboard.py to a small corpus; clarify label p…
polinabinder1 Jun 11, 2026
f25ba79
Merge remote-tracking branch 'origin/pbinder/evo2-sae-cli-generate' i…
polinabinder1 Jun 11, 2026
914a2fc
evo2 dashboard: split generator into atlas (cached acts) + examples (…
polinabinder1 Jun 11, 2026
d385efc
evo2 steering: unify all clamping onto sae.steering (B), drop core's …
polinabinder1 Jun 11, 2026
08f2a53
evo2 dashboard: --layout auto (umap if available, else numba-free pca…
polinabinder1 Jun 11, 2026
4fdcec2
Merge remote-tracking branch 'origin/pbinder/evo2-steering' into pbin…
polinabinder1 Jun 11, 2026
486e8ae
Merge remote-tracking branch 'origin/pbinder/evo2-sae-serve' into pbi…
polinabinder1 Jun 11, 2026
83bc1f6
evo2 dashboard: usable steering UI + correct model labels
polinabinder1 Jun 12, 2026
818ae26
Merge remote-tracking branch 'origin/pbinder/evo2-sae-server' into pb…
polinabinder1 Jun 12, 2026
f68f730
Merge remote-tracking branch 'origin/pbinder/evo2-sae-server' into pb…
polinabinder1 Jun 12, 2026
f58a252
style(core): ruff-format blank line after in-function import (fix pre…
polinabinder1 Jun 12, 2026
fcd4dfe
style(dashboard): ruff-format long print/call lines (fix pre-commit CI)
polinabinder1 Jun 12, 2026
8f763ae
evo2 dashboard: fix stuck feature list — Load-more button instead of …
polinabinder1 Jun 12, 2026
0b9b1e0
evo2 dashboard: colored-by-default atlas, self-demoing steering, sear…
polinabinder1 Jun 12, 2026
0151de5
evo2 dashboard: propagate in-UI feature renames to the steering/inspe…
polinabinder1 Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
node_modules/
package-lock.json
dist/
.vite/

# generated dashboard data (build it from your SAE/annotations, do not commit)
public/*.parquet
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Evo2 SAE Feature Explorer (front-end)

Interactive dashboard for Evo2 SAE features — feature atlas, sequence inspector, and
generative steering.

This directory is the **front-end only**. Its backend is the standalone
[`evo2_sae`](../src/evo2_sae) engine — the viz is just a UI over its
`serve` mode, so there is no model code here.

```bash
# 1. Backend: loads Evo2 + the SAE and serves the HTTP API on :8001
../scripts/launch_inference.sh serve # or: python -m evo2_sae.cli serve

# 2. Dashboard (from recipes/evo2): stages data (if any) + starts Vite
python ../scripts/launch_dashboard.py # inspector + steering tabs
python ../scripts/launch_dashboard.py --data-dir /path/to/data # + Feature-atlas tab
```

`launch_dashboard.py` is the entry point — it validates/stages the atlas parquets into
`public/` (when `--data-dir` is given) and runs Vite. The **inspector** and **steering** tabs
work with no atlas data (they call the backend); the **Feature-atlas** tab needs the three
parquets (`features_atlas`, `feature_metadata`, `feature_examples`) via `--data-dir` —
producing them is a separate offline step. (`npm install && npm run dev` also works for raw
front-end dev, but skips data staging.)

The Vite dev server proxies `/api` → `http://localhost:8001` (see `vite.config.js`); point it
elsewhere with `VITE_BACKEND`. Configure the backend via the env vars in `launch_inference.sh`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Evo 2 SAE Feature Explorer</title>
<style>
@font-face {
font-family: 'NVIDIA Sans';
font-style: normal;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_Lt.woff2);
font-weight: 300;
}
@font-face {
font-family: 'NVIDIA Sans';
font-style: italic;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_LtIt.woff2);
font-weight: 300;
}
@font-face {
font-family: 'NVIDIA Sans';
font-style: normal;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_Rg.woff2);
font-weight: normal;
}
@font-face {
font-family: 'NVIDIA Sans';
font-style: italic;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_It.woff2);
font-weight: normal;
}
@font-face {
font-family: 'NVIDIA Sans';
font-style: normal;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_Bd.woff2);
font-weight: bold;
}
@font-face {
font-family: 'NVIDIA Sans';
font-style: italic;
src: url(https://brand-assets.cne.ngc.nvidia.com/assets/fonts/nvidia-sans/1.0.0/NVIDIASans_BdIt.woff2);
font-weight: bold;
}
:root {
--bg: #f5f5f5;
--bg-card: #fff;
--bg-card-expanded: #fafafa;
--bg-example: #fff;
--bg-input: #fff;
--border: #e0e0e0;
--border-light: #eee;
--border-input: #ddd;
--text: #333;
--text-secondary: #666;
--text-tertiary: #888;
--text-muted: #999;
--text-heading: #000;
--accent: #76b900;
--highlight-border: #222;
--highlight-shadow: rgba(0,0,0,0.15);
--link: #2563eb;
--loading-bar-bg: #e0e0e0;
--density-bar-bg: #e0e0e0;
--scrollbar-thumb: #ccc;
}
:root.dark {
--bg: #000;
--bg-card: #000;
--bg-card-expanded: #000;
--bg-example: #0a0a0a;
--bg-input: #0a0a0a;
--border: #444;
--border-light: #3a3a3a;
--border-input: #4a4a4a;
--text: #E0E0E0;
--text-secondary: #bbb;
--text-tertiary: #999;
--text-muted: #777;
--text-heading: #fff;
--accent: #76b900;
--highlight-border: #76b900;
--highlight-shadow: rgba(118,185,0,0.3);
--link: #76b900;
--loading-bar-bg: #444;
--density-bar-bg: #444;
--scrollbar-thumb: #555;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'NVIDIA Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: var(--bg);
color: var(--text);
}
</style>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/index.jsx"></script>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "evo2-sae-dashboard",
"version": "0.1.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@uwdata/mosaic-core": "^0.21.1",
"@uwdata/mosaic-sql": "^0.21.1",
"@uwdata/vgplot": "^0.21.1",
"embedding-atlas": "^0.16.1",
"lucide-react": "^0.577.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"umap-js": "^1.4.0"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.2.0",
"vite": "^5.0.0"
}
}

Large diffs are not rendered by default.

Loading
Loading