attacklm 0.5.1__tar.gz → 0.5.2__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.
- {attacklm-0.5.1 → attacklm-0.5.2}/PKG-INFO +42 -31
- {attacklm-0.5.1 → attacklm-0.5.2}/README.md +41 -30
- attacklm-0.5.2/src/attacklm/__version__.py +1 -0
- attacklm-0.5.1/src/attacklm/__version__.py +0 -1
- {attacklm-0.5.1 → attacklm-0.5.2}/.github/workflows/release.yml +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/.gitignore +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/ATTRIBUTION.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/CHANGELOG.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/CONTRIBUTING.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/EVALUATION.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/LICENSE +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/MANIFEST.in +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/Makefile +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/NOTICE +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/QA_BEFORE_RELEASES.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/REPLAY_PLAN.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/ATTRIBUTION.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/LEGAL.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/REMOVAL.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/bench/questions.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/bench/speed_context.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/ATTRIBUTION.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/GEMINI_RESEARCH_2026-06-11.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/acquisition_report.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/manifest.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/README.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/_index.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/collection/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/discovery/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/execution/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/exfiltration/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/persistence/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/orchestrator/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/azure-pyrit/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/azure-pyrit/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/cyberark-fuzzyai/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/cyberark-fuzzyai/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/elastic-rules/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/elastic-rules/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/cloud/attacks/data_llm.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/ics/attacks/data_llm.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/social_engineering/phishing/data_llm.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/wireless/attacks/data_llm.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/collection/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/credential_access/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/defense_evasion/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/discovery/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/execution/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/lateral_movement/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/persistence/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/privilege_escalation/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/tools/metasploit/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/base/discovery/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/collection/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/discovery/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/execution/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/exfiltration/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/persistence/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mordor/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mordor/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nist-ir/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nist-ir/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/ai/jailbreaking/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/ai/prompt-injection/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/ai/prompt-injection/data.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_code.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_conversation.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_factual.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_reasoning.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/sigma-hq/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/sigma-hq/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/splunk-content/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/splunk-content/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/golden/prompts.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/reference/prompts.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/opsec_aware.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/opsec_unaware.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/succinct.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/verbose.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/experiments/README.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/experiments/synthetic_dataset_mutator_evol_instruct.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/.gitattributes +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/README.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/data/manifest.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/dataset_infos.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/scripts/build_hf_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hf/scripts/push_to_hf.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/.gitkeep +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/hpo_state.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/hpo_trial_dataset.jsonl +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/logs/.gitkeep +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/notes/BLUE_TEAM_DESIGN_v0.5.0.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/notes/EVAL_DESIGN_v0.4.0.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/notes/STEERING_REVIEW_v0.4.0.md +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/presets/blue-team.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/presets/purple-team.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/presets/red-team.json +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/pyproject.toml +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/requirements.txt +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/_eval_loader.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_cloud_attack_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_ics_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_phishing_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_red_team_tactics.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_replay_general.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_supply_chain_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_web_attack_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_wireless_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/add_attribution.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/audit_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/augment_attribution.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/balance_buckets.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/bucket_loader.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/build.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/classify_unrouted_modules.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/clone_repos.sh +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/collect_reference.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/compare_scores.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/convert_to_gguf.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/dedupe_and_import_llm.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/demo.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/device_utils.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/domain_bench.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/eval_retention.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_ai_tools_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_atomic_red_team_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_by_tactic.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_caldera_plugins_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_elastic_rules.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_infection_monkey_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_mordor.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_nist_ir.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_rta_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_sigma_defensive.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_splunk_content.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_threathunter_playbook.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_dataset_deterministic.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_hybrid_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_metasploit_dataset.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_orchestrator.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_prompt_injection.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_source_layout.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_synthetic_scarce.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/golden_vectors.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/hpo_runner.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/import_gguf.sh +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/import_to_lmstudio.sh +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/infer.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/init_pipeline.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/llm_generate_wrapper.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/merge_adapter.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/migrate_buckets_to_v021.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/migrate_v015_to_v020.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/mitre_tactic_lookup.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/parse_metasploit_to_jsonl.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/rebuild_manifest.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/register_ollama.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/reorganize_buckets.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/replay_mixer.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/run_all_acquisitions.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/score_candidates.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/scrub_bpl_callback.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/setup_buckets.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/speed_bench.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/stamp_and_reorg.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/steering.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/train_all.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/train_template.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/scripts/validate_per_category.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/src/attacklm/__init__.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/src/attacklm/cli.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_balance_buckets.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_collect_reference.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_compare_scores.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_domain_bench.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_eval_loader.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_eval_retention.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_golden_vectors.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_init_pipeline.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_replay_mixer.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_score_candidates.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_speed_bench.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_steering.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_thinking_models.py +0 -0
- {attacklm-0.5.1 → attacklm-0.5.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: attacklm
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: QLoRA-fine-tuned Qwen2.5-Coder for offensive/defensive security and AI red-teaming
|
|
5
5
|
Project-URL: Homepage, https://github.com/Veedubin/AttackLM
|
|
6
6
|
Project-URL: Repository, https://github.com/Veedubin/AttackLM
|
|
@@ -211,6 +211,7 @@ Description-Content-Type: text/markdown
|
|
|
211
211
|
> 21,865 training pairs · 3B–70B Qwen base · 16GB–128GB VRAM.
|
|
212
212
|
|
|
213
213
|
[](LICENSE)
|
|
214
|
+
[](https://pypi.org/project/attacklm/)
|
|
214
215
|
[](ATTRIBUTION.md)
|
|
215
216
|
[](requirements.txt)
|
|
216
217
|
[](https://huggingface.co/unsloth/Qwen2.5-Coder-3B-Instruct-bnb-4bit)
|
|
@@ -270,53 +271,52 @@ The full per-source map:
|
|
|
270
271
|
|
|
271
272
|
---
|
|
272
273
|
|
|
273
|
-
## Quickstart
|
|
274
|
+
## Quickstart
|
|
275
|
+
|
|
276
|
+
### Option A: Install from PyPI (fastest — 30 seconds)
|
|
274
277
|
|
|
275
278
|
```bash
|
|
276
279
|
# 1. Install uv (Python package manager, ~10MB)
|
|
277
280
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
278
281
|
|
|
279
|
-
# 2.
|
|
282
|
+
# 2. Install AttackLM from PyPI with the full CUDA training stack
|
|
283
|
+
uv pip install "attacklm[all]"
|
|
284
|
+
|
|
285
|
+
# 3. Clone the repo for the training data (the PyPI package is code-only)
|
|
280
286
|
git clone https://github.com/Veedubin/AttackLM.git
|
|
281
287
|
cd AttackLM
|
|
282
288
|
|
|
283
|
-
#
|
|
284
|
-
|
|
285
|
-
uv pip install -e ".[all]"
|
|
289
|
+
# 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
|
|
290
|
+
attacklm-init --yes
|
|
286
291
|
|
|
287
|
-
#
|
|
288
|
-
|
|
292
|
+
# 5. Train
|
|
293
|
+
attacklm-train-all --single-model \
|
|
294
|
+
--dataset base/ \
|
|
295
|
+
--base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
|
|
296
|
+
--epochs 5 --max-length 2048
|
|
297
|
+
```
|
|
289
298
|
|
|
290
|
-
|
|
291
|
-
# uv sync
|
|
299
|
+
### Option B: Install from source (if you want to modify the code)
|
|
292
300
|
|
|
293
|
-
|
|
301
|
+
```bash
|
|
302
|
+
# 1. Install uv
|
|
303
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
304
|
+
|
|
305
|
+
# 2. Clone this repo
|
|
306
|
+
git clone https://github.com/Veedubin/AttackLM.git
|
|
307
|
+
cd AttackLM
|
|
308
|
+
|
|
309
|
+
# 3. Install as an editable Python package (gets you all `attacklm-*` commands)
|
|
310
|
+
uv pip install -e ".[all]"
|
|
311
|
+
|
|
312
|
+
# 4. Initialize the dataset
|
|
294
313
|
attacklm-init --yes
|
|
295
314
|
|
|
296
|
-
#
|
|
297
|
-
# run each step individually, the four commands are still available:
|
|
298
|
-
#
|
|
299
|
-
# 4. Clone upstream data sources (~1.5GB total, optional — data is in the repo)
|
|
300
|
-
# attacklm-clone
|
|
301
|
-
#
|
|
302
|
-
# 5. Extract training data from each source
|
|
303
|
-
# attacklm-extract
|
|
304
|
-
#
|
|
305
|
-
# 6. Augment each JSONL with per-pair source/license attribution
|
|
306
|
-
# attacklm-attribute
|
|
307
|
-
#
|
|
308
|
-
# 7. Organize into 16 MITRE/AI/tools buckets
|
|
309
|
-
# attacklm-buckets
|
|
310
|
-
|
|
311
|
-
# 8. Pick a base model — use an uncensored/abliterated one (see "Pick a base model" below)
|
|
312
|
-
# Example: Qwen2.5-Coder-3B-Instruct with refusal direction removed
|
|
313
|
-
# v0.2.0+ uses --dataset (multi-positional) instead of --include-tools etc.
|
|
315
|
+
# 5. Train
|
|
314
316
|
attacklm-train-all --single-model \
|
|
315
317
|
--dataset base/ \
|
|
316
318
|
--base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
|
|
317
319
|
--epochs 5 --max-length 2048
|
|
318
|
-
|
|
319
|
-
# Optional: add --hpo for automatic lora_r / lora_dropout sweep
|
|
320
320
|
```
|
|
321
321
|
|
|
322
322
|
The trained LoRA adapter lands in `models/attacklm-single_<TIMESTAMP>/`
|
|
@@ -337,6 +337,17 @@ The project ships as a **proper Python package** (`pyproject.toml`,
|
|
|
337
337
|
`src/attacklm/` layout, hatchling build backend) so users don't have to
|
|
338
338
|
build anything by hand.
|
|
339
339
|
|
|
340
|
+
**Install from PyPI (recommended):**
|
|
341
|
+
```bash
|
|
342
|
+
uv pip install "attacklm[all]" # CUDA training stack
|
|
343
|
+
uv pip install "attacklm[all-rocm]" # ROCm training stack
|
|
344
|
+
uv pip install "attacklm[infer]" # CPU / Apple Silicon (inference only)
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
|
|
348
|
+
|
|
349
|
+
**Install from source** (editable, for development):
|
|
350
|
+
|
|
340
351
|
There are **two GPU stacks** — pick the one for your hardware.
|
|
341
352
|
|
|
342
353
|
---
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
> 21,865 training pairs · 3B–70B Qwen base · 16GB–128GB VRAM.
|
|
5
5
|
|
|
6
6
|
[](LICENSE)
|
|
7
|
+
[](https://pypi.org/project/attacklm/)
|
|
7
8
|
[](ATTRIBUTION.md)
|
|
8
9
|
[](requirements.txt)
|
|
9
10
|
[](https://huggingface.co/unsloth/Qwen2.5-Coder-3B-Instruct-bnb-4bit)
|
|
@@ -63,53 +64,52 @@ The full per-source map:
|
|
|
63
64
|
|
|
64
65
|
---
|
|
65
66
|
|
|
66
|
-
## Quickstart
|
|
67
|
+
## Quickstart
|
|
68
|
+
|
|
69
|
+
### Option A: Install from PyPI (fastest — 30 seconds)
|
|
67
70
|
|
|
68
71
|
```bash
|
|
69
72
|
# 1. Install uv (Python package manager, ~10MB)
|
|
70
73
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
71
74
|
|
|
72
|
-
# 2.
|
|
75
|
+
# 2. Install AttackLM from PyPI with the full CUDA training stack
|
|
76
|
+
uv pip install "attacklm[all]"
|
|
77
|
+
|
|
78
|
+
# 3. Clone the repo for the training data (the PyPI package is code-only)
|
|
73
79
|
git clone https://github.com/Veedubin/AttackLM.git
|
|
74
80
|
cd AttackLM
|
|
75
81
|
|
|
76
|
-
#
|
|
77
|
-
|
|
78
|
-
uv pip install -e ".[all]"
|
|
82
|
+
# 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
|
|
83
|
+
attacklm-init --yes
|
|
79
84
|
|
|
80
|
-
#
|
|
81
|
-
|
|
85
|
+
# 5. Train
|
|
86
|
+
attacklm-train-all --single-model \
|
|
87
|
+
--dataset base/ \
|
|
88
|
+
--base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
|
|
89
|
+
--epochs 5 --max-length 2048
|
|
90
|
+
```
|
|
82
91
|
|
|
83
|
-
|
|
84
|
-
# uv sync
|
|
92
|
+
### Option B: Install from source (if you want to modify the code)
|
|
85
93
|
|
|
86
|
-
|
|
94
|
+
```bash
|
|
95
|
+
# 1. Install uv
|
|
96
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
97
|
+
|
|
98
|
+
# 2. Clone this repo
|
|
99
|
+
git clone https://github.com/Veedubin/AttackLM.git
|
|
100
|
+
cd AttackLM
|
|
101
|
+
|
|
102
|
+
# 3. Install as an editable Python package (gets you all `attacklm-*` commands)
|
|
103
|
+
uv pip install -e ".[all]"
|
|
104
|
+
|
|
105
|
+
# 4. Initialize the dataset
|
|
87
106
|
attacklm-init --yes
|
|
88
107
|
|
|
89
|
-
#
|
|
90
|
-
# run each step individually, the four commands are still available:
|
|
91
|
-
#
|
|
92
|
-
# 4. Clone upstream data sources (~1.5GB total, optional — data is in the repo)
|
|
93
|
-
# attacklm-clone
|
|
94
|
-
#
|
|
95
|
-
# 5. Extract training data from each source
|
|
96
|
-
# attacklm-extract
|
|
97
|
-
#
|
|
98
|
-
# 6. Augment each JSONL with per-pair source/license attribution
|
|
99
|
-
# attacklm-attribute
|
|
100
|
-
#
|
|
101
|
-
# 7. Organize into 16 MITRE/AI/tools buckets
|
|
102
|
-
# attacklm-buckets
|
|
103
|
-
|
|
104
|
-
# 8. Pick a base model — use an uncensored/abliterated one (see "Pick a base model" below)
|
|
105
|
-
# Example: Qwen2.5-Coder-3B-Instruct with refusal direction removed
|
|
106
|
-
# v0.2.0+ uses --dataset (multi-positional) instead of --include-tools etc.
|
|
108
|
+
# 5. Train
|
|
107
109
|
attacklm-train-all --single-model \
|
|
108
110
|
--dataset base/ \
|
|
109
111
|
--base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
|
|
110
112
|
--epochs 5 --max-length 2048
|
|
111
|
-
|
|
112
|
-
# Optional: add --hpo for automatic lora_r / lora_dropout sweep
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
The trained LoRA adapter lands in `models/attacklm-single_<TIMESTAMP>/`
|
|
@@ -130,6 +130,17 @@ The project ships as a **proper Python package** (`pyproject.toml`,
|
|
|
130
130
|
`src/attacklm/` layout, hatchling build backend) so users don't have to
|
|
131
131
|
build anything by hand.
|
|
132
132
|
|
|
133
|
+
**Install from PyPI (recommended):**
|
|
134
|
+
```bash
|
|
135
|
+
uv pip install "attacklm[all]" # CUDA training stack
|
|
136
|
+
uv pip install "attacklm[all-rocm]" # ROCm training stack
|
|
137
|
+
uv pip install "attacklm[infer]" # CPU / Apple Silicon (inference only)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
|
|
141
|
+
|
|
142
|
+
**Install from source** (editable, for development):
|
|
143
|
+
|
|
133
144
|
There are **two GPU stacks** — pick the one for your hardware.
|
|
134
145
|
|
|
135
146
|
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.5.2"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.5.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md
RENAMED
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md
RENAMED
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md
RENAMED
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md
RENAMED
|
File without changes
|
{attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|