attacklm 0.5.7__tar.gz → 0.5.8__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.
Files changed (208) hide show
  1. {attacklm-0.5.7 → attacklm-0.5.8}/PKG-INFO +19 -34
  2. {attacklm-0.5.7 → attacklm-0.5.8}/README.md +18 -33
  3. attacklm-0.5.8/src/attacklm/__version__.py +1 -0
  4. attacklm-0.5.7/src/attacklm/__version__.py +0 -1
  5. {attacklm-0.5.7 → attacklm-0.5.8}/.github/workflows/release.yml +0 -0
  6. {attacklm-0.5.7 → attacklm-0.5.8}/.gitignore +0 -0
  7. {attacklm-0.5.7 → attacklm-0.5.8}/ATTRIBUTION.md +0 -0
  8. {attacklm-0.5.7 → attacklm-0.5.8}/CHANGELOG.md +0 -0
  9. {attacklm-0.5.7 → attacklm-0.5.8}/CONTRIBUTING.md +0 -0
  10. {attacklm-0.5.7 → attacklm-0.5.8}/EVALUATION.md +0 -0
  11. {attacklm-0.5.7 → attacklm-0.5.8}/LICENSE +0 -0
  12. {attacklm-0.5.7 → attacklm-0.5.8}/MANIFEST.in +0 -0
  13. {attacklm-0.5.7 → attacklm-0.5.8}/Makefile +0 -0
  14. {attacklm-0.5.7 → attacklm-0.5.8}/NOTICE +0 -0
  15. {attacklm-0.5.7 → attacklm-0.5.8}/QA_BEFORE_RELEASES.md +0 -0
  16. {attacklm-0.5.7 → attacklm-0.5.8}/REPLAY_PLAN.md +0 -0
  17. {attacklm-0.5.7 → attacklm-0.5.8}/data/ATTRIBUTION.md +0 -0
  18. {attacklm-0.5.7 → attacklm-0.5.8}/data/LEGAL.md +0 -0
  19. {attacklm-0.5.7 → attacklm-0.5.8}/data/REMOVAL.md +0 -0
  20. {attacklm-0.5.7 → attacklm-0.5.8}/data/bench/questions.jsonl +0 -0
  21. {attacklm-0.5.7 → attacklm-0.5.8}/data/bench/speed_context.txt +0 -0
  22. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/ATTRIBUTION.md +0 -0
  23. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/GEMINI_RESEARCH_2026-06-11.md +0 -0
  24. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/acquisition_report.json +0 -0
  25. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/manifest.json +0 -0
  26. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/README.md +0 -0
  27. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/_index.json +0 -0
  28. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/LICENSE.md +0 -0
  29. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/SOURCE.md +0 -0
  30. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/base/collection/data.jsonl +0 -0
  31. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/base/discovery/data.jsonl +0 -0
  32. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/base/execution/data.jsonl +0 -0
  33. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/base/exfiltration/data.jsonl +0 -0
  34. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/atomic-red-team/base/persistence/data.jsonl +0 -0
  35. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md +0 -0
  36. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md +0 -0
  37. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/attacklm-synthetic/orchestrator/data.jsonl +0 -0
  38. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/azure-pyrit/LICENSE.md +0 -0
  39. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/azure-pyrit/SOURCE.md +0 -0
  40. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/cyberark-fuzzyai/LICENSE.md +0 -0
  41. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/cyberark-fuzzyai/SOURCE.md +0 -0
  42. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/elastic-rules/LICENSE.md +0 -0
  43. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/elastic-rules/SOURCE.md +0 -0
  44. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/LICENSE.md +0 -0
  45. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/SOURCE.md +0 -0
  46. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/cloud/attacks/data_llm.jsonl +0 -0
  47. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/ics/attacks/data_llm.jsonl +0 -0
  48. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/social_engineering/phishing/data_llm.jsonl +0 -0
  49. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/llm-generated/wireless/attacks/data_llm.jsonl +0 -0
  50. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md +0 -0
  51. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md +0 -0
  52. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/collection/data.jsonl +0 -0
  53. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/credential_access/data.jsonl +0 -0
  54. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/defense_evasion/data.jsonl +0 -0
  55. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/discovery/data.jsonl +0 -0
  56. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/execution/data.jsonl +0 -0
  57. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/lateral_movement/data.jsonl +0 -0
  58. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/persistence/data.jsonl +0 -0
  59. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/base/privilege_escalation/data.jsonl +0 -0
  60. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/metasploit-framework/tools/metasploit/data.jsonl +0 -0
  61. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md +0 -0
  62. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md +0 -0
  63. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-atlas-arsenal/base/discovery/data.jsonl +0 -0
  64. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/LICENSE.md +0 -0
  65. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/SOURCE.md +0 -0
  66. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/base/collection/data.jsonl +0 -0
  67. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/base/discovery/data.jsonl +0 -0
  68. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/base/execution/data.jsonl +0 -0
  69. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/base/exfiltration/data.jsonl +0 -0
  70. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mitre-stockpile/base/persistence/data.jsonl +0 -0
  71. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mordor/LICENSE.md +0 -0
  72. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/mordor/SOURCE.md +0 -0
  73. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/nist-ir/LICENSE.md +0 -0
  74. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/nist-ir/SOURCE.md +0 -0
  75. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/nvidia-garak/LICENSE.md +0 -0
  76. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/nvidia-garak/SOURCE.md +0 -0
  77. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/nvidia-garak/ai/jailbreaking/data.jsonl +0 -0
  78. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptfoo/LICENSE.md +0 -0
  79. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptfoo/SOURCE.md +0 -0
  80. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptfoo/ai/prompt-injection/data.jsonl +0 -0
  81. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptmap/LICENSE.md +0 -0
  82. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptmap/SOURCE.md +0 -0
  83. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/promptmap/ai/prompt-injection/data.jsonl +0 -0
  84. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/LICENSE.md +0 -0
  85. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/SOURCE.md +0 -0
  86. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/base/replay/data_code.jsonl +0 -0
  87. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/base/replay/data_conversation.jsonl +0 -0
  88. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/base/replay/data_factual.jsonl +0 -0
  89. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/replay-general/base/replay/data_reasoning.jsonl +0 -0
  90. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/sigma-hq/LICENSE.md +0 -0
  91. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/sigma-hq/SOURCE.md +0 -0
  92. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/splunk-content/LICENSE.md +0 -0
  93. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/splunk-content/SOURCE.md +0 -0
  94. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md +0 -0
  95. {attacklm-0.5.7 → attacklm-0.5.8}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md +0 -0
  96. {attacklm-0.5.7 → attacklm-0.5.8}/data/golden/prompts.jsonl +0 -0
  97. {attacklm-0.5.7 → attacklm-0.5.8}/data/reference/prompts.jsonl +0 -0
  98. {attacklm-0.5.7 → attacklm-0.5.8}/data/steering/prompts/opsec_aware.txt +0 -0
  99. {attacklm-0.5.7 → attacklm-0.5.8}/data/steering/prompts/opsec_unaware.txt +0 -0
  100. {attacklm-0.5.7 → attacklm-0.5.8}/data/steering/prompts/succinct.txt +0 -0
  101. {attacklm-0.5.7 → attacklm-0.5.8}/data/steering/prompts/verbose.txt +0 -0
  102. {attacklm-0.5.7 → attacklm-0.5.8}/experiments/README.md +0 -0
  103. {attacklm-0.5.7 → attacklm-0.5.8}/experiments/synthetic_dataset_mutator_evol_instruct.py +0 -0
  104. {attacklm-0.5.7 → attacklm-0.5.8}/hf/.gitattributes +0 -0
  105. {attacklm-0.5.7 → attacklm-0.5.8}/hf/README.md +0 -0
  106. {attacklm-0.5.7 → attacklm-0.5.8}/hf/data/manifest.json +0 -0
  107. {attacklm-0.5.7 → attacklm-0.5.8}/hf/dataset_infos.json +0 -0
  108. {attacklm-0.5.7 → attacklm-0.5.8}/hf/scripts/build_hf_dataset.py +0 -0
  109. {attacklm-0.5.7 → attacklm-0.5.8}/hf/scripts/push_to_hf.py +0 -0
  110. {attacklm-0.5.7 → attacklm-0.5.8}/hpo_runs/.gitkeep +0 -0
  111. {attacklm-0.5.7 → attacklm-0.5.8}/hpo_runs/hpo_state.json +0 -0
  112. {attacklm-0.5.7 → attacklm-0.5.8}/hpo_runs/hpo_trial_dataset.jsonl +0 -0
  113. {attacklm-0.5.7 → attacklm-0.5.8}/logs/.gitkeep +0 -0
  114. {attacklm-0.5.7 → attacklm-0.5.8}/notes/BLUE_TEAM_DESIGN_v0.5.0.md +0 -0
  115. {attacklm-0.5.7 → attacklm-0.5.8}/notes/EVAL_DESIGN_v0.4.0.md +0 -0
  116. {attacklm-0.5.7 → attacklm-0.5.8}/notes/STEERING_REVIEW_v0.4.0.md +0 -0
  117. {attacklm-0.5.7 → attacklm-0.5.8}/presets/blue-team.json +0 -0
  118. {attacklm-0.5.7 → attacklm-0.5.8}/presets/purple-team.json +0 -0
  119. {attacklm-0.5.7 → attacklm-0.5.8}/presets/red-team.json +0 -0
  120. {attacklm-0.5.7 → attacklm-0.5.8}/pyproject.toml +0 -0
  121. {attacklm-0.5.7 → attacklm-0.5.8}/requirements.txt +0 -0
  122. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/_eval_loader.py +0 -0
  123. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_cloud_attack_dataset.py +0 -0
  124. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_ics_dataset.py +0 -0
  125. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_phishing_dataset.py +0 -0
  126. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_red_team_tactics.py +0 -0
  127. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_replay_general.py +0 -0
  128. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_supply_chain_dataset.py +0 -0
  129. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_web_attack_dataset.py +0 -0
  130. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/acquire_wireless_dataset.py +0 -0
  131. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/add_attribution.py +0 -0
  132. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/audit_dataset.py +0 -0
  133. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/augment_attribution.py +0 -0
  134. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/balance_buckets.py +0 -0
  135. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/bucket_loader.py +0 -0
  136. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/build.py +0 -0
  137. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/classify_unrouted_modules.py +0 -0
  138. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/clone_repos.sh +0 -0
  139. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/collect_reference.py +0 -0
  140. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/compare_scores.py +0 -0
  141. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/convert_to_gguf.py +0 -0
  142. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/dedupe_and_import_llm.py +0 -0
  143. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/demo.py +0 -0
  144. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/device_utils.py +0 -0
  145. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/domain_bench.py +0 -0
  146. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/eval_retention.py +0 -0
  147. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_ai_tools_to_jsonl.py +0 -0
  148. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_atomic_red_team_to_jsonl.py +0 -0
  149. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_by_tactic.py +0 -0
  150. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_caldera_plugins_to_jsonl.py +0 -0
  151. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_elastic_rules.py +0 -0
  152. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_infection_monkey_to_jsonl.py +0 -0
  153. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_mordor.py +0 -0
  154. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_nist_ir.py +0 -0
  155. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_rta_to_jsonl.py +0 -0
  156. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_sigma_defensive.py +0 -0
  157. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_splunk_content.py +0 -0
  158. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/extract_threathunter_playbook.py +0 -0
  159. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_dataset.py +0 -0
  160. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_dataset_deterministic.py +0 -0
  161. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_hybrid_dataset.py +0 -0
  162. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_metasploit_dataset.py +0 -0
  163. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_orchestrator.py +0 -0
  164. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_prompt_injection.py +0 -0
  165. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_source_layout.py +0 -0
  166. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/generate_synthetic_scarce.py +0 -0
  167. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/golden_vectors.py +0 -0
  168. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/hpo_runner.py +0 -0
  169. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/import_gguf.sh +0 -0
  170. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/import_to_lmstudio.sh +0 -0
  171. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/infer.py +0 -0
  172. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/init_pipeline.py +0 -0
  173. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/llm_generate_wrapper.py +0 -0
  174. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/merge_adapter.py +0 -0
  175. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/migrate_buckets_to_v021.py +0 -0
  176. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/migrate_v015_to_v020.py +0 -0
  177. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/mitre_tactic_lookup.py +0 -0
  178. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/parse_metasploit_to_jsonl.py +0 -0
  179. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/rebuild_manifest.py +0 -0
  180. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/register_ollama.py +0 -0
  181. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/reorganize_buckets.py +0 -0
  182. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/replay_mixer.py +0 -0
  183. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/run_all_acquisitions.py +0 -0
  184. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/score_candidates.py +0 -0
  185. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/scrub_bpl_callback.py +0 -0
  186. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/setup_buckets.py +0 -0
  187. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/speed_bench.py +0 -0
  188. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/stamp_and_reorg.py +0 -0
  189. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/steering.py +0 -0
  190. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/train_all.py +0 -0
  191. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/train_template.py +0 -0
  192. {attacklm-0.5.7 → attacklm-0.5.8}/scripts/validate_per_category.py +0 -0
  193. {attacklm-0.5.7 → attacklm-0.5.8}/src/attacklm/__init__.py +0 -0
  194. {attacklm-0.5.7 → attacklm-0.5.8}/src/attacklm/cli.py +0 -0
  195. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_balance_buckets.py +0 -0
  196. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_collect_reference.py +0 -0
  197. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_compare_scores.py +0 -0
  198. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_domain_bench.py +0 -0
  199. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_eval_loader.py +0 -0
  200. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_eval_retention.py +0 -0
  201. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_golden_vectors.py +0 -0
  202. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_init_pipeline.py +0 -0
  203. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_replay_mixer.py +0 -0
  204. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_score_candidates.py +0 -0
  205. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_speed_bench.py +0 -0
  206. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_steering.py +0 -0
  207. {attacklm-0.5.7 → attacklm-0.5.8}/tests/test_thinking_models.py +0 -0
  208. {attacklm-0.5.7 → attacklm-0.5.8}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: attacklm
