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.
Files changed (174) hide show
  1. {interp_engine-1.2.8 → interp_engine-1.2.9}/PKG-INFO +24 -13
  2. {interp_engine-1.2.8 → interp_engine-1.2.9}/README.md +23 -12
  3. interp_engine-1.2.9/benchmarks/probe_lens_stream.py +622 -0
  4. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/AGENT_INTEGRATION.md +4 -1
  5. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/USAGE.md +11 -0
  6. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/_loop.py +47 -4
  7. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/protocol.py +6 -0
  8. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_backend.py +28 -0
  9. {interp_engine-1.2.8 → interp_engine-1.2.9}/pyproject.toml +1 -1
  10. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sync_loop.py +46 -1
  11. interp_engine-1.2.9/tests/test_vllm_engine_loop.py +101 -0
  12. {interp_engine-1.2.8 → interp_engine-1.2.9}/.gitignore +0 -0
  13. {interp_engine-1.2.8 → interp_engine-1.2.9}/LICENSE +0 -0
  14. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/README.md +0 -0
  15. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/__init__.py +0 -0
  16. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/bench_spec.py +0 -0
  17. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/cells.py +0 -0
  18. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/probe.py +0 -0
  19. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/publish.py +0 -0
  20. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/report_bench.py +0 -0
  21. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
  22. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
  23. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -0
  24. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -0
  25. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm-freeze.json +0 -0
  26. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
  27. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__eager.json +0 -0
  28. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
  29. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm-freeze.json +0 -0
  30. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
  31. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
  32. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
  33. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm-freeze.json +0 -0
  34. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
  35. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__eager.json +0 -0
  36. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
  37. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm-freeze.json +0 -0
  38. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3-4b__vllm.json +0 -0
  39. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
  40. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
  41. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm-freeze.json +0 -0
  42. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
  43. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/results-latest.md +0 -0
  44. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/run_all.sh +0 -0
  45. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/run_bench.py +0 -0
  46. {interp_engine-1.2.8 → interp_engine-1.2.9}/benchmarks/workloads.py +0 -0
  47. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/ARCHITECTURE_QUIRKS.md +0 -0
  48. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/COMPATIBILITY.md +0 -0
  49. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
  50. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/GRADIENTS.md +0 -0
  51. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/INTERNALS.md +0 -0
  52. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/PERFORMANCE.md +0 -0
  53. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/PORTING.md +0 -0
  54. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/README.md +0 -0
  55. {interp_engine-1.2.8 → interp_engine-1.2.9}/docs/SUPPORTED_POINTS.md +0 -0
  56. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/__init__.py +0 -0
  57. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/address.py +0 -0
  58. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/arch.py +0 -0
  59. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/attn_config.py +0 -0
  60. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/attn_scores.py +0 -0
  61. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/autograd_support.py +0 -0
  62. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/capture.py +0 -0
  63. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_compose.py +0 -0
  64. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_conventions.py +0 -0
  65. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/chat_formatters.py +0 -0
  66. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/cuda_preflight.py +0 -0
  67. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/dispatch.py +0 -0
  68. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/facts.py +0 -0
  69. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/hooks.py +0 -0
  70. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/lens.py +0 -0
  71. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/load.py +0 -0
  72. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/mappers.py +0 -0
  73. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/model.py +0 -0
  74. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/moe_routing.py +0 -0
  75. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/points.py +0 -0
  76. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/residual_basis.py +0 -0
  77. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/select.py +0 -0
  78. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/steer.py +0 -0
  79. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/steer_specs.py +0 -0
  80. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/sync.py +0 -0
  81. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/tokenize.py +0 -0
  82. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/__init__.py +0 -0
  83. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_demux.py +0 -0
  84. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_hooks.py +0 -0
  85. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_payload.py +0 -0
  86. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/_tree.py +0 -0
  87. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/attn.py +0 -0
  88. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/capture.py +0 -0
  89. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/freeze.py +0 -0
  90. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/graphs.py +0 -0
  91. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/__init__.py +0 -0
  92. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/intervene.py +0 -0
  93. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/readout.py +0 -0
  94. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/lens/unembed.py +0 -0
  95. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/mhc.py +0 -0
  96. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/native.py +0 -0
  97. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/requests.py +0 -0
  98. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_capture/steering.py +0 -0
  99. {interp_engine-1.2.8 → interp_engine-1.2.9}/interp_engine/vllm_plugin.py +0 -0
  100. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/conftest.py +0 -0
  101. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/harness.py +0 -0
  102. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/model_expectations.yaml +0 -0
  103. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/synthetic_families.py +0 -0
  104. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_address.py +0 -0
  105. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_config_tripwire.py +0 -0
  106. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_probs_indexing.py +0 -0
  107. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_scores.py +0 -0
  108. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_attn_z_gqa.py +0 -0
  109. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_autograd_support.py +0 -0
  110. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_bench_workloads.py +0 -0
  111. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_capability_refusals.py +0 -0
  112. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_capture_addressing.py +0 -0
  113. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_compose.py +0 -0
  114. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_formatters.py +0 -0
  115. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_chat_templates.py +0 -0
  116. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_core.py +0 -0
  117. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_cuda_preflight.py +0 -0
  118. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_doc_code_fences.py +0 -0
  119. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_eager_autograd.py +0 -0
  120. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_facts.py +0 -0
  121. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_family_points.py +0 -0
  122. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_dsv4_gpu.py +0 -0
  123. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_parity_gpu.py +0 -0
  124. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_set.py +0 -0
  125. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_freeze_warmup.py +0 -0
  126. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_gated_attn_out.py +0 -0
  127. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_head_contributions.py +0 -0
  128. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_hook_call_conventions.py +0 -0
  129. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_layer_kinds.py +0 -0
  130. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_load.py +0 -0
  131. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_logit_transform.py +0 -0
  132. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_mappers.py +0 -0
  133. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_mlp_internals.py +0 -0
  134. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_model_expectations.py +0 -0
  135. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_moe.py +0 -0
  136. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_multimodal_arch.py +0 -0
  137. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_new_models_gpu.py +0 -0
  138. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_no_chat_template.py +0 -0
  139. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_normalized_hook.py +0 -0
  140. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_packaging.py +0 -0
  141. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_parity_gpt2.py +0 -0
  142. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_per_layer_attn_dims.py +0 -0
  143. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_points_registry.py +0 -0
  144. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_protocol.py +0 -0
  145. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_published_benchmarks.py +0 -0
  146. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_qk_norm.py +0 -0
  147. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_qkv_layout.py +0 -0
  148. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_reasoning_spans.py +0 -0
  149. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_release.py +0 -0
  150. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_resid_mid.py +0 -0
  151. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_residual_basis.py +0 -0
  152. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sandwich_norms.py +0 -0
  153. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_select.py +0 -0
  154. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sliding_window_attn.py +0 -0
  155. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_small_models_gpu.py +0 -0
  156. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_steer_context.py +0 -0
  157. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_steer_math_parity.py +0 -0
  158. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_sync_parity.py +0 -0
  159. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_unified_free_functions.py +0 -0
  160. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_unresolved_families.py +0 -0
  161. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_capture_gpu.py +0 -0
  162. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_capture_scales.py +0 -0
  163. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_graph_path.py +0 -0
  164. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_graphs_on_gpu.py +0 -0
  165. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_hook_availability.py +0 -0
  166. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_hyper_connections.py +0 -0
  167. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_kv_isolation.py +0 -0
  168. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_new_points.py +0 -0
  169. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_only_families.py +0 -0
  170. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_plugin.py +0 -0
  171. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vllm_wire_grammar.py +0 -0
  172. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_vocabulary_boundary.py +0 -0
  173. {interp_engine-1.2.8 → interp_engine-1.2.9}/tests/test_worker_lens_capture_readout.py +0 -0
  174. {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.8
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
- 🔗 **[interp-engine.org](https://interp-engine.org)**
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. `[validator/](validator/)`, which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
49
- 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.
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; `[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.
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 `[validator/](validator/)`.
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
- 🔗 **[interp-engine.org](https://interp-engine.org)**
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. `[validator/](validator/)`, which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
18
- 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.
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; `[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.
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 `[validator/](validator/)`.
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