circuitkit 0.2.0__tar.gz → 0.2.1__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.
- {circuitkit-0.2.0/src/circuitkit.egg-info → circuitkit-0.2.1}/PKG-INFO +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/INSTALLATION.md +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/experimental-models.md +11 -5
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/visualization.md +3 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/finetuning/finetune-llama.py +2 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/finetuning/finetune-qwen.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/__init__.py +1 -1
- circuitkit-0.2.1/src/circuitkit/_tl_patches/0007-local-checkpoint-config.patch +128 -0
- circuitkit-0.2.1/src/circuitkit/_tl_patches/0008-neox-lm-head.patch +27 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/__init__.py +2 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/api.py +97 -36
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/examples/finetune_llama.py +2 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/examples/finetune_qwen.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/finetune_utils.py +40 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/score_loader.py +90 -48
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/attribute.py +0 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/circuit.py +99 -13
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/cli/main.py +51 -3
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/effectiveness.py +3 -3
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/base.py +11 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/code_syntax_corrupt.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/entity_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/final_answer_swap.py +6 -3
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/instruction_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/logical_negation.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/math_step_corrupt.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/mcq_choice_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/operand_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/profession_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/resample.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/token_swap.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/generalization.py +2 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/intervention_reliability.py +10 -16
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/transfer.py +13 -8
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/transfer_analysis.py +6 -3
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/quick.py +79 -22
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/d3_template.py +200 -84
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/graph_viz.py +46 -18
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/streamlit_app.py +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1/src/circuitkit.egg-info}/PKG-INFO +1 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit.egg-info/SOURCES.txt +4 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_patches/test_tl_patchset.py +90 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_effectiveness.py +9 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/data/test_data_corruption_strategies.py +53 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_tl3_interop.py +0 -2
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_transfer_integration.py +53 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_api.py +107 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_attribute.py +31 -1
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_circuit.py +137 -6
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_cli_commands.py +54 -0
- circuitkit-0.2.1/tests/unit/test_d3_lod.py +125 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_finetune_utils.py +124 -0
- circuitkit-0.2.1/tests/unit/test_graph_export_safety.py +134 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_pillars.py +18 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_quick_api.py +119 -9
- circuitkit-0.2.1/tests/unit/test_r1_seed_consistency.py +77 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_score_loader.py +236 -22
- circuitkit-0.2.0/tests/unit/test_d3_lod.py +0 -74
- {circuitkit-0.2.0 → circuitkit-0.2.1}/.github/workflows/docs.yml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/.github/workflows/patch-release.yml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/.github/workflows/test.yml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/.github/workflows/version-consistency.yml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/LICENSE.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/MANIFEST.in +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/README.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/API_REFERENCE.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/about/faq.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/about/license.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/about/release-notes.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/about/roadmap.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/architecture-registry.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/chat-templates.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/circuit-artifacts.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/hallucination-detection.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/memory-optimization.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/tiny-aya.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/advanced/vllm-evaluation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/acdc.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/capability-matrix.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/cdt.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/eap.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/ibcircuit.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/overview.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/algorithms/stability-tiers.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/applications.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/backends.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/dict-config.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/evaluation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/flat-api.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/overview.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/pipeline.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/selectors.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/api-reference/tasks.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/blog/introducing-circuitkit.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/citation-map.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/cli/applications.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/cli/discovery.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/cli/evaluation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/cli/overview.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/cli/yaml-config.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/contributing/documentation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/contributing/new-algorithms.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/contributing/setup.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/contributing/standards.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/contributing/testing-on-cuda.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/dev_enterprise_runbook.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/ablation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/baselines.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/benchmarking.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/causal-patching.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/framework.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/generalization.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/robustness.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/evaluation/stability.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/examples/case-studies.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/examples/notebooks.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/examples/overview.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/examples/scripts.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/configuration.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/core-concepts.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/index.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/installation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/quickstart.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/getting-started/taxonomy.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guidelines/Testing_Guidelines.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/CONCEPTS.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/circuit_artifact_guide.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/eap_ig_memory_optimization.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/hallucination_detection_guide.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/index.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/steering.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/guides/vllm_evaluation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/index.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/product_blueprint.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/pypi_core_contract.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/reference/ARCHITECTURE_REGISTRY.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/reference/FEATURES.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/reference/hyperparameters.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/reference/index.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/references.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/trust/index.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/trust/results.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/trust/scope.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/applications.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/custom-data.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/data-corruption.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/data.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/evaluation.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/pipeline-overview.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/selectors.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/tasks.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/docs/user-guide/troubleshooting.md +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/01-quickstart.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/02-discover-python-api.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/04-discover-yaml.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/05-evaluate-faithfulness.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/06-applications.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/07-pipeline.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/08-custom-data.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/09-load-and-reuse.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/10-steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/11-knowledge-editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/12-custom-corruption.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/13-transfer-matrix.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/14-faithfulness-audit-for-compliance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/15-compression-for-deployment.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/16-tabular-model-audit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/17-quantization-unlearning.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/18-banking-safety-steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/19-trade-finance-document-classification.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/20-transit-edge-deployment.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/21-quantization-permanent-unlearning.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/22-gender-bias-audit-and-mitigation.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/23-jailbreak-refusal-multi-model.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/case-studies/24-safety-refusal-custom-data.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/discovery/algorithm-comparison.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/discovery/benchmark-circuit-discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/experiments/e1_algo_validation_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/experiments/e2_cross_family_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/experiments/e3_neuron_level_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/experiments/e4_custom_data_jailbreak.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/experiments/e567_downstream_applications.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/00_colab_setup.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/01_quickstart_pipeline.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/02_algorithm_comparison.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/03_evaluation_deep_dive.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/04_visualization_gallery.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/05_applications.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/06_cli_and_yaml.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/notebooks/07_advanced_research_tools.ipynb +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/pruning/basic-prune.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/pruning/prune-llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/pruning/prune-qwen.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/quantization/quantize-llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/quantization/quantize-qwen.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/simple_csv_task.yaml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/_common.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/_runner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/01_eap_ig_activations_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/02_eap_clean_corrupted_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/03_eap_exact_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/04_compare_eap_family_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/05_atp_gd_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/06_eap_gp_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/07_relp_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/08_ibcircuit_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/09_peap_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/10_cdt_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/11_eap_ifr_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/12_all_algos_llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/algos/_algos_common.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/01_pruning_gpt2_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/02_lora_healing_gpt2_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/03_pruning_gpt2_mmlu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/04_pruning_gpt2_gender_bias.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/05_pruning_gpt2_sva.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/06_pruning_gpt2_capital_country.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/07_pruning_gpt2_boolq.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/08_pruning_gpt2_arc_easy.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/09_pruning_gpt2_hellaswag.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/10_pruning_gpt2_crows_pairs.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/11_knowledge_editing_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/12_unlearning_tofu_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/13_steering_gpt2_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/14_linear_probe_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/15_hallucination_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/16_peft_benchmark.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/17_knowledge_editing_full_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/18_steering_safety_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/19_quantization_llama1b.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/20_ctheta_steering_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/21_ctheta_steering_llama1b.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/22_ctheta_advbench_refusal.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/23_ctheta_k_grid_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/24_circuitkit_advbench_refusal_steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/25_knowledge_editing_llama_circuit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/26_soft_healing_llama_circuit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/27_hallucination_truthfulqa_llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/28_safety_dataset_pillar_evals.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/_apps_common.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/applications/_make_apps_cell.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/01_gpt2_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/02_gpt2_greater_than.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/03_llama1b_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/04_llama1b_greater_than.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/05_gpt2_mmlu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/06_llama1b_mmlu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/07_gpt2_gender_bias.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/08_gpt2_hypernymy.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/09_gpt2_sva.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/10_gpt2_capital_country.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/11_gpt2_boolq.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/12_gpt2_wmdp.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/13_gpt2_arc_easy.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/14_gpt2_arc_challenge.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/15_gpt2_hellaswag.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/16_gpt2_crows_pairs.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/17_gpt2_tofu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/18_gpt2_gsm8k.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/99_aggregate.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/_bench_common.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/_custom_tasks.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/benchmark/_make_cell.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/01_pairwise_crowspairs.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/02_instruction_alpaca.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/03_conversational_sharegpt.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/04_mcq_mmlu_arc_hellaswag.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/05_forget_retain_tofu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/06_strategies_all.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/07_e2e_discovery_mcq_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/08_e2e_discovery_tofu_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/09_e2e_discovery_crowspairs_llama1b.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/10_e2e_quality_stability_mcq_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/11_e2e_all_algos_custom_mcq_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/12_e2e_safety_advbench_gpt2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/data/_data_common.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/master_aggregator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/01_circuit_graph.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/02_activation_saliency.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/03_feature_saliency.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/04_circuit_editor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/05_comparison_dashboard.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/06_jupyter_widgets.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/07_gallery_generator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/08_plotter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/09_eap_visualization.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/10_acdc_visualize.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/validation/visualizations/11_transfer_visualizer.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/examples/visualization/graph-viz-example.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/pyproject.toml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/pytest.ini +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/requirements.txt +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/setup.cfg +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/__main__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0001-moe-dtype-and-devices-fixes.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0002-gemma4.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0003-sarvam-moe.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0004-gemma4-hf-parity.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0005-memory-no-weight-copies.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/_tl_patches/0006-cohere.patch +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/analysis/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/analysis/cross_method_jaccard.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/analysis/metrics.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/analysis/scores.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/arch_registry.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/arch_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/_covariance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/_device.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/_metrics.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/_tokenization.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/benchmark_analysis.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/cure_clue.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/hallucination_detection.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/common_utils/linear_probe.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/cake.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/circuit_guided_editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/fine_tune_editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/knowledge_editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/knowledge_editing_enhanced.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/mcircke.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/memit_wrapper.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/editing/rome_wrapper.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/benchmark_peft.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/circuit_tuning.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/healing_metrics.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/peft_methods.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/finetuning/soft_healing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/eval_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/examples/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/examples/prune.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/examples/prune_llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/examples/prune_qwen.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/finetune_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/importance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/neuron_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/node_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/score_extractor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/selectors/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/selectors/multi_granular_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/selectors/taylor_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/pruning/weight_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/examples/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/examples/quantize_llama.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/examples/quantize_qwen.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/llmcompressor_quantize.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/quant_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/score_extractor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/selectors/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/selectors/awq_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/quantization/selectors/tacq_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/examples/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/selective_finetuning/selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/steering/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/steering/steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/steering/steering_enhanced.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/applications/steering/weight_steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/artifacts/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/artifacts/circuit_artifact.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/artifacts/converters.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/artifacts/scores.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/_tl_compat/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/_tl_compat/cohere.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/_tl_compat/registry.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/_tl_compat/smollm3.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/artifact_export.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/data.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/model_utils/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/model_utils/micro_model_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/model_utils/transformer_lens_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/prune.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/prune_algos/ACDC.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/prune_algos/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/prune_algos/mask_gradient.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/prune_algos/prune_algos.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/docstring_prompts.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/docstring_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/induction_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/ioi_dataset.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/tasks/ioi_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/types.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/ablation_activations.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/custom_tqdm.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/graph_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/misc.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/patch_wrapper.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/patchable_model.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/task_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/utils/tensor_ops.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/acdc/visualize.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/adapter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/propagation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/cdt_ablations.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/cdt_basic.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/cdt_core.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/cdt_from_source_nodes.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/cdt_source_to_target.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/faithfulness_ablations.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/general.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/ioi_dataset.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/local_importance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/pathology.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/toy_model.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/cdt/pyfunctions/wrappers.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/artifact_export.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/attribute_node.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/circuit_kit_adapter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/eap_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/evaluate.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/graph.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/metrics.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/py.typed +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/eap/visualization.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/artifact_export.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/ib_noise.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/ib_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/model_wrapper.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/backends/ibcircuit/trainer.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/gptq.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/magnitude.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/random.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/sparsegpt.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/baselines/wanda.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/benchmark.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/benchmarks/reporting.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/cli/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/cli/config.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/cli/debug.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/cli/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/base.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/color_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/distractor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/distractor_variation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/entity_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/negation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/paraphrase.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/pipeline.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/position_shift.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/role_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/token_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/validators.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/corruption/voice_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/base.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/code.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/conversational.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/forget_retain.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/instruction.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/math.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/mcq.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/pairwise.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/qa.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/adapters/safety_prompt.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/auto_detect.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/clean_only.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/benign_rewrite.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/llm_counterfactual.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/template.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/corruption/template_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/dataset_schema.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/eap_dataset.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/invariance_groups/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/invariance_groups/builder.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/invariance_groups/schema.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/normalized.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/normalized_task.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/TLACDCCorrespondence.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/TLACDCEdge.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/TLACDCExperiment.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/TLACDCInterpNode.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/core/acdc_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/generation/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/generation/cache.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/generation/manager.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/generation/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/greaterthan/greaterthan_32_ffd33106.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_16_8c879ddb.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_32_a432ca4a.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_500_1f7e7324.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_64_3bba747e.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_64_f4a164db.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/storage/ioi/ioi_8_e87df42e.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/binary_align/generate_binary_align.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/binary_align/jailbreak_binary.csv +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/binary_align/safe_binary.csv +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/capital_country/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/capital_country/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/docstring/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/docstring/prompts.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/docstring/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/double_io/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/double_io/double_io_dataset.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/gender_bias/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/gender_bias/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/gender_bias/utils2.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/greaterthan/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/greaterthan/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/hypernymy/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/hypernymy/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/induction/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/induction/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/ioi/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/ioi/ioi_dataset.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/ioi/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/sva/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/sva/utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/task_data/tasks/wmdp/wmdp_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/template.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/wikitext_calibration.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/data/worthiness.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/checkpoint_benchmark.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/evaluate.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/full.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/hf_checkpoint.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/intervention_faithfulness.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/lm_eval_simple.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/lm_harness.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/master_grid.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/mmlu_eval.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/ablation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/baselines.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/causal_patching.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/robustness.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/pillars/stability.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/report.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/reports/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/reports/aggregator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/reports/robustness_report.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/reports/stability_report.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/stability_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/transfer_visualizer.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/evaluation/weight_based_eval.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/pipeline.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/provenance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/cdt_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/eap_gp_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/eap_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/gptq_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/ibcircuit_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/magnitude_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/random_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/relp_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/selection/wanda_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/_algorithm_families.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/_chat.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/auto_schema.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/bootstrap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/boolq.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/capital_country.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/double_io.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/gender_bias.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/glue.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/greater_than.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/gsm8k.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/hypernymy.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/ifeval.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/ioi_acdc.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/ioi_legacy.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/mmlu.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/sva.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/truthfulqa.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/winogrande.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/winogrande_mc.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/builtins/wmdp.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/generic.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/hf_factory.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/inspect.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/registry.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/safety_datasets.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/specs.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/classification_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/generation_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/mcq_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/qa_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/summarization_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/type_specs/translation_spec.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/validator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tasks/yaml_loader.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tooling/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/tooling/validate_environment.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/artifacts.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/async_processing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/bootstrap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/config.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/corruption_validation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/dataset_cache.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/debug.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/debugging.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/device.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/distributed.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/exceptions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/hparams.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/logging.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/memory.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/profiling.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/utils/token_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/comparison.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/editor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/feature_saliency.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/gallery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/jupyter_suite.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/plotter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/saliency.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit/visualize/theme.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit.egg-info/dependency_links.txt +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit.egg-info/entry_points.txt +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit.egg-info/requires.txt +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/src/circuitkit.egg-info/top_level.txt +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/conftest.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_architecture_registry.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_benchmark_analysis.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_benchmark_peft.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_circuit_artifact.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_covariance.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_cross_architecture.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_fine_tune_editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_hallucination_detection.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_knowledge_editing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_knowledge_editing_enhanced.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_knowledge_editing_pipeline.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_linear_probe.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_peft_methods.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_steering_enhanced.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_tokenization.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/apply/test_weight_steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/ibcircuit/test_ib_noise.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/ibcircuit/test_ib_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/ibcircuit/test_model_wrapper.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/ibcircuit/test_trainer.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/test_artifact_export_integration.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_aya_expanse.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_aya_expanse_32b.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_aya_expanse_32b_parity.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_aya_expanse_parity.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere_backends.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere_gqa.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere_parity.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere_selectors.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_cohere_wiring.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_command_r7b.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_command_r7b_parity.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_smollm3.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_compat/test_smollm3_parity.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_patches/configs/Ministral-3-3B-Instruct-2512.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_patches/configs/gemma-4-31B-it.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_patches/configs/sarvam-30b.json +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/backends/tl_patches/test_patch_hook.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/benchmarks/test_baselines.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/benchmarks/test_benchmark.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/conftest.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_distractor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_entity_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_new_corruptions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_paraphrase.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_pipeline.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_pipeline_integration_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_practical_examples.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_role_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_strategies_integration.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_strategies_standalone.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_template.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_template_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_token_swap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_validators.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/corruption/test_yaml_strategy_synthesis.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/data/test_qa_adapter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/fixtures/sample_pipeline.yaml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_chat_template_instruct.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_interfaces_e2e.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_soft_healing_integration.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_steering_ioi.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_template_e2e.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_transfer_matrix.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_transfer_minimal.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/integration/test_yaml_run_advanced.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_32b_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_32b_evaluation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_32b_interventions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_evaluation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_aya_expanse_interventions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_cdt_nonzero_scores.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_circuit_tuner_training.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_cli_and_api_args.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_cohere_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_cohere_evaluation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_cohere_interventions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_command_r7b_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_command_r7b_evaluation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_command_r7b_interventions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_data_adapters_and_utils.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_greater_than_tokenizer.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_pruner_gqa_kv_head.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_smollm3_discovery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_smollm3_evaluation.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_smollm3_interventions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/regression/test_steering_and_baselines.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/release/test_release.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_auto_schema.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_capital_country.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_chat_template.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_cohere_tokenization.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_generic_task.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_glue.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_greater_than_corruption.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_gsm8k.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_ioi_regression.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_validator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_winogrande.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/tasks/test_winogrande_mc.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/test_custom_data.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/test_environment.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/test_packaging.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/conftest.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/sample_pipeline.yaml +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_attribute_node.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_baselines_multidraw.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_bootstrap.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_circuit_kit_adapter.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_circuit_scores.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_cli.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_cli_smoke.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_config_defaults.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_d5_d7_import.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_device_allocator.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_double_io.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_eap_grad_scope.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_end_to_end.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_evaluate.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_exceptions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_expandable_segments.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_extended_schema.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_graph.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_graph_viz.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_graph_viz_bounded.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_hf_checkpoint.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_hparams.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_init_exports.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_instruction_swap_audit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_mean_activations.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_mlp1.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_modules_exist.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_multi_token_answers.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_multi_token_unit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_neuron_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_no_regressions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_node_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_normalized_task.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_optimize_memory_usage.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_perplexity_metric.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_pillar_baseline_reuse.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_pipeline_benchmark_offload.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_pipeline_smoke.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_pipeline_unit.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_qkv_memory_guard.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_quantize_export_flow.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_quick_extensions.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_r2_effect_magnitude.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_ranking_metrics.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_report.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_security_hardening.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_selector.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_selector_bugs.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_selector_registry.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_soft_healing.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_stability_robustness_reports.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_steering.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_structural_pruner.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_taylor_grad_scope.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_tokenize_batch_pair_max_length.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_tokenize_warning_throttle.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_trust_remote_code.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_validators_direct.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_yaml_pipeline_config.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/unit/test_yaml_run_cli.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/__init__.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_comparison.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_editor.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_feature_saliency.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_gallery.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_jupyter_suite.py +0 -0
- {circuitkit-0.2.0 → circuitkit-0.2.1}/tests/visualize/test_saliency.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: circuitkit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Unified Discover, Evaluate, Intervene toolkit for mechanistic interpretability: 13 circuit discovery algorithms, 6-pillar faithfulness evaluation, and pruning / quantization / knowledge editing / unlearning / activation steering / contrastive weight steering interventions behind one API.
|
|
5
5
|
Author: Hem Gosalia, Aditya Kasliwal, Vinay Kumar Sankarapu
|
|
6
6
|
Author-email: Pratinav Seth <pratinav.seth@lexsi.ai>
|
|
@@ -39,7 +39,7 @@ transformers>=5.15,<6, ordered-set, pyyaml, networkx,
|
|
|
39
39
|
matplotlib, ipywidgets, scikit-learn, evaluate,
|
|
40
40
|
sacrebleu, rouge_score, bert-score, accelerate,
|
|
41
41
|
sentence-transformers, click, rich, torch-pruning>=1.0,
|
|
42
|
-
transformer-lens==3.8.0 (CircuitKIT applies its Gemma-4 / Sarvam-MoE / Cohere patches at import)
|
|
42
|
+
transformer-lens==3.8.0 (CircuitKIT applies its Gemma-4 / Sarvam-MoE / Cohere patches and the Pythia / GPT-NeoX loading fix at import)
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
Install core only:
|
|
@@ -42,11 +42,17 @@ repository — no `HF_TOKEN` needed.
|
|
|
42
42
|
[Tests](#tests) below).
|
|
43
43
|
|
|
44
44
|
!!! note "Local checkpoint folders"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
While CircuitKIT's in-memory TransformerLens patch series is active
|
|
46
|
+
(`transformer-lens==3.8.0`, with `import circuitkit` before the first
|
|
47
|
+
`import transformer_lens`), a local checkpoint folder loads from its
|
|
48
|
+
`config.json` whatever it is called (a fine-tune in
|
|
49
|
+
`meta-llama-Llama-3.2-1B_sft/` is not mistaken for base Llama-3.2-1B).
|
|
50
|
+
Without the series, a folder whose path contains "llama" or "gemma" is
|
|
51
|
+
refused. Local Gemma checkpoints, fine-tunes included, are refused until
|
|
52
|
+
CircuitKIT moves to TransformerLens 4: TransformerLens 3.8 has Gemma configs
|
|
53
|
+
for Hub names only, and loading the Hub ID gives the base weights. Local SmolLM3
|
|
54
|
+
checkpoint folders are not supported by the current port; load
|
|
55
|
+
`HuggingFaceTB/SmolLM3-3B` by Hub ID.
|
|
50
56
|
|
|
51
57
|
## Gemma-4 and Sarvam-MoE: discovery-only TransformerLens ports
|
|
52
58
|
|
|
@@ -27,7 +27,7 @@ pipe.visualize(mode="graph", output="./circuit.html")
|
|
|
27
27
|
|
|
28
28
|
## Mode 1: Graph view
|
|
29
29
|
|
|
30
|
-
Renders the circuit as a directed graph: nodes are attention heads and MLP layers, edges
|
|
30
|
+
Renders the circuit as a directed graph: nodes are attention heads and MLP layers, edges join circuit nodes of adjacent layers, weighted by node importance. They are not measured connections.
|
|
31
31
|
|
|
32
32
|
```python
|
|
33
33
|
fig = ck.visualize_circuit(circuit, mode="graph")
|
|
@@ -35,7 +35,8 @@ fig = ck.visualize_circuit(circuit, mode="graph")
|
|
|
35
35
|
|
|
36
36
|
- Nodes coloured by type (blue = attention head, amber = MLP)
|
|
37
37
|
- Node size proportional to importance score
|
|
38
|
-
- Edges only
|
|
38
|
+
- Edges are drawn only between components in the circuit (pruned components have none)
|
|
39
|
+
- A graph with more than 20,000 edges opens with the threshold raised so it draws at most 20,000 (the page says how many are shown); move the threshold to 0 to show all
|
|
39
40
|
- Hover tooltips with layer, head index, and importance score
|
|
40
41
|
|
|
41
42
|
Graph mode delegates to `Circuit.plot`, which takes only an optional output path.
|
|
@@ -385,8 +385,8 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
385
385
|
mdl = p.add_argument_group("model loading")
|
|
386
386
|
mdl.add_argument(
|
|
387
387
|
"--dtype",
|
|
388
|
-
default="
|
|
389
|
-
choices=["
|
|
388
|
+
default="bfloat16",
|
|
389
|
+
choices=["bfloat16", "float32"],
|
|
390
390
|
help="Model dtype for inference and training.",
|
|
391
391
|
)
|
|
392
392
|
mdl.add_argument(
|
|
@@ -367,7 +367,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
367
367
|
mdl.add_argument(
|
|
368
368
|
"--dtype",
|
|
369
369
|
default="bfloat16",
|
|
370
|
-
choices=["
|
|
370
|
+
choices=["bfloat16", "float32"],
|
|
371
371
|
help="Model dtype. Qwen models default to bfloat16.",
|
|
372
372
|
)
|
|
373
373
|
mdl.add_argument(
|
|
@@ -8,7 +8,7 @@ from ._tl_patches import install as _install_tl_patches
|
|
|
8
8
|
_install_tl_patches()
|
|
9
9
|
|
|
10
10
|
# The release pipeline (scripts/release.py set-version) rewrites this line.
|
|
11
|
-
__version__ = "0.2.
|
|
11
|
+
__version__ = "0.2.1"
|
|
12
12
|
__author__ = "Pratinav Seth, Hem Gosalia, Aditya Kasliwal, Vinay Kumar Sankarapu"
|
|
13
13
|
__description__ = "Unified Discover, Evaluate, Intervene toolkit for mechanistic interpretability"
|
|
14
14
|
_API_EXPORTS = {"discover_circuit", "evaluate_circuit", "load_circuit"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
2
|
+
From: hemgo-lexsi <hem.gosalia@lexsi.ai>
|
|
3
|
+
Date: Thu, 29 Oct 2026 13:36:47 +0530
|
|
4
|
+
Subject: [PATCH 7/7] local checkpoints: config and model class from
|
|
5
|
+
config.json, not the path
|
|
6
|
+
|
|
7
|
+
convert_hf_model_config chose the architecture, and for 29 branches the
|
|
8
|
+
whole config, from substrings of the model name. A local checkpoint's
|
|
9
|
+
directory name is arbitrary: a fine-tuned "meta-llama-Llama-3.2-1B_sft"
|
|
10
|
+
folder loaded with base Llama-3.2-1B's hard-coded config and never read
|
|
11
|
+
its own config.json, and other Llama-named folders crashed on
|
|
12
|
+
hf_config=None. For a local directory with a config.json, the chain now
|
|
13
|
+
sees an empty name, so the architecture comes from config.json and only
|
|
14
|
+
architecture-keyed branches match (Llama: the generic LlamaForCausalLM
|
|
15
|
+
branch). get_pretrained_state_dict picks a local checkpoint's model class
|
|
16
|
+
from its architecture instead of "bert" / "t5" / "hubert" / "wav2vec2" in
|
|
17
|
+
the path. Hub names are unchanged.
|
|
18
|
+
---
|
|
19
|
+
transformer_lens/loading_from_pretrained.py | 34 ++++++++++++++++-----
|
|
20
|
+
1 file changed, 27 insertions(+), 7 deletions(-)
|
|
21
|
+
|
|
22
|
+
diff --git a/transformer_lens/loading_from_pretrained.py b/transformer_lens/loading_from_pretrained.py
|
|
23
|
+
index 1f80721..bd33dd8 100644
|
|
24
|
+
--- a/transformer_lens/loading_from_pretrained.py
|
|
25
|
+
+++ b/transformer_lens/loading_from_pretrained.py
|
|
26
|
+
@@ -151,6 +151,11 @@ def get_official_model_name(model_name: str) -> str:
|
|
27
|
+
return official_model_name
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
+# Patch 0007: local checkpoints take their config and model class from
|
|
31
|
+
+# config.json, never from their path name. Read by circuitkit.load_model.
|
|
32
|
+
+LOCAL_CHECKPOINTS_FROM_CONFIG = True
|
|
33
|
+
+
|
|
34
|
+
+
|
|
35
|
+
def convert_hf_model_config(model_name: str, **kwargs: Any) -> dict[str, Any]:
|
|
36
|
+
"""
|
|
37
|
+
Returns the model config for a HuggingFace model, converted to a dictionary
|
|
38
|
+
@@ -159,12 +164,21 @@ def convert_hf_model_config(model_name: str, **kwargs: Any) -> dict[str, Any]:
|
|
39
|
+
Takes the official_model_name as an input.
|
|
40
|
+
"""
|
|
41
|
+
# In case the user passed in an alias
|
|
42
|
+
- if (Path(model_name) / "config.json").exists():
|
|
43
|
+
+ is_local = (Path(model_name) / "config.json").exists()
|
|
44
|
+
+ if is_local:
|
|
45
|
+
logging.info("Loading model config from local directory")
|
|
46
|
+
official_model_name = model_name
|
|
47
|
+
else:
|
|
48
|
+
official_model_name = get_official_model_name(model_name)
|
|
49
|
+
|
|
50
|
+
+ # A local checkpoint is described by its config.json alone. Its directory
|
|
51
|
+
+ # name says nothing reliable (a fine-tuned "meta-llama-Llama-3.2-1B_sft"
|
|
52
|
+
+ # folder is not base Llama-3.2-1B), so no branch below may match on it:
|
|
53
|
+
+ # they see an empty name until the chain is done.
|
|
54
|
+
+ checkpoint_name = official_model_name
|
|
55
|
+
+ if is_local:
|
|
56
|
+
+ official_model_name = ""
|
|
57
|
+
+
|
|
58
|
+
# Load HuggingFace model config. Stays None on the name-based branches
|
|
59
|
+
# below, which infer the architecture from the model name and never fetch.
|
|
60
|
+
hf_config: Any = None
|
|
61
|
+
@@ -194,7 +208,7 @@ def convert_hf_model_config(model_name: str, **kwargs: Any) -> dict[str, Any]:
|
|
62
|
+
else:
|
|
63
|
+
huggingface_token = os.environ.get("HF_TOKEN", "")
|
|
64
|
+
hf_config = AutoConfig.from_pretrained(
|
|
65
|
+
- official_model_name,
|
|
66
|
+
+ checkpoint_name,
|
|
67
|
+
token=huggingface_token if len(huggingface_token) > 0 else None,
|
|
68
|
+
**kwargs,
|
|
69
|
+
)
|
|
70
|
+
@@ -1841,6 +1855,7 @@ def convert_hf_model_config(model_name: str, **kwargs: Any) -> dict[str, Any]:
|
|
71
|
+
}
|
|
72
|
+
else:
|
|
73
|
+
raise NotImplementedError(f"{architecture} is not currently supported.")
|
|
74
|
+
+ official_model_name = checkpoint_name
|
|
75
|
+
# All of these models use LayerNorm
|
|
76
|
+
cfg_dict["original_architecture"] = architecture
|
|
77
|
+
# Carried on the cfg so the loader can act on the quantization without a
|
|
78
|
+
@@ -2213,11 +2228,16 @@ def get_pretrained_state_dict(
|
|
79
|
+
if "torch_dtype" in kwargs:
|
|
80
|
+
dtype = kwargs["torch_dtype"]
|
|
81
|
+
del kwargs["torch_dtype"]
|
|
82
|
+
- if Path(official_model_name).exists():
|
|
83
|
+
+ is_local = Path(official_model_name).exists()
|
|
84
|
+
+ if is_local:
|
|
85
|
+
official_model_name = str(Path(official_model_name).resolve())
|
|
86
|
+
logging.info(f"Loading model from local path {official_model_name}")
|
|
87
|
+
else:
|
|
88
|
+
official_model_name = get_official_model_name(official_model_name)
|
|
89
|
+
+ # The model classes below are chosen by name for Hub models; a local
|
|
90
|
+
+ # checkpoint's path can contain "bert" or "t5" by chance, so use its
|
|
91
|
+
+ # architecture (e.g. "T5ForConditionalGeneration") instead.
|
|
92
|
+
+ class_key = (cfg.original_architecture or "").lower() if is_local else official_model_name
|
|
93
|
+
if official_model_name.startswith(NEED_REMOTE_CODE_MODELS) and not kwargs.get(
|
|
94
|
+
"trust_remote_code", False
|
|
95
|
+
):
|
|
96
|
+
@@ -2275,28 +2295,28 @@ def get_pretrained_state_dict(
|
|
97
|
+
huggingface_token = os.environ.get("HF_TOKEN", "")
|
|
98
|
+
if official_model_name in NON_HF_HOSTED_MODEL_NAMES:
|
|
99
|
+
raise NotImplementedError("Model not hosted on HuggingFace, must pass in hf_model")
|
|
100
|
+
- elif "hubert" in official_model_name:
|
|
101
|
+
+ elif "hubert" in class_key:
|
|
102
|
+
hf_model = HubertModel.from_pretrained(
|
|
103
|
+
official_model_name,
|
|
104
|
+
dtype=dtype,
|
|
105
|
+
token=huggingface_token if len(huggingface_token) > 0 else None,
|
|
106
|
+
**kwargs,
|
|
107
|
+
)
|
|
108
|
+
- elif "wav2vec2" in official_model_name:
|
|
109
|
+
+ elif "wav2vec2" in class_key:
|
|
110
|
+
hf_model = Wav2Vec2Model.from_pretrained(
|
|
111
|
+
official_model_name,
|
|
112
|
+
dtype=dtype,
|
|
113
|
+
token=huggingface_token if len(huggingface_token) > 0 else None,
|
|
114
|
+
**kwargs,
|
|
115
|
+
)
|
|
116
|
+
- elif "bert" in official_model_name:
|
|
117
|
+
+ elif "bert" in class_key:
|
|
118
|
+
hf_model = BertForPreTraining.from_pretrained(
|
|
119
|
+
official_model_name,
|
|
120
|
+
dtype=dtype,
|
|
121
|
+
token=huggingface_token if len(huggingface_token) > 0 else None,
|
|
122
|
+
**kwargs,
|
|
123
|
+
)
|
|
124
|
+
- elif "t5" in official_model_name:
|
|
125
|
+
+ elif "t5" in class_key:
|
|
126
|
+
hf_model = T5ForConditionalGeneration.from_pretrained(
|
|
127
|
+
official_model_name,
|
|
128
|
+
dtype=dtype,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
2
|
+
From: Pratinav Seth <pratinav.seth@lexsi.ai>
|
|
3
|
+
Date: Sat, 10 Oct 2026 12:00:00 +0530
|
|
4
|
+
Subject: [PATCH] neox: read the unembedding from lm_head when embed_out is gone
|
|
5
|
+
|
|
6
|
+
transformers renamed GPTNeoXForCausalLM.embed_out to lm_head (TransformerLens
|
|
7
|
+
reports the change at 5.13 in one place and 5.14 in another). 3.8.0 reads
|
|
8
|
+
embed_out only, so every GPT-NeoX / Pythia checkpoint fails in
|
|
9
|
+
convert_neox_weights with AttributeError on the transformers versions CircuitKIT
|
|
10
|
+
requires (>=5.15). Same change as the HookedTransformer half of the upstream fix
|
|
11
|
+
released in 3.9.0; hasattr-based, so it does not depend on the exact version.
|
|
12
|
+
|
|
13
|
+
diff --git a/transformer_lens/pretrained/weight_conversions/neox.py b/transformer_lens/pretrained/weight_conversions/neox.py
|
|
14
|
+
index 70d8a6b..76827ed 100644
|
|
15
|
+
--- a/transformer_lens/pretrained/weight_conversions/neox.py
|
|
16
|
+
+++ b/transformer_lens/pretrained/weight_conversions/neox.py
|
|
17
|
+
@@ -54,6 +54,9 @@ def convert_neox_weights(neox, cfg: HookedTransformerConfig):
|
|
18
|
+
state_dict["ln_final.w"] = neox.gpt_neox.final_layer_norm.weight
|
|
19
|
+
state_dict["ln_final.b"] = neox.gpt_neox.final_layer_norm.bias
|
|
20
|
+
|
|
21
|
+
- state_dict["unembed.W_U"] = neox.embed_out.weight.T
|
|
22
|
+
+ # transformers renamed GPTNeoXForCausalLM.embed_out to lm_head (5.13/5.14);
|
|
23
|
+
+ # read whichever the installed transformers exposes.
|
|
24
|
+
+ unembed = neox.lm_head if hasattr(neox, "lm_head") else neox.embed_out
|
|
25
|
+
+ state_dict["unembed.W_U"] = unembed.weight.T
|
|
26
|
+
state_dict["unembed.b_U"] = torch.zeros(cfg.d_vocab, dtype=cfg.dtype)
|
|
27
|
+
return state_dict
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"""Apply CircuitKIT's TransformerLens patch series at import time.
|
|
2
2
|
|
|
3
3
|
The ``*.patch`` files in this directory add Gemma-4, Sarvam-MoE and Cohere support
|
|
4
|
-
to ``transformer-lens==3.8.0``
|
|
4
|
+
to ``transformer-lens==3.8.0`` and fix local-checkpoint and GPT-NeoX / Pythia loading
|
|
5
|
+
(see README.md here). :func:`install` puts an import
|
|
5
6
|
hook on ``sys.meta_path`` that serves each patched ``transformer_lens`` module from
|
|
6
7
|
its installed source with the series applied in memory. Nothing on disk changes,
|
|
7
8
|
so ``pip install circuitkit`` needs no extra step. ``import circuitkit`` installs
|
|
@@ -6,7 +6,7 @@ from contextlib import ExitStack, contextmanager
|
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
from functools import partial
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
|
10
10
|
|
|
11
11
|
import torch as t
|
|
12
12
|
|
|
@@ -878,6 +878,64 @@ def _build_artifact_stem(config: Dict[str, Any]) -> str:
|
|
|
878
878
|
return "_".join(str(p) for p in parts)
|
|
879
879
|
|
|
880
880
|
|
|
881
|
+
def _flatten_ib_neuron_scores(
|
|
882
|
+
neuron_scores: Dict[str, Any],
|
|
883
|
+
) -> Tuple[List[Tuple[float, Tuple[str, int, Any, int]]], Dict[str, float], Dict[str, int]]:
|
|
884
|
+
"""Flatten IBCircuit per-neuron scores for pruning, node scores and graph metadata.
|
|
885
|
+
|
|
886
|
+
One pass over the scores yields everything the IBCircuit neuron branch of
|
|
887
|
+
:func:`discover_circuit` needs, so no tensor is read twice.
|
|
888
|
+
|
|
889
|
+
Args:
|
|
890
|
+
neuron_scores: ``{component name: 1-D score tensor}`` (values are read with
|
|
891
|
+
``len`` and iteration, so any 1-D sequence of tensors works) with names
|
|
892
|
+
``A{layer}.{head}`` and ``MLP {layer}``, as returned by
|
|
893
|
+
``IBHookedTransformer.extract_neuron_scores``. Other names are skipped.
|
|
894
|
+
|
|
895
|
+
Returns:
|
|
896
|
+
A tuple ``(entries, node_scores, neurons_per_kind)``:
|
|
897
|
+
|
|
898
|
+
* ``entries``: one ``(abs score, (kind, layer, head, neuron index))`` per
|
|
899
|
+
neuron, with ``kind`` ``"attn"`` or ``"mlp"`` and ``head`` ``None`` for MLPs.
|
|
900
|
+
* ``node_scores``: the largest absolute neuron score per component, the
|
|
901
|
+
same shape node-level discovery writes, so ``Circuit.from_artifact``
|
|
902
|
+
and ``Circuit.plot`` can use it.
|
|
903
|
+
* ``neurons_per_kind``: ``neurons_per_head`` / ``neurons_per_mlp`` when
|
|
904
|
+
every component of that kind has the same neuron count. A kind whose
|
|
905
|
+
sizes differ (or that is absent) gets no key, so the graph treats no
|
|
906
|
+
component of it as pruned rather than guessing.
|
|
907
|
+
"""
|
|
908
|
+
entries: List[Tuple[float, Tuple[str, int, Any, int]]] = []
|
|
909
|
+
node_scores: Dict[str, float] = {}
|
|
910
|
+
sizes: Dict[str, set] = {"neurons_per_head": set(), "neurons_per_mlp": set()}
|
|
911
|
+
|
|
912
|
+
for ib_name, score_tensor in neuron_scores.items():
|
|
913
|
+
attn_match = re.match(r"A(\d+)\.(\d+)$", ib_name)
|
|
914
|
+
mlp_match = re.match(r"MLP (\d+)$", ib_name)
|
|
915
|
+
if attn_match:
|
|
916
|
+
entry_key: Tuple[str, int, Any] = (
|
|
917
|
+
"attn",
|
|
918
|
+
int(attn_match.group(1)),
|
|
919
|
+
int(attn_match.group(2)),
|
|
920
|
+
)
|
|
921
|
+
sizes["neurons_per_head"].add(len(score_tensor))
|
|
922
|
+
elif mlp_match:
|
|
923
|
+
entry_key = ("mlp", int(mlp_match.group(1)), None)
|
|
924
|
+
sizes["neurons_per_mlp"].add(len(score_tensor))
|
|
925
|
+
else:
|
|
926
|
+
continue
|
|
927
|
+
top = float("-inf")
|
|
928
|
+
for neuron_idx, score in enumerate(score_tensor):
|
|
929
|
+
abs_score = abs(score.item())
|
|
930
|
+
entries.append((abs_score, (*entry_key, neuron_idx)))
|
|
931
|
+
top = max(top, abs_score)
|
|
932
|
+
if top != float("-inf"):
|
|
933
|
+
node_scores[ib_name] = top
|
|
934
|
+
|
|
935
|
+
neurons_per_kind = {k: next(iter(v)) for k, v in sizes.items() if len(v) == 1}
|
|
936
|
+
return entries, node_scores, neurons_per_kind
|
|
937
|
+
|
|
938
|
+
|
|
881
939
|
def _save_artifact(
|
|
882
940
|
data: Any, output_path: str, suffix: str, logger, config: Dict = None
|
|
883
941
|
) -> Optional[str]:
|
|
@@ -1522,8 +1580,17 @@ def discover_circuit( # noqa: C901 - complex function, refactor out of scope fo
|
|
|
1522
1580
|
pruned_attn_neurons = defaultdict(list)
|
|
1523
1581
|
|
|
1524
1582
|
all_neuron_scores = []
|
|
1583
|
+
# Neurons per component, for the circuit graph: a component
|
|
1584
|
+
# counts as pruned only when all of them were. Constant per
|
|
1585
|
+
# kind (set by the model config), so one number each.
|
|
1586
|
+
neurons_per_mlp: Optional[int] = None
|
|
1587
|
+
neurons_per_head: Optional[int] = None
|
|
1525
1588
|
for node in tqdm(graph.nodes.values(), desc="Extracting neuron scores"):
|
|
1526
1589
|
if isinstance(node, (MLPNode, AttentionNode)):
|
|
1590
|
+
if isinstance(node, MLPNode):
|
|
1591
|
+
neurons_per_mlp = node.d_neuron
|
|
1592
|
+
else:
|
|
1593
|
+
neurons_per_head = node.d_neuron
|
|
1527
1594
|
# Filter by scope
|
|
1528
1595
|
if effective_scope == "mlp" and not isinstance(node, MLPNode):
|
|
1529
1596
|
continue
|
|
@@ -1575,13 +1642,18 @@ def discover_circuit( # noqa: C901 - complex function, refactor out of scope fo
|
|
|
1575
1642
|
(int(attn_match.group(1)), int(attn_match.group(2)))
|
|
1576
1643
|
].append(neuron_idx)
|
|
1577
1644
|
|
|
1645
|
+
result_meta: Dict[str, Any] = {
|
|
1646
|
+
"mlp_hook": discovery_cfg.get("mlp_hook", "mlp_out"),
|
|
1647
|
+
"heads_hook": "attn.hook_result", # EAP uses attn.hook_result for heads
|
|
1648
|
+
}
|
|
1649
|
+
if neurons_per_mlp is not None:
|
|
1650
|
+
result_meta["neurons_per_mlp"] = neurons_per_mlp
|
|
1651
|
+
if neurons_per_head is not None:
|
|
1652
|
+
result_meta["neurons_per_head"] = neurons_per_head
|
|
1578
1653
|
result = {
|
|
1579
1654
|
"mlp": dict(pruned_mlp_neurons),
|
|
1580
1655
|
"heads": dict(pruned_attn_neurons),
|
|
1581
|
-
"_meta":
|
|
1582
|
-
"mlp_hook": discovery_cfg.get("mlp_hook", "mlp_out"),
|
|
1583
|
-
"heads_hook": "attn.hook_result", # EAP uses attn.hook_result for heads
|
|
1584
|
-
},
|
|
1656
|
+
"_meta": result_meta,
|
|
1585
1657
|
}
|
|
1586
1658
|
if config.get("output_path"):
|
|
1587
1659
|
os.makedirs(os.path.dirname(config["output_path"]), exist_ok=True)
|
|
@@ -1590,6 +1662,10 @@ def discover_circuit( # noqa: C901 - complex function, refactor out of scope fo
|
|
|
1590
1662
|
_save_artifact(
|
|
1591
1663
|
{
|
|
1592
1664
|
"algo": algo,
|
|
1665
|
+
# Task and model, so Circuit.from_artifact can label a
|
|
1666
|
+
# neuron-level graph (there is no scores JSON here).
|
|
1667
|
+
"task": discovery_cfg["task"],
|
|
1668
|
+
"model": model_cfg["name"],
|
|
1593
1669
|
"level": "neuron",
|
|
1594
1670
|
"node_scores": node_scores,
|
|
1595
1671
|
"neurons_scores": graph.neurons_scores.cpu(),
|
|
@@ -1690,40 +1766,18 @@ def discover_circuit( # noqa: C901 - complex function, refactor out of scope fo
|
|
|
1690
1766
|
# save in the same format as EAP neuron so evaluate_circuit works.
|
|
1691
1767
|
pruned_mlp_neurons = defaultdict(list)
|
|
1692
1768
|
pruned_attn_neurons = defaultdict(list)
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
attn_match = re.match(r"A(\d+)\.(\d+)$", ib_name)
|
|
1697
|
-
mlp_match = re.match(r"MLP (\d+)$", ib_name)
|
|
1698
|
-
for neuron_idx, score in enumerate(score_tensor):
|
|
1699
|
-
if attn_match:
|
|
1700
|
-
all_neuron_scores.append(
|
|
1701
|
-
(
|
|
1702
|
-
abs(score.item()),
|
|
1703
|
-
(
|
|
1704
|
-
"attn",
|
|
1705
|
-
int(attn_match.group(1)),
|
|
1706
|
-
int(attn_match.group(2)),
|
|
1707
|
-
neuron_idx,
|
|
1708
|
-
),
|
|
1709
|
-
)
|
|
1710
|
-
)
|
|
1711
|
-
elif mlp_match:
|
|
1712
|
-
all_neuron_scores.append(
|
|
1713
|
-
(
|
|
1714
|
-
abs(score.item()),
|
|
1715
|
-
("mlp", int(mlp_match.group(1)), None, neuron_idx),
|
|
1716
|
-
)
|
|
1717
|
-
)
|
|
1769
|
+
ib_neuron_entries, ib_node_scores, neurons_per_kind = _flatten_ib_neuron_scores(
|
|
1770
|
+
node_scores
|
|
1771
|
+
)
|
|
1718
1772
|
|
|
1719
|
-
|
|
1720
|
-
n_to_prune = int(len(
|
|
1773
|
+
ib_neuron_entries.sort(key=lambda x: x[0]) # ascending: lowest = least important
|
|
1774
|
+
n_to_prune = int(len(ib_neuron_entries) * pruning_cfg["target_sparsity"])
|
|
1721
1775
|
|
|
1722
1776
|
logger.info(
|
|
1723
|
-
f"IBCircuit neuron discovery: {len(
|
|
1777
|
+
f"IBCircuit neuron discovery: {len(ib_neuron_entries)} total neurons, pruning {n_to_prune}"
|
|
1724
1778
|
)
|
|
1725
1779
|
|
|
1726
|
-
for _, (kind, layer, head, neuron_idx) in
|
|
1780
|
+
for _, (kind, layer, head, neuron_idx) in ib_neuron_entries[:n_to_prune]:
|
|
1727
1781
|
if kind == "mlp":
|
|
1728
1782
|
pruned_mlp_neurons[layer].append(neuron_idx)
|
|
1729
1783
|
else:
|
|
@@ -1732,15 +1786,22 @@ def discover_circuit( # noqa: C901 - complex function, refactor out of scope fo
|
|
|
1732
1786
|
result = {
|
|
1733
1787
|
"mlp": dict(pruned_mlp_neurons),
|
|
1734
1788
|
"heads": dict(pruned_attn_neurons),
|
|
1735
|
-
"_meta": {"mlp_hook": ib_config["mlp_hook"]},
|
|
1789
|
+
"_meta": {"mlp_hook": ib_config["mlp_hook"], **neurons_per_kind},
|
|
1736
1790
|
}
|
|
1737
1791
|
|
|
1738
1792
|
_save_artifact(
|
|
1739
1793
|
{
|
|
1740
1794
|
"algo": algo,
|
|
1795
|
+
"task": discovery_cfg["task"],
|
|
1796
|
+
"model": model_cfg["name"],
|
|
1741
1797
|
"level": "neuron",
|
|
1798
|
+
# Largest absolute neuron score per component, as the EAP
|
|
1799
|
+
# neuron branch writes, so Circuit.from_artifact gets
|
|
1800
|
+
# non-empty scores and the circuit graph can be drawn.
|
|
1801
|
+
"node_scores": ib_node_scores,
|
|
1742
1802
|
"neurons_scores": node_scores,
|
|
1743
|
-
"
|
|
1803
|
+
"mlp_hook": ib_config["mlp_hook"],
|
|
1804
|
+
"total_neurons": len(ib_neuron_entries),
|
|
1744
1805
|
},
|
|
1745
1806
|
config.get("output_path"),
|
|
1746
1807
|
"_scores",
|
|
@@ -383,8 +383,8 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
383
383
|
mdl = p.add_argument_group("model loading")
|
|
384
384
|
mdl.add_argument(
|
|
385
385
|
"--dtype",
|
|
386
|
-
default="
|
|
387
|
-
choices=["
|
|
386
|
+
default="bfloat16",
|
|
387
|
+
choices=["bfloat16", "float32"],
|
|
388
388
|
help="Model dtype for inference and training.",
|
|
389
389
|
)
|
|
390
390
|
mdl.add_argument(
|
|
@@ -365,7 +365,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
365
365
|
mdl.add_argument(
|
|
366
366
|
"--dtype",
|
|
367
367
|
default="bfloat16",
|
|
368
|
-
choices=["
|
|
368
|
+
choices=["bfloat16", "float32"],
|
|
369
369
|
help="Model dtype. Qwen models default to bfloat16.",
|
|
370
370
|
)
|
|
371
371
|
mdl.add_argument(
|
|
@@ -511,13 +511,15 @@ def run_finetuning(
|
|
|
511
511
|
eval_dataloader: Optional[DataLoader] = None,
|
|
512
512
|
eval_fn: Optional[Any] = None,
|
|
513
513
|
log_every: int = 10,
|
|
514
|
+
weight_decay: float = 0.01,
|
|
514
515
|
) -> Tuple[nn.Module, List[Dict[str, float]]]:
|
|
515
516
|
"""
|
|
516
517
|
Run selective gradient-masked finetuning.
|
|
517
518
|
|
|
518
519
|
Parameters
|
|
519
520
|
----------
|
|
520
|
-
model : HuggingFace CausalLM on `device
|
|
521
|
+
model : HuggingFace CausalLM on `device`, in float32 or
|
|
522
|
+
bfloat16. float16 raises ValueError (see below).
|
|
521
523
|
selection : SelectionResult controlling which params are trained.
|
|
522
524
|
finetune_dataloader : DataLoader from build_finetune_dataloader.
|
|
523
525
|
device : Training device.
|
|
@@ -530,6 +532,9 @@ def run_finetuning(
|
|
|
530
532
|
eval_fn : Optional callable(model, eval_dataloader) → Dict[str, float].
|
|
531
533
|
Called at the end of every epoch if provided.
|
|
532
534
|
log_every : Print training loss every N steps.
|
|
535
|
+
weight_decay : AdamW decoupled weight decay (0.01, the AdamW default).
|
|
536
|
+
For a masked parameter it is applied to the selected
|
|
537
|
+
entries only; masked-out entries are never changed.
|
|
533
538
|
|
|
534
539
|
Returns
|
|
535
540
|
-------
|
|
@@ -540,10 +545,38 @@ def run_finetuning(
|
|
|
540
545
|
-----
|
|
541
546
|
Hooks are always removed in a finally block. If training is interrupted
|
|
542
547
|
the model is left in its partially-trained state with requires_grad reset.
|
|
548
|
+
|
|
549
|
+
The weights are trained in their own dtype, with no float32 master copy.
|
|
550
|
+
AdamW cannot do that in float16: eps=1e-8 and the squared gradient of any
|
|
551
|
+
gradient below about 5e-3 round to 0, so the update is 0/0 or x/0 and those
|
|
552
|
+
weights become NaN/inf after the first step. A float16 model is therefore
|
|
553
|
+
rejected before anything is changed.
|
|
543
554
|
"""
|
|
555
|
+
if any(p.dtype == torch.float16 for p in model.parameters()):
|
|
556
|
+
raise ValueError(
|
|
557
|
+
"run_finetuning trains the weights in place with AdamW, which turns "
|
|
558
|
+
"float16 weights into NaN/inf after one step. Load the model in "
|
|
559
|
+
"torch.bfloat16 or torch.float32."
|
|
560
|
+
)
|
|
561
|
+
|
|
544
562
|
hook_handles, trainable_params, masks_dict = setup_selective_training(model, selection, device)
|
|
545
563
|
|
|
546
|
-
|
|
564
|
+
# AdamW's decoupled weight decay shrinks every entry of a parameter, including
|
|
565
|
+
# the masked-out entries whose gradient is zero. Masked parameters therefore
|
|
566
|
+
# get no decay from the optimiser; it is applied to their selected entries
|
|
567
|
+
# just before each step instead. The factor is kept in float32, as AdamW's
|
|
568
|
+
# scalar factor is, so half-precision weights decay by the same amount.
|
|
569
|
+
masked_params = [p for p in trainable_params if str(id(p)) in masks_dict]
|
|
570
|
+
decay_factors = [
|
|
571
|
+
1.0 - lr * weight_decay * masks_dict[str(id(p))].float() for p in masked_params
|
|
572
|
+
]
|
|
573
|
+
param_groups = [
|
|
574
|
+
{"params": [p for p in trainable_params if str(id(p)) not in masks_dict]},
|
|
575
|
+
{"params": masked_params, "weight_decay": 0.0},
|
|
576
|
+
]
|
|
577
|
+
optimiser = torch.optim.AdamW(
|
|
578
|
+
[g for g in param_groups if g["params"]], lr=lr, weight_decay=weight_decay
|
|
579
|
+
)
|
|
547
580
|
epoch_logs: List[Dict[str, float]] = []
|
|
548
581
|
verified = False
|
|
549
582
|
|
|
@@ -605,6 +638,11 @@ def run_finetuning(
|
|
|
605
638
|
# during backward, so masks are applied before clipping acts
|
|
606
639
|
# on the masked gradients.
|
|
607
640
|
torch.nn.utils.clip_grad_norm_(trainable_params, max_grad_norm)
|
|
641
|
+
if weight_decay:
|
|
642
|
+
with torch.no_grad():
|
|
643
|
+
for param, factor in zip(masked_params, decay_factors):
|
|
644
|
+
if param.grad is not None:
|
|
645
|
+
param.mul_(factor)
|
|
608
646
|
optimiser.step()
|
|
609
647
|
|
|
610
648
|
epoch_loss += loss.item()
|