3
- Version: 0.5.7
3
+ Version: 0.5.8
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
@@ -273,19 +273,14 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
273
273
  # 2. Install AttackLM with the full CUDA training stack
274
274
  uv pip install "attacklm[all]"
275
275
 
276
- # 3. (Optional) Install flash-attn for 2-3x faster training on Qwen3-Next models
277
- # --no-build-isolation is required because flash-attn needs torch at build time
278
- # but doesn't declare it in its build-system.requires
279
- uv pip install "attacklm[flash-attn]" --no-build-isolation
280
-
281
- # 4. Clone the repo for the training data (the PyPI package is code-only)
276
+ # 3. Clone the repo for the training data (the PyPI package is code-only)
282
277
  git clone https://github.com/Veedubin/AttackLM.git
283
278
  cd AttackLM
284
279
 
285
- # 5. Initialize the dataset (probes local `data/` first; falls back to git clone)
280
+ # 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
286
281
  attacklm-init --yes
287
282
 
288
- # 6. Train
283
+ # 5. Train
289
284
  attacklm-train-all --single-model \
290
285
  --dataset base/ \
291
286
  --base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
@@ -305,13 +300,10 @@ cd AttackLM
305
300
  # 3. Install as an editable Python package (gets you all `attacklm-*` commands)
