attacklm 0.9.0__tar.gz → 0.9.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.
Files changed (216) hide show
  1. {attacklm-0.9.0 → attacklm-0.9.2}/PKG-INFO +16 -7
  2. {attacklm-0.9.0 → attacklm-0.9.2}/pyproject.toml +4 -2
  3. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/train_template.py +60 -0
  4. attacklm-0.9.2/src/attacklm/__version__.py +1 -0
  5. attacklm-0.9.0/src/attacklm/__version__.py +0 -1
  6. {attacklm-0.9.0 → attacklm-0.9.2}/.github/workflows/release.yml +0 -0
  7. {attacklm-0.9.0 → attacklm-0.9.2}/.gitignore +0 -0
  8. {attacklm-0.9.0 → attacklm-0.9.2}/ATTRIBUTION.md +0 -0
  9. {attacklm-0.9.0 → attacklm-0.9.2}/CHANGELOG.md +0 -0
  10. {attacklm-0.9.0 → attacklm-0.9.2}/CONTRIBUTING.md +0 -0
  11. {attacklm-0.9.0 → attacklm-0.9.2}/EVALUATION.md +0 -0
  12. {attacklm-0.9.0 → attacklm-0.9.2}/LICENSE +0 -0
  13. {attacklm-0.9.0 → attacklm-0.9.2}/MANIFEST.in +0 -0
  14. {attacklm-0.9.0 → attacklm-0.9.2}/Makefile +0 -0
  15. {attacklm-0.9.0 → attacklm-0.9.2}/NOTICE +0 -0
  16. {attacklm-0.9.0 → attacklm-0.9.2}/README.md +0 -0
  17. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/README.md +0 -0
  18. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/pyproject.toml +0 -0
  19. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/__init__.py +0 -0
  20. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/app.py +0 -0
  21. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/cli.py +0 -0
  22. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/presets.py +0 -0
  23. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/runner.py +0 -0
  24. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/screens/__init__.py +0 -0
  25. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/screens/command_forms.py +0 -0
  26. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/screens/main_menu.py +0 -0
  27. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/screens/train_form.py +0 -0
  28. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/screens/train_live.py +0 -0
  29. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/src/attacklm_gui/widgets/__init__.py +0 -0
  30. {attacklm-0.9.0 → attacklm-0.9.2}/attacklm-gui/tests/test_gui.py +0 -0
  31. {attacklm-0.9.0 → attacklm-0.9.2}/data/ATTRIBUTION.md +0 -0
  32. {attacklm-0.9.0 → attacklm-0.9.2}/data/LEGAL.md +0 -0
  33. {attacklm-0.9.0 → attacklm-0.9.2}/data/REMOVAL.md +0 -0
  34. {attacklm-0.9.0 → attacklm-0.9.2}/data/bench/questions.jsonl +0 -0
  35. {attacklm-0.9.0 → attacklm-0.9.2}/data/bench/speed_context.txt +0 -0
  36. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/acquisition_report.json +0 -0
  37. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/manifest.json +0 -0
  38. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/README.md +0 -0
  39. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/_index.json +0 -0
  40. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/LICENSE.md +0 -0
  41. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/SOURCE.md +0 -0
  42. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/base/collection/data.jsonl +0 -0
  43. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/base/discovery/data.jsonl +0 -0
  44. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/base/execution/data.jsonl +0 -0
  45. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/base/exfiltration/data.jsonl +0 -0
  46. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/atomic-red-team/base/persistence/data.jsonl +0 -0
  47. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md +0 -0
  48. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md +0 -0
  49. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/attacklm-synthetic/orchestrator/data.jsonl +0 -0
  50. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/azure-pyrit/LICENSE.md +0 -0
  51. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/azure-pyrit/SOURCE.md +0 -0
  52. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/cyberark-fuzzyai/LICENSE.md +0 -0
  53. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/cyberark-fuzzyai/SOURCE.md +0 -0
  54. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/elastic-rules/LICENSE.md +0 -0
  55. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/elastic-rules/SOURCE.md +0 -0
  56. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/elastic-rules/defensive/detection_engineering/data.jsonl +0 -0
  57. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/LICENSE.md +0 -0
  58. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/SOURCE.md +0 -0
  59. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/cloud/attacks/data_llm.jsonl +0 -0
  60. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/ics/attacks/data_llm.jsonl +0 -0
  61. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/social_engineering/phishing/data_llm.jsonl +0 -0
  62. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/llm-generated/wireless/attacks/data_llm.jsonl +0 -0
  63. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md +0 -0
  64. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md +0 -0
  65. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/collection/data.jsonl +0 -0
  66. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/credential_access/data.jsonl +0 -0
  67. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/defense_evasion/data.jsonl +0 -0
  68. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/discovery/data.jsonl +0 -0
  69. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/execution/data.jsonl +0 -0
  70. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/lateral_movement/data.jsonl +0 -0
  71. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/persistence/data.jsonl +0 -0
  72. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/base/privilege_escalation/data.jsonl +0 -0
  73. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/metasploit-framework/tools/metasploit/data.jsonl +0 -0
  74. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md +0 -0
  75. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md +0 -0
  76. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/base/discovery/data.jsonl +0 -0
  77. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/LICENSE.md +0 -0
  78. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/SOURCE.md +0 -0
  79. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/base/collection/data.jsonl +0 -0
  80. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/base/discovery/data.jsonl +0 -0
  81. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/base/execution/data.jsonl +0 -0
  82. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/base/exfiltration/data.jsonl +0 -0
  83. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mitre-stockpile/base/persistence/data.jsonl +0 -0
  84. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mordor/LICENSE.md +0 -0
  85. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mordor/SOURCE.md +0 -0
  86. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/mordor/defensive/threat_hunting/data.jsonl +0 -0
  87. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nist-ir/LICENSE.md +0 -0
  88. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nist-ir/SOURCE.md +0 -0
  89. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nist-ir/defensive/incident_response/data.jsonl +0 -0
  90. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nvidia-garak/LICENSE.md +0 -0
  91. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nvidia-garak/SOURCE.md +0 -0
  92. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/nvidia-garak/ai/jailbreaking/data.jsonl +0 -0
  93. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptfoo/LICENSE.md +0 -0
  94. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptfoo/SOURCE.md +0 -0
  95. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptfoo/ai/prompt-injection/data.jsonl +0 -0
  96. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptmap/LICENSE.md +0 -0
  97. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptmap/SOURCE.md +0 -0
  98. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/promptmap/ai/prompt-injection/data.jsonl +0 -0
  99. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/LICENSE.md +0 -0
  100. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/SOURCE.md +0 -0
  101. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/base/replay/data_code.jsonl +0 -0
  102. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/base/replay/data_conversation.jsonl +0 -0
  103. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/base/replay/data_factual.jsonl +0 -0
  104. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/replay-general/base/replay/data_reasoning.jsonl +0 -0
  105. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/sigma-hq/LICENSE.md +0 -0
  106. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/sigma-hq/SOURCE.md +0 -0
  107. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/sigma-hq/defensive/detection_engineering/data.jsonl +0 -0
  108. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/splunk-content/LICENSE.md +0 -0
  109. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/splunk-content/SOURCE.md +0 -0
  110. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/splunk-content/defensive/detection_engineering/data.jsonl +0 -0
  111. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md +0 -0
  112. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md +0 -0
  113. {attacklm-0.9.0 → attacklm-0.9.2}/data/datasets/buckets/sources/threathunter-playbook/defensive/threat_hunting/data.jsonl +0 -0
  114. {attacklm-0.9.0 → attacklm-0.9.2}/data/golden/prompts.jsonl +0 -0
  115. {attacklm-0.9.0 → attacklm-0.9.2}/data/reference/prompts.jsonl +0 -0
  116. {attacklm-0.9.0 → attacklm-0.9.2}/data/steering/prompts/opsec_aware.txt +0 -0
  117. {attacklm-0.9.0 → attacklm-0.9.2}/data/steering/prompts/opsec_unaware.txt +0 -0
  118. {attacklm-0.9.0 → attacklm-0.9.2}/data/steering/prompts/succinct.txt +0 -0
  119. {attacklm-0.9.0 → attacklm-0.9.2}/data/steering/prompts/verbose.txt +0 -0
  120. {attacklm-0.9.0 → attacklm-0.9.2}/experiments/README.md +0 -0
  121. {attacklm-0.9.0 → attacklm-0.9.2}/experiments/synthetic_dataset_mutator_evol_instruct.py +0 -0
  122. {attacklm-0.9.0 → attacklm-0.9.2}/hf/.gitattributes +0 -0
  123. {attacklm-0.9.0 → attacklm-0.9.2}/hf/README.md +0 -0
  124. {attacklm-0.9.0 → attacklm-0.9.2}/hf/data/manifest.json +0 -0
  125. {attacklm-0.9.0 → attacklm-0.9.2}/hf/dataset_infos.json +0 -0
  126. {attacklm-0.9.0 → attacklm-0.9.2}/hf/scripts/build_hf_dataset.py +0 -0
  127. {attacklm-0.9.0 → attacklm-0.9.2}/hf/scripts/push_to_hf.py +0 -0
  128. {attacklm-0.9.0 → attacklm-0.9.2}/hpo_runs/.gitkeep +0 -0
  129. {attacklm-0.9.0 → attacklm-0.9.2}/hpo_runs/hpo_state.json +0 -0
  130. {attacklm-0.9.0 → attacklm-0.9.2}/hpo_runs/hpo_trial_dataset.jsonl +0 -0
  131. {attacklm-0.9.0 → attacklm-0.9.2}/logs/.gitkeep +0 -0
  132. {attacklm-0.9.0 → attacklm-0.9.2}/pipeline.example.yaml +0 -0
  133. {attacklm-0.9.0 → attacklm-0.9.2}/presets/blue-team.json +0 -0
  134. {attacklm-0.9.0 → attacklm-0.9.2}/presets/deepspeed/README.md +0 -0
  135. {attacklm-0.9.0 → attacklm-0.9.2}/presets/deepspeed/zero2_cpu_offload.json +0 -0
  136. {attacklm-0.9.0 → attacklm-0.9.2}/presets/deepspeed/zero3_cpu_offload.json +0 -0
  137. {attacklm-0.9.0 → attacklm-0.9.2}/presets/deepspeed/zero3_gpu_only.json +0 -0
  138. {attacklm-0.9.0 → attacklm-0.9.2}/presets/purple-team.json +0 -0
  139. {attacklm-0.9.0 → attacklm-0.9.2}/presets/red-team.json +0 -0
  140. {attacklm-0.9.0 → attacklm-0.9.2}/requirements.txt +0 -0
  141. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/_eval_loader.py +0 -0
  142. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_cloud_attack_dataset.py +0 -0
  143. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_ics_dataset.py +0 -0
  144. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_phishing_dataset.py +0 -0
  145. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_red_team_tactics.py +0 -0
  146. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_replay_general.py +0 -0
  147. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_supply_chain_dataset.py +0 -0
  148. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_web_attack_dataset.py +0 -0
  149. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/acquire_wireless_dataset.py +0 -0
  150. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/audit_dataset.py +0 -0
  151. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/balance_buckets.py +0 -0
  152. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/bucket_loader.py +0 -0
  153. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/build.py +0 -0
  154. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/clone_repos.sh +0 -0
  155. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/collect_reference.py +0 -0
  156. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/compare_scores.py +0 -0
  157. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/convert_to_gguf.py +0 -0
  158. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/demo.py +0 -0
  159. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/device_utils.py +0 -0
  160. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/domain_bench.py +0 -0
  161. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/eval_retention.py +0 -0
  162. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/evolve_pairs.py +0 -0
  163. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/evolved_mixer.py +0 -0
  164. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_ai_tools_to_jsonl.py +0 -0
  165. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_atomic_red_team_to_jsonl.py +0 -0
  166. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_by_tactic.py +0 -0
  167. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_caldera_plugins_to_jsonl.py +0 -0
  168. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_elastic_rules.py +0 -0
  169. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_infection_monkey_to_jsonl.py +0 -0
  170. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_mordor.py +0 -0
  171. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_nist_ir.py +0 -0
  172. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_rta_to_jsonl.py +0 -0
  173. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_sigma_defensive.py +0 -0
  174. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_splunk_content.py +0 -0
  175. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/extract_threathunter_playbook.py +0 -0
  176. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/filter_evolved.py +0 -0
  177. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/generate_synthetic_scarce.py +0 -0
  178. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/golden_vectors.py +0 -0
  179. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/hpo_runner.py +0 -0
  180. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/import_gguf.sh +0 -0
  181. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/import_to_lmstudio.sh +0 -0
  182. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/infer.py +0 -0
  183. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/init_pipeline.py +0 -0
  184. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/merge_adapter.py +0 -0
  185. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/mitre_tactic_lookup.py +0 -0
  186. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/package_dataset.py +0 -0
  187. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/parse_metasploit_to_jsonl.py +0 -0
  188. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/pipeline.py +0 -0
  189. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/rebuild_manifest.py +0 -0
  190. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/register_ollama.py +0 -0
  191. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/reorganize_buckets.py +0 -0
  192. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/replay_mixer.py +0 -0
  193. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/score_candidates.py +0 -0
  194. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/setup_buckets.py +0 -0
  195. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/speed_bench.py +0 -0
  196. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/steering.py +0 -0
  197. {attacklm-0.9.0 → attacklm-0.9.2}/scripts/train_all.py +0 -0
  198. {attacklm-0.9.0 → attacklm-0.9.2}/src/attacklm/__init__.py +0 -0
  199. {attacklm-0.9.0 → attacklm-0.9.2}/src/attacklm/_project_root.py +0 -0
  200. {attacklm-0.9.0 → attacklm-0.9.2}/src/attacklm/cli.py +0 -0
  201. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_balance_buckets.py +0 -0
  202. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_collect_reference.py +0 -0
  203. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_compare_scores.py +0 -0
  204. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_domain_bench.py +0 -0
  205. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_eval_loader.py +0 -0
  206. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_eval_retention.py +0 -0
  207. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_evolve_pairs.py +0 -0
  208. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_golden_vectors.py +0 -0
  209. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_init_pipeline.py +0 -0
  210. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_memory_optimization.py +0 -0
  211. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_replay_mixer.py +0 -0
  212. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_score_candidates.py +0 -0
  213. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_speed_bench.py +0 -0
  214. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_steering.py +0 -0
  215. {attacklm-0.9.0 → attacklm-0.9.2}/tests/test_thinking_models.py +0 -0
  216. {attacklm-0.9.0 → attacklm-0.9.2}/uv.lock +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: attacklm
