interp-engine 1.2.8__tar.gz → 1.2.9__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.8 → interp_engine-1.2.9}/PKG-INFO +24 -13
- {interp_engine-1.2.8 → interp_engine-1.2.9}/README.md +23 -12
- interp_engine-1.2.9/benchmarks/probe_lens_stream.py +622 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/AGENT_INTEGRATION.md +4 -1
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/USAGE.md +11 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/_loop.py +47 -4
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/protocol.py +6 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_backend.py +28 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/pyproject.toml +1 -1
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sync_loop.py +46 -1
- interp_engine-1.2.9/tests/test_vllm_engine_loop.py +101 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/.gitignore +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/LICENSE +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/README.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/__init__.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/bench_spec.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/cells.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/probe.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/publish.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/report_bench.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-freeze.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__eager.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm-freeze.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm-freeze.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__eager.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm-freeze.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm-freeze.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results-latest.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/run_all.sh +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/run_bench.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/workloads.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/ARCHITECTURE_QUIRKS.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/COMPATIBILITY.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/GRADIENTS.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/INTERNALS.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/PERFORMANCE.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/PORTING.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/README.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/SUPPORTED_POINTS.md +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/__init__.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/address.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/arch.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/attn_config.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/attn_scores.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/autograd_support.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/capture.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_compose.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_conventions.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_formatters.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/cuda_preflight.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/dispatch.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/facts.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/hooks.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/lens.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/load.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/mappers.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/model.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/moe_routing.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/points.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/residual_basis.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/select.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/steer.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/steer_specs.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/sync.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/tokenize.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/__init__.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_demux.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_hooks.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_payload.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_tree.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/attn.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/capture.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/freeze.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/graphs.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/__init__.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/intervene.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/readout.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/unembed.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/mhc.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/native.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/requests.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/steering.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_plugin.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/conftest.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/harness.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/model_expectations.yaml +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/synthetic_families.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_address.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_config_tripwire.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_probs_indexing.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_scores.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_z_gqa.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_autograd_support.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_bench_workloads.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_capability_refusals.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_capture_addressing.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_compose.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_formatters.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_templates.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_core.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_cuda_preflight.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_doc_code_fences.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_eager_autograd.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_facts.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_family_points.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_dsv4_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_parity_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_set.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_warmup.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_gated_attn_out.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_head_contributions.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_hook_call_conventions.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_layer_kinds.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_load.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_logit_transform.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_mappers.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_mlp_internals.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_model_expectations.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_moe.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_multimodal_arch.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_new_models_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_no_chat_template.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_normalized_hook.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_packaging.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_parity_gpt2.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_per_layer_attn_dims.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_points_registry.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_protocol.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_published_benchmarks.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_qk_norm.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_qkv_layout.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_reasoning_spans.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_release.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_resid_mid.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_residual_basis.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sandwich_norms.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_select.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sliding_window_attn.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_small_models_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_steer_context.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_steer_math_parity.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sync_parity.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_unified_free_functions.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_unresolved_families.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_capture_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_capture_scales.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_graph_path.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_graphs_on_gpu.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_hook_availability.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_hyper_connections.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_kv_isolation.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_new_points.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_only_families.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_plugin.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_wire_grammar.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vocabulary_boundary.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_worker_lens_capture_readout.py +0 -0
- {interp_engine-1.2.8 → interp_engine-1.2.9}/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.9
|
|
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
|
|
@@ -31,22 +31,33 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
|
|
32
32
|
# interp-engine
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
<p align="center">
|
|
35
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ielogo.png" alt="interp-engine logo, a magnifying glass where the handle is a rocket" width="160">
|
|
36
|
+
</p>
|
|
37
|
+
<p align="center">
|
|
38
|
+
🔗 <a href="https://interp-engine.org"><strong>interp-engine.org</strong></a>
|
|
39
|
+
</p>
|
|
40
|
+
<p align="center">
|
|
41
|
+
<a href="https://github.com/decoderesearch/interp-engine/actions/workflows/engine-tests.yml"><img src="https://github.com/decoderesearch/interp-engine/actions/workflows/engine-tests.yml/badge.svg?branch=main" alt="CI status"></a>
|
|
42
|
+
<a href="https://pypi.org/project/interp-engine/"><img src="https://img.shields.io/pypi/v/interp-engine.svg" alt="PyPI version"></a>
|
|
43
|
+
<a href="LICENSE"><img src="https://img.shields.io/pypi/l/interp-engine.svg" alt="Apache-2.0 license"></a>
|
|
44
|
+
<a href="https://join.slack.com/t/opensourcemechanistic/shared_invite/zt-3z9o0hxjl-MDX9pbATO2qESOazNDLpdQ"><img src="https://img.shields.io/badge/Slack-Open%20Source%20Mechanistic%20Interpretability-4A154B?logo=slack&logoColor=white" alt="Join the Slack"></a>
|
|
45
|
+
</p>
|
|
38
46
|
|
|
39
47
|
|
|
40
48
|
`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.
|
|
41
49
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
<p align="center">
|
|
51
|
+
<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%">
|
|
52
|
+
</p>
|
|
53
|
+
<p align="center">
|
|
54
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="100%">
|
|
55
|
+
</p>
|
|
45
56
|
|
|
46
57
|
This repo contains:
|
|
47
58
|
|
|
48
|
-
1. `
|
|
49
|
-
2. `
|
|
59
|
+
1. [`validator/`](validator/), which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
|
|
60
|
+
2. [`visualizer-web/`](visualizer-web/), a "cheat sheet" hosted at [interp-engine.org](https://interp-engine.org) of each 'point' (eg `resid_post.16`), standardized across architectures.
|
|
50
61
|
|
|
51
62
|
## Installation
|
|
52
63
|
|
|
@@ -114,14 +125,14 @@ One stream (tok/s):
|
|
|
114
125
|
|
|
115
126
|
<!-- THROUGHPUT:END -->
|
|
116
127
|
|
|
117
|
-
**Graph freeze** is opt-in via `freeze_points`, and a frozen engine serves only the set it froze. [PERFORMANCE.md](docs/PERFORMANCE.md) has how it works and what it trades;
|
|
128
|
+
**Graph freeze** is opt-in via `freeze_points`, and a frozen engine serves only the set it froze. [PERFORMANCE.md](docs/PERFORMANCE.md) has how it works and what it trades; [benchmarks/results-latest.md](benchmarks/results-latest.md) has every figure at full precision, including capture, steering and lens latencies; [benchmarks/README.md](benchmarks/README.md) has how the tables above are rounded.
|
|
118
129
|
|
|
119
130
|
## Correctness
|
|
120
131
|
|
|
121
132
|
We verify correctness in two main ways:
|
|
122
133
|
|
|
123
134
|
1. A test suite that checks results across several models - what each check is designed to catch is in [INTERNALS.md](docs/INTERNALS.md#correctness).
|
|
124
|
-
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 `
|
|
135
|
+
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/`](validator/).
|
|
125
136
|
|
|
126
137
|
## Why use an Interpretability Engine, instead of just having my AI code whatever it needs on the fly?
|
|
127
138
|
|
|
@@ -145,4 +156,4 @@ Bugs and feature requests belong in [issues](https://github.com/decoderesearch/i
|
|
|
145
156
|
|
|
146
157
|
## License
|
|
147
158
|
|
|
148
|
-
Apache 2.0
|
|
159
|
+
Apache 2.0
|
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
# interp-engine
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/ielogo.png" alt="interp-engine logo, a magnifying glass where the handle is a rocket" width="160">
|
|
5
|
+
</p>
|
|
6
|
+
<p align="center">
|
|
7
|
+
🔗 <a href="https://interp-engine.org"><strong>interp-engine.org</strong></a>
|
|
8
|
+
</p>
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/decoderesearch/interp-engine/actions/workflows/engine-tests.yml"><img src="https://github.com/decoderesearch/interp-engine/actions/workflows/engine-tests.yml/badge.svg?branch=main" alt="CI status"></a>
|
|
11
|
+
<a href="https://pypi.org/project/interp-engine/"><img src="https://img.shields.io/pypi/v/interp-engine.svg" alt="PyPI version"></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://img.shields.io/pypi/l/interp-engine.svg" alt="Apache-2.0 license"></a>
|
|
13
|
+
<a href="https://join.slack.com/t/opensourcemechanistic/shared_invite/zt-3z9o0hxjl-MDX9pbATO2qESOazNDLpdQ"><img src="https://img.shields.io/badge/Slack-Open%20Source%20Mechanistic%20Interpretability-4A154B?logo=slack&logoColor=white" alt="Join the Slack"></a>
|
|
14
|
+
</p>
|
|
7
15
|
|
|
8
16
|
|
|
9
17
|
`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.
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
<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%">
|
|
21
|
+
</p>
|
|
22
|
+
<p align="center">
|
|
23
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/interp-engine-demo.gif" alt="interp-engine demo gif" width="100%">
|
|
24
|
+
</p>
|
|
14
25
|
|
|
15
26
|
This repo contains:
|
|
16
27
|
|
|
17
|
-
1. `
|
|
18
|
-
2. `
|
|
28
|
+
1. [`validator/`](validator/), which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
|
|
29
|
+
2. [`visualizer-web/`](visualizer-web/), a "cheat sheet" hosted at [interp-engine.org](https://interp-engine.org) of each 'point' (eg `resid_post.16`), standardized across architectures.
|
|
19
30
|
|
|
20
31
|
## Installation
|
|
21
32
|
|
|
@@ -83,14 +94,14 @@ One stream (tok/s):
|
|
|
83
94
|
|
|
84
95
|
<!-- THROUGHPUT:END -->
|
|
85
96
|
|
|
86
|
-
**Graph freeze** is opt-in via `freeze_points`, and a frozen engine serves only the set it froze. [PERFORMANCE.md](docs/PERFORMANCE.md) has how it works and what it trades;
|
|
97
|
+
**Graph freeze** is opt-in via `freeze_points`, and a frozen engine serves only the set it froze. [PERFORMANCE.md](docs/PERFORMANCE.md) has how it works and what it trades; [benchmarks/results-latest.md](benchmarks/results-latest.md) has every figure at full precision, including capture, steering and lens latencies; [benchmarks/README.md](benchmarks/README.md) has how the tables above are rounded.
|
|
87
98
|
|
|
88
99
|
## Correctness
|
|
89
100
|
|
|
90
101
|
We verify correctness in two main ways:
|
|
91
102
|
|
|
92
103
|
1. A test suite that checks results across several models - what each check is designed to catch is in [INTERNALS.md](docs/INTERNALS.md#correctness).
|
|
93
|
-
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 `
|
|
104
|
+
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/`](validator/).
|
|
94
105
|
|
|
95
106
|
## Why use an Interpretability Engine, instead of just having my AI code whatever it needs on the fly?
|
|
96
107
|
|
|
@@ -114,4 +125,4 @@ Bugs and feature requests belong in [issues](https://github.com/decoderesearch/i
|
|
|
114
125
|
|
|
115
126
|
## License
|
|
116
127
|
|
|
117
|
-
Apache 2.0
|
|
128
|
+
Apache 2.0
|