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.
Files changed (170) hide show
  1. {interp_engine-1.2.0 → interp_engine-1.2.2}/PKG-INFO +19 -7
  2. {interp_engine-1.2.0 → interp_engine-1.2.2}/README.md +18 -6
  3. {interp_engine-1.2.0 → interp_engine-1.2.2}/pyproject.toml +1 -1
  4. {interp_engine-1.2.0 → interp_engine-1.2.2}/.gitignore +0 -0
  5. {interp_engine-1.2.0 → interp_engine-1.2.2}/LICENSE +0 -0
  6. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/README.md +0 -0
  7. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/__init__.py +0 -0
  8. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/bench_spec.py +0 -0
  9. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/cells.py +0 -0
  10. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/probe.py +0 -0
  11. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/publish.py +0 -0
  12. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/report_bench.py +0 -0
  13. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
  14. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
  15. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -0
  16. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -0
  17. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-freeze.json +0 -0
  18. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
  19. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__eager.json +0 -0
  20. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
  21. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm-freeze.json +0 -0
  22. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
  23. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
  24. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
  25. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm-freeze.json +0 -0
  26. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
  27. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__eager.json +0 -0
  28. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
  29. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm-freeze.json +0 -0
  30. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3-4b__vllm.json +0 -0
  31. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
  32. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
  33. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm-freeze.json +0 -0
  34. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
  35. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/results-latest.md +0 -0
  36. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/run_all.sh +0 -0
  37. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/run_bench.py +0 -0
  38. {interp_engine-1.2.0 → interp_engine-1.2.2}/benchmarks/workloads.py +0 -0
  39. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/AGENT_INTEGRATION.md +0 -0
  40. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/ARCHITECTURE_QUIRKS.md +0 -0
  41. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/COMPATIBILITY.md +0 -0
  42. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
  43. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/GRADIENTS.md +0 -0
  44. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/INTERNALS.md +0 -0
  45. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/PERFORMANCE.md +0 -0
  46. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/PORTING.md +0 -0
  47. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/README.md +0 -0
  48. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/SUPPORTED_POINTS.md +0 -0
  49. {interp_engine-1.2.0 → interp_engine-1.2.2}/docs/USAGE.md +0 -0
  50. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/__init__.py +0 -0
  51. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/_loop.py +0 -0
  52. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/address.py +0 -0
  53. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/arch.py +0 -0
  54. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/attn_config.py +0 -0
  55. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/attn_scores.py +0 -0
  56. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/autograd_support.py +0 -0
  57. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/capture.py +0 -0
  58. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/chat_compose.py +0 -0
  59. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/chat_conventions.py +0 -0
  60. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/cuda_preflight.py +0 -0
  61. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/dispatch.py +0 -0
  62. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/facts.py +0 -0
  63. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/hooks.py +0 -0
  64. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/lens.py +0 -0
  65. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/load.py +0 -0
  66. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/mappers.py +0 -0
  67. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/model.py +0 -0
  68. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/moe_routing.py +0 -0
  69. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/points.py +0 -0
  70. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/protocol.py +0 -0
  71. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/residual_basis.py +0 -0
  72. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/select.py +0 -0
  73. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/steer.py +0 -0
  74. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/steer_specs.py +0 -0
  75. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/sync.py +0 -0
  76. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/tokenize.py +0 -0
  77. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_backend.py +0 -0
  78. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/__init__.py +0 -0
  79. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_demux.py +0 -0
  80. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_hooks.py +0 -0
  81. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_payload.py +0 -0
  82. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/_tree.py +0 -0
  83. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/attn.py +0 -0
  84. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/capture.py +0 -0
  85. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/freeze.py +0 -0
  86. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/graphs.py +0 -0
  87. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/__init__.py +0 -0
  88. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/intervene.py +0 -0
  89. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/readout.py +0 -0
  90. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/lens/unembed.py +0 -0
  91. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/mhc.py +0 -0
  92. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/native.py +0 -0
  93. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/requests.py +0 -0
  94. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_capture/steering.py +0 -0
  95. {interp_engine-1.2.0 → interp_engine-1.2.2}/interp_engine/vllm_plugin.py +0 -0
  96. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/conftest.py +0 -0
  97. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/harness.py +0 -0
  98. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/model_expectations.yaml +0 -0
  99. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/synthetic_families.py +0 -0
  100. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_address.py +0 -0
  101. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_config_tripwire.py +0 -0
  102. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_probs_indexing.py +0 -0
  103. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_scores.py +0 -0
  104. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_attn_z_gqa.py +0 -0
  105. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_autograd_support.py +0 -0
  106. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_bench_workloads.py +0 -0
  107. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_capability_refusals.py +0 -0
  108. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_capture_addressing.py +0 -0
  109. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_chat_compose.py +0 -0
  110. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_chat_templates.py +0 -0
  111. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_core.py +0 -0
  112. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_cuda_preflight.py +0 -0
  113. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_doc_code_fences.py +0 -0
  114. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_eager_autograd.py +0 -0
  115. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_facts.py +0 -0
  116. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_family_points.py +0 -0
  117. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_dsv4_gpu.py +0 -0
  118. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_parity_gpu.py +0 -0
  119. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_set.py +0 -0
  120. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_freeze_warmup.py +0 -0
  121. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_gated_attn_out.py +0 -0
  122. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_head_contributions.py +0 -0
  123. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_hook_call_conventions.py +0 -0
  124. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_layer_kinds.py +0 -0
  125. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_load.py +0 -0
  126. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_logit_transform.py +0 -0
  127. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_mappers.py +0 -0
  128. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_mlp_internals.py +0 -0
  129. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_model_expectations.py +0 -0
  130. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_moe.py +0 -0
  131. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_multimodal_arch.py +0 -0
  132. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_new_models_gpu.py +0 -0
  133. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_no_chat_template.py +0 -0
  134. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_normalized_hook.py +0 -0
  135. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_packaging.py +0 -0
  136. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_parity_gpt2.py +0 -0
  137. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_per_layer_attn_dims.py +0 -0
  138. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_points_registry.py +0 -0
  139. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_protocol.py +0 -0
  140. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_published_benchmarks.py +0 -0
  141. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_qk_norm.py +0 -0
  142. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_qkv_layout.py +0 -0
  143. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_reasoning_spans.py +0 -0
  144. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_release.py +0 -0
  145. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_resid_mid.py +0 -0
  146. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_residual_basis.py +0 -0
  147. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sandwich_norms.py +0 -0
  148. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_select.py +0 -0
  149. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sliding_window_attn.py +0 -0
  150. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_small_models_gpu.py +0 -0
  151. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_steer_context.py +0 -0
  152. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_steer_math_parity.py +0 -0
  153. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sync_loop.py +0 -0
  154. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_sync_parity.py +0 -0
  155. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_unified_free_functions.py +0 -0
  156. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_unresolved_families.py +0 -0
  157. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_capture_gpu.py +0 -0
  158. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_capture_scales.py +0 -0
  159. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_graph_path.py +0 -0
  160. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_graphs_on_gpu.py +0 -0
  161. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_hook_availability.py +0 -0
  162. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_hyper_connections.py +0 -0
  163. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_kv_isolation.py +0 -0
  164. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_new_points.py +0 -0
  165. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_only_families.py +0 -0
  166. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_plugin.py +0 -0
  167. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vllm_wire_grammar.py +0 -0
  168. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_vocabulary_boundary.py +0 -0
  169. {interp_engine-1.2.0 → interp_engine-1.2.2}/tests/test_worker_lens_capture_readout.py +0 -0
  170. {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.0
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 (circuit tracing, j-lens, steering, NLAs, etc) and is checked for accuracy against HF Transformers and other engines.
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="620">
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="480">
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
- Of course, software is easy to make these days. But as smart as as AIs are these days, there are benefits to leveraging a pre-written engine:
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
- 1. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
136
- 1. **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]`.
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 (circuit tracing, j-lens, steering, NLAs, etc) and is checked for accuracy against HF Transformers and other engines.
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="620">
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="480">
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
- Of course, software is easy to make these days. But as smart as as AIs are these days, there are benefits to leveraging a pre-written engine:
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
- 1. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
105
- 1. **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]`.
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
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "interp-engine"
3
- version = "1.2.0"
3
+ version = "1.2.2"
4
4
  description = "A fast, standardized interpretability engine that supports most modern models and architectures. Powers Neuronpedia."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
File without changes
File without changes