3
- Version: 0.9.0
4
- Summary: QLoRA-fine-tuned Qwen2.5-Coder for offensive/defensive security and AI red-teaming
3
+ Version: 0.9.2
4
+ Summary: A high-performance fine-tuning pipeline (QLoRA, GaLore, Q-GaLore, Spectrum, PiSSA, DeepSpeed) for creating MITRE ATT&CK-grounded security AI assistants
5
5
  Project-URL: Homepage, https://github.com/Veedubin/AttackLM
6
6
  Project-URL: Repository, https://github.com/Veedubin/AttackLM
7
7
  Project-URL: Issues, https://github.com/Veedubin/AttackLM/issues
@@ -26,19 +26,16 @@ Provides-Extra: all
26
26
  Requires-Dist: accelerate==1.14.0; extra == 'all'
27
27
  Requires-Dist: bitsandbytes==0.49.2; extra == 'all'
28
28
  Requires-Dist: datasets==5.0.0; extra == 'all'
29
+ Requires-Dist: deepspeed>=0.16; extra == 'all'
29
30
  Requires-Dist: gguf; extra == 'all'
30
31
  Requires-Dist: huggingface-hub==1.18.0; extra == 'all'
31
- Requires-Dist: ipython; extra == 'all'
32
32
  Requires-Dist: kernels<0.14,>=0.12; extra == 'all'
