murano-interp 0.1.0a0__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 (130) hide show
  1. murano_interp-0.1.0a0/.coveragerc +23 -0
  2. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/architecture_compatibility.yml +121 -0
  3. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/bug_report.yml +195 -0
  4. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/config.yml +14 -0
  5. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/documentation.yml +70 -0
  6. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/feature_request.yml +114 -0
  7. murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/reproduction_submission.yml +81 -0
  8. murano_interp-0.1.0a0/.github/PULL_REQUEST_TEMPLATE.md +15 -0
  9. murano_interp-0.1.0a0/.github/dependabot.yml +6 -0
  10. murano_interp-0.1.0a0/.github/scripts/bootstrap-labels.sh +86 -0
  11. murano_interp-0.1.0a0/.github/workflows/docs.yml +68 -0
  12. murano_interp-0.1.0a0/.github/workflows/issue-labeler.yml +145 -0
  13. murano_interp-0.1.0a0/.github/workflows/main-checks.yml +16 -0
  14. murano_interp-0.1.0a0/.github/workflows/release.yml +71 -0
  15. murano_interp-0.1.0a0/.github/workflows/shared.yml +58 -0
  16. murano_interp-0.1.0a0/.gitignore +144 -0
  17. murano_interp-0.1.0a0/.pre-commit-config.yaml +39 -0
  18. murano_interp-0.1.0a0/CHANGELOG.md +26 -0
  19. murano_interp-0.1.0a0/CONTRIBUTING.md +92 -0
  20. murano_interp-0.1.0a0/LICENSE +201 -0
  21. murano_interp-0.1.0a0/NOTICE.txt +9 -0
  22. murano_interp-0.1.0a0/PKG-INFO +190 -0
  23. murano_interp-0.1.0a0/README.md +169 -0
  24. murano_interp-0.1.0a0/docs/.gitignore +5 -0
  25. murano_interp-0.1.0a0/docs/README.md +57 -0
  26. murano_interp-0.1.0a0/docs/astro.config.mjs +72 -0
  27. murano_interp-0.1.0a0/docs/logo_design/favicon_out.svg +628 -0
  28. murano_interp-0.1.0a0/docs/logo_design/logo.py +97 -0
  29. murano_interp-0.1.0a0/docs/logo_design/logo2.png +0 -0
  30. murano_interp-0.1.0a0/docs/logo_design/logo2_design.png +0 -0
  31. murano_interp-0.1.0a0/docs/logo_design/logo3.png +0 -0
  32. murano_interp-0.1.0a0/docs/logo_design/logo3_dark.png +0 -0
  33. murano_interp-0.1.0a0/docs/logo_design/logo3_design.png +0 -0
  34. murano_interp-0.1.0a0/docs/logo_design/logo_design.png +0 -0
  35. murano_interp-0.1.0a0/docs/logo_design/logo_out.png +0 -0
  36. murano_interp-0.1.0a0/docs/logo_design/logo_out.svg +627 -0
  37. murano_interp-0.1.0a0/docs/logo_design/make_dark.py +26 -0
  38. murano_interp-0.1.0a0/docs/package-lock.json +6254 -0
  39. murano_interp-0.1.0a0/docs/package.json +19 -0
  40. murano_interp-0.1.0a0/docs/public/favicon.png +0 -0
  41. murano_interp-0.1.0a0/docs/scripts/doc_check.py +265 -0
  42. murano_interp-0.1.0a0/docs/scripts/gen_api_docs.py +216 -0
  43. murano_interp-0.1.0a0/docs/src/assets/houston.webp +0 -0
  44. murano_interp-0.1.0a0/docs/src/assets/logo-dark.png +0 -0
  45. murano_interp-0.1.0a0/docs/src/assets/logo-light.png +0 -0
  46. murano_interp-0.1.0a0/docs/src/components/CTASection.astro +327 -0
  47. murano_interp-0.1.0a0/docs/src/components/CodeComparison.astro +238 -0
  48. murano_interp-0.1.0a0/docs/src/components/GallerySection.astro +212 -0
  49. murano_interp-0.1.0a0/docs/src/components/ReproCard.astro +131 -0
  50. murano_interp-0.1.0a0/docs/src/components/ReproSubmitCTA.astro +298 -0
  51. murano_interp-0.1.0a0/docs/src/components/ReproductionGallery.astro +315 -0
  52. murano_interp-0.1.0a0/docs/src/components/SiteNav.astro +48 -0
  53. murano_interp-0.1.0a0/docs/src/components/SocialBar.astro +66 -0
  54. murano_interp-0.1.0a0/docs/src/components/TeamSection.astro +302 -0
  55. murano_interp-0.1.0a0/docs/src/components/ThemeSelect.astro +109 -0
  56. murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/installation.md +59 -0
  57. murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/overview.mdx +89 -0
  58. murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/quickstart.mdx +133 -0
  59. murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/patch.md +126 -0
  60. murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/pipeline.md +166 -0
  61. murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/probe.md +106 -0
  62. murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/record.md +107 -0
  63. murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/steer.md +85 -0
  64. murano_interp-0.1.0a0/docs/src/content/docs/docs/reproductions/overview.mdx +37 -0
  65. murano_interp-0.1.0a0/docs/src/content/docs/docs/reproductions/submit.mdx +137 -0
  66. murano_interp-0.1.0a0/docs/src/content/docs/index.mdx +36 -0
  67. murano_interp-0.1.0a0/docs/src/content.config.ts +7 -0
  68. murano_interp-0.1.0a0/docs/src/data/maintainers.json +8 -0
  69. murano_interp-0.1.0a0/docs/src/layouts/ReproLayout.astro +372 -0
  70. murano_interp-0.1.0a0/docs/src/pages/reproductions/index.astro +116 -0
  71. murano_interp-0.1.0a0/docs/src/pages/reproductions/tmlr2026.mdx +192 -0
  72. murano_interp-0.1.0a0/docs/src/styles/dot.css +26 -0
  73. murano_interp-0.1.0a0/docs/src/styles/repro-card.css +189 -0
  74. murano_interp-0.1.0a0/docs/src/styles/vitesse.css +233 -0
  75. murano_interp-0.1.0a0/docs/tsconfig.json +5 -0
  76. murano_interp-0.1.0a0/examples/federico_visualization.py +149 -0
  77. murano_interp-0.1.0a0/examples/logit_lens.py +37 -0
  78. murano_interp-0.1.0a0/examples/quick_prototype.py +43 -0
  79. murano_interp-0.1.0a0/examples/record_intervene.py +83 -0
  80. murano_interp-0.1.0a0/examples/refusal_direction.py +56 -0
  81. murano_interp-0.1.0a0/examples/sentiment_data.py +112 -0
  82. murano_interp-0.1.0a0/logo.png +0 -0
  83. murano_interp-0.1.0a0/pyproject.toml +83 -0
  84. murano_interp-0.1.0a0/pyrightconfig.json +6 -0
  85. murano_interp-0.1.0a0/src/murano/__init__.py +87 -0
  86. murano_interp-0.1.0a0/src/murano/artifacts.py +89 -0
  87. murano_interp-0.1.0a0/src/murano/dataset.py +365 -0
  88. murano_interp-0.1.0a0/src/murano/evaluation.py +98 -0
  89. murano_interp-0.1.0a0/src/murano/io.py +420 -0
  90. murano_interp-0.1.0a0/src/murano/logging.py +29 -0
  91. murano_interp-0.1.0a0/src/murano/model.py +343 -0
  92. murano_interp-0.1.0a0/src/murano/pipeline.py +84 -0
  93. murano_interp-0.1.0a0/src/murano/plotting/__init__.py +23 -0
  94. murano_interp-0.1.0a0/src/murano/plotting/jailbreaking.py +240 -0
  95. murano_interp-0.1.0a0/src/murano/plotting/logit_lens.py +70 -0
  96. murano_interp-0.1.0a0/src/murano/plotting/plotly_utils.py +107 -0
  97. murano_interp-0.1.0a0/src/murano/plotting/probing.py +143 -0
  98. murano_interp-0.1.0a0/src/murano/py.typed +0 -0
  99. murano_interp-0.1.0a0/src/murano/results.py +87 -0
  100. murano_interp-0.1.0a0/src/murano/steps/__init__.py +41 -0
  101. murano_interp-0.1.0a0/src/murano/steps/base.py +139 -0
  102. murano_interp-0.1.0a0/src/murano/steps/evaluate.py +88 -0
  103. murano_interp-0.1.0a0/src/murano/steps/intervene.py +193 -0
  104. murano_interp-0.1.0a0/src/murano/steps/jailbreaking/__init__.py +9 -0
  105. murano_interp-0.1.0a0/src/murano/steps/jailbreaking/evaluate.py +118 -0
  106. murano_interp-0.1.0a0/src/murano/steps/jailbreaking/plot.py +85 -0
  107. murano_interp-0.1.0a0/src/murano/steps/load.py +67 -0
  108. murano_interp-0.1.0a0/src/murano/steps/logit_lens.py +146 -0
  109. murano_interp-0.1.0a0/src/murano/steps/metrics.py +154 -0
  110. murano_interp-0.1.0a0/src/murano/steps/probe.py +148 -0
  111. murano_interp-0.1.0a0/src/murano/steps/probing/__init__.py +5 -0
  112. murano_interp-0.1.0a0/src/murano/steps/probing/plot.py +57 -0
  113. murano_interp-0.1.0a0/src/murano/steps/prompts.py +44 -0
  114. murano_interp-0.1.0a0/src/murano/steps/record.py +313 -0
  115. murano_interp-0.1.0a0/src/murano/steps/save.py +47 -0
  116. murano_interp-0.1.0a0/src/murano/steps/train.py +107 -0
  117. murano_interp-0.1.0a0/src/murano/steps/weight_ablation.py +301 -0
  118. murano_interp-0.1.0a0/tests/__init__.py +0 -0
  119. murano_interp-0.1.0a0/tests/conftest.py +73 -0
  120. murano_interp-0.1.0a0/tests/test_examples.py +247 -0
  121. murano_interp-0.1.0a0/tests/test_imports.py +73 -0
  122. murano_interp-0.1.0a0/tests/test_integration_smoke.py +96 -0
  123. murano_interp-0.1.0a0/tests/test_logit_lens.py +151 -0
  124. murano_interp-0.1.0a0/tests/test_metrics_steps.py +464 -0
  125. murano_interp-0.1.0a0/tests/test_plotting_utils.py +302 -0
  126. murano_interp-0.1.0a0/tests/test_public_api.py +68 -0
  127. murano_interp-0.1.0a0/tests/test_sanity.py +114 -0
  128. murano_interp-0.1.0a0/tests/test_steps.py +905 -0
  129. murano_interp-0.1.0a0/tests/test_submodule_targeting.py +622 -0
  130. murano_interp-0.1.0a0/uv.lock +3591 -0