306
301
  uv pip install -e ".[all]"
307
302
 
308
- # 4. (Optional) Install flash-attn for 2-3x faster training
309
- uv pip install -e ".[flash-attn]" --no-build-isolation
310
-
311
- # 5. Initialize the dataset
303
+ # 4. Initialize the dataset
312
304
  attacklm-init --yes
313
305
 
314
- # 6. Train
306
+ # 5. Train
315
307
  attacklm-train-all --single-model \
316
308
  --dataset base/ \
317
309
  --base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
@@ -341,11 +333,6 @@ build anything by hand.
341
333
  # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
342
334
  uv pip install "attacklm[all]"
343
335
 
344
- # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
345
- # --no-build-isolation is required because flash-attn needs torch at build time
346
- # but doesn't declare it in its build-system.requires
347
- uv pip install "attacklm[flash-attn]" --no-build-isolation
348
-
349
336
  # Optional: Unsloth for 2-5x faster training + 70% less VRAM
350
337
  # Must be separate because it conflicts with trl==1.5.1 (needs trl<=0.24.0)
351
338
  uv pip install "attacklm[unsloth]"
@@ -357,6 +344,13 @@ uv pip install "attacklm[all-rocm]"
357
344
  uv pip install "attacklm[infer]"
358
345
  ```
359
346
 
347
+ > **flash-attn is NOT included in [all].** It compiles CUDA kernels from
348
+ > source (no pre-built wheels) and can consume 20-30GB+ RAM during
349
+ > compilation — enough to OOM a 32GB system. The training code falls back
350
+ > to PyTorch's built-in `sdpa` attention, which works fine for Qwen2.5.
351
+ > flash-attn is only needed for Qwen3-Next models or `--packing` mode.
352
+ > If you have 64GB+ RAM and want it: `uv pip install "attacklm[flash-attn]" --no-build-isolation`
353
+
360
354
  Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
361
355
 
362
356
  **Install from source** (editable, for development):
@@ -373,25 +367,16 @@ cd AttackLM
373
367
 
374
368
  # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
375
369
  uv pip install -e ".[all]"
376
-
377
- # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
378
- # --no-build-isolation is required because flash-attn needs torch at build time
379
- # but doesn't declare it in its build-system.requires
380
- uv pip install -e ".[flash-attn]" --no-build-isolation
381
370
  ```