33
33
  Requires-Dist: llama-cpp-python; extra == 'all'
34
- Requires-Dist: mypy; extra == 'all'
34
+ Requires-Dist: lomo-optim>=0.1; extra == 'all'
35
35
  Requires-Dist: peft==0.19.1; extra == 'all'
36
- Requires-Dist: pytest; extra == 'all'
37
36
  Requires-Dist: pyyaml; extra == 'all'
38
37
  Requires-Dist: requests; extra == 'all'
39
- Requires-Dist: ruff; extra == 'all'
40
38
  Requires-Dist: safetensors==0.7.0; extra == 'all'
41
- Requires-Dist: scipy>=1.11; extra == 'all'
42
39
  Requires-Dist: tokenizers==0.22.2; extra == 'all'
43
40
  Requires-Dist: torch==2.12.0; extra == 'all'
44
41
  Requires-Dist: torchvision==0.27.0; extra == 'all'
@@ -49,10 +46,12 @@ Provides-Extra: all-cuda
49
46
  Requires-Dist: accelerate==1.14.0; extra == 'all-cuda'
50
47
  Requires-Dist: bitsandbytes==0.49.2; extra == 'all-cuda'
51
48
  Requires-Dist: datasets==5.0.0; extra == 'all-cuda'
49
+ Requires-Dist: deepspeed>=0.16; extra == 'all-cuda'
52
50
  Requires-Dist: gguf; extra == 'all-cuda'
