attacklm 0.5.4__tar.gz → 0.5.6__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.4 → attacklm-0.5.6}/PKG-INFO +27 -26
  2. {attacklm-0.5.4 → attacklm-0.5.6}/README.md +22 -10
  3. {attacklm-0.5.4 → attacklm-0.5.6}/pyproject.toml +8 -1
  4. attacklm-0.5.6/src/attacklm/__version__.py +1 -0
  5. attacklm-0.5.4/src/attacklm/__version__.py +0 -1
  6. {attacklm-0.5.4 → attacklm-0.5.6}/.github/workflows/release.yml +0 -0
  7. {attacklm-0.5.4 → attacklm-0.5.6}/.gitignore +0 -0
  8. {attacklm-0.5.4 → attacklm-0.5.6}/ATTRIBUTION.md +0 -0
  9. {attacklm-0.5.4 → attacklm-0.5.6}/CHANGELOG.md +0 -0
  10. {attacklm-0.5.4 → attacklm-0.5.6}/CONTRIBUTING.md +0 -0
  11. {attacklm-0.5.4 → attacklm-0.5.6}/EVALUATION.md +0 -0
  12. {attacklm-0.5.4 → attacklm-0.5.6}/LICENSE +0 -0
  13. {attacklm-0.5.4 → attacklm-0.5.6}/MANIFEST.in +0 -0
  14. {attacklm-0.5.4 → attacklm-0.5.6}/Makefile +0 -0
  15. {attacklm-0.5.4 → attacklm-0.5.6}/NOTICE +0 -0
  16. {attacklm-0.5.4 → attacklm-0.5.6}/QA_BEFORE_RELEASES.md +0 -0
  17. {attacklm-0.5.4 → attacklm-0.5.6}/REPLAY_PLAN.md +0 -0
  18. {attacklm-0.5.4 → attacklm-0.5.6}/data/ATTRIBUTION.md +0 -0
  19. {attacklm-0.5.4 → attacklm-0.5.6}/data/LEGAL.md +0 -0
  20. {attacklm-0.5.4 → attacklm-0.5.6}/data/REMOVAL.md +0 -0
  21. {attacklm-0.5.4 → attacklm-0.5.6}/data/bench/questions.jsonl +0 -0
  22. {attacklm-0.5.4 → attacklm-0.5.6}/data/bench/speed_context.txt +0 -0
  23. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/ATTRIBUTION.md +0 -0
  24. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/GEMINI_RESEARCH_2026-06-11.md +0 -0
  25. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/acquisition_report.json +0 -0
  26. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/manifest.json +0 -0
  27. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/README.md +0 -0
  28. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/_index.json +0 -0
  29. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/LICENSE.md +0 -0
  30. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/SOURCE.md +0 -0
  31. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/base/collection/data.jsonl +0 -0
  32. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/base/discovery/data.jsonl +0 -0
  33. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/base/execution/data.jsonl +0 -0
  34. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/base/exfiltration/data.jsonl +0 -0
  35. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/atomic-red-team/base/persistence/data.jsonl +0 -0
  36. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md +0 -0
  37. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md +0 -0
  38. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/attacklm-synthetic/orchestrator/data.jsonl +0 -0
  39. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/azure-pyrit/LICENSE.md +0 -0
  40. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/azure-pyrit/SOURCE.md +0 -0
  41. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/cyberark-fuzzyai/LICENSE.md +0 -0
  42. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/cyberark-fuzzyai/SOURCE.md +0 -0
  43. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/elastic-rules/LICENSE.md +0 -0
  44. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/elastic-rules/SOURCE.md +0 -0
  45. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/LICENSE.md +0 -0
  46. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/SOURCE.md +0 -0
  47. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/cloud/attacks/data_llm.jsonl +0 -0
  48. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/ics/attacks/data_llm.jsonl +0 -0
  49. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/social_engineering/phishing/data_llm.jsonl +0 -0
  50. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/llm-generated/wireless/attacks/data_llm.jsonl +0 -0
  51. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md +0 -0
  52. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md +0 -0
  53. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/collection/data.jsonl +0 -0
  54. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/credential_access/data.jsonl +0 -0
  55. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/defense_evasion/data.jsonl +0 -0
  56. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/discovery/data.jsonl +0 -0
  57. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/execution/data.jsonl +0 -0
  58. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/lateral_movement/data.jsonl +0 -0
  59. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/persistence/data.jsonl +0 -0
  60. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/base/privilege_escalation/data.jsonl +0 -0
  61. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/metasploit-framework/tools/metasploit/data.jsonl +0 -0
  62. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md +0 -0
  63. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md +0 -0
  64. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-atlas-arsenal/base/discovery/data.jsonl +0 -0
  65. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/LICENSE.md +0 -0
  66. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/SOURCE.md +0 -0
  67. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/base/collection/data.jsonl +0 -0
  68. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/base/discovery/data.jsonl +0 -0
  69. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/base/execution/data.jsonl +0 -0
  70. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/base/exfiltration/data.jsonl +0 -0
  71. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mitre-stockpile/base/persistence/data.jsonl +0 -0
  72. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mordor/LICENSE.md +0 -0
  73. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/mordor/SOURCE.md +0 -0
  74. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/nist-ir/LICENSE.md +0 -0
  75. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/nist-ir/SOURCE.md +0 -0
  76. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/nvidia-garak/LICENSE.md +0 -0
  77. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/nvidia-garak/SOURCE.md +0 -0
  78. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/nvidia-garak/ai/jailbreaking/data.jsonl +0 -0
  79. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptfoo/LICENSE.md +0 -0
  80. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptfoo/SOURCE.md +0 -0
  81. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptfoo/ai/prompt-injection/data.jsonl +0 -0
  82. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptmap/LICENSE.md +0 -0
  83. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptmap/SOURCE.md +0 -0
  84. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/promptmap/ai/prompt-injection/data.jsonl +0 -0
  85. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/LICENSE.md +0 -0
  86. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/SOURCE.md +0 -0
  87. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/base/replay/data_code.jsonl +0 -0
  88. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/base/replay/data_conversation.jsonl +0 -0
  89. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/base/replay/data_factual.jsonl +0 -0
  90. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/replay-general/base/replay/data_reasoning.jsonl +0 -0
  91. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/sigma-hq/LICENSE.md +0 -0
  92. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/sigma-hq/SOURCE.md +0 -0
  93. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/splunk-content/LICENSE.md +0 -0
  94. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/splunk-content/SOURCE.md +0 -0
  95. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md +0 -0
  96. {attacklm-0.5.4 → attacklm-0.5.6}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md +0 -0
  97. {attacklm-0.5.4 → attacklm-0.5.6}/data/golden/prompts.jsonl +0 -0
  98. {attacklm-0.5.4 → attacklm-0.5.6}/data/reference/prompts.jsonl +0 -0
  99. {attacklm-0.5.4 → attacklm-0.5.6}/data/steering/prompts/opsec_aware.txt +0 -0
  100. {attacklm-0.5.4 → attacklm-0.5.6}/data/steering/prompts/opsec_unaware.txt +0 -0
  101. {attacklm-0.5.4 → attacklm-0.5.6}/data/steering/prompts/succinct.txt +0 -0
  102. {attacklm-0.5.4 → attacklm-0.5.6}/data/steering/prompts/verbose.txt +0 -0
  103. {attacklm-0.5.4 → attacklm-0.5.6}/experiments/README.md +0 -0
  104. {attacklm-0.5.4 → attacklm-0.5.6}/experiments/synthetic_dataset_mutator_evol_instruct.py +0 -0
  105. {attacklm-0.5.4 → attacklm-0.5.6}/hf/.gitattributes +0 -0
  106. {attacklm-0.5.4 → attacklm-0.5.6}/hf/README.md +0 -0
  107. {attacklm-0.5.4 → attacklm-0.5.6}/hf/data/manifest.json +0 -0
  108. {attacklm-0.5.4 → attacklm-0.5.6}/hf/dataset_infos.json +0 -0
  109. {attacklm-0.5.4 → attacklm-0.5.6}/hf/scripts/build_hf_dataset.py +0 -0
  110. {attacklm-0.5.4 → attacklm-0.5.6}/hf/scripts/push_to_hf.py +0 -0
  111. {attacklm-0.5.4 → attacklm-0.5.6}/hpo_runs/.gitkeep +0 -0
  112. {attacklm-0.5.4 → attacklm-0.5.6}/hpo_runs/hpo_state.json +0 -0
  113. {attacklm-0.5.4 → attacklm-0.5.6}/hpo_runs/hpo_trial_dataset.jsonl +0 -0
  114. {attacklm-0.5.4 → attacklm-0.5.6}/logs/.gitkeep +0 -0
  115. {attacklm-0.5.4 → attacklm-0.5.6}/notes/BLUE_TEAM_DESIGN_v0.5.0.md +0 -0
  116. {attacklm-0.5.4 → attacklm-0.5.6}/notes/EVAL_DESIGN_v0.4.0.md +0 -0
  117. {attacklm-0.5.4 → attacklm-0.5.6}/notes/STEERING_REVIEW_v0.4.0.md +0 -0
  118. {attacklm-0.5.4 → attacklm-0.5.6}/presets/blue-team.json +0 -0
  119. {attacklm-0.5.4 → attacklm-0.5.6}/presets/purple-team.json +0 -0
  120. {attacklm-0.5.4 → attacklm-0.5.6}/presets/red-team.json +0 -0
  121. {attacklm-0.5.4 → attacklm-0.5.6}/requirements.txt +0 -0
  122. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/_eval_loader.py +0 -0
  123. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_cloud_attack_dataset.py +0 -0
  124. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_ics_dataset.py +0 -0
  125. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_phishing_dataset.py +0 -0
  126. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_red_team_tactics.py +0 -0
  127. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_replay_general.py +0 -0
  128. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_supply_chain_dataset.py +0 -0
  129. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_web_attack_dataset.py +0 -0
  130. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/acquire_wireless_dataset.py +0 -0
  131. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/add_attribution.py +0 -0
  132. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/audit_dataset.py +0 -0
  133. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/augment_attribution.py +0 -0
  134. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/balance_buckets.py +0 -0
  135. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/bucket_loader.py +0 -0
  136. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/build.py +0 -0
  137. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/classify_unrouted_modules.py +0 -0
  138. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/clone_repos.sh +0 -0
  139. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/collect_reference.py +0 -0
  140. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/compare_scores.py +0 -0
  141. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/convert_to_gguf.py +0 -0
  142. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/dedupe_and_import_llm.py +0 -0
  143. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/demo.py +0 -0
  144. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/device_utils.py +0 -0
  145. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/domain_bench.py +0 -0
  146. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/eval_retention.py +0 -0
  147. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_ai_tools_to_jsonl.py +0 -0
  148. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_atomic_red_team_to_jsonl.py +0 -0
  149. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_by_tactic.py +0 -0
  150. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_caldera_plugins_to_jsonl.py +0 -0
  151. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_elastic_rules.py +0 -0
  152. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_infection_monkey_to_jsonl.py +0 -0
  153. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_mordor.py +0 -0
  154. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_nist_ir.py +0 -0
  155. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_rta_to_jsonl.py +0 -0
  156. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_sigma_defensive.py +0 -0
  157. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_splunk_content.py +0 -0
  158. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/extract_threathunter_playbook.py +0 -0
  159. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_dataset.py +0 -0
  160. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_dataset_deterministic.py +0 -0
  161. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_hybrid_dataset.py +0 -0
  162. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_metasploit_dataset.py +0 -0
  163. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_orchestrator.py +0 -0
  164. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_prompt_injection.py +0 -0
  165. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_source_layout.py +0 -0
  166. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/generate_synthetic_scarce.py +0 -0
  167. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/golden_vectors.py +0 -0
  168. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/hpo_runner.py +0 -0
  169. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/import_gguf.sh +0 -0
  170. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/import_to_lmstudio.sh +0 -0
  171. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/infer.py +0 -0
  172. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/init_pipeline.py +0 -0
  173. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/llm_generate_wrapper.py +0 -0
  174. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/merge_adapter.py +0 -0
  175. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/migrate_buckets_to_v021.py +0 -0
  176. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/migrate_v015_to_v020.py +0 -0
  177. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/mitre_tactic_lookup.py +0 -0
  178. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/parse_metasploit_to_jsonl.py +0 -0
  179. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/rebuild_manifest.py +0 -0
  180. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/register_ollama.py +0 -0
  181. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/reorganize_buckets.py +0 -0
  182. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/replay_mixer.py +0 -0
  183. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/run_all_acquisitions.py +0 -0
  184. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/score_candidates.py +0 -0
  185. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/scrub_bpl_callback.py +0 -0
  186. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/setup_buckets.py +0 -0
  187. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/speed_bench.py +0 -0
  188. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/stamp_and_reorg.py +0 -0
  189. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/steering.py +0 -0
  190. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/train_all.py +0 -0
  191. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/train_template.py +0 -0
  192. {attacklm-0.5.4 → attacklm-0.5.6}/scripts/validate_per_category.py +0 -0
  193. {attacklm-0.5.4 → attacklm-0.5.6}/src/attacklm/__init__.py +0 -0
  194. {attacklm-0.5.4 → attacklm-0.5.6}/src/attacklm/cli.py +0 -0
  195. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_balance_buckets.py +0 -0
  196. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_collect_reference.py +0 -0
  197. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_compare_scores.py +0 -0
  198. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_domain_bench.py +0 -0
  199. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_eval_loader.py +0 -0
  200. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_eval_retention.py +0 -0
  201. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_golden_vectors.py +0 -0
  202. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_init_pipeline.py +0 -0
  203. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_replay_mixer.py +0 -0
  204. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_score_candidates.py +0 -0
  205. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_speed_bench.py +0 -0
  206. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_steering.py +0 -0
  207. {attacklm-0.5.4 → attacklm-0.5.6}/tests/test_thinking_models.py +0 -0
  208. {attacklm-0.5.4 → attacklm-0.5.6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: attacklm
3
- Version: 0.5.4
3
+ Version: 0.5.6
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
@@ -25,10 +25,7 @@ Requires-Python: >=3.10
25
25
  Provides-Extra: all
26
26
  Requires-Dist: accelerate==1.13.0; extra == 'all'
27
27
  Requires-Dist: bitsandbytes==0.49.2; extra == 'all'
28
- Requires-Dist: causal-conv1d>=1.4; extra == 'all'
29
28
  Requires-Dist: datasets==5.0.0; extra == 'all'
30
- Requires-Dist: flash-attn>=2.7; extra == 'all'
31
- Requires-Dist: flash-linear-attention>=0.2; extra == 'all'
32
29
  Requires-Dist: gguf; extra == 'all'
33
30
  Requires-Dist: gitpython; extra == 'all'
34
31
  Requires-Dist: huggingface-hub==1.18.0; extra == 'all'
@@ -51,10 +48,7 @@ Requires-Dist: trl==1.5.1; extra == 'all'
51
48
  Provides-Extra: all-cuda
52
49
  Requires-Dist: accelerate==1.13.0; extra == 'all-cuda'
53
50
  Requires-Dist: bitsandbytes==0.49.2; extra == 'all-cuda'
54
- Requires-Dist: causal-conv1d>=1.4; extra == 'all-cuda'
55
51
  Requires-Dist: datasets==5.0.0; extra == 'all-cuda'
56
- Requires-Dist: flash-attn>=2.7; extra == 'all-cuda'
57
- Requires-Dist: flash-linear-attention>=0.2; extra == 'all-cuda'
58
52
  Requires-Dist: gguf; extra == 'all-cuda'
59
53
  Requires-Dist: gitpython; extra == 'all-cuda'
60
54
  Requires-Dist: huggingface-hub==1.18.0; extra == 'all-cuda'
@@ -95,9 +89,6 @@ Requires-Dist: bitsandbytes==0.49.2; extra == 'cuda'
95
89
  Requires-Dist: torch==2.12.0; extra == 'cuda'
96
90
  Requires-Dist: torchvision==0.27.0; extra == 'cuda'
97
91
  Provides-Extra: cuda-extras
98
- Requires-Dist: causal-conv1d>=1.4; extra == 'cuda-extras'
99
- Requires-Dist: flash-attn>=2.7; extra == 'cuda-extras'
100
- Requires-Dist: flash-linear-attention>=0.2; extra == 'cuda-extras'
101
92
  Provides-Extra: dev
102
93
  Requires-Dist: ipython; extra == 'dev'
103
94
  Requires-Dist: mypy; extra == 'dev'
@@ -110,6 +101,10 @@ Provides-Extra: extract
110
101
  Requires-Dist: gitpython; extra == 'extract'
111
102
  Requires-Dist: pyyaml; extra == 'extract'
112
103
  Requires-Dist: requests; extra == 'extract'
104
+ Provides-Extra: flash-attn
105
+ Requires-Dist: causal-conv1d>=1.4; extra == 'flash-attn'
106
+ Requires-Dist: flash-attn>=2.7; extra == 'flash-attn'
107
+ Requires-Dist: flash-linear-attention>=0.2; extra == 'flash-attn'
113
108
  Provides-Extra: infer
114
109
  Requires-Dist: bitsandbytes==0.49.2; extra == 'infer'
115
110
  Requires-Dist: huggingface-hub==1.18.0; extra == 'infer'
@@ -151,10 +146,7 @@ Provides-Extra: rocm-extras
151
146
  Provides-Extra: train
152
147
  Requires-Dist: accelerate==1.13.0; extra == 'train'
153
148
  Requires-Dist: bitsandbytes==0.49.2; extra == 'train'
154
- Requires-Dist: causal-conv1d>=1.4; extra == 'train'
155
149
  Requires-Dist: datasets==5.0.0; extra == 'train'
156
- Requires-Dist: flash-attn>=2.7; extra == 'train'
157
- Requires-Dist: flash-linear-attention>=0.2; extra == 'train'
158
150
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train'
159
151
  Requires-Dist: kernels<0.13,>=0.12; extra == 'train'
160
152
  Requires-Dist: peft==0.19.1; extra == 'train'
@@ -177,10 +169,7 @@ Requires-Dist: trl==1.5.1; extra == 'train-base'
177
169
  Provides-Extra: train-cuda
178
170
  Requires-Dist: accelerate==1.13.0; extra == 'train-cuda'
179
171
  Requires-Dist: bitsandbytes==0.49.2; extra == 'train-cuda'
180
- Requires-Dist: causal-conv1d>=1.4; extra == 'train-cuda'
181
172
  Requires-Dist: datasets==5.0.0; extra == 'train-cuda'
182
- Requires-Dist: flash-attn>=2.7; extra == 'train-cuda'
183
- Requires-Dist: flash-linear-attention>=0.2; extra == 'train-cuda'
184
173
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train-cuda'
185
174
  Requires-Dist: kernels<0.13,>=0.12; extra == 'train-cuda'
186
175
  Requires-Dist: peft==0.19.1; extra == 'train-cuda'
@@ -281,12 +270,14 @@ The full per-source map:
281
270
  # 1. Install uv (Python package manager, ~10MB)
282
271
  curl -LsSf https://astral.sh/uv/install.sh | sh
283
272
 
284
- # 2. Install PyTorch + Triton first (required by flash-attn and Unsloth)
285
- uv pip install torch==2.12.0 torchvision==0.27.0 triton
286
-
287
- # 3. Install AttackLM from PyPI with the full CUDA training stack
273
+ # 2. Install AttackLM with the full CUDA training stack
288
274
  uv pip install "attacklm[all]"
289
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
+
290
281
  # 4. Clone the repo for the training data (the PyPI package is code-only)
291
282
  git clone https://github.com/Veedubin/AttackLM.git
292
283
  cd AttackLM
@@ -344,13 +335,23 @@ build anything by hand.
344
335
 
345
336
  **Install from PyPI (recommended):**
346
337
  ```bash
347
- # PyTorch + Triton must be installed first (flash-attn and Unsloth need them)
348
- uv pip install torch==2.12.0 torchvision==0.27.0 triton
338
+ # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
339
+ uv pip install "attacklm[all]"
340
+
341
+ # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
342
+ # --no-build-isolation is required because flash-attn needs torch at build time
343
+ # but doesn't declare it in its build-system.requires
344
+ uv pip install "attacklm[flash-attn]" --no-build-isolation
345
+
346
+ # Optional: Unsloth for 2-5x faster training + 70% less VRAM
347
+ # Must be separate because it conflicts with trl==1.5.1 (needs trl<=0.24.0)
348
+ uv pip install "attacklm[unsloth]"
349
+
350
+ # ROCm stack (AMD GPUs)
351
+ uv pip install "attacklm[all-rocm]"
349
352
 
350
- # Then install AttackLM
351
- uv pip install "attacklm[all]" # CUDA training stack
352
- uv pip install "attacklm[all-rocm]" # ROCm training stack
353
- uv pip install "attacklm[infer]" # CPU / Apple Silicon (inference only)
353
+ # Inference only (CPU / Apple Silicon, no GPU needed)
354
+ uv pip install "attacklm[infer]"
354
355
  ```
355
356
 
356
357
  Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
@@ -72,12 +72,14 @@ The full per-source map:
72
72
  # 1. Install uv (Python package manager, ~10MB)
73
73
  curl -LsSf https://astral.sh/uv/install.sh | sh
74
74
 
75
- # 2. Install PyTorch + Triton first (required by flash-attn and Unsloth)
76
- uv pip install torch==2.12.0 torchvision==0.27.0 triton
77
-
78
- # 3. Install AttackLM from PyPI with the full CUDA training stack
75
+ # 2. Install AttackLM with the full CUDA training stack
79
76
  uv pip install "attacklm[all]"
80
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
+
81
83
  # 4. Clone the repo for the training data (the PyPI package is code-only)
82
84
  git clone https://github.com/Veedubin/AttackLM.git
83
85
  cd AttackLM
@@ -135,13 +137,23 @@ build anything by hand.
135
137
 
136
138
  **Install from PyPI (recommended):**
137
139
  ```bash
138
- # PyTorch + Triton must be installed first (flash-attn and Unsloth need them)
139
- uv pip install torch==2.12.0 torchvision==0.27.0 triton
140
+ # Full CUDA training stack (torch, bitsandbytes, trl, peft, transformers, etc.)
141
+ uv pip install "attacklm[all]"
142
+
143
+ # Optional: flash-attn for 2-3x faster training (Qwen3-Next, packing mode)
144
+ # --no-build-isolation is required because flash-attn needs torch at build time
145
+ # but doesn't declare it in its build-system.requires
146
+ uv pip install "attacklm[flash-attn]" --no-build-isolation
147
+
148
+ # Optional: Unsloth for 2-5x faster training + 70% less VRAM
149
+ # Must be separate because it conflicts with trl==1.5.1 (needs trl<=0.24.0)
150
+ uv pip install "attacklm[unsloth]"
151
+
152
+ # ROCm stack (AMD GPUs)
153
+ uv pip install "attacklm[all-rocm]"
140
154
 
141
- # Then install AttackLM
142
- uv pip install "attacklm[all]" # CUDA training stack
143
- uv pip install "attacklm[all-rocm]" # ROCm training stack
144
- uv pip install "attacklm[infer]" # CPU / Apple Silicon (inference only)
155
+ # Inference only (CPU / Apple Silicon, no GPU needed)
156
+ uv pip install "attacklm[infer]"
145
157
  ```
146
158
 
147
159
  Then clone the repo for the training data: `git clone https://github.com/Veedubin/AttackLM.git`
@@ -150,7 +150,14 @@ rocm = [
150
150
  # `causal_conv1d` and `flash_linear_attention` are CUDA C++ extensions.
151
151
  # ROCm users can SKIP these — the Qwen3NextForCausalLM modeling has pure-PyTorch
152
152
  # fallbacks (slower but works).
153
- cuda-extras = [
153
+ #
154
+ # IMPORTANT: flash-attn and causal-conv1d need torch at build time but don't
155
+ # declare it in their build-system.requires. They are NOT included in [all]
156
+ # or [train-cuda] — install them separately AFTER torch is in the environment:
157
+ # uv pip install attacklm[all]
158
+ # uv pip install attacklm[flash-attn]
159
+ cuda-extras = []
160
+ flash-attn = [
154
161
  "flash-attn>=2.7", # requires CUDA dev tools to build
155
162
  "causal-conv1d>=1.4", # CUDA-only
156
163
  "flash-linear-attention>=0.2", # CUDA-only
@@ -0,0 +1 @@
1
+ __version__ = "0.5.6"
@@ -1 +0,0 @@
1
- __version__ = "0.5.4"
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