{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2604-07615","title":"ADAG: Automatically Describing Attribution Graphs","arxiv_id":"2604.07615","date":"2026-04-08","proceeding":null,"authors":["Aryaman Arora","Zhengxuan Wu","Jacob Steinhardt","Sarah Schwettmann"],"abstract":"In language model interpretability research, \\textbf{circuit tracing} aims to identify which internal features causally contributed to a particular output and how they affected each other, with the goal of explaining the computations underlying some behaviour. However, all prior circuit tracing work has relied on ad-hoc human interpretation of the role that each feature in the circuit plays, via manual inspection of data artifacts such as the dataset examples the component activates on. We introduce \\textbf{ADAG}, an end-to-end pipeline for describing these attribution graphs which is fully automated. To achieve this, we introduce \\textit{attribution profiles} which quantify the functional role of a feature via its input and output gradient effects. We then introduce a novel clustering algorithm for grouping features, and an LLM explainer--simulator setup which generates and scores natural-language explanations of the functional role of these feature groups. We run our system on known human-analysed circuit-tracing tasks and recover interpretable circuits, and further show ADAG can find steerable clusters which are responsible for a harmful advice jailbreak in Llama 3.1 8B Instruct.","url_abs":"https://arxiv.org/abs/2604.07615","url_pdf":"https://arxiv.org/pdf/2604.07615","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":null,"mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2604.07615"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/TransluceAI/circuits","reach":null}],"summary":{"unverified":8},"by_repo_kind":{"found_in_text":{"samples":8,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":8,"samples":[{"code_sha256_prefix":"597e394b194e3552","entry":"compute_auc","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/analysis/score_features.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/analysis/score_features.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"597e394b194e3552"}},{"code_sha256_prefix":"883fb2e44e321089","entry":"df_sum_over_tokens","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/analysis/cluster.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/analysis/cluster.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"883fb2e44e321089"}},{"code_sha256_prefix":"6ced0d04a85b01e0","entry":"prepare_circuit_data","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/analysis/cluster.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/analysis/cluster.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6ced0d04a85b01e0"}},{"code_sha256_prefix":"8a3f6c1e2937e2e8","entry":"prepare_table_from_steering_results","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/analysis/label.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/analysis/label.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8a3f6c1e2937e2e8"}},{"code_sha256_prefix":"c7f0b186aacc129a","entry":"revert_stop_nonlinear_grad_for_llama","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/core/grad.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/core/grad.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c7f0b186aacc129a"}},{"code_sha256_prefix":"360a03c88395e631","entry":"shapley_attention_forward","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/core/grad.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/core/grad.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"360a03c88395e631"}},{"code_sha256_prefix":"10067bc5d35b2be1","entry":"stop_nonlinear_grad_for_llama","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/core/grad.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/core/grad.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"10067bc5d35b2be1"}},{"code_sha256_prefix":"a9c4a50ada359104","entry":"unit_norm","repo":"TransluceAI/circuits","repo_kind":"found_in_text","path":"circuits/analysis/cluster.py","file_url":"https://github.com/TransluceAI/circuits/blob/HEAD/circuits/analysis/cluster.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a9c4a50ada359104"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}