53
51
  Requires-Dist: huggingface-hub==1.18.0; extra == 'all-cuda'
54
52
  Requires-Dist: kernels<0.14,>=0.12; extra == 'all-cuda'
55
53
  Requires-Dist: llama-cpp-python; extra == 'all-cuda'
54
+ Requires-Dist: lomo-optim>=0.1; extra == 'all-cuda'
56
55
  Requires-Dist: peft==0.19.1; extra == 'all-cuda'
57
56
  Requires-Dist: pyyaml; extra == 'all-cuda'
58
57
  Requires-Dist: requests; extra == 'all-cuda'
@@ -67,10 +66,12 @@ Provides-Extra: all-rocm
67
66
  Requires-Dist: accelerate==1.14.0; extra == 'all-rocm'
68
67
  Requires-Dist: bitsandbytes==0.49.2; extra == 'all-rocm'
69
68
  Requires-Dist: datasets==5.0.0; extra == 'all-rocm'
69
+ Requires-Dist: deepspeed>=0.16; extra == 'all-rocm'
70
70
  Requires-Dist: gguf; extra == 'all-rocm'
71
71
  Requires-Dist: huggingface-hub==1.18.0; extra == 'all-rocm'
72
72
  Requires-Dist: kernels<0.14,>=0.12; extra == 'all-rocm'
