interp-engine 1.2.0__tar.gz → 1.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {interp_engine-1.2.0 → interp_engine-1.2.2}/PKG-INFO +19 -7
- {interp_engine-1.2.0 → interp_engine-1.2.2}/README.md +18 -6
- {interp_engine-1.2.0 → interp_engine-1.2.2}/pyproject.toml +1 -1
- {interp_engine-1.2.0 → interp_engine-1.2.2}/.gitignore +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/LICENSE +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/README.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/__init__.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/bench_spec.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/cells.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/probe.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/publish.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/report_bench.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-freeze.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__eager.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm-freeze.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-freeze.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__eager.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm-freeze.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-freeze.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results-latest.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/run_all.sh +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/run_bench.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/workloads.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/AGENT_INTEGRATION.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/ARCHITECTURE_QUIRKS.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/COMPATIBILITY.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/GRADIENTS.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/INTERNALS.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/PERFORMANCE.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/PORTING.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/README.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/SUPPORTED_POINTS.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/USAGE.md +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/__init__.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/_loop.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/address.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/arch.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/attn_config.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/attn_scores.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/autograd_support.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/capture.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/chat_compose.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/chat_conventions.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/cuda_preflight.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/dispatch.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/facts.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/hooks.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/lens.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/load.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/mappers.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/model.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/moe_routing.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/points.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/protocol.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/residual_basis.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/select.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/steer.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/steer_specs.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/sync.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/tokenize.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_backend.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/__init__.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_demux.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_hooks.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_payload.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_tree.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/attn.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/capture.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/freeze.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/graphs.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/__init__.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/intervene.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/readout.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/unembed.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/mhc.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/native.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/requests.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/steering.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_plugin.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/conftest.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/harness.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/model_expectations.yaml +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/synthetic_families.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_address.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_config_tripwire.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_probs_indexing.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_scores.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_z_gqa.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_autograd_support.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_bench_workloads.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_capability_refusals.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_capture_addressing.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_chat_compose.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_chat_templates.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_core.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_cuda_preflight.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_doc_code_fences.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_eager_autograd.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_facts.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_family_points.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_dsv4_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_parity_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_set.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_warmup.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_gated_attn_out.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_head_contributions.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_hook_call_conventions.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_layer_kinds.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_load.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_logit_transform.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_mappers.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_mlp_internals.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_model_expectations.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_moe.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_multimodal_arch.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_new_models_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_no_chat_template.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_normalized_hook.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_packaging.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_parity_gpt2.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_per_layer_attn_dims.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_points_registry.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_protocol.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_published_benchmarks.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_qk_norm.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_qkv_layout.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_reasoning_spans.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_release.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_resid_mid.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_residual_basis.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sandwich_norms.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_select.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sliding_window_attn.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_small_models_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_steer_context.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_steer_math_parity.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sync_loop.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sync_parity.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_unified_free_functions.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_unresolved_families.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_capture_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_capture_scales.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_graph_path.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_graphs_on_gpu.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_hook_availability.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_hyper_connections.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_kv_isolation.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_new_points.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_only_families.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_plugin.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_wire_grammar.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vocabulary_boundary.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_worker_lens_capture_readout.py +0 -0
- {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_worker_lens_readout.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: interp-engine
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: A fast, standardized interpretability engine that supports most modern models and architectures. Powers Neuronpedia.
|
|
5
5
|
Project-URL: Homepage, https://github.com/decoderesearch/interp-engine
|
|
6
6
|
Project-URL: Repository, https://github.com/decoderesearch/interp-engine
|
|
@@ -38,13 +38,13 @@ Description-Content-Type: text/markdown
|
|
|
38
38
|
🔗 <a href="https://interp-engine.org"><strong>interp-engine.org</strong></a>
|
|
39
39
|
</p>
|
|
40
40
|
|
|
41
|
-
`interp-engine` is an interpretability engine that is fast (>40x tok/s vs HF eager), standardized (34 'points'/addresses across architectures), and easy to use and debug. It powers all of [Neuronpedia](https://neuronpedia.org)'s inference
|
|
41
|
+
`interp-engine` is an interpretability engine that is fast (>40x tok/s vs HF eager), standardized (34 'points'/addresses across architectures), and easy to use and debug. It powers all of [Neuronpedia](https://neuronpedia.org)'s inference and is checked for accuracy against HF Transformers and other engines.
|
|
42
42
|
|
|
43
43
|
<p align="center">
|
|
44
|
-
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ie-perf.png" alt="Tokens per second while capturing and generating: eager against IE-vLLM and IE-vLLM-freeze on qwen3.8-27b and deepseek-v4-flash-0731, 8 requests in flight" width="
|
|
44
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ie-perf.png" alt="Tokens per second while capturing and generating: eager against IE-vLLM and IE-vLLM-freeze on qwen3.8-27b and deepseek-v4-flash-0731, 8 requests in flight" width="100%">
|
|
45
45
|
</p>
|
|
46
46
|
<p align="center">
|
|
47
|
-
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="
|
|
47
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="100%">
|
|
48
48
|
</p>
|
|
49
49
|
|
|
50
50
|
This repo contains:
|
|
@@ -129,11 +129,23 @@ We verify correctness in two main ways:
|
|
|
129
129
|
|
|
130
130
|
## Why use an Interpretability Engine, instead of just having my AI code whatever it needs on the fly?
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
Software is easy to make in 2026, here's why an engine makes sense:
|
|
133
133
|
|
|
134
134
|
1. **Speed**: Get performance without sacrificing correctness.
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
2. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
|
|
136
|
+
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]`.
|
|
137
|
+
|
|
138
|
+
## Development / Contributing
|
|
139
|
+
|
|
140
|
+
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](CONTRIBUTING.md).
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
make hooks # or: git config core.hooksPath .githooks
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Contact
|
|
147
|
+
|
|
148
|
+
Bugs and feature requests belong in [issues](https://github.com/decoderesearch/interp-engine/issues). For anything else: [johnny@neuronpedia.org](mailto:johnny@neuronpedia.org).
|
|
137
149
|
|
|
138
150
|
## License
|
|
139
151
|
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
🔗 <a href="https://interp-engine.org"><strong>interp-engine.org</strong></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
|
-
`interp-engine` is an interpretability engine that is fast (>40x tok/s vs HF eager), standardized (34 'points'/addresses across architectures), and easy to use and debug. It powers all of [Neuronpedia](https://neuronpedia.org)'s inference
|
|
10
|
+
`interp-engine` is an interpretability engine that is fast (>40x tok/s vs HF eager), standardized (34 'points'/addresses across architectures), and easy to use and debug. It powers all of [Neuronpedia](https://neuronpedia.org)'s inference and is checked for accuracy against HF Transformers and other engines.
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ie-perf.png" alt="Tokens per second while capturing and generating: eager against IE-vLLM and IE-vLLM-freeze on qwen3.8-27b and deepseek-v4-flash-0731, 8 requests in flight" width="
|
|
13
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ie-perf.png" alt="Tokens per second while capturing and generating: eager against IE-vLLM and IE-vLLM-freeze on qwen3.8-27b and deepseek-v4-flash-0731, 8 requests in flight" width="100%">
|
|
14
14
|
</p>
|
|
15
15
|
<p align="center">
|
|
16
|
-
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="
|
|
16
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="100%">
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
This repo contains:
|
|
@@ -98,11 +98,23 @@ We verify correctness in two main ways:
|
|
|
98
98
|
|
|
99
99
|
## Why use an Interpretability Engine, instead of just having my AI code whatever it needs on the fly?
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
Software is easy to make in 2026, here's why an engine makes sense:
|
|
102
102
|
|
|
103
103
|
1. **Speed**: Get performance without sacrificing correctness.
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
2. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
|
|
105
|
+
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]`.
|
|
106
|
+
|
|
107
|
+
## Development / Contributing
|
|
108
|
+
|
|
109
|
+
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](CONTRIBUTING.md).
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
make hooks # or: git config core.hooksPath .githooks
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Contact
|
|
116
|
+
|
|
117
|
+
Bugs and feature requests belong in [issues](https://github.com/decoderesearch/interp-engine/issues). For anything else: [johnny@neuronpedia.org](mailto:johnny@neuronpedia.org).
|
|
106
118
|
|
|
107
119
|
## License
|
|
108
120
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__eager.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm.json
RENAMED
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json
RENAMED
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-freeze.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm-cudagraph.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json
RENAMED
|
File without changes
|
{interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-freeze.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|