382
371
 
383
372
  That installs everything: `torch` (CUDA wheel from PyPI), `bitsandbytes`,
384
- `transformers`, `peft`, `trl`. The C++ extensions `flash-attn`,
385
- `causal-conv1d`, and `flash-linear-attention` are in the separate
386
- `[flash-attn]` extra (they need torch at build time and can't be in `[all]`).
373
+ `transformers`, `peft`, `trl`. The training code uses PyTorch's built-in
374
+ `sdpa` attention by default — no flash-attn needed for Qwen2.5 models.
387
375
 
388
- | Component | Where it comes from |
389
- |---|---|
390
- | `torch`, `torchvision` | PyPI (CUDA build, auto-selected) |
391
- | `bitsandbytes` | PyPI (CUDA wheels) |
392
- | `flash-attn` | Built from source via pip (~5 min, needs `--no-build-isolation`) |
393
- | `causal-conv1d` | Pre-built wheel from PyPI |
394
- | `flash-linear-attention` | Pre-built wheel from PyPI |
376
+ > **flash-attn is NOT included.** It compiles CUDA kernels from source
377
+ > (no pre-built wheels) and can consume 20-30GB+ RAM during compilation.
378
+ > If you have 64GB+ RAM and want it for Qwen3-Next or `--packing` mode:
379
+ > `MAX_JOBS=2 uv pip install -e ".[flash-attn]" --no-build-isolation`
395
380
 
396
381
  ---
397
382
 
@@ -75,19 +75,14 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
75
75
  # 2. Install AttackLM with the full CUDA training stack
76
76
  uv pip install "attacklm[all]"
77
77
 
78
- # 3. (Optional) Install flash-attn for 2-3x faster training on Qwen3-Next models
79
- # --no-build-isolation is required because flash-attn needs torch at build time
80
- # but doesn't declare it in its build-system.requires
81
- uv pip install "attacklm[flash-attn]" --no-build-isolation
82
-
83
- # 4. Clone the repo for the training data (the PyPI package is code-only)
78
+ # 3. Clone the repo for the training data (the PyPI package is code-only)
84
79
  git clone https://github.com/Veedubin/AttackLM.git
85
80
  cd AttackLM
86
81
 
87
- # 5. Initialize the dataset (probes local `data/` first; falls back to git clone)
82
+ # 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
88
83
  attacklm-init --yes
89
84
 
90
- # 6. Train
85
+ # 5. Train
91
86
  attacklm-train-all --single-model \
92
87
  --dataset base/ \
93
88
  --base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
@@ -107,13 +102,10 @@ cd AttackLM
107
102
  # 3. Install as an editable Python package (gets you all `attacklm-*` commands)
108
103
  uv pip install -e ".[all]"
109
104
 
110
- # 4. (Optional) Install flash-attn for 2-3x faster training
111
- uv pip install -e ".[flash-attn]" --no-build-isolation
112
-
113
- # 5. Initialize the dataset
105
+ # 4. Initialize the dataset
114
106
  attacklm-init --yes
115
107
 
116
- # 6. Train
108
+ # 5. Train
117
109
  attacklm-train-all --single-model \
118
110
  --dataset base/ \
119
111
  --base-model huihui-ai/Qwen2.5-Coder-3B-Instruct-abliterated \
@@ -143,11 +135,6 @@ build anything by hand.
143
135
  # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
144
136
  uv pip install "attacklm[all]"
145
137
 
146
- # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
147
- # --no-build-isolation is required because flash-attn needs torch at build time
148
- # but doesn't declare it in its build-system.requires
149
- uv pip install "attacklm[flash-attn]" --no-build-isolation
150
-
151
138
  # Optional: Unsloth for 2-5x faster training + 70% less VRAM
152
139
  # Must be separate because it conflicts with trl==1.5.1 (needs trl<=0.24.0)
153
140
  uv pip install "attacklm[unsloth]"
@@ -159,6 +146,13 @@ uv pip install "attacklm[all-rocm]"
159
146
  uv pip install "attacklm[infer]"
160
147
  ```
161
148
 
149
+ > **flash-attn is NOT included in [all].** It compiles CUDA kernels from
150
+ > source (no pre-built wheels) and can consume 20-30GB+ RAM during
151
+ > compilation — enough to OOM a 32GB system. The training code falls back
152
+ > to PyTorch's built-in `sdpa` attention, which works fine for Qwen2.5.
153
+ > flash-attn is only needed for Qwen3-Next models or `--packing` mode.
154
+ > If you have 64GB+ RAM and want it: `uv pip install "attacklm[flash-attn]" --no-build-isolation`
155
+
162
156
  Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
163
157
 
164
158
  **Install from source** (editable, for development):
@@ -175,25 +169,16 @@ cd AttackLM
175
169
 
176
170
  # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
177
171
  uv pip install -e ".[all]"
178
-
179
- # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
180
- # --no-build-isolation is required because flash-attn needs torch at build time
181
- # but doesn't declare it in its build-system.requires
182
- uv pip install -e ".[flash-attn]" --no-build-isolation
183
172
  ```
184
173
 
185
174
  That installs everything: `torch` (CUDA wheel from PyPI), `bitsandbytes`,
186
- `transformers`, `peft`, `trl`. The C++ extensions `flash-attn`,
187
- `causal-conv1d`, and `flash-linear-attention` are in the separate
188
- `[flash-attn]` extra (they need torch at build time and can't be in `[all]`).
175
+ `transformers`, `peft`, `trl`. The training code uses PyTorch's built-in
176
+ `sdpa` attention by default — no flash-attn needed for Qwen2.5 models.
189
177
 
190
- | Component | Where it comes from |
191
- |---|---|
192
- | `torch`, `torchvision` | PyPI (CUDA build, auto-selected) |
193
- | `bitsandbytes` | PyPI (CUDA wheels) |
194
- | `flash-attn` | Built from source via pip (~5 min, needs `--no-build-isolation`) |
195
- | `causal-conv1d` | Pre-built wheel from PyPI |
196
- | `flash-linear-attention` | Pre-built wheel from PyPI |
178
+ > **flash-attn is NOT included.** It compiles CUDA kernels from source
179
+ > (no pre-built wheels) and can consume 20-30GB+ RAM during compilation.
180
+ > If you have 64GB+ RAM and want it for Qwen3-Next or `--packing` mode:
181
+ > `MAX_JOBS=2 uv pip install -e ".[flash-attn]" --no-build-isolation`
197
182
 
198
183
  ---
199
184
 
@@ -0,0 +1 @@
1
+ __version__ = "0.5.8"
@@ -1 +0,0 @@
1
- __version__ = "0.5.7"
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