73
73
  Requires-Dist: llama-cpp-python; extra == 'all-rocm'
74
+ Requires-Dist: lomo-optim>=0.1; extra == 'all-rocm'
74
75
  Requires-Dist: peft==0.19.1; extra == 'all-rocm'
75
76
  Requires-Dist: pyyaml; extra == 'all-rocm'
76
77
  Requires-Dist: requests; extra == 'all-rocm'
@@ -149,8 +150,10 @@ Provides-Extra: train
149
150
  Requires-Dist: accelerate==1.14.0; extra == 'train'
150
151
  Requires-Dist: bitsandbytes==0.49.2; extra == 'train'
151
152
  Requires-Dist: datasets==5.0.0; extra == 'train'
153
+ Requires-Dist: deepspeed>=0.16; extra == 'train'
152
154
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train'
153
155
  Requires-Dist: kernels<0.14,>=0.12; extra == 'train'
156
+ Requires-Dist: lomo-optim>=0.1; extra == 'train'
154
157
  Requires-Dist: peft==0.19.1; extra == 'train'
155
158
  Requires-Dist: safetensors==0.7.0; extra == 'train'
156
159
  Requires-Dist: tokenizers==0.22.2; extra == 'train'
@@ -161,8 +164,10 @@ Requires-Dist: trl==1.5.1; extra == 'train'
161
164
  Provides-Extra: train-base
