dyno lab DOCUMENTATIONGitHub ↗

Research tools and integration plan

Evaluated 10 September 2026. This document separates implemented Dyno features from upstream capabilities and proposed work. “Promising” means evidence of utility on particular tasks, not proof of general alignment or safety. Models, hooks, tokenizer revisions and quantization must match before transferring interpretation artifacts.

What is implemented in this change

Tool Evaluated capability Dyno implementation Boundary
TransformerLens Hook/cache interfaces, logit attribution, activation patching, architecture adapters Native MLX clean/corrupted Causal patching experiment; target-minus-foil logit differences, site-level recovery and restored control. Attention export adapter for an existing upstream cache. Every Lab job takes a hook: block output, the MLP's hidden neurons, gate and up projections and output, or the attention output. No automatic PyTorch loading or head-level MLX hooks. MLP hooks need a gated MLP (Llama, Qwen, Mistral, Gemma); mixture-of-experts layers are refused.
Neuronpedia Feature atlas, examples, annotations, APIs, steering and graph exploration A local neuron atlas of your own model: both poles of every neuron, random direction or SAE feature, with examples and rates from a corpus capture, local auto-interp labels and steering. Research artifacts fetches a public feature by model/source/index, plots examples, searches labels and saves local copies. Python converter also accepts downloaded feature JSON. Fetch sends only entered public IDs. No prompt uploads, remote steering or automatic transfer of source labels to local neurons. The local atlas is not uploaded anywhere.
CircuitsVis Interactive attention and token/feature visualizations Native query/key attention heatmap and feature activation plots using a data-only JSON export. One explicit attention layer/head per artifact. Does not embed upstream React or execute exported HTML/notebooks.
Circuit Tracer Transcoder replacement models, feature attribution graphs and interventions Python adapter exports an explicit induced subgraph; native directed-edge inspection, signed edge colors, node selection and saved provenance. Generation stays in the external research runtime. Imported graphs are not recomputed or causally validated by the viewer.
SAELens Training/inference, pretrained dictionaries and multiple SAE architectures Native small TopK training option alongside ReLU/L1; adapter exports selected sae.encode activations for feature exploration. Real-scale sae_train: TopK, BatchTopK or ReLU trained on activations streamed from a corpus, evaluated on held-out documents (FVU, L0, dead features, loss recovered) and aligned with the model's neurons. No pretrained weight importer or claim of numerical equivalence to SAELens training. JumpReLU and transcoders remain external.

All ordinary app launches now open the main window, including launches after first installation. Closing the window retains the existing menu bar behavior. Diagnostic and screenshot command modes remain separate.

Neurons

The Lab can now test individual units of a model, at the scale of a real corpus. A capture runs millions of tokens through the model and keeps, for every neuron at a hook and for each sign (pole), its strongest examples, samples across its range and how often it fires. An atlas turns that into one page per unit. Auto-interp has one local model label each pole and a second score the label on held-out text, against random directions and shuffled labels. Ablation by strength zeroes weak or strong activations with mass- and count-matched random controls. Attribution, unit-set ablation and steering trace one answer to the units behind it. The Neurons tutorial walks through all of it on Qwen3-0.6B.

Why not install every library inside Dyno?

TransformerLens now documents a TransformerBridge path around Hugging Face/PyTorch models. Its MPS path is opt-in and may require CPU fallback. It does not turn an MLX weight allocation into a PyTorch model. Dyno’s resident server therefore cannot transparently become a TransformerLens model. A future external backend must disclose the second model copy and resource estimate. TransformerLens getting started, migration guide.

SAELens has architecture-specific normalization and decoder behavior. Dimension agreement alone is insufficient to apply a pretrained SAE to arbitrary MLX activations. A correct importer needs model/revision/hook/normalization checks and reconstruction parity against upstream output. The current implementation deliberately exchanges already-computed feature activations. SAELens, training documentation.

Neuronpedia’s older docs explicitly warn that they lag current capabilities. The public feature endpoint used here was inspected directly; response identity and shapes are checked before saving. Neuronpedia docs, public API example.

Circuit Tracer’s adjacency rows represent targets, columns represent sources; the adapter preserves that direction. Users select the subgraph explicitly and the export records omissions. Full circuit construction requires appropriate transcoders and upstream runtime support. Circuit Tracer graph implementation, open-source overview, CircuitsVis.

Use causal patching

Open Lab → Experiments → Causal patching. Choose an isolated model, enter clean and corrupted prompts of equal token length, and enter distinct single-token target and foil completions. Edit layer and token indices under parameters. The experiment runs at most 128 sites. It does not modify the serving model.

Each site replaces one corrupted block-output vector with the clean vector at the same position. The metric is target logit minus foil logit. Recovery is (patched − corrupted) / (clean − corrupted) and is undefined for a near-zero denominator. Values can exceed 1 or be negative; they are not percentages of a discovered circuit. The saved result includes a final unpatched control to verify restoration.

Python SDK:

from dyno.sdk import Lab
lab = Lab()
job = lab.patch_sweep(
    model="/path/to/local/model",
    prompt="The capital of Italy is",
    clean_prompt="The capital of France is",
    target_token=" Paris", foil_token=" Rome",
    layers=[0, 1], positions=[3, 4], max_input_tokens=128,
)
result = lab.wait(job["id"])