@@ -0,0 +1,23 @@
1
+ [run]
2
+ source = examples,src
3
+ omit =
4
+ */tests/*
5
+ */__pycache__/*
6
+ */venv/*
7
+ */build/*
8
+ */dist/*
9
+ setup.py
10
+
11
+ [report]
12
+ exclude_lines =
13
+ pragma: no cover
14
+ def __repr__
15
+ raise AssertionError
16
+ raise NotImplementedError
17
+ if __name__ == .__main__.:
18
+ if TYPE_CHECKING:
19
+ @abstractmethod
20
+ show_missing = True
21
+ skip_covered = False
22
+ precision = 2
23
+
@@ -0,0 +1,121 @@
1
+ name: 🧩 Architecture / Compatibility
2
+ description: Murano works on one model or version but not another (cross-architecture, dependency-version, hardware)
3
+ title: "[COMPAT] "
4
+ labels:
5
+ - compatibility
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Use this template when something works on one configuration but breaks on another:
11
+
12
+ - The same code works on Llama but fails on GPT-2 / Mistral / Qwen / OPT
13
+ - Worked on transformers 4.57 but breaks on 4.58
14
+ - Works on CPU but breaks on `device_map="auto"`
15
+ - Works locally but fails on a Slurm GPU node
16
+
17
+ For pure runtime errors (any model, any version), use the **Bug Report** template.
18
+
19
+ - type: checkboxes
20
+ id: preflight
21
+ attributes:
22
+ label: Preflight Checklist
23
+ options:
24
+ - label: I have a working configuration to compare against (i.e., I know it isn't a universal bug).
25
+ required: true
26
+ - label: I have searched [existing compatibility issues](https://github.com/UKPLab/murano/issues?q=is%3Aissue+label%3Acompatibility).
27
+ required: true
28
+
29
+ - type: dropdown
30
+ id: axis
31
+ attributes:
32
+ label: Compatibility axis
33
+ options:
34
+ - Model architecture (Llama vs GPT-2 vs Mistral vs ...)
35
+ - Model size / variant (Llama-1B vs Llama-8B)
36
+ - Library version (transformers / nnsight / nnterp / torch)
37
+ - Python version
38
+ - Device / GPU (CPU vs CUDA vs `device_map="auto"`)
39
+ - OS / platform
40
+ - Other
41
+ validations:
42
+ required: true
43
+
44
+ - type: input
45
+ id: works_on
46
+ attributes:
47
+ label: Works on
48
+ description: The configuration where Murano runs correctly.
49
+ placeholder: e.g. meta-llama/Llama-3.2-1B-Instruct, transformers 4.57.6, nnterp 1.2.4
50
+ validations:
51
+ required: true
52
+
53
+ - type: input
54
+ id: breaks_on
55
+ attributes:
56
+ label: Breaks on
57
+ description: The configuration where Murano fails or returns wrong results.
58
+ placeholder: e.g. mistralai/Mistral-7B-Instruct-v0.3, transformers 4.58.0, nnterp 1.2.4
59
+ validations:
60
+ required: true
61
+
62
+ - type: textarea
63
+ id: reproduction
64
+ attributes:
65
+ label: Minimal reproduction
66
+ description: |
67
+ Code that runs cleanly on the "works on" config but fails on "breaks on".
68
+
69
+ **Please use small, public, no-auth models** for both halves of the comparison so we can
70
+ run them locally: e.g. `gpt2`, `meta-llama/Llama-3.2-1B-Instruct`,
71
+ `Qwen/Qwen2.5-0.5B`, `EleutherAI/pythia-70m`, `facebook/opt-125m`.
72
+ render: python
73
+ validations:
74
+ required: true
75
+
76
+ - type: textarea
77
+ id: error_output
78
+ attributes:
79
+ label: Error / wrong output
80
+ description: Exception trace, or the wrong-shape / wrong-value output you saw.
81
+ render: shell
82
+ validations:
83
+ required: true
84
+
85
+ - type: dropdown
86
+ id: hardware
87
+ attributes:
88
+ label: Hardware
89
+ options:
90
+ - Single CUDA GPU
91
+ - Multi-GPU (`device_map="auto"`)
92
+ - CPU only
93
+ - Apple MPS
94
+ - Other
95
+ validations:
96
+ required: true
97
+
98
+ - type: dropdown
99
+ id: suspected_upstream
100
+ attributes:
101
+ label: Suspected upstream cause
102
+ description: Best guess at which dependency the underlying problem might live in. Pure speculation is fine.
103
+ options:
104
+ - nnsight
105
+ - nnterp
106
+ - transformers
107
+ - torch
108
+ - HuggingFace Hub / model weights
109
+ - Hardware / driver
110
+ - Murano itself
111
+ - Unknown
112
+ validations:
113
+ required: true
114
+
115
+ - type: textarea
116
+ id: extra
117
+ attributes:
118
+ label: Anything else?
119
+ description: Optional. Your hypothesis about the root cause, suspected breaking commit, etc.
120
+ validations:
121
+ required: false
@@ -0,0 +1,195 @@
1
+ name: 🐛 Bug Report
2
+ description: Report a crash, exception, or incorrect output in Murano
3
+ title: "[BUG] "
4
+ labels:
5
+ - bug
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for reporting a bug! Filling in every section below saves us a round-trip.
11
+
12
+ Before submitting, please check:
13
+ - This issue hasn't already been reported by searching [existing issues](https://github.com/UKPLab/murano/issues?q=is%3Aissue+label%3Abug).
14
+ - You can reproduce the bug on a recent version of Murano.
15
+ - This is a bug in Murano itself, not a model-loading issue with a specific HuggingFace model
16
+ (those tend to be `transformers` or `nnsight` problems).
17
+
18
+ - type: checkboxes
19
+ id: preflight
20
+ attributes:
21
+ label: Preflight Checklist
22
+ options:
23
+ - label: I have searched [existing issues](https://github.com/UKPLab/murano/issues?q=is%3Aissue+label%3Abug) and this hasn't been reported yet.
24
+ required: true
25
+ - label: This is a single bug report (please file separate reports for different bugs).
26
+ required: true
27
+ - label: I can reproduce this with the latest released version of Murano.
28
+ required: true
29
+
30
+ - type: dropdown
31
+ id: area
32
+ attributes:
33
+ label: Affected area
34
+ description: Which part of Murano is involved? Pick the closest match; the maintainer will refine.
35
+ options:
36
+ - Recording / activation extraction
37
+ - Interventions / generation modification
38
+ - Analysis / probing / lenses
39
+ - I/O / saving artifacts
40
+ - Pipeline / Step framework
41
+ - Plotting / visualization
42
+ - Cross-architecture / model loading
43
+ - Other / not sure
44
+ validations:
45
+ required: true
46
+
47
+ - type: textarea
48
+ id: what_wrong
49
+ attributes:
50
+ label: What's Wrong?
51
+ description: Describe what's happening that shouldn't be.
52
+ placeholder: |
53
+ When I call `model.record(texts, position="mean")` with a batch of 4, the returned tensor has shape (1, 2048) instead of (4, 2048).
54
+ validations:
55
+ required: true
56
+
57
+ - type: textarea
58
+ id: expected
59
+ attributes:
60
+ label: Expected Behavior
61
+ description: What did you expect to happen instead?
62
+ placeholder: A `[N=4, d_model=2048]` tensor with one masked-mean activation per input.
63
+ validations:
64
+ required: true
65
+
66
+ - type: textarea
67
+ id: reproduction
68
+ attributes:
69
+ label: Minimal reproduction
70
+ description: |
71
+ A self-contained, runnable code snippet that triggers the bug.
72
+
73
+ **Please use a small, public, no-auth model** so we can run your repro locally:
74
+ e.g. `meta-llama/Llama-3.2-1B-Instruct`, `gpt2`, `Qwen/Qwen2.5-0.5B`, `EleutherAI/pythia-70m`.
75
+ If the bug only occurs on a large or gated model, say so explicitly.
76
+ placeholder: |
77
+ ```python
78
+ from murano import MuranoModel
79
+ model = MuranoModel("gpt2")
80
+ acts = model.record(["hello", "world", "foo", "bar"], position="mean")
81
+ # expected acts.positive[0].shape == (4, 768); got (1, 768)
82
+ print(acts.positive[0].shape, acts.positive[0].dtype, acts.positive[0].device)
83
+ ```
84
+ render: python
85
+ validations:
86
+ required: true
87
+
88
+ - type: textarea
89
+ id: error_output
90
+ attributes:
91
+ label: Error / wrong output
92
+ description: |
93
+ Full stack trace if it crashed. For numerical / shape bugs, paste the result of
94
+ `print(tensor.shape, tensor.dtype, tensor.device)` and any value comparison.
95
+ placeholder: |
96
+ Traceback (most recent call last):
97
+ File "...", line N, in ...
98
+ ...
99
+ ValueError: ...
100
+
101
+ # or, for wrong-output bugs:
102
+ actual: torch.Size([1, 768]) bfloat16 cuda:0
103
+ expected: torch.Size([4, 768])
104
+ render: shell
105
+ validations:
106
+ required: true
107
+
108
+ - type: dropdown
109
+ id: regression
110
+ attributes:
111
+ label: Is this a regression?
112
+ description: Did this work in a previous Murano version? If yes, please tell us which version still worked in the next field.
113
+ options:
114
+ - "Yes: it worked in a previous version"
115
+ - "No: this never worked / new install"
116
+ - "Don't know"
117
+ validations:
118
+ required: true
119
+
120
+ - type: input
121
+ id: last_working_version
122
+ attributes:
123
+ label: Last working Murano version (if regression)
124
+ description: e.g. `0.1.0`. Skip if this isn't a regression.
125
+ placeholder: e.g. 0.1.0
126
+ validations:
127
+ required: false
128
+
129
+ - type: dropdown
130
+ id: reproducibility
131
+ attributes:
132
+ label: Reproducibility
133
+ options:
134
+ - Always
135
+ - Sometimes (intermittent)
136
+ - Only happened once
137
+ - Haven't tried to reproduce
138
+ validations:
139
+ required: true
140
+
141
+ - type: dropdown
142
+ id: architecture
143
+ attributes:
144
+ label: Model architecture
145
+ description: nnterp standardizes module names across these. Pick the family of the model in your repro.
146
+ options:
147
+ - Llama
148
+ - GPT-2
149
+ - Mistral
150
+ - Qwen
151
+ - OPT
152
+ - Other
153
+ - Not applicable
154
+ validations:
155
+ required: true
156
+
157
+ - type: dropdown
158
+ id: hardware
159
+ attributes:
160
+ label: Hardware
161
+ options:
162
+ - Single CUDA GPU
163
+ - Multi-GPU (`device_map="auto"`)
164
+ - CPU only
165
+ - Apple MPS
166
+ - Other
167
+ validations:
168
+ required: true
169
+
170
+ - type: textarea
171
+ id: versions
172
+ attributes:
173
+ label: Library versions
174
+ description: |
175
+ Paste the output of:
176
+ ```
177
+ python -c "import murano, nnsight, nnterp, transformers, torch; print('murano', murano.__version__); print('nnsight', nnsight.__version__); print('nnterp', nnterp.__version__); print('transformers', transformers.__version__); print('torch', torch.__version__)"
178
+ ```
179
+ placeholder: |
180
+ murano 0.1.0
181
+ nnsight 0.5.1
182
+ nnterp 1.2.4
183
+ transformers 4.58.0
184
+ torch 2.8.0+cu126
185
+ render: shell
186
+ validations:
187
+ required: true
188
+
189
+ - type: textarea
190
+ id: extra
191
+ attributes:
192
+ label: Anything else?
193
+ description: Workarounds you've tried, related issues, model-specific notes.
194
+ validations:
195
+ required: false
@@ -0,0 +1,14 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Discussions
4
+ url: https://github.com/UKPLab/murano/discussions
5
+ about: Ask questions, share usage tips, and chat with other Murano users.
6
+ - name: 📖 Documentation
7
+ url: https://ukplab.github.io/murano/
8
+ about: Read the guides, API reference, and reproduction gallery.
9
+ - name: 🚀 Quickstart
10
+ url: https://ukplab.github.io/murano/docs/getting-started/quickstart/
11
+ about: New to Murano? Start here.
12
+ - name: 🧪 Reproduction Gallery
13
+ url: https://ukplab.github.io/murano/reproductions/
14
+ about: Browse Murano-powered reproductions of published interpretability work.
@@ -0,0 +1,70 @@
1
+ name: 📖 Documentation
2
+ description: Report unclear, wrong, or missing documentation
3
+ title: "[DOCS] "
4
+ labels:
5
+ - documentation
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for helping us improve the docs! This template is for issues with the documentation
11
+ itself: guides, API reference, README, examples, or comments in the source.
12
+
13
+ For runtime bugs in the code, please use the **Bug Report** template instead.
14
+
15
+ - type: dropdown
16
+ id: kind
17
+ attributes:
18
+ label: Kind of issue
19
+ options:
20
+ - Wrong (the docs say something incorrect)
21
+ - Unclear (the docs are ambiguous or hard to follow)
22
+ - Missing (a topic isn't documented at all)
23
+ - Missing code examples
24
+ - Out of date (an example uses an old API)
25
+ - Broken link
26
+ - Typo / formatting
27
+ validations:
28
+ required: true
29
+
30
+ - type: input
31
+ id: location
32
+ attributes:
33
+ label: Where is the issue?
34
+ description: URL, file path, or section heading. Multiple locations OK.
35
+ placeholder: e.g. https://ukplab.github.io/murano/docs/guides/record/ or src/murano/steps/record.py:230
36
+ validations:
37
+ required: true
38
+
39
+ - type: textarea
40
+ id: problem
41
+ attributes:
42
+ label: What's wrong / what's missing?
43
+ description: Quote the current text or describe what you couldn't find.
44
+ validations:
45
+ required: true
46
+
47
+ - type: textarea
48
+ id: suggestion
49
+ attributes:
50
+ label: Suggested improvement
51
+ description: A concrete change in mind. If you can word it, please do; that's the fastest path to a merged fix.
52
+ placeholder: |
53
+ Replace:
54
+ "Pass `position="last"` to record only the final token."
55
+ with:
56
+ "Pass `position="last"` to record only the final non-padding token of each sequence (the position is determined per-row from the attention mask)."
57
+ validations:
58
+ required: true
59
+
60
+ - type: dropdown
61
+ id: impact
62
+ attributes:
63
+ label: Impact
64
+ description: How badly does this confuse new users?
65
+ options:
66
+ - "High: blocks users from using a feature"
67
+ - "Medium: feature is usable but takes guesswork"
68
+ - "Low: minor confusion or polish"
69
+ validations:
70
+ required: true
@@ -0,0 +1,114 @@
1
+ name: ✨ Feature Request
2
+ description: Suggest a new step, metric, lens, or capability for Murano
3
+ title: "[FEATURE] "
4
+ labels:
5
+ - enhancement
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for suggesting a feature! Please describe the use case so we can scope it well.
11
+
12
+ Before submitting, please check if this has been requested already in [open enhancements](https://github.com/UKPLab/murano/issues?q=is%3Aissue+label%3Aenhancement).
13
+
14
+ - type: checkboxes
15
+ id: preflight
16
+ attributes:
17
+ label: Preflight Checklist
18
+ options:
19
+ - label: I have searched [existing requests](https://github.com/UKPLab/murano/issues?q=is%3Aissue+label%3Aenhancement) and this hasn't been requested yet.
20
+ required: true
21
+ - label: This is a single feature request (file separate issues for unrelated ideas).
22
+ required: true
23
+
24
+ - type: textarea
25
+ id: problem
26
+ attributes:
27
+ label: What problem does this solve?
28
+ description: What are you trying to do that you can't do well today? Concrete use case > abstract framing.
29
+ placeholder: |
30
+ I'm doing causal tracing experiments and want to intervene at one layer while recording the
31
+ downstream effect at another, in a single forward pass. Currently `Record` and `Intervene` are
32
+ separate steps, which means two forward passes per prompt.
33
+ validations:
34
+ required: true
35
+
36
+ - type: textarea
37
+ id: proposal
38
+ attributes:
39
+ label: Proposed solution
40
+ description: What API or step would you add? Show an example call site if you can.
41
+ placeholder: |
42
+ A `RecordIntervene` step that takes `intervene_layer`, `intervene_fn`, `record_layer`, and runs
43
+ a single nnsight trace.
44
+ render: python
45
+ validations:
46
+ required: true
47
+
48
+ - type: textarea
49
+ id: alternatives
50
+ attributes:
51
+ label: Alternatives considered
52
+ description: Other approaches you've thought about and why they don't fit.
53
+ validations:
54
+ required: false
55
+
56
+ - type: dropdown
57
+ id: scope
58
+ attributes:
59
+ label: Where would this live?
60
+ description: Best guess at where the change would land in the codebase.
61
+ options:
62
+ - New `Step` (`src/murano/steps/...`)
63
+ - New artifact / dataclass
64
+ - New plotting helper (`src/murano/plotting/...`)
65
+ - New `MuranoModel` method
66
+ - New CLI / IO helper
67
+ - I'm not sure; you decide
68
+ validations:
69
+ required: true
70
+
71
+ - type: dropdown
72
+ id: priority
73
+ attributes:
74
+ label: Priority for you
75
+ description: How important is this to your own work? We treat this as a signal, not a commitment.
76
+ options:
77
+ - "Critical: blocking my paper / project"
78
+ - "High: significant impact on productivity"
79
+ - "Medium: would be very helpful"
80
+ - Nice to have
81
+ validations:
82
+ required: true
83
+
84
+ - type: textarea
85
+ id: use_case
86
+ attributes:
87
+ label: Concrete use case
88
+ description: Walk us through one realistic scenario where you'd use this. Useful for grepping prior issues with similar intent.
89
+ placeholder: |
90
+ I'm running activation patching across 24 layers for a 1B model on 200 prompts.
91
+ With separate Record + Intervene steps, I do 200 × 2 = 400 forward passes.
92
+ With this feature, I'd do 200 and the wall-clock drops from ~10 min to ~5 min.
93
+ validations:
94
+ required: false
95
+
96
+ - type: dropdown
97
+ id: pr_status
98
+ attributes:
99
+ label: Have you started a PR?
100
+ description: Tells us whether to expect "review my code" or "design and build it for me".
101
+ options:
102
+ - "No: want to discuss first"
103
+ - "Considering / sketching"
104
+ - "Yes: draft PR is open (link below)"
105
+ validations:
106
+ required: true
107
+
108
+ - type: textarea
109
+ id: extra
110
+ attributes:
111
+ label: References / draft PR link
112
+ description: Links to papers, prior implementations, related discussions, or your draft PR.
113
+ validations:
114
+ required: false
@@ -0,0 +1,81 @@
1
+ name: 📓 Reproduction Submission
2
+ description: Submit a Murano-powered reproduction of an interpretability paper for the gallery
3
+ title: "[REPRODUCTION] "
4
+ labels:
5
+ - reproduction
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for sharing your reproduction! Submissions land here for review before being added
11
+ to the [Reproduction Gallery](https://ukplab.github.io/murano/reproductions/).
12
+
13
+ We expect each submission to include a runnable notebook and the original paper reference.
14
+ See the [submit guide](https://ukplab.github.io/murano/docs/reproductions/submit/) for the
15
+ format reviewers will check against.
16
+
17
+ - type: input
18
+ id: submitter
19
+ attributes:
20
+ label: Your name
21
+ description: How you'd like to be credited in the gallery.
22
+ placeholder: e.g. Federico Tiblias
23
+ validations:
24
+ required: true
25
+
26
+ - type: input
27
+ id: paper
28
+ attributes:
29
+ label: Paper title or DOI
30
+ placeholder: e.g. Representation Engineering (Zou et al., 2023); arXiv:2310.01405
31
+ validations:
32
+ required: true
33
+
34
+ - type: input
35
+ id: notebook
36
+ attributes:
37
+ label: Notebook URL
38
+ description: Public link to a runnable `.ipynb` (GitHub, gist, Colab, nbviewer).
39
+ placeholder: https://github.com/your-org/your-repo/blob/main/notebook.ipynb
40
+ validations:
41
+ required: true
42
+
43
+ - type: textarea
44
+ id: description
45
+ attributes:
46
+ label: Short description
47
+ description: What does the notebook reproduce, and what should reviewers focus on?
48
+ placeholder: Reproduces the linear-probe analysis from Section 4. Uses Llama-3.2-1B and 1k contrastive prompts.
49
+ validations:
50
+ required: true
51
+
52
+ - type: input
53
+ id: code_repo
54
+ attributes:
55
+ label: Original code repo (optional)
56
+ description: Link to the paper's reference implementation, if any.
57
+ placeholder: https://github.com/...
58
+ validations:
59
+ required: false
60
+
61
+ - type: dropdown
62
+ id: hardware_required
63
+ attributes:
64
+ label: Hardware required to re-run
65
+ description: Sets reviewer expectations on whether they can verify the notebook locally.
66
+ options:
67
+ - CPU OK (small/no model, or precomputed activations)
68
+ - Single consumer GPU (≤16 GB)
69
+ - Single A100 / H100 (40–80 GB)
70
+ - Multi-GPU
71
+ - Other / specify in description
72
+ validations:
73
+ required: true
74
+
75
+ - type: textarea
76
+ id: extra
77
+ attributes:
78
+ label: Anything else?
79
+ description: Optional. Known caveats, deviations from the paper, planned follow-ups.
80
+ validations:
81
+ required: false
@@ -0,0 +1,15 @@
1
+ ### Summary :memo:
2
+ _Write an overview about it._
3
+
4
+ ### Details
5
+ _Describe more what you did on changes._
6
+ 1. (...)
7
+ 2. (...)
8
+
9
+ ### Bugfixes :bug: (delete if dind't have any)
10
+ -
11
+
12
+ ### Checks
13
+ - [ ] Closed #798
14
+ - [ ] Tested Changes
15
+ - [ ] Stakeholder Approval
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"