162
165
  Requires-Dist: accelerate==1.14.0; extra == 'train-base'
163
166
  Requires-Dist: datasets==5.0.0; extra == 'train-base'
167
+ Requires-Dist: deepspeed>=0.16; extra == 'train-base'
164
168
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train-base'
165
169
  Requires-Dist: kernels<0.14,>=0.12; extra == 'train-base'
170
+ Requires-Dist: lomo-optim>=0.1; extra == 'train-base'
166
171
  Requires-Dist: peft==0.19.1; extra == 'train-base'
167
172
  Requires-Dist: safetensors==0.7.0; extra == 'train-base'
168
173
  Requires-Dist: tokenizers==0.22.2; extra == 'train-base'
@@ -172,8 +177,10 @@ Provides-Extra: train-cuda
172
177
  Requires-Dist: accelerate==1.14.0; extra == 'train-cuda'
173
178
  Requires-Dist: bitsandbytes==0.49.2; extra == 'train-cuda'
174
179
  Requires-Dist: datasets==5.0.0; extra == 'train-cuda'
180
+ Requires-Dist: deepspeed>=0.16; extra == 'train-cuda'
175
181
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train-cuda'
176
182
  Requires-Dist: kernels<0.14,>=0.12; extra == 'train-cuda'
183
+ Requires-Dist: lomo-optim>=0.1; extra == 'train-cuda'
177
184
  Requires-Dist: peft==0.19.1; extra == 'train-cuda'
178
185
  Requires-Dist: safetensors==0.7.0; extra == 'train-cuda'
179
186
  Requires-Dist: tokenizers==0.22.2; extra == 'train-cuda'
@@ -185,8 +192,10 @@ Provides-Extra: train-rocm
185
192
  Requires-Dist: accelerate==1.14.0; extra == 'train-rocm'
186
193
  Requires-Dist: bitsandbytes==0.49.2; extra == 'train-rocm'
187
194
  Requires-Dist: datasets==5.0.0; extra == 'train-rocm'
195
+ Requires-Dist: deepspeed>=0.16; extra == 'train-rocm'
188
196
  Requires-Dist: huggingface-hub==1.18.0; extra == 'train-rocm'
189
197
  Requires-Dist: kernels<0.14,>=0.12; extra == 'train-rocm'
198
+ Requires-Dist: lomo-optim>=0.1; extra == 'train-rocm'
190
199
  Requires-Dist: peft==0.19.1; extra == 'train-rocm'
191
200
  Requires-Dist: safetensors==0.7.0; extra == 'train-rocm'
192
201
  Requires-Dist: tokenizers==0.22.2; extra == 'train-rocm'
@@ -11,7 +11,7 @@ build-backend = "hatchling.build"
11
11
  [project]
12
12
  name = "attacklm"
13
13
  dynamic = ["version"]
14
- description = "QLoRA-fine-tuned Qwen2.5-Coder for offensive/defensive security and AI red-teaming"
14
+ description = "A high-performance fine-tuning pipeline (QLoRA, GaLore, Q-GaLore, Spectrum, PiSSA, DeepSpeed) for creating MITRE ATT&CK-grounded security AI assistants"
15
15
  readme = "README.md"
16
16
  license = "MIT"
17
17
  requires-python = ">=3.10"
@@ -105,6 +105,8 @@ train-base = [
105
105
  "huggingface-hub==1.18.0",
106
106
  "tokenizers==0.22.2",
107
107
  "safetensors==0.7.0",
108
+ "deepspeed>=0.16",
109
+ "lomo-optim>=0.1",
108
110
  ]
109
111
  infer-base = [
110
112
  "transformers==5.12.1",
@@ -217,7 +219,7 @@ eval = [
217
219
  # at install time. Resolving `attacklm[all]` on a build/CI server without
218
220
  # that index URL would fail.
219
221
  all = [
220
- "attacklm[train-cuda,extract,convert,dev]",
222
+ "attacklm[train-cuda,extract,convert]",
221
223
  ]
222
224
  all-cuda = ["attacklm[train-cuda,extract,convert]"]
223
225
  all-rocm = ["attacklm[train-rocm,extract,convert]"]
@@ -565,6 +565,15 @@ Examples:
565
565
  "Takes precedence over --deepspeed-offload if both are set."
566
566
  ),
567
567
  )
