Skip to main content

interp-engine

interp-engine logo, a magnifying glass where the handle is a rocket

🔗 interp-engine.org

CI status PyPI version Apache-2.0 license Join the Slack

interp-engine is an interpretability engine that is fast, standardized (34 'points'/addresses across architectures), and easy to use and debug. It powers all of Neuronpedia's inference and is checked for accuracy against HF Transformers and other engines.

benchmark between ie and transformers

Tokens per second while capturing and generating: eager against IE-vLLM and IE-vLLM-static on qwen3.8-27b and deepseek-v4-flash-0731, 8 requests in flight

interp-engine demo gif

This repo contains:

  1. validator/, which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
  2. visualizer-web/, a "cheat sheet" hosted at interp-engine.org of each 'point' (eg resid_post.16), standardized across architectures.

Installation

pip install 'interp-engine[vllm]'  # preferred install: includes vLLM support (CUDA required)
pip install interp-engine          # eager backend only

Simple Usage

from interp_engine import Address, load_model, run_with_cache

# VLLM (default): low VRAM, medium speed, every point, chosen per request
model = load_model("Qwen/Qwen3-8B")

# VLLM-STATIC: high VRAM, high speed, only the points you declare (default resid_post)
# model = load_model("Qwen/Qwen3-8B", backend="vllm-static")

# VLLM-GENERATE: fastest, generation only -- no capture, no steering
# model = load_model("Qwen/Qwen3-8B", backend="vllm-generate")

# EAGER: low VRAM, low speed
# model = load_model("Qwen/Qwen3-8B", backend="eager")

point = Address("resid_post", 10)      # or string: "resid_post.10"
cache = run_with_cache(model, model.to_tokens("Hello, world"), [point])
cache[point]  # [batch, pos, ...]

AI Agents

Add "use interp-engine" to your prompt and let your agent figure it out - everything is fully documented in this repo and open source.

Supported Points ("Addresses")

interp-engine supports 34 standardized points ("Addresses") across architectures: every one of them on the eager backend, 28 of them on vLLM. Check interp-engine.org for the "cheat sheet", or SUPPORTED_POINTS.md for a markdown version with the per-backend detail.

Performance / Speed

vLLM gives interp-engine high throughput via concurrency, and backend="vllm-static" gives even higher throughput at the cost of higher VRAM usage. Every column below is capture-capable.

Measured on NVIDIA B200, bf16, 512-token prompt, 128 new tokens.

One stream (tok/s):

model eager vLLM vLLM + static taps
gemma-2-2b 31 31 (1.0x) 214 (6.9x)
qwen3-4b 24 47 (2.0x) 296 (12.3x)
llama-3.1-8b 33 57 (1.7x) 256 (7.9x)
qwen3.8-27b 9.9 12 (1.2x) 63 (6.4x)
deepseek-v4-flash-0731 3.3 2.9 (0.9x) 119 (36x)

8 concurrent requests (aggregate tok/s):

model eager vLLM vLLM + static taps
gemma-2-2b 30 226 (7.5x) 1,238 (41x)
qwen3-4b 24 333 (14.0x) 1,018 (43x)
llama-3.1-8b 32 419 (13.0x) 1,536 (48x)
qwen3.8-27b 9.5 87 (9.2x) 386 (41x)
deepseek-v4-flash-0731 3.2 23 (7.2x) 402 (127x)

backend="vllm-static" is opt-in, and serves only the tap set it declared — static_points="auto" by default, or a list you name. PERFORMANCE.md has how it works and what it trades; benchmarks/results-latest.md has every figure at full precision, including capture, steering and lens latencies; benchmarks/README.md has how the tables above are rounded.

Correctness

We verify correctness in two main ways:

  1. A test suite that checks results across several models - what each check is designed to catch is in INTERNALS.md.
  2. A full validator comparison engine that checks most hook points across 50+ models, at early, middle and late layers - fully reproducible, with detailed results saved in the git repo at validator/.

Why use an Interpretability Engine instead of building from scratch?

  1. Speed: Get performance without sacrificing correctness.
  2. Standardization + Verification: Eliminate ambiguity when referring to points, plus a full test suite included.
  3. Faster Dev / Fewer Tokens Used: You could spend ten million tokens and have your AI write, test, and make production-ready an interpretability engine. Or you could just pip install interp-engine[vllm].

Development / Contributing

Activate the shared git hooks once per clone — they format staged Python, rebuild the generated files, and run CI's static checks before a push. Details in CONTRIBUTING.md.

make hooks    # or: git config core.hooksPath .githooks

Contact

Bugs and feature requests belong in issues. For anything else: johnny@neuronpedia.org.

License

Apache 2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

interp_engine-1.3.6.tar.gz (785.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

interp_engine-1.3.6-py3-none-any.whl (382.1 kB view details)

Uploaded Python 3

File details

Details for the file interp_engine-1.3.6.tar.gz.

File metadata

  • Download URL: interp_engine-1.3.6.tar.gz
  • Upload date:
  • Size: 785.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for interp_engine-1.3.6.tar.gz
Algorithm Hash digest
SHA256 061bfcb0a5a6cadb344ce759283a1636f76304dc323ce9cfc4a27afd65b8ca95
MD5 e084794758ba6bc54fab6c7ccbfa1911
BLAKE2b-256 869fdfd3094ce65eee93ea282a74ed254df2be98f4acbd0c0e6d449dce7b6e77

See more details on using hashes here.

Provenance

The following attestation bundles were made for interp_engine-1.3.6.tar.gz:

Publisher: release.yml on decoderesearch/interp-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file interp_engine-1.3.6-py3-none-any.whl.

File metadata

  • Download URL: interp_engine-1.3.6-py3-none-any.whl
  • Upload date:
  • Size: 382.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for interp_engine-1.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 31e1c0cf56155d5198da88d85b9f8c732baae0bb93df8df808cf92618fa90fa0
MD5 08483027e830ba28a496752f674cd8d2
BLAKE2b-256 8dc1c18c6abef3ec7a5d8a6a6002d599719da597516ea6945275e5e07e51af68

See more details on using hashes here.

Provenance

The following attestation bundles were made for interp_engine-1.3.6-py3-none-any.whl:

Publisher: release.yml on decoderesearch/interp-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.6.0

2 files

1.5.1

2 files

1.5.0

2 files

1.4.0

2 files

This release

1.3.6 This release

2 files

1.3.5

2 files

1.3.4

2 files

1.3.3

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page