Configuration Guidance#

Practical guidance for composing interpretune configurations. See Session, Module, and DataModule Usage Patterns for the session/config API itself.

Keep the composition space flat#

Interpretune deliberately keeps configuration composition flat: configs compose by explicit inclusion/override rather than deep implicit inheritance hierarchies. When authoring new configs, prefer adding a sibling config (or a small override file) over introducing new nesting levels — flatness is what keeps the composition space legible and greppable as the config surface grows.

Group configs by model, then experiment#

Configuration files can technically be composed arbitrarily, but the convention used throughout the examples — and recommended for your own experiments — is grouping by model level (shared per-model substrate settings) and experiment level (task/experiment-specific settings layered on a model config). See src/it_examples/config/experiments/ for the reference layout (e.g. rte_boolq/gemma2/..., rte_boolq/gemma3/...).

HookedTransformer: model_name_or_path can be arbitrary#

When instantiating a TransformerLens HookedTransformer via interpretune config, the ITLens config’s model_name_or_path can be set to an arbitrary identifier — the TL pretrained-model resolution is driven by the TL config’s own model selection, so model_name_or_path functions as a label rather than a required HF-hub pointer in that mode.

CLI: auto_comp_cfg is not supported via jsonargparse#

The auto_comp_cfg mechanism (automatic composition-config resolution, interpretune.config.shared.AutoCompConfig) is not supported through the CLI: jsonargparse’s signature-driven parsing cannot represent its dynamic target-class rebinding. Configure auto_comp_cfg programmatically (or via YAML consumed by the session API) instead of CLI flags.

Lightning precision plugins only convert floating-point tensors#

When composing with the Lightning adapter, note that Lightning precision plugins convert inputs via apply_to_collection(..., function=...) targeting floating-point tensors only. Integer tensors — token IDs, attention masks, embedding indices (LongTensor) — pass through unconverted, which is exactly what embedding layers require. If you see mixed-precision surprises, audit the float tensors in your batch; the integer inputs are not the issue.