568
+ parser.add_argument(
569
+ "--force-deepspeed-cuda",
570
+ action="store_true",
571
+ default=False,
572
+ help=(
573
+ "Skip DeepSpeed CUDA version check even when major versions differ. "
574
+ "Only use if you know your CUDA toolkit is ABI-compatible with PyTorch's CUDA."
575
+ ),
576
+ )
568
577
 
569
578
  # ---- torch.compile ----
570
579
  parser.add_argument(
@@ -3180,6 +3189,57 @@ def main() -> None:
3180
3189
  # With CPU offload, a 16GB GPU + 64GB RAM can train 40B+ parameter models.
3181
3190
  deepspeed_config_path = None
3182
3191
  if args.use_deepspeed:
3192
+ # DeepSpeed compiles CUDA extensions at runtime and checks that the
3193
+ # system CUDA version exactly matches what PyTorch was compiled with.
3194
+ # CUDA guarantees ABI compatibility within a major version (e.g. 13.0
3195
+ # and 13.3 are compatible), so we only skip the check when the major
3196
+ # versions match. If they differ, we warn and let the user force it.
3197
+ import re, subprocess
3198
+
3199
+ _torch_cuda = getattr(torch.version, "cuda", None) or ""
3200
+ _sys_cuda = ""
3201
+ try:
3202
+ _nvcc = subprocess.run(
3203
+ ["nvcc", "--version"], capture_output=True, text=True, timeout=5
3204
+ )
3205
+ _m = re.search(r"release\s+(\d+\.\d+)", _nvcc.stdout)
3206
+ if _m:
3207
+ _sys_cuda = _m.group(1)
3208
+ except Exception:
3209
+ pass
3210
+
3211
+ if _torch_cuda and _sys_cuda:
3212
+ _torch_major = _torch_cuda.split(".")[0]
3213
+ _sys_major = _sys_cuda.split(".")[0]
3214
+ if _torch_major == _sys_major:
3215
+ os.environ.setdefault("DS_SKIP_CUDA_CHECK", "1")
3216
+ console.print(
3217
+ f" [dim]DeepSpeed:[/dim] CUDA {_sys_cuda} (system) ≈ "
3218
+ f"CUDA {_torch_cuda} (torch) — same major version, "
3219
+ f"skipping strict version check"
3220
+ )
3221
+ else:
3222
+ console.print(
3223
+ f"[yellow]WARNING:[/yellow] System CUDA {_sys_cuda} != "
3224
+ f"torch CUDA {_torch_cuda} (different major versions). "
3225
+ f"DeepSpeed may fail to compile extensions."
3226
+ )
3227
+ console.print(
3228
+ " If you know these are ABI-compatible, set "
3229
+ "DS_SKIP_CUDA_CHECK=1 in your environment."
3230
+ )
3231
+ console.print(" Or pass --force-deepspeed-cuda to skip the check.")
3232
+ if not args.force_deepspeed_cuda:
3233
+ console.print(
3234
+ "[red]ERROR:[/red] Refusing to proceed with CUDA version "
3235
+ "mismatch. Use --force-deepspeed-cuda to override."
3236
+ )
3237
+ sys.exit(1)
3238
+ os.environ["DS_SKIP_CUDA_CHECK"] = "1"
3239
+ else:
3240
+ # Can't detect versions — skip the check and hope for the best
3241
+ os.environ.setdefault("DS_SKIP_CUDA_CHECK", "1")
3242
+
3183
3243
  # Verify deepspeed package is installed
3184
3244
  try:
3185
3245
  import deepspeed # noqa: F401
@@ -0,0 +1 @@
1
+ __version__ = "0.9.2"
@@ -1 +0,0 @@
1
- __version__ = "0.9.0"
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