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.
Files changed (208) hide show
  1. {attacklm-0.5.1 → attacklm-0.5.2}/PKG-INFO +42 -31
  2. {attacklm-0.5.1 → attacklm-0.5.2}/README.md +41 -30
  3. attacklm-0.5.2/src/attacklm/__version__.py +1 -0
  4. attacklm-0.5.1/src/attacklm/__version__.py +0 -1
  5. {attacklm-0.5.1 → attacklm-0.5.2}/.github/workflows/release.yml +0 -0
  6. {attacklm-0.5.1 → attacklm-0.5.2}/.gitignore +0 -0
  7. {attacklm-0.5.1 → attacklm-0.5.2}/ATTRIBUTION.md +0 -0
  8. {attacklm-0.5.1 → attacklm-0.5.2}/CHANGELOG.md +0 -0
  9. {attacklm-0.5.1 → attacklm-0.5.2}/CONTRIBUTING.md +0 -0
  10. {attacklm-0.5.1 → attacklm-0.5.2}/EVALUATION.md +0 -0
  11. {attacklm-0.5.1 → attacklm-0.5.2}/LICENSE +0 -0
  12. {attacklm-0.5.1 → attacklm-0.5.2}/MANIFEST.in +0 -0
  13. {attacklm-0.5.1 → attacklm-0.5.2}/Makefile +0 -0
  14. {attacklm-0.5.1 → attacklm-0.5.2}/NOTICE +0 -0
  15. {attacklm-0.5.1 → attacklm-0.5.2}/QA_BEFORE_RELEASES.md +0 -0
  16. {attacklm-0.5.1 → attacklm-0.5.2}/REPLAY_PLAN.md +0 -0
  17. {attacklm-0.5.1 → attacklm-0.5.2}/data/ATTRIBUTION.md +0 -0
  18. {attacklm-0.5.1 → attacklm-0.5.2}/data/LEGAL.md +0 -0
  19. {attacklm-0.5.1 → attacklm-0.5.2}/data/REMOVAL.md +0 -0
  20. {attacklm-0.5.1 → attacklm-0.5.2}/data/bench/questions.jsonl +0 -0
  21. {attacklm-0.5.1 → attacklm-0.5.2}/data/bench/speed_context.txt +0 -0
  22. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/ATTRIBUTION.md +0 -0
  23. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/GEMINI_RESEARCH_2026-06-11.md +0 -0
  24. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/acquisition_report.json +0 -0
  25. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/manifest.json +0 -0
  26. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/README.md +0 -0
  27. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/_index.json +0 -0
  28. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/LICENSE.md +0 -0
  29. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/SOURCE.md +0 -0
  30. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/collection/data.jsonl +0 -0
  31. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/discovery/data.jsonl +0 -0
  32. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/execution/data.jsonl +0 -0
  33. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/exfiltration/data.jsonl +0 -0
  34. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/atomic-red-team/base/persistence/data.jsonl +0 -0
  35. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/LICENSE.md +0 -0
  36. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/SOURCE.md +0 -0
  37. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/attacklm-synthetic/orchestrator/data.jsonl +0 -0
  38. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/azure-pyrit/LICENSE.md +0 -0
  39. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/azure-pyrit/SOURCE.md +0 -0
  40. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/cyberark-fuzzyai/LICENSE.md +0 -0
  41. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/cyberark-fuzzyai/SOURCE.md +0 -0
  42. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/elastic-rules/LICENSE.md +0 -0
  43. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/elastic-rules/SOURCE.md +0 -0
  44. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/LICENSE.md +0 -0
  45. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/SOURCE.md +0 -0
  46. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/cloud/attacks/data_llm.jsonl +0 -0
  47. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/ics/attacks/data_llm.jsonl +0 -0
  48. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/social_engineering/phishing/data_llm.jsonl +0 -0
  49. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/llm-generated/wireless/attacks/data_llm.jsonl +0 -0
  50. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/LICENSE.md +0 -0
  51. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/SOURCE.md +0 -0
  52. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/collection/data.jsonl +0 -0
  53. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/credential_access/data.jsonl +0 -0
  54. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/defense_evasion/data.jsonl +0 -0
  55. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/discovery/data.jsonl +0 -0
  56. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/execution/data.jsonl +0 -0
  57. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/lateral_movement/data.jsonl +0 -0
  58. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/persistence/data.jsonl +0 -0
  59. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/base/privilege_escalation/data.jsonl +0 -0
  60. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/metasploit-framework/tools/metasploit/data.jsonl +0 -0
  61. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/LICENSE.md +0 -0
  62. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/SOURCE.md +0 -0
  63. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-atlas-arsenal/base/discovery/data.jsonl +0 -0
  64. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/LICENSE.md +0 -0
  65. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/SOURCE.md +0 -0
  66. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/collection/data.jsonl +0 -0
  67. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/discovery/data.jsonl +0 -0
  68. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/execution/data.jsonl +0 -0
  69. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/exfiltration/data.jsonl +0 -0
  70. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mitre-stockpile/base/persistence/data.jsonl +0 -0
  71. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mordor/LICENSE.md +0 -0
  72. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/mordor/SOURCE.md +0 -0
  73. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nist-ir/LICENSE.md +0 -0
  74. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nist-ir/SOURCE.md +0 -0
  75. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/LICENSE.md +0 -0
  76. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/SOURCE.md +0 -0
  77. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/nvidia-garak/ai/jailbreaking/data.jsonl +0 -0
  78. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/LICENSE.md +0 -0
  79. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/SOURCE.md +0 -0
  80. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptfoo/ai/prompt-injection/data.jsonl +0 -0
  81. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/LICENSE.md +0 -0
  82. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/SOURCE.md +0 -0
  83. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/promptmap/ai/prompt-injection/data.jsonl +0 -0
  84. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/LICENSE.md +0 -0
  85. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/SOURCE.md +0 -0
  86. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_code.jsonl +0 -0
  87. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_conversation.jsonl +0 -0
  88. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_factual.jsonl +0 -0
  89. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/replay-general/base/replay/data_reasoning.jsonl +0 -0
  90. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/sigma-hq/LICENSE.md +0 -0
  91. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/sigma-hq/SOURCE.md +0 -0
  92. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/splunk-content/LICENSE.md +0 -0
  93. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/splunk-content/SOURCE.md +0 -0
  94. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/LICENSE.md +0 -0
  95. {attacklm-0.5.1 → attacklm-0.5.2}/data/datasets/buckets/sources/threathunter-playbook/SOURCE.md +0 -0
  96. {attacklm-0.5.1 → attacklm-0.5.2}/data/golden/prompts.jsonl +0 -0
  97. {attacklm-0.5.1 → attacklm-0.5.2}/data/reference/prompts.jsonl +0 -0
  98. {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/opsec_aware.txt +0 -0
  99. {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/opsec_unaware.txt +0 -0
  100. {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/succinct.txt +0 -0
  101. {attacklm-0.5.1 → attacklm-0.5.2}/data/steering/prompts/verbose.txt +0 -0
  102. {attacklm-0.5.1 → attacklm-0.5.2}/experiments/README.md +0 -0
  103. {attacklm-0.5.1 → attacklm-0.5.2}/experiments/synthetic_dataset_mutator_evol_instruct.py +0 -0
  104. {attacklm-0.5.1 → attacklm-0.5.2}/hf/.gitattributes +0 -0
  105. {attacklm-0.5.1 → attacklm-0.5.2}/hf/README.md +0 -0
  106. {attacklm-0.5.1 → attacklm-0.5.2}/hf/data/manifest.json +0 -0
  107. {attacklm-0.5.1 → attacklm-0.5.2}/hf/dataset_infos.json +0 -0
  108. {attacklm-0.5.1 → attacklm-0.5.2}/hf/scripts/build_hf_dataset.py +0 -0
  109. {attacklm-0.5.1 → attacklm-0.5.2}/hf/scripts/push_to_hf.py +0 -0
  110. {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/.gitkeep +0 -0
  111. {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/hpo_state.json +0 -0
  112. {attacklm-0.5.1 → attacklm-0.5.2}/hpo_runs/hpo_trial_dataset.jsonl +0 -0
  113. {attacklm-0.5.1 → attacklm-0.5.2}/logs/.gitkeep +0 -0
  114. {attacklm-0.5.1 → attacklm-0.5.2}/notes/BLUE_TEAM_DESIGN_v0.5.0.md +0 -0
  115. {attacklm-0.5.1 → attacklm-0.5.2}/notes/EVAL_DESIGN_v0.4.0.md +0 -0
  116. {attacklm-0.5.1 → attacklm-0.5.2}/notes/STEERING_REVIEW_v0.4.0.md +0 -0
  117. {attacklm-0.5.1 → attacklm-0.5.2}/presets/blue-team.json +0 -0
  118. {attacklm-0.5.1 → attacklm-0.5.2}/presets/purple-team.json +0 -0
  119. {attacklm-0.5.1 → attacklm-0.5.2}/presets/red-team.json +0 -0
  120. {attacklm-0.5.1 → attacklm-0.5.2}/pyproject.toml +0 -0
  121. {attacklm-0.5.1 → attacklm-0.5.2}/requirements.txt +0 -0
  122. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/_eval_loader.py +0 -0
  123. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_cloud_attack_dataset.py +0 -0
  124. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_ics_dataset.py +0 -0
  125. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_phishing_dataset.py +0 -0
  126. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_red_team_tactics.py +0 -0
  127. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_replay_general.py +0 -0
  128. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_supply_chain_dataset.py +0 -0
  129. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_web_attack_dataset.py +0 -0
  130. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/acquire_wireless_dataset.py +0 -0
  131. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/add_attribution.py +0 -0
  132. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/audit_dataset.py +0 -0
  133. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/augment_attribution.py +0 -0
  134. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/balance_buckets.py +0 -0
  135. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/bucket_loader.py +0 -0
  136. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/build.py +0 -0
  137. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/classify_unrouted_modules.py +0 -0
  138. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/clone_repos.sh +0 -0
  139. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/collect_reference.py +0 -0
  140. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/compare_scores.py +0 -0
  141. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/convert_to_gguf.py +0 -0
  142. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/dedupe_and_import_llm.py +0 -0
  143. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/demo.py +0 -0
  144. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/device_utils.py +0 -0
  145. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/domain_bench.py +0 -0
  146. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/eval_retention.py +0 -0
  147. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_ai_tools_to_jsonl.py +0 -0
  148. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_atomic_red_team_to_jsonl.py +0 -0
  149. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_by_tactic.py +0 -0
  150. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_caldera_plugins_to_jsonl.py +0 -0
  151. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_elastic_rules.py +0 -0
  152. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_infection_monkey_to_jsonl.py +0 -0
  153. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_mordor.py +0 -0
  154. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_nist_ir.py +0 -0
  155. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_rta_to_jsonl.py +0 -0
  156. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_sigma_defensive.py +0 -0
  157. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_splunk_content.py +0 -0
  158. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/extract_threathunter_playbook.py +0 -0
  159. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_dataset.py +0 -0
  160. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_dataset_deterministic.py +0 -0
  161. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_hybrid_dataset.py +0 -0
  162. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_metasploit_dataset.py +0 -0
  163. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_orchestrator.py +0 -0
  164. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_prompt_injection.py +0 -0
  165. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_source_layout.py +0 -0
  166. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/generate_synthetic_scarce.py +0 -0
  167. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/golden_vectors.py +0 -0
  168. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/hpo_runner.py +0 -0
  169. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/import_gguf.sh +0 -0
  170. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/import_to_lmstudio.sh +0 -0
  171. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/infer.py +0 -0
  172. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/init_pipeline.py +0 -0
  173. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/llm_generate_wrapper.py +0 -0
  174. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/merge_adapter.py +0 -0
  175. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/migrate_buckets_to_v021.py +0 -0
  176. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/migrate_v015_to_v020.py +0 -0
  177. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/mitre_tactic_lookup.py +0 -0
  178. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/parse_metasploit_to_jsonl.py +0 -0
  179. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/rebuild_manifest.py +0 -0
  180. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/register_ollama.py +0 -0
  181. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/reorganize_buckets.py +0 -0
  182. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/replay_mixer.py +0 -0
  183. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/run_all_acquisitions.py +0 -0
  184. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/score_candidates.py +0 -0
  185. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/scrub_bpl_callback.py +0 -0
  186. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/setup_buckets.py +0 -0
  187. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/speed_bench.py +0 -0
  188. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/stamp_and_reorg.py +0 -0
  189. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/steering.py +0 -0
  190. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/train_all.py +0 -0
  191. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/train_template.py +0 -0
  192. {attacklm-0.5.1 → attacklm-0.5.2}/scripts/validate_per_category.py +0 -0
  193. {attacklm-0.5.1 → attacklm-0.5.2}/src/attacklm/__init__.py +0 -0
  194. {attacklm-0.5.1 → attacklm-0.5.2}/src/attacklm/cli.py +0 -0
  195. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_balance_buckets.py +0 -0
  196. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_collect_reference.py +0 -0
  197. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_compare_scores.py +0 -0
  198. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_domain_bench.py +0 -0
  199. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_eval_loader.py +0 -0
  200. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_eval_retention.py +0 -0
  201. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_golden_vectors.py +0 -0
  202. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_init_pipeline.py +0 -0
  203. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_replay_mixer.py +0 -0
  204. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_score_candidates.py +0 -0
  205. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_speed_bench.py +0 -0
  206. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_steering.py +0 -0
  207. {attacklm-0.5.1 → attacklm-0.5.2}/tests/test_thinking_models.py +0 -0
  208. {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.1
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: MIT](https://img.shields.io/badge/code-MIT-blue.svg)](LICENSE)
214
+ [![PyPI version](https://img.shields.io/pypi/v/attacklm.svg)](https://pypi.org/project/attacklm/)
214
215
  [![Training data: mixed](https://img.shields.io/badge/data-mixed%20%28see%20ATTRIBUTION%29-orange.svg)](ATTRIBUTION.md)
215
216
  [![Python 3.13](https://img.shields.io/badge/python-3.13-blue.svg)](requirements.txt)
216
217
  [![Model: 3B-7B Qwen2.5](https://img.shields.io/badge/base%20model-Qwen2.5--Coder--3B--Instruct-green.svg)](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 (5 min)
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. Clone this repo
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
- # 3a. Install as a Python package (gets you 11 `attacklm-*` commands)
284
- # — use `[all]` to get every optional dependency
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
- # Or, if you just want the bare CLI dispatchers (no ML stack):
288
- # uv pip install -e .
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
- # 3b. Alternative: classic uv-managed venv with all deps in pyproject.toml
291
- # uv sync
299
+ ### Option B: Install from source (if you want to modify the code)
292
300
 
293
- # 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
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
- # The single command above replaces steps 4–7 below. If you'd rather
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: MIT](https://img.shields.io/badge/code-MIT-blue.svg)](LICENSE)
7
+ [![PyPI version](https://img.shields.io/pypi/v/attacklm.svg)](https://pypi.org/project/attacklm/)
7
8
  [![Training data: mixed](https://img.shields.io/badge/data-mixed%20%28see%20ATTRIBUTION%29-orange.svg)](ATTRIBUTION.md)
8
9
  [![Python 3.13](https://img.shields.io/badge/python-3.13-blue.svg)](requirements.txt)
9
10
  [![Model: 3B-7B Qwen2.5](https://img.shields.io/badge/base%20model-Qwen2.5--Coder--3B--Instruct-green.svg)](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 (5 min)
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. Clone this repo
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
- # 3a. Install as a Python package (gets you 11 `attacklm-*` commands)
77
- # — use `[all]` to get every optional dependency
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
- # Or, if you just want the bare CLI dispatchers (no ML stack):
81
- # uv pip install -e .
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
- # 3b. Alternative: classic uv-managed venv with all deps in pyproject.toml
84
- # uv sync
92
+ ### Option B: Install from source (if you want to modify the code)
85
93
 
86
- # 4. Initialize the dataset (probes local `data/` first; falls back to git clone)
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
- # The single command above replaces steps 4–7 below. If you'd rather
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
File without changes
File without changes