interp-engine 1.13.1__tar.gz → 1.13.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 (222) hide show
  1. {interp_engine-1.13.1 → interp_engine-1.13.2}/PKG-INFO +1 -1
  2. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/mhc.py +5 -1
  3. {interp_engine-1.13.1 → interp_engine-1.13.2}/pyproject.toml +1 -1
  4. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_hyper_connections.py +30 -0
  5. {interp_engine-1.13.1 → interp_engine-1.13.2}/.gitignore +0 -0
  6. {interp_engine-1.13.1 → interp_engine-1.13.2}/LICENSE +0 -0
  7. {interp_engine-1.13.1 → interp_engine-1.13.2}/README.md +0 -0
  8. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/README.md +0 -0
  9. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/__init__.py +0 -0
  10. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/bench_spec.py +0 -0
  11. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/cells.py +0 -0
  12. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/probe.py +0 -0
  13. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/probe_lens_stream.py +0 -0
  14. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/publish.py +0 -0
  15. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/report_bench.py +0 -0
  16. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
  17. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
  18. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/deepseek-v4-flash-0731__vllm-static.json +0 -0
  19. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
  20. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/gemma-2-2b__eager.json +0 -0
  21. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
  22. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/gemma-2-2b__vllm-static.json +0 -0
  23. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
  24. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
  25. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
  26. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/llama-3.1-8b__vllm-static.json +0 -0
  27. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
  28. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3-4b__eager.json +0 -0
  29. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
  30. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3-4b__vllm-static.json +0 -0
  31. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3-4b__vllm.json +0 -0
  32. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
  33. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
  34. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3.8-27b__vllm-static.json +0 -0
  35. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
  36. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/results-latest.md +0 -0
  37. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/run_all.sh +0 -0
  38. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/run_bench.py +0 -0
  39. {interp_engine-1.13.1 → interp_engine-1.13.2}/benchmarks/workloads.py +0 -0
  40. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/AGENT_INTEGRATION.md +0 -0
  41. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/ARCHITECTURE_QUIRKS.md +0 -0
  42. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/COMPATIBILITY.md +0 -0
  43. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
  44. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/GRADIENTS.md +0 -0
  45. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/INTERNALS.md +0 -0
  46. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/PERFORMANCE.md +0 -0
  47. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/PORTING.md +0 -0
  48. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/README.md +0 -0
  49. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/SUPPORTED_POINTS.md +0 -0
  50. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/USAGE.md +0 -0
  51. {interp_engine-1.13.1 → interp_engine-1.13.2}/docs/VALIDATING_A_NEW_MODEL.md +0 -0
  52. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/__init__.py +0 -0
  53. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/_conformance.py +0 -0
  54. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/_loop.py +0 -0
  55. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/address.py +0 -0
  56. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/api.py +0 -0
  57. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/arch.py +0 -0
  58. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/attn_config.py +0 -0
  59. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/attn_scores.py +0 -0
  60. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/autograd_support.py +0 -0
  61. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/capture.py +0 -0
  62. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/chat_compose.py +0 -0
  63. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/chat_conventions.py +0 -0
  64. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/chat_formatters.py +0 -0
  65. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/cuda_preflight.py +0 -0
  66. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/describe.py +0 -0
  67. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/directions.py +0 -0
  68. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/dispatch.py +0 -0
  69. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/facts.py +0 -0
  70. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/hooks.py +0 -0
  71. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/lens.py +0 -0
  72. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/lens_stream.py +0 -0
  73. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/lens_topk.py +0 -0
  74. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/load.py +0 -0
  75. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/mappers.py +0 -0
  76. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/memory.py +0 -0
  77. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/model.py +0 -0
  78. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/moe_routing.py +0 -0
  79. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/notebook_stdout.py +0 -0
  80. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/oracle.py +0 -0
  81. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/points.py +0 -0
  82. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/protocol.py +0 -0
  83. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/residual_basis.py +0 -0
  84. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/sampling.py +0 -0
  85. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/select.py +0 -0
  86. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/__init__.py +0 -0
  87. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/__main__.py +0 -0
  88. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/app.py +0 -0
  89. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/config.py +0 -0
  90. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/lens.py +0 -0
  91. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/runner.py +0 -0
  92. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/server/schemas.py +0 -0
  93. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/steer.py +0 -0
  94. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/steer_specs.py +0 -0
  95. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/sync.py +0 -0
  96. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/tokenize.py +0 -0
  97. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_backend.py +0 -0
  98. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/__init__.py +0 -0
  99. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/_demux.py +0 -0
  100. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/_hooks.py +0 -0
  101. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/_payload.py +0 -0
  102. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/_tp.py +0 -0
  103. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/_tree.py +0 -0
  104. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/attn.py +0 -0
  105. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/capture.py +0 -0
  106. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/graphs.py +0 -0
  107. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/lens/__init__.py +0 -0
  108. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/lens/intervene.py +0 -0
  109. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/lens/readout.py +0 -0
  110. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/lens/unembed.py +0 -0
  111. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/native.py +0 -0
  112. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/project.py +0 -0
  113. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/requests.py +0 -0
  114. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/static.py +0 -0
  115. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/static_program.py +0 -0
  116. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_capture/steering.py +0 -0
  117. {interp_engine-1.13.1 → interp_engine-1.13.2}/interp_engine/vllm_plugin.py +0 -0
  118. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/conftest.py +0 -0
  119. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/harness.py +0 -0
  120. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/model_expectations.yaml +0 -0
  121. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/synthetic_families.py +0 -0
  122. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_address.py +0 -0
  123. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_api_fixtures.py +0 -0
  124. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_api_generated.py +0 -0
  125. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_attn_config_tripwire.py +0 -0
  126. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_attn_probs_indexing.py +0 -0
  127. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_attn_scores.py +0 -0
  128. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_attn_z_gqa.py +0 -0
  129. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_autograd_support.py +0 -0
  130. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_bench_workloads.py +0 -0
  131. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_capability_refusals.py +0 -0
  132. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_capture_addressing.py +0 -0
  133. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_chat_compose.py +0 -0
  134. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_chat_formatters.py +0 -0
  135. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_chat_templates.py +0 -0
  136. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_core.py +0 -0
  137. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_cuda_preflight.py +0 -0
  138. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_describe.py +0 -0
  139. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_directions.py +0 -0
  140. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_doc_code_fences.py +0 -0
  141. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_eager_autograd.py +0 -0
  142. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_facts.py +0 -0
  143. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_family_points.py +0 -0
  144. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_gated_attn_out.py +0 -0
  145. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_gpu_sizer.py +0 -0
  146. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_head_contributions.py +0 -0
  147. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_hook_call_conventions.py +0 -0
  148. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_injected_system_spans.py +0 -0
  149. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_layer_kinds.py +0 -0
  150. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_lens_stream.py +0 -0
  151. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_lens_stream_pairing.py +0 -0
  152. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_load.py +0 -0
  153. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_logit_transform.py +0 -0
  154. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_mappers.py +0 -0
  155. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_memory.py +0 -0
  156. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_mlp_internals.py +0 -0
  157. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_model_expectations.py +0 -0
  158. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_moe.py +0 -0
  159. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_multigpu.py +0 -0
  160. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_multimodal_arch.py +0 -0
  161. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_new_models_gpu.py +0 -0
  162. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_no_chat_template.py +0 -0
  163. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_normalized_hook.py +0 -0
  164. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_notebook_stdout.py +0 -0
  165. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_oracle.py +0 -0
  166. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_packaging.py +0 -0
  167. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_padded_positions.py +0 -0
  168. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_parity_gpt2.py +0 -0
  169. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_per_layer_attn_dims.py +0 -0
  170. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_point_capability.py +0 -0
  171. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_points_registry.py +0 -0
  172. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_protocol.py +0 -0
  173. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_published_benchmarks.py +0 -0
  174. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_qk_norm.py +0 -0
  175. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_qkv_layout.py +0 -0
  176. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_reasoning_spans.py +0 -0
  177. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_release.py +0 -0
  178. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_resid_mid.py +0 -0
  179. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_residual_basis.py +0 -0
  180. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sample_from_embeds.py +0 -0
  181. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sampling.py +0 -0
  182. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sandwich_norms.py +0 -0
  183. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_select.py +0 -0
  184. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_server.py +0 -0
  185. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sliding_window_attn.py +0 -0
  186. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_small_models_gpu.py +0 -0
  187. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_decode_writes_gpu.py +0 -0
  188. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_dsv4_gpu.py +0 -0
  189. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_parity_gpu.py +0 -0
  190. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_program.py +0 -0
  191. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_program_gpu.py +0 -0
  192. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_set.py +0 -0
  193. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_static_warmup.py +0 -0
  194. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_context.py +0 -0
  195. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_math_parity.py +0 -0
  196. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_ops_per_site_gpu.py +0 -0
  197. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_reaches_generate.py +0 -0
  198. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_scope.py +0 -0
  199. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_specs.py +0 -0
  200. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_steer_stream_stack.py +0 -0
  201. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sync_loop.py +0 -0
  202. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_sync_parity.py +0 -0
  203. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_unified_free_functions.py +0 -0
  204. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_unresolved_families.py +0 -0
  205. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_userless_prefix_spans.py +0 -0
  206. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_batch_axis.py +0 -0
  207. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_capture_gpu.py +0 -0
  208. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_capture_scales.py +0 -0
  209. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_engine_loop.py +0 -0
  210. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_graph_path.py +0 -0
  211. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_graphs_on_gpu.py +0 -0
  212. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_hook_availability.py +0 -0
  213. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_kv_isolation.py +0 -0
  214. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_new_points.py +0 -0
  215. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_only_families.py +0 -0
  216. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_padded_gpu.py +0 -0
  217. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_plugin.py +0 -0
  218. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_transformers_backend_gpu.py +0 -0
  219. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vllm_wire_grammar.py +0 -0
  220. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_vocabulary_boundary.py +0 -0
  221. {interp_engine-1.13.1 → interp_engine-1.13.2}/tests/test_worker_lens_capture_readout.py +0 -0
  222. {interp_engine-1.13.1 → interp_engine-1.13.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.13.1
3
+ Version: 1.13.2
4
4
  Summary: A fast, standardized, and easy to use interpretability engine.
5
5
  Project-URL: Homepage, https://github.com/decoderesearch/interp-engine
6
6
  Project-URL: Repository, https://github.com/decoderesearch/interp-engine
@@ -648,9 +648,13 @@ class _MhcTaps:
648
648
  detectably different from no steer at all. So the rows the recorder actually changed take the
649
649
  re-run and every other row keeps the kernel's own output, which is also why a zero delta needs
650
650
  no re-run: no row changed.
651
+
652
+ Inside a graph capture the host cannot read ``changed``, so the re-run is always recorded and
653
+ the row mask alone decides at replay.
651
654
  """
652
655
  changed = (edited != stack).flatten(start_dim=1).any(dim=1)
653
- if not bool(changed.any()):
656
+ capturing = stack.is_cuda and torch.cuda.is_current_stream_capturing()
657
+ if not capturing and not bool(changed.any()):
654
658
  return fused
655
659
  bound = signature.bind(*args, **kwargs)
656
660
  bound.apply_defaults()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "interp-engine"
3
- version = "1.13.1"
3
+ version = "1.13.2"
4
4
  description = "A fast, standardized, and easy to use interpretability engine."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -1087,6 +1087,36 @@ def test_a_stream_stack_steer_reaches_the_collapse_the_very_same_kernel_computes
1087
1087
  assert not torch.allclose(trunk.layers[1].ffn_input_stack, unsteered_stack), "nor did anything downstream"
1088
1088
 
1089
1089
 
1090
+ @pytest.mark.gpu
1091
+ @pytest.mark.skipif(not torch.cuda.is_available(), reason="records a CUDA graph")
1092
+ def test_a_stream_stack_steer_records_into_a_cuda_graph():
1093
+ """vLLM records FULL decode graphs with plain capture, where the host cannot read a tensor.
1094
+
1095
+ Static writes edit the stack while the graph is recorded, so the re-run decision may not read
1096
+ ``changed`` on the host there. It did, and the DeepSeek-V4 static engine failed at start-up.
1097
+ """
1098
+ trunk = _HyperTrunk(n_layers=2).cuda()
1099
+ positions, input_ids = POSITIONS.cuda(), INPUT_IDS.cuda()
1100
+ _, handles = _steering_demux(trunk, {Address("resid_streams", 0): _bump(0.5)})
1101
+ try:
1102
+ with torch.no_grad():
1103
+ eager = trunk(positions, input_ids).clone()
1104
+ side = torch.cuda.Stream()
1105
+ side.wait_stream(torch.cuda.current_stream())
1106
+ with torch.cuda.stream(side):
1107
+ trunk(positions, input_ids)
1108
+ torch.cuda.current_stream().wait_stream(side)
1109
+ graph = torch.cuda.CUDAGraph()
1110
+ with torch.cuda.graph(graph):
1111
+ out = trunk(positions, input_ids)
1112
+ graph.replay()
1113
+ torch.cuda.synchronize()
1114
+ finally:
1115
+ for handle in handles:
1116
+ handle.remove()
1117
+ torch.testing.assert_close(out, eager)
1118
+
1119
+
1090
1120
  def test_only_the_layer_that_is_actually_steered_pays_for_a_second_pre_phase():
1091
1121
  """The extra kernel is per call, so an unsteered forward must not pay for it -- and neither must
1092
1122
  the layers of a steered forward that nobody asked about.
File without changes
File without changes