Tokenization is model-specific: adjust positions after inspecting tokens. Do not infer token indices from whitespace. The defaults are an editable example, not a guaranteed token alignment across models.

Bring external results into the Lab

Use the new dyno.interop module in an existing TransformerLens, SAELens or Circuit Tracer environment. It does not install those packages. Export JSON, then open Lab → Research artifacts → Import artifact JSON. Artifacts are saved in ~/.mlx-dyno/research-history and can be reopened there in the UI.

from dyno.interop import attention, sae_features, circuit_graph

# Supply tensors from your external experiment; each export is data-only.
# attention(tokens, attention_tensor[0, head], "attention.json",
#           model=model_id, source="TransformerLens: exact hook / layer / head")
# sae_features(tokens, sae.encode(states)[:, selected_features], "features.json",
#              model=model_id, source="SAELens: release / hook / revision",
#              feature_ids=selected_features)
# circuit_graph(graph, "graph.json", model=model_id,
#               node_indices=selected_nodes, labels=node_labels)

Limits: 8 MB per artifact; 128 attention tokens; 128 graph nodes/1024 edges; 256 feature series with up to 512 tokens each. Graph exports include original node IDs; supply meaningful labels from your source graph. This is a bounded viewer, not a renderer for arbitrary upstream JSON, .pt files or notebooks.

For Neuronpedia, expand Fetch a public Neuronpedia feature, enter its model/source/index and click Fetch. No network request happens merely by opening this workspace. The example gpt2-small / 0-res-jb / 0 is public; its examples do not describe your currently served model.

Neuronpedia example in the app

This native app view shows public GPT-2 feature examples fetched from Neuronpedia, with activation plots and saved artifact history. These are source examples, not activations from your currently served model.

Neuronpedia feature examples in Dyno Lab

Prioritized research roadmap

Priority Feature to add Research motivation Acceptance criterion
P0 Auditing study runner with blinded labels and held-out scenarios AuditBench evaluates discovery of hidden behaviors; a screenshot or single probe score cannot establish auditing effectiveness. Measure discovery, false positives, cost and generalization against a behavioral-only baseline.
P0 Model/hook/revision compatibility registry and pretrained SAE importer Gemma Scope 2 and Qwen-Scope make model-specific dictionaries useful for practical studies. Numerical encode/decode parity; reject mismatched model/hook/normalization; quantify quantization drift.
P0 Dataset-level patching with confidence intervals Single-prompt patching is vulnerable to task and corruption choices. Bootstrap intervals, clean/corrupted controls, random-site controls and held-out prompt templates.
P1 SAE quality panel: sparsity–fidelity curves, loss recovery, stability (sae_train now reports loss recovered and the spread across seeds) SAEBench evaluates several dimensions rather than reconstruction alone. Compare architectures at matched sparsity; repeat seeds and held-out tasks; report downstream loss recovery.
P1 External TransformerBridge backend and attention/head hooks Broader architecture coverage without unsafe assumptions about MLX internals. Explicit separate-memory budget, backend identity, tested hook maps and no-op output parity.
P1 Graph-to-intervention workflow Concept-targeted attribution connects probe decisions to circuit components; still early evidence. Reproduce selected edge/node interventions and compare predicted effects with measured effects.
P1 Persona/steering direction studies across conversations Assistant Axis experiments suggest activation interventions can stabilize some behaviors. Track capability regressions, adversarial robustness and out-of-distribution performance, not just target behavior.
P2 Jacobian-lens adapter and sparse readout viewer July 2026 J-lens research reports causal utility of particular internal representations. Reproduce open-model readouts and swap/ablation controls; quantify faithfulness and uncertainty.
P2 Natural-language autoencoder / introspection adapter comparisons Recent work reports improved auditing on controlled tasks. Compare to probes and behavioral baselines on blinded models; preserve evidence separate from generated explanations.
P2 Auditing agents with replayable, bounded tool access Automated auditing can make multi-step investigations repeatable. Budgets, immutable evidence, held-out scoring, prompt-injection tests and explicit execution permissions.

Evidence behind the roadmap

Validation status

Native compilation, MLX hybrid-decoder worker integration, neutral and clean-recovery patch controls, TopK activity bounds, export orientation and malformed artifact rejection are covered by local tests. Those checks establish implementation behavior, not research effectiveness. Full PyTorch/TransformerLens/SAELens/Circuit Tracer execution is external and has not been validated end-to-end in this release. A cached Qwen1.5 0.5B 4-bit model also completed a four-site patch sweep with restored unpatched logits. The development app opened its window on launch; a UI-triggered Neuronpedia lookup saved 32 public examples. UI automation disconnected after the fetch; an offscreen native snapshot subsequently verified the loaded feature plots. Full interactive coverage remains limited.

The neuron operations are covered by tests on a tiny random Qwen3: MLP hooks reproduce the original output and catch a wrong activation function, the capture keeps the true strongest examples with centered windows, capture → atlas → steering runs end to end, and SAE alignment finds features that copy neurons. The SDK, MCP tools and HTTP endpoints have their own tests. These establish implementation behavior, not research results.

Worked example: reference corruption

The Qwen3.8 identifier-fidelity experiment includes importable Lab JSON, exact prompts, generated outputs, saved weights, SDK submission and HTTP commands. It uses the existing jobs and artifacts APIs. The probe predicts literal reference absence, not harmfulness or deceptive intent.