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.
- murano_interp-0.1.0a0/.coveragerc +23 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/architecture_compatibility.yml +121 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/bug_report.yml +195 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/config.yml +14 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/documentation.yml +70 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/feature_request.yml +114 -0
- murano_interp-0.1.0a0/.github/ISSUE_TEMPLATE/reproduction_submission.yml +81 -0
- murano_interp-0.1.0a0/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- murano_interp-0.1.0a0/.github/dependabot.yml +6 -0
- murano_interp-0.1.0a0/.github/scripts/bootstrap-labels.sh +86 -0
- murano_interp-0.1.0a0/.github/workflows/docs.yml +68 -0
- murano_interp-0.1.0a0/.github/workflows/issue-labeler.yml +145 -0
- murano_interp-0.1.0a0/.github/workflows/main-checks.yml +16 -0
- murano_interp-0.1.0a0/.github/workflows/release.yml +71 -0
- murano_interp-0.1.0a0/.github/workflows/shared.yml +58 -0
- murano_interp-0.1.0a0/.gitignore +144 -0
- murano_interp-0.1.0a0/.pre-commit-config.yaml +39 -0
- murano_interp-0.1.0a0/CHANGELOG.md +26 -0
- murano_interp-0.1.0a0/CONTRIBUTING.md +92 -0
- murano_interp-0.1.0a0/LICENSE +201 -0
- murano_interp-0.1.0a0/NOTICE.txt +9 -0
- murano_interp-0.1.0a0/PKG-INFO +190 -0
- murano_interp-0.1.0a0/README.md +169 -0
- murano_interp-0.1.0a0/docs/.gitignore +5 -0
- murano_interp-0.1.0a0/docs/README.md +57 -0
- murano_interp-0.1.0a0/docs/astro.config.mjs +72 -0
- murano_interp-0.1.0a0/docs/logo_design/favicon_out.svg +628 -0
- murano_interp-0.1.0a0/docs/logo_design/logo.py +97 -0
- murano_interp-0.1.0a0/docs/logo_design/logo2.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo2_design.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo3.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo3_dark.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo3_design.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo_design.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo_out.png +0 -0
- murano_interp-0.1.0a0/docs/logo_design/logo_out.svg +627 -0
- murano_interp-0.1.0a0/docs/logo_design/make_dark.py +26 -0
- murano_interp-0.1.0a0/docs/package-lock.json +6254 -0
- murano_interp-0.1.0a0/docs/package.json +19 -0
- murano_interp-0.1.0a0/docs/public/favicon.png +0 -0
- murano_interp-0.1.0a0/docs/scripts/doc_check.py +265 -0
- murano_interp-0.1.0a0/docs/scripts/gen_api_docs.py +216 -0
- murano_interp-0.1.0a0/docs/src/assets/houston.webp +0 -0
- murano_interp-0.1.0a0/docs/src/assets/logo-dark.png +0 -0
- murano_interp-0.1.0a0/docs/src/assets/logo-light.png +0 -0
- murano_interp-0.1.0a0/docs/src/components/CTASection.astro +327 -0
- murano_interp-0.1.0a0/docs/src/components/CodeComparison.astro +238 -0
- murano_interp-0.1.0a0/docs/src/components/GallerySection.astro +212 -0
- murano_interp-0.1.0a0/docs/src/components/ReproCard.astro +131 -0
- murano_interp-0.1.0a0/docs/src/components/ReproSubmitCTA.astro +298 -0
- murano_interp-0.1.0a0/docs/src/components/ReproductionGallery.astro +315 -0
- murano_interp-0.1.0a0/docs/src/components/SiteNav.astro +48 -0
- murano_interp-0.1.0a0/docs/src/components/SocialBar.astro +66 -0
- murano_interp-0.1.0a0/docs/src/components/TeamSection.astro +302 -0
- murano_interp-0.1.0a0/docs/src/components/ThemeSelect.astro +109 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/installation.md +59 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/overview.mdx +89 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/getting-started/quickstart.mdx +133 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/patch.md +126 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/pipeline.md +166 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/probe.md +106 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/record.md +107 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/guides/steer.md +85 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/reproductions/overview.mdx +37 -0
- murano_interp-0.1.0a0/docs/src/content/docs/docs/reproductions/submit.mdx +137 -0
- murano_interp-0.1.0a0/docs/src/content/docs/index.mdx +36 -0
- murano_interp-0.1.0a0/docs/src/content.config.ts +7 -0
- murano_interp-0.1.0a0/docs/src/data/maintainers.json +8 -0
- murano_interp-0.1.0a0/docs/src/layouts/ReproLayout.astro +372 -0
- murano_interp-0.1.0a0/docs/src/pages/reproductions/index.astro +116 -0
- murano_interp-0.1.0a0/docs/src/pages/reproductions/tmlr2026.mdx +192 -0
- murano_interp-0.1.0a0/docs/src/styles/dot.css +26 -0
- murano_interp-0.1.0a0/docs/src/styles/repro-card.css +189 -0
- murano_interp-0.1.0a0/docs/src/styles/vitesse.css +233 -0
- murano_interp-0.1.0a0/docs/tsconfig.json +5 -0
- murano_interp-0.1.0a0/examples/federico_visualization.py +149 -0
- murano_interp-0.1.0a0/examples/logit_lens.py +37 -0
- murano_interp-0.1.0a0/examples/quick_prototype.py +43 -0
- murano_interp-0.1.0a0/examples/record_intervene.py +83 -0
- murano_interp-0.1.0a0/examples/refusal_direction.py +56 -0
- murano_interp-0.1.0a0/examples/sentiment_data.py +112 -0
- murano_interp-0.1.0a0/logo.png +0 -0
- murano_interp-0.1.0a0/pyproject.toml +83 -0
- murano_interp-0.1.0a0/pyrightconfig.json +6 -0
- murano_interp-0.1.0a0/src/murano/__init__.py +87 -0
- murano_interp-0.1.0a0/src/murano/artifacts.py +89 -0
- murano_interp-0.1.0a0/src/murano/dataset.py +365 -0
- murano_interp-0.1.0a0/src/murano/evaluation.py +98 -0
- murano_interp-0.1.0a0/src/murano/io.py +420 -0
- murano_interp-0.1.0a0/src/murano/logging.py +29 -0
- murano_interp-0.1.0a0/src/murano/model.py +343 -0
- murano_interp-0.1.0a0/src/murano/pipeline.py +84 -0
- murano_interp-0.1.0a0/src/murano/plotting/__init__.py +23 -0
- murano_interp-0.1.0a0/src/murano/plotting/jailbreaking.py +240 -0
- murano_interp-0.1.0a0/src/murano/plotting/logit_lens.py +70 -0
- murano_interp-0.1.0a0/src/murano/plotting/plotly_utils.py +107 -0
- murano_interp-0.1.0a0/src/murano/plotting/probing.py +143 -0
- murano_interp-0.1.0a0/src/murano/py.typed +0 -0
- murano_interp-0.1.0a0/src/murano/results.py +87 -0
- murano_interp-0.1.0a0/src/murano/steps/__init__.py +41 -0
- murano_interp-0.1.0a0/src/murano/steps/base.py +139 -0
- murano_interp-0.1.0a0/src/murano/steps/evaluate.py +88 -0
- murano_interp-0.1.0a0/src/murano/steps/intervene.py +193 -0
- murano_interp-0.1.0a0/src/murano/steps/jailbreaking/__init__.py +9 -0
- murano_interp-0.1.0a0/src/murano/steps/jailbreaking/evaluate.py +118 -0
- murano_interp-0.1.0a0/src/murano/steps/jailbreaking/plot.py +85 -0
- murano_interp-0.1.0a0/src/murano/steps/load.py +67 -0
- murano_interp-0.1.0a0/src/murano/steps/logit_lens.py +146 -0
- murano_interp-0.1.0a0/src/murano/steps/metrics.py +154 -0
- murano_interp-0.1.0a0/src/murano/steps/probe.py +148 -0
- murano_interp-0.1.0a0/src/murano/steps/probing/__init__.py +5 -0
- murano_interp-0.1.0a0/src/murano/steps/probing/plot.py +57 -0
- murano_interp-0.1.0a0/src/murano/steps/prompts.py +44 -0
- murano_interp-0.1.0a0/src/murano/steps/record.py +313 -0
- murano_interp-0.1.0a0/src/murano/steps/save.py +47 -0
- murano_interp-0.1.0a0/src/murano/steps/train.py +107 -0
- murano_interp-0.1.0a0/src/murano/steps/weight_ablation.py +301 -0
- murano_interp-0.1.0a0/tests/__init__.py +0 -0
- murano_interp-0.1.0a0/tests/conftest.py +73 -0
- murano_interp-0.1.0a0/tests/test_examples.py +247 -0
- murano_interp-0.1.0a0/tests/test_imports.py +73 -0
- murano_interp-0.1.0a0/tests/test_integration_smoke.py +96 -0
- murano_interp-0.1.0a0/tests/test_logit_lens.py +151 -0
- murano_interp-0.1.0a0/tests/test_metrics_steps.py +464 -0
- murano_interp-0.1.0a0/tests/test_plotting_utils.py +302 -0
- murano_interp-0.1.0a0/tests/test_public_api.py +68 -0
- murano_interp-0.1.0a0/tests/test_sanity.py +114 -0
- murano_interp-0.1.0a0/tests/test_steps.py +905 -0
- murano_interp-0.1.0a0/tests/test_submodule_targeting.py +622 -0
- 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
|