AI Cog Map
Real-time transformer layer activation visualization for SGLang inference servers.
Watch your AI model think. AI Cog Map captures per-layer activation patterns during inference and renders them as a live heatmap — showing which layers, attention heads, and MLP blocks are doing meaningful work on each forward pass.
Features
- Layer Activation Heatmap — Grid where each cell represents a hook point in the transformer. Brightness shows activation intensity, from dark through purple to bright cyan.
- Component-Aware Visualization — Hook points are classified by type (attention, MLP, projections, norms) with distinct color tinting so you can see the model's internal structure.
- Cognitive Depth Slider — Control how much detail you see. Slide from "Layer Outputs" (64 cells for a 64-layer model) through to "Full Detail" (every sub-module, 800+ cells).
- Auto-Interpreter — Computes a cognitive state label from activation patterns: Attending, Reasoning, Structuring, Recalling, Searching, Generating, or Processing. Shows what kind of work the model is doing right now.
- Activation Delta Bar — Shows which layers are changing between forward passes, revealing where the model's attention is shifting as it processes new tokens.
- Live Statistics — Active layer count, mean activation, data freshness, energy breakdown by component type and layer depth.
- Info Tooltip — Built-in reference explaining what each component type does and what high activation means.
Different types of work create different visual signatures. Code generation activates different layers than creative writing. Math reasoning lights up different patterns than summarization.
Architecture
┌─────────────────────┐ shared memory ┌─────────────────────┐
│ │ + metadata JSON │ │
│ SGLang Server │ ─────────────────> │ AI Cog Map UI │
│ │ /dev/shm/aicogmap-* │ │
│ + forward hooks │ │ FastAPI + HTML │
│ (aicogmap.hook) │ │ localhost:7890 │
│ │ │ │
└─────────────────────┘ └─────────────────────┘
Hook Plugin (aicogmap.hook): SGLang forward hook factory. Attaches to every matched sub-module via SGLang's native --forward-hooks system. Computes the L2 norm of each module's output tensor and writes to a shared memory buffer. Also classifies each hook point by layer index, component type, and category, writing a metadata sidecar JSON. No SGLang source modification required.
Visualization Server (aicogmap.server): Standalone FastAPI server that reads the shared memory buffer and metadata, computes cognitive state, and serves a real-time heatmap UI. Polls at 500ms for smooth animation.
Shared Memory Bridge: Lock-free binary format (4-byte magic ACGM + header + float32 array) at /dev/shm/aicogmap-activations. Metadata sidecar at /dev/shm/aicogmap-metadata.json. Zero disk I/O, zero serialization overhead. The hook writes, the server reads.
Installation
pip install aicogmap
Or from source:
git clone https://github.com/openhelper/ai-cog-map.git
cd ai-cog-map
pip install -e .
Quick Start
1. Start SGLang with hooks enabled
python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-27B \
--dtype bfloat16 \
--port 8000 \
--forward-hooks '[{
"name": "aicogmap",
"target_modules": ["model.layers.*"],
"hook_factory": "aicogmap.hook:create_activation_hook",
"config": {"shm_path": "/dev/shm/aicogmap-activations"}
}]'
2. Start the visualization server
aicogmap --port 7890
3. Open the UI
Navigate to http://localhost:7890 and send requests to your model. Watch the layers light up.
Docker
If SGLang runs in Docker, mount shared memory and the aicogmap package:
volumes:
- /dev/shm:/dev/shm
- ./aicogmap:/usr/local/lib/python3.12/dist-packages/aicogmap
See examples/docker-compose.example.yml for a complete setup.
Configuration
Hook Config
| Option | Default | Description |
|---|---|---|
shm_path |
/dev/shm/aicogmap-activations |
Shared memory file path |
meta_path |
/dev/shm/aicogmap-metadata.json |
Metadata sidecar JSON path |
flush_interval |
0.1 |
Seconds between shared memory flushes |
max_layers |
1024 |
Maximum hook points to track |
Server Config
| Flag | Default | Description |
|---|---|---|
--host |
0.0.0.0 |
Bind address |
--port |
7890 |
HTTP port |
--shm-path |
/dev/shm/aicogmap-activations |
Shared memory path |
--meta-path |
/dev/shm/aicogmap-metadata.json |
Metadata sidecar path |
Target Module Patterns
The target_modules field uses fnmatch patterns. Common patterns:
| Pattern | Matches |
|---|---|
model.layers.* |
All transformer layers and sub-modules (recommended) |
model.layers.*.self_attn |
Attention modules only |
model.layers.*.mlp |
Feed-forward modules only |
model.layers.0 |
First layer only |
model.layers.3[0-9] |
Layers 30-39 |
Component Classification
When using model.layers.*, the hook automatically classifies each sub-module:
| Component | Category | What it captures |
|---|---|---|
layer_output |
layer | Full layer contribution to residual stream |
attention |
attention | Attention block aggregated output |
attention_conv |
attention | Mamba-style convolution (hybrid models) |
attention_qkv |
attention | Query/Key/Value projections |
attention_gate |
attention | Attention gating mechanism |
mlp |
mlp | Feed-forward network block |
mlp_gate_up |
mlp | MLP gated projection (SwiGLU) |
mlp_down |
mlp | MLP output down-projection |
layernorm_input |
norm | Pre-attention normalization |
layernorm_post |
norm | Post-attention normalization |
The cognitive depth slider controls which categories are visible:
| Depth | Visible Categories | Typical cell count (64-layer model) |
|---|---|---|
| 1 | Layer outputs only | 64 |
| 2 | + Attention + MLP | ~192 |
| 3 | + Projections | ~448 |
| 4 | + Norms | ~576 |
| 5 | Everything | ~865 |
Cognitive States
The auto-interpreter computes a cognitive state label from activation energy patterns:
| State | Pattern | Typical tasks |
|---|---|---|
| Attending | Attention energy > 65% of total | Reading context, following references |
| Reasoning | MLP dominant, deep layers active | Math, logic, code generation |
| Structuring | MLP dominant, early layers active | Parsing syntax, organizing output |
| Recalling | MLP gate projections highest | Factual recall, knowledge lookup |
| Searching | Low variance across layers | Uncertain, exploring possibilities |
| Generating | Deep layers > 50% of total energy | Token generation, text completion |
| Processing | No dominant pattern | Mixed or transitional processing |
API
GET /api/activations?depth=N
Returns normalized activation norms, deltas, cognitive state, and hook metadata.
{
"status": "ok",
"num_layers": 192,
"total_hooks": 865,
"age_s": 0.05,
"depth": 2,
"norms": [0.23, 0.45, 0.12, "..."],
"raw_norms": [145.2, 278.9, 72.1, "..."],
"deltas": [0.01, 0.15, 0.03, "..."],
"cognitive_state": {
"label": "Reasoning",
"confidence": 0.82,
"attention_ratio": 0.31,
"energy": {
"attention": 1240.5,
"mlp": 2890.3,
"early": 980.2,
"mid": 1650.8,
"deep": 1499.8,
"total": 4130.8
}
},
"hooks": [
{"index": 0, "layer": 0, "type": "layer_output", "category": "layer"},
{"index": 1, "layer": 0, "type": "attention", "category": "attention"},
"..."
],
"history": ["..."]
}
GET /api/metadata
Returns the full hook metadata sidecar.
GET /api/health
Returns connection status, hook count, and metadata availability.
Performance
- Hook overhead: ~0.1-0.5% of inference time (one
tensor.norm()per hook per forward pass) - Memory: ~4KB shared memory for 1024 hook points
- Metadata: One-time JSON write per new hook (~4KB for 865 hooks)
- Zero overhead when disabled: Hooks are opt-in via
--forward-hooks - No disk I/O: Shared memory (
/dev/shm) is RAM-backed
How It Works
On each forward pass through the model:
- SGLang's hook manager calls the hook function after each matched sub-module executes
- On first encounter, the hook resolves the module's fully qualified name, classifies its component type, and writes the metadata sidecar
- The hook computes
output.detach().float().norm().item()— a single scalar capturing the module's activation magnitude - The scalar is written to a thread-safe buffer, indexed by hook position
- A background thread flushes the buffer to shared memory at configurable intervals
- The visualization server reads shared memory and metadata, normalizes values, computes cognitive state, and serves the UI
- The frontend renders normalized values as a color-mapped heatmap grid with component tinting
The L2 norm captures overall activation magnitude without being sensitive to individual outlier values, and is extremely cheap to compute on GPU tensors.
Compatibility
- SGLang: Any version with
--forward-hookssupport (PR #13217) - Models: Any transformer-based model served by SGLang
- GPU: Any NVIDIA GPU supported by SGLang
- OS: Linux (requires
/dev/shmfor shared memory)
Author
Sonny Vleisides — CTO at ARRA Networks | VP Development at Alice Research
License
Metadata
Release files for aicogmap 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aicogmap-0.2.0.tar.gz | 26.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aicogmap-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.0 kB
Release files / aicogmap-0.2.0.tar.gz
| Download URL | aicogmap-0.2.0.tar.gz |
|---|---|
| Size | 26.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2b0c578e5bf4c1485efe4f077fb62f577ad3201019e84fa2d7f065abd4258b8
|
|
BLAKE2b-256 checksum How to use checksums |
f04a6b8fea75d1b990d61b938740aa570ad1d22a2d8845beff053946dd3a9332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / aicogmap-0.2.0-py3-none-any.whl
| Download URL | aicogmap-0.2.0-py3-none-any.whl |
|---|---|
| Size | 25.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
99aa281a34480534a1edd336ac958fc59ca681f81680a15cbc9f3bd512a46c9f
|
|
BLAKE2b-256 checksum How to use checksums |
2b84aa25267594518599c98b2b7c950adc48019012de3ccb2ca746569f969926
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for aicogmap 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.