soup-cli 0.71.8__tar.gz → 0.71.9__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 (795) hide show
  1. {soup_cli-0.71.8 → soup_cli-0.71.9}/CHANGELOG.md +47 -0
  2. {soup_cli-0.71.8 → soup_cli-0.71.9}/CONTRIBUTING.md +1 -1
  3. {soup_cli-0.71.8 → soup_cli-0.71.9}/PKG-INFO +15 -15
  4. {soup_cli-0.71.8 → soup_cli-0.71.9}/README.md +14 -14
  5. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/adapters-and-governance.md +14 -9
  6. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/commands.md +3 -2
  7. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/training.md +8 -3
  8. {soup_cli-0.71.8 → soup_cli-0.71.9}/pyproject.toml +1 -1
  9. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/__init__.py +1 -1
  10. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/edit.py +121 -22
  11. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/train.py +5 -0
  12. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/registry/store.py +3 -0
  13. soup_cli-0.71.9/src/soup_cli/trainer/unlearn.py +443 -0
  14. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/edit_diff.py +87 -18
  15. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/edit_governor.py +258 -1
  16. soup_cli-0.71.9/src/soup_cli/utils/edit_kernels.py +399 -0
  17. soup_cli-0.71.9/src/soup_cli/utils/grace_codebook.py +462 -0
  18. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/knowledge_edit.py +115 -13
  19. soup_cli-0.71.9/src/soup_cli/utils/unlearn_kernels.py +115 -0
  20. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/unlearning.py +16 -12
  21. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0610_part_a.py +26 -9
  22. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0610_part_c.py +57 -11
  23. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_followups.py +31 -14
  24. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_part_e.py +21 -7
  25. soup_cli-0.71.9/tests/test_v0719.py +946 -0
  26. soup_cli-0.71.8/src/soup_cli/trainer/unlearn.py +0 -90
  27. soup_cli-0.71.8/src/soup_cli/utils/grace_codebook.py +0 -102
  28. {soup_cli-0.71.8 → soup_cli-0.71.9}/.dockerignore +0 -0
  29. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/FUNDING.yml +0 -0
  30. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  31. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  33. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/pull_request_template.md +0 -0
  34. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/workflows/ci.yml +0 -0
  35. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/workflows/docker.yml +0 -0
  36. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/workflows/publish.yml +0 -0
  37. {soup_cli-0.71.8 → soup_cli-0.71.9}/.github/workflows/recipe-validation.yml +0 -0
  38. {soup_cli-0.71.8 → soup_cli-0.71.9}/.gitignore +0 -0
  39. {soup_cli-0.71.8 → soup_cli-0.71.9}/.mailmap +0 -0
  40. {soup_cli-0.71.8 → soup_cli-0.71.9}/.pre-commit-config.yaml +0 -0
  41. {soup_cli-0.71.8 → soup_cli-0.71.9}/AGENTS.md +0 -0
  42. {soup_cli-0.71.8 → soup_cli-0.71.9}/CODEOWNERS +0 -0
  43. {soup_cli-0.71.8 → soup_cli-0.71.9}/CODE_OF_CONDUCT.md +0 -0
  44. {soup_cli-0.71.8 → soup_cli-0.71.9}/CONTRIBUTORS.md +0 -0
  45. {soup_cli-0.71.8 → soup_cli-0.71.9}/Dockerfile +0 -0
  46. {soup_cli-0.71.8 → soup_cli-0.71.9}/LICENSE +0 -0
  47. {soup_cli-0.71.8 → soup_cli-0.71.9}/NOTICE +0 -0
  48. {soup_cli-0.71.8 → soup_cli-0.71.9}/SECURITY.md +0 -0
  49. {soup_cli-0.71.8 → soup_cli-0.71.9}/docker-compose.yml +0 -0
  50. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/README.md +0 -0
  51. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/backends-and-ops.md +0 -0
  52. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/data.md +0 -0
  53. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/evaluation.md +0 -0
  54. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/models.md +0 -0
  55. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/peft-and-efficiency.md +0 -0
  56. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/performance-and-quantization.md +0 -0
  57. {soup_cli-0.71.8 → soup_cli-0.71.9}/docs/serving-and-export.md +0 -0
  58. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/README.md +0 -0
  59. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/dpo_chat.yaml +0 -0
  60. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/dpo_example.yaml +0 -0
  61. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/grpo_reasoning.yaml +0 -0
  62. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/rlhf_step1_sft.yaml +0 -0
  63. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/rlhf_step2_reward.yaml +0 -0
  64. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  65. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/sft_basic.yaml +0 -0
  66. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/configs/vision_llama.yaml +0 -0
  67. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/data/alpaca_tiny.jsonl +0 -0
  68. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/data/chat_preferences.jsonl +0 -0
  69. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/data/dpo_sample.jsonl +0 -0
  70. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/data/reasoning_math.jsonl +0 -0
  71. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/synthetic_workflow.md +0 -0
  72. {soup_cli-0.71.8 → soup_cli-0.71.9}/examples/synthetic_workflow.yaml +0 -0
  73. {soup_cli-0.71.8 → soup_cli-0.71.9}/soup.png +0 -0
  74. {soup_cli-0.71.8 → soup_cli-0.71.9}/soup_logo_svg.svg +0 -0
  75. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/__main__.py +0 -0
  76. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/autopilot/__init__.py +0 -0
  77. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/autopilot/analyzer.py +0 -0
  78. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/autopilot/decisions.py +0 -0
  79. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/autopilot/generate_config.py +0 -0
  80. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/__init__.py +0 -0
  81. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/pack.py +0 -0
  82. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/publish.py +0 -0
  83. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/run.py +0 -0
  84. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/schema.py +0 -0
  85. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/unpack.py +0 -0
  86. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cans/verify.py +0 -0
  87. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/cli.py +0 -0
  88. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/__init__.py +0 -0
  89. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0550.py +0 -0
  90. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0610.py +0 -0
  91. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0650.py +0 -0
  92. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/_webhook_cli.py +0 -0
  93. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/ab.py +0 -0
  94. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/active_sample.py +0 -0
  95. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/adapters.py +0 -0
  96. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/advise.py +0 -0
  97. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/agent.py +0 -0
  98. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/airgap.py +0 -0
  99. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/apple_adapter.py +0 -0
  100. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/attest.py +0 -0
  101. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/audit_log.py +0 -0
  102. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/autopilot.py +0 -0
  103. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/bench.py +0 -0
  104. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/bom.py +0 -0
  105. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/build.py +0 -0
  106. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/can.py +0 -0
  107. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/chat.py +0 -0
  108. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/compile_cmd.py +0 -0
  109. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/compile_tools.py +0 -0
  110. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/completions.py +0 -0
  111. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/cost.py +0 -0
  112. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/data.py +0 -0
  113. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/data_forge.py +0 -0
  114. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/data_mix.py +0 -0
  115. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/data_score.py +0 -0
  116. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  117. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/deploy.py +0 -0
  118. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/diagnose.py +0 -0
  119. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/diff.py +0 -0
  120. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/distill_prompt.py +0 -0
  121. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/doctor.py +0 -0
  122. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/drift_alarm.py +0 -0
  123. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/env.py +0 -0
  124. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/eval.py +0 -0
  125. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/expect.py +0 -0
  126. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/export.py +0 -0
  127. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/fetch.py +0 -0
  128. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/generate.py +0 -0
  129. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/history.py +0 -0
  130. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/infer.py +0 -0
  131. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/ingest.py +0 -0
  132. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/init.py +0 -0
  133. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/iterative_dpo.py +0 -0
  134. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/license_advisor.py +0 -0
  135. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/llama.py +0 -0
  136. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/local_rl.py +0 -0
  137. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/lock.py +0 -0
  138. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/loop.py +0 -0
  139. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/merge.py +0 -0
  140. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  141. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/migrate.py +0 -0
  142. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/monitor.py +0 -0
  143. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/plan.py +0 -0
  144. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/plugins.py +0 -0
  145. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/probe.py +0 -0
  146. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/profile.py +0 -0
  147. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/prune_prompt.py +0 -0
  148. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/push.py +0 -0
  149. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/quantize.py +0 -0
  150. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/quickstart.py +0 -0
  151. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/recipes.py +0 -0
  152. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/registry.py +0 -0
  153. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/runs.py +0 -0
  154. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/serve.py +0 -0
  155. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/steer.py +0 -0
  156. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/sweep.py +0 -0
  157. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/tokenizer.py +0 -0
  158. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/tui.py +0 -0
  159. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/tunability.py +0 -0
  160. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/ui.py +0 -0
  161. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/commands/why.py +0 -0
  162. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/config/__init__.py +0 -0
  163. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/config/loader.py +0 -0
  164. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/config/schema.py +0 -0
  165. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/__init__.py +0 -0
  166. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  167. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  168. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  169. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  170. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  171. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  172. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  173. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  174. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  175. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  176. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  177. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  178. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/augment.py +0 -0
  179. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/chat_templates.py +0 -0
  180. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/collators.py +0 -0
  181. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/formats.py +0 -0
  182. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/loader.py +0 -0
  183. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/loss_mask.py +0 -0
  184. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/providers/__init__.py +0 -0
  185. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/providers/_utils.py +0 -0
  186. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/providers/anthropic.py +0 -0
  187. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/providers/ollama.py +0 -0
  188. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/providers/vllm.py +0 -0
  189. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/sft_format.py +0 -0
  190. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/__init__.py +0 -0
  191. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/code.py +0 -0
  192. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/conversation.py +0 -0
  193. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/preference.py +0 -0
  194. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/qa.py +0 -0
  195. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/reasoning.py +0 -0
  196. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/tool_calling.py +0 -0
  197. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/templates/verifiable.py +0 -0
  198. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/traces/__init__.py +0 -0
  199. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/traces/pair_builder.py +0 -0
  200. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/traces/parsers.py +0 -0
  201. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/traces/quality.py +0 -0
  202. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/data/validator.py +0 -0
  203. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/__init__.py +0 -0
  204. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/arena.py +0 -0
  205. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  206. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/calibrate.py +0 -0
  207. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  208. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/custom.py +0 -0
  209. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/forgetting.py +0 -0
  210. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/gate.py +0 -0
  211. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/human.py +0 -0
  212. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/judge.py +0 -0
  213. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/leaderboard.py +0 -0
  214. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/eval/quant_check.py +0 -0
  215. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/experiment/__init__.py +0 -0
  216. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/experiment/tracker.py +0 -0
  217. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/migrate/__init__.py +0 -0
  218. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/migrate/axolotl.py +0 -0
  219. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/migrate/common.py +0 -0
  220. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/migrate/llamafactory.py +0 -0
  221. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/migrate/unsloth.py +0 -0
  222. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/__init__.py +0 -0
  223. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/callback.py +0 -0
  224. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  225. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/display.py +0 -0
  226. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  227. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/hf_push.py +0 -0
  228. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  229. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/monitoring/trace_logger.py +0 -0
  230. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/plugins/__init__.py +0 -0
  231. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/py.typed +0 -0
  232. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/recipes/__init__.py +0 -0
  233. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/recipes/catalog.py +0 -0
  234. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/registry/__init__.py +0 -0
  235. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/registry/attach.py +0 -0
  236. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/registry/diff.py +0 -0
  237. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/registry/hashing.py +0 -0
  238. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/__init__.py +0 -0
  239. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/audio.yaml +0 -0
  240. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/bco.yaml +0 -0
  241. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/chat.yaml +0 -0
  242. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/code.yaml +0 -0
  243. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/embedding.yaml +0 -0
  244. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  245. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  246. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  247. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/ipo.yaml +0 -0
  248. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/kto.yaml +0 -0
  249. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/longcontext.yaml +0 -0
  250. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/manifest.json +0 -0
  251. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/medical.yaml +0 -0
  252. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/moe.yaml +0 -0
  253. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/orpo.yaml +0 -0
  254. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/pretrain.yaml +0 -0
  255. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/reasoning.yaml +0 -0
  256. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/rlhf.yaml +0 -0
  257. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/simpo.yaml +0 -0
  258. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/tool-calling.yaml +0 -0
  259. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/templates/vision.yaml +0 -0
  260. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/__init__.py +0 -0
  261. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/bco.py +0 -0
  262. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/classifier.py +0 -0
  263. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/distill.py +0 -0
  264. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/dpo.py +0 -0
  265. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/embedding.py +0 -0
  266. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/grpo.py +0 -0
  267. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/ipo.py +0 -0
  268. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/kto.py +0 -0
  269. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  270. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  271. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_routing.py +0 -0
  272. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_sft.py +0 -0
  273. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/orpo.py +0 -0
  274. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/ppo.py +0 -0
  275. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/preference.py +0 -0
  276. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/pretrain.py +0 -0
  277. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/prm.py +0 -0
  278. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/reward_model.py +0 -0
  279. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/rewards.py +0 -0
  280. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/sft.py +0 -0
  281. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/trainer/simpo.py +0 -0
  282. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/tui_app.py +0 -0
  283. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/__init__.py +0 -0
  284. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/app.py +0 -0
  285. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/plugins/__init__.py +0 -0
  286. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/static/app.js +0 -0
  287. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/static/index.html +0 -0
  288. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/static/logo.png +0 -0
  289. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/static/logo.svg +0 -0
  290. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/ui/static/style.css +0 -0
  291. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/__init__.py +0 -0
  292. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/_eval_text.py +0 -0
  293. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ab_test.py +0 -0
  294. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/activation_offload.py +0 -0
  295. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/active_sampler.py +0 -0
  296. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_bisect.py +0 -0
  297. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_branch.py +0 -0
  298. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_diff.py +0 -0
  299. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_merge.py +0 -0
  300. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_pr.py +0 -0
  301. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_scan.py +0 -0
  302. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_sign.py +0 -0
  303. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/advanced_precision.py +0 -0
  304. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/advise.py +0 -0
  305. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/advise_history.py +0 -0
  306. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/agent_forge.py +0 -0
  307. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/agent_rollout.py +0 -0
  308. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/airgap_bundle.py +0 -0
  309. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/annex_xi.py +0 -0
  310. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/anthropic_messages.py +0 -0
  311. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/apple_adapter.py +0 -0
  312. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/attest.py +0 -0
  313. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/audit_log.py +0 -0
  314. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/auto_quant.py +0 -0
  315. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/backend_detect.py +0 -0
  316. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/batch_probe.py +0 -0
  317. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/behavior_battery.py +0 -0
  318. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/bitnet.py +0 -0
  319. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/blame.py +0 -0
  320. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/block_expansion.py +0 -0
  321. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/bom.py +0 -0
  322. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/brain_rot.py +0 -0
  323. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  324. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/build_dag.py +0 -0
  325. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/canary_discovery.py +0 -0
  326. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/canary_router.py +0 -0
  327. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/capability_suite.py +0 -0
  328. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/checklist_dsl.py +0 -0
  329. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  330. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/citation_faithful.py +0 -0
  331. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/classifier.py +0 -0
  332. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/cmaes_merge.py +0 -0
  333. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/compile_tools.py +0 -0
  334. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/completions.py +0 -0
  335. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/constants.py +0 -0
  336. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/convergence.py +0 -0
  337. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/crash.py +0 -0
  338. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  339. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/curriculum.py +0 -0
  340. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  341. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/cut_ce.py +0 -0
  342. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/data_forge.py +0 -0
  343. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/data_mix.py +0 -0
  344. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/data_pipeline.py +0 -0
  345. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/data_score.py +0 -0
  346. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/deepspeed.py +0 -0
  347. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  348. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/demo_bundles.py +0 -0
  349. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  350. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/deploy_measure.py +0 -0
  351. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  352. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/_common.py +0 -0
  353. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/badge.py +0 -0
  354. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  355. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  356. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/format.py +0 -0
  357. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/live.py +0 -0
  358. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  359. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  360. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  361. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/report.py +0 -0
  362. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/runner.py +0 -0
  363. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/distill.py +0 -0
  364. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/dpo_variants.py +0 -0
  365. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/drift_alarm.py +0 -0
  366. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  367. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/echo_trap.py +0 -0
  368. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/encoding.py +0 -0
  369. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/energy.py +0 -0
  370. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/env_lock.py +0 -0
  371. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/errors.py +0 -0
  372. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/eval_design.py +0 -0
  373. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  374. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  375. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/expectations.py +0 -0
  376. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/fetch_examples.py +0 -0
  377. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/flash_attn.py +0 -0
  378. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/fp8.py +0 -0
  379. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/freeze.py +0 -0
  380. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/fsdp.py +0 -0
  381. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  382. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/galore.py +0 -0
  383. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/gguf_quant.py +0 -0
  384. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/gpu.py +0 -0
  385. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/gpu_monitor.py +0 -0
  386. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/graceful_save.py +0 -0
  387. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/grad_accum.py +0 -0
  388. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  389. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/grpo_long_context.py +0 -0
  390. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/grpo_variants.py +0 -0
  391. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/hardware_fit.py +0 -0
  392. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/harm_probe.py +0 -0
  393. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/hf.py +0 -0
  394. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/hf_space.py +0 -0
  395. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/hubs.py +0 -0
  396. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ingest_sources.py +0 -0
  397. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/integrations.py +0 -0
  398. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/interference.py +0 -0
  399. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/interference_live.py +0 -0
  400. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/irt.py +0 -0
  401. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/iterative_dpo.py +0 -0
  402. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  403. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/kernel_picker.py +0 -0
  404. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/kv_cache.py +0 -0
  405. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/launcher.py +0 -0
  406. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/license_advisor.py +0 -0
  407. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/license_matrix.py +0 -0
  408. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/liger.py +0 -0
  409. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/live_eval.py +0 -0
  410. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/llama_proxy.py +0 -0
  411. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/llama_server_timings.py +0 -0
  412. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/local_rl.py +0 -0
  413. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loftq_init.py +0 -0
  414. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/log_level.py +0 -0
  415. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/long_context.py +0 -0
  416. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/longlora.py +0 -0
  417. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loop_budget.py +0 -0
  418. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loop_daemon.py +0 -0
  419. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loop_iteration.py +0 -0
  420. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loop_stages.py +0 -0
  421. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/loop_state.py +0 -0
  422. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/lr_finder.py +0 -0
  423. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/lr_groups.py +0 -0
  424. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/magpie.py +0 -0
  425. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/metrics.py +0 -0
  426. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/mii.py +0 -0
  427. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/minillm.py +0 -0
  428. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/mix_proxy.py +0 -0
  429. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/mixed_precision.py +0 -0
  430. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/mlx.py +0 -0
  431. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/moe.py +0 -0
  432. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/moe_quant.py +0 -0
  433. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/mole_routing.py +0 -0
  434. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/multipack.py +0 -0
  435. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/multipack_sampler.py +0 -0
  436. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/multipack_trainer.py +0 -0
  437. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/namespace_pin.py +0 -0
  438. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/neat_packing.py +0 -0
  439. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ngram_spec.py +0 -0
  440. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/nlg_metrics.py +0 -0
  441. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ollama.py +0 -0
  442. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/onboarding.py +0 -0
  443. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  444. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/paths.py +0 -0
  445. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/peft_builder.py +0 -0
  446. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/peft_patches.py +0 -0
  447. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/peft_wiring.py +0 -0
  448. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/persona_hub.py +0 -0
  449. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/pipeline.py +0 -0
  450. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/preference_combine.py +0 -0
  451. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/prm.py +0 -0
  452. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/probe_kernel.py +0 -0
  453. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/probe_pack.py +0 -0
  454. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/profiler.py +0 -0
  455. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/profiling.py +0 -0
  456. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  457. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/prompt_compile.py +0 -0
  458. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/prompt_distill.py +0 -0
  459. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/prune_prompt.py +0 -0
  460. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/qat.py +0 -0
  461. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/qr_url.py +0 -0
  462. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/quality.py +0 -0
  463. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/quant_menu.py +0 -0
  464. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ra_dit.py +0 -0
  465. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/reasoning_effort.py +0 -0
  466. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/reasoning_parser.py +0 -0
  467. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/recipe_dag.py +0 -0
  468. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/recipe_run.py +0 -0
  469. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/registry.py +0 -0
  470. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/relora.py +0 -0
  471. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/replay.py +0 -0
  472. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/repro_receipt.py +0 -0
  473. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/reward_hacking.py +0 -0
  474. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ring_attention.py +0 -0
  475. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  476. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/run_cost.py +0 -0
  477. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/sae_diff.py +0 -0
  478. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/save_formats.py +0 -0
  479. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/server_tools.py +0 -0
  480. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/sglang.py +0 -0
  481. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/shortcuts.py +0 -0
  482. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/signing.py +0 -0
  483. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/sleeper_probe.py +0 -0
  484. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/soup_lock.py +0 -0
  485. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/spec_pairing.py +0 -0
  486. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/spike_recovery.py +0 -0
  487. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/sse_train_stream.py +0 -0
  488. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/steering.py +0 -0
  489. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/strict_safetensors.py +0 -0
  490. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/structured_output.py +0 -0
  491. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/sweep_config.py +0 -0
  492. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/tail_latency.py +0 -0
  493. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/terraform_plan.py +0 -0
  494. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/tool_outputs.py +0 -0
  495. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/topology.py +0 -0
  496. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/tracing.py +0 -0
  497. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/trackers.py +0 -0
  498. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/train_event_buffer.py +0 -0
  499. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/trainer_plugins.py +0 -0
  500. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/trust_remote.py +0 -0
  501. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/truth_probe.py +0 -0
  502. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/tts.py +0 -0
  503. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/tunability.py +0 -0
  504. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/ui_env.py +0 -0
  505. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/uld.py +0 -0
  506. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/unlearning_eval.py +0 -0
  507. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/unsloth.py +0 -0
  508. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/v028_features.py +0 -0
  509. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/vector_bank.py +0 -0
  510. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/vllm.py +0 -0
  511. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/vscode_setup.py +0 -0
  512. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/warmup.py +0 -0
  513. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/webhooks.py +0 -0
  514. {soup_cli-0.71.8 → soup_cli-0.71.9}/src/soup_cli/utils/why.py +0 -0
  515. {soup_cli-0.71.8 → soup_cli-0.71.9}/templates/chat.yaml +0 -0
  516. {soup_cli-0.71.8 → soup_cli-0.71.9}/templates/code.yaml +0 -0
  517. {soup_cli-0.71.8 → soup_cli-0.71.9}/templates/medical.yaml +0 -0
  518. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/__init__.py +0 -0
  519. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/conftest.py +0 -0
  520. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/qa/v053_qa.md +0 -0
  521. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/qa/v0716_qa.md +0 -0
  522. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_adapters.py +0 -0
  523. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_advanced_peft.py +0 -0
  524. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_assistant_mask.py +0 -0
  525. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_audio.py +0 -0
  526. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_auto_tuning.py +0 -0
  527. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_autopilot.py +0 -0
  528. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_awq_gptq_export.py +0 -0
  529. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_batch_probe.py +0 -0
  530. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_bco.py +0 -0
  531. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_bench.py +0 -0
  532. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_brain_rot_multilingual.py +0 -0
  533. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_bugfixes.py +0 -0
  534. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_callback.py +0 -0
  535. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_cans.py +0 -0
  536. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_chat.py +0 -0
  537. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_chat_template.py +0 -0
  538. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_cli.py +0 -0
  539. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_cli_subprocess.py +0 -0
  540. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_config.py +0 -0
  541. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_cost.py +0 -0
  542. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_crash_reporter.py +0 -0
  543. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_curriculum.py +0 -0
  544. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_data.py +0 -0
  545. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_data_augment.py +0 -0
  546. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_data_sample.py +0 -0
  547. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_data_split.py +0 -0
  548. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_data_tools.py +0 -0
  549. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_dataset_hub.py +0 -0
  550. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_dataset_registry.py +0 -0
  551. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_deepspeed.py +0 -0
  552. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_deploy_ollama.py +0 -0
  553. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_diff.py +0 -0
  554. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_display.py +0 -0
  555. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_doctor.py +0 -0
  556. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_dpo_example.py +0 -0
  557. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_dpo_variants.py +0 -0
  558. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_embedding.py +0 -0
  559. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_errors.py +0 -0
  560. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_eval.py +0 -0
  561. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_eval_gate.py +0 -0
  562. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_eval_platform.py +0 -0
  563. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_export.py +0 -0
  564. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_formats.py +0 -0
  565. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_fp8_recipe.py +0 -0
  566. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_freeze_training.py +0 -0
  567. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_generate.py +0 -0
  568. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_gpu.py +0 -0
  569. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_grpo.py +0 -0
  570. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_hf_integration.py +0 -0
  571. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_infer.py +0 -0
  572. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_inference_advanced.py +0 -0
  573. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_init.py +0 -0
  574. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ipo.py +0 -0
  575. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_jinja_analyzer.py +0 -0
  576. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_kto.py +0 -0
  577. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_loader.py +0 -0
  578. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_log_level.py +0 -0
  579. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_loss_watchdog.py +0 -0
  580. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_merge.py +0 -0
  581. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_migrate.py +0 -0
  582. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_mlx_backend.py +0 -0
  583. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_moe.py +0 -0
  584. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_multi_adapter.py +0 -0
  585. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_multi_gpu.py +0 -0
  586. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_multipack_config.py +0 -0
  587. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_multipack_invariants.py +0 -0
  588. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_multipack_sampler.py +0 -0
  589. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_neat_packing.py +0 -0
  590. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_neftune_rslora.py +0 -0
  591. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_onnx_tensorrt_export.py +0 -0
  592. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_orpo.py +0 -0
  593. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_packing.py +0 -0
  594. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_a_wave1.py +0 -0
  595. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_a_wave2.py +0 -0
  596. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_b.py +0 -0
  597. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_c.py +0 -0
  598. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_d.py +0 -0
  599. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_e.py +0 -0
  600. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_part_f_hardening.py +0 -0
  601. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_peft_methods.py +0 -0
  602. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_peft_patches.py +0 -0
  603. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_performance.py +0 -0
  604. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_pissa_init.py +0 -0
  605. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ppo.py +0 -0
  606. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_preference_dispatcher.py +0 -0
  607. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_preference_multi.py +0 -0
  608. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_preference_multi_runtime.py +0 -0
  609. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_pretrain.py +0 -0
  610. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_profile.py +0 -0
  611. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_profiling.py +0 -0
  612. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_progress.py +0 -0
  613. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_push.py +0 -0
  614. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_qat.py +0 -0
  615. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_quality_filter.py +0 -0
  616. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_quant_check.py +0 -0
  617. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_quant_menu.py +0 -0
  618. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_quickstart.py +0 -0
  619. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_rank_pattern.py +0 -0
  620. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_recipes.py +0 -0
  621. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_recipes_v031.py +0 -0
  622. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_refusal_multilingual.py +0 -0
  623. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_registry.py +0 -0
  624. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_relora.py +0 -0
  625. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_replay.py +0 -0
  626. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_resume.py +0 -0
  627. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_rlvr.py +0 -0
  628. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_run_cost.py +0 -0
  629. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_runs.py +0 -0
  630. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_serve.py +0 -0
  631. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_server_generate.py +0 -0
  632. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_sglang_serve.py +0 -0
  633. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_simpo.py +0 -0
  634. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_smoke_train.py +0 -0
  635. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_speculative_decoding.py +0 -0
  636. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_sweep.py +0 -0
  637. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_synth_data_pro.py +0 -0
  638. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_templates_yaml.py +0 -0
  639. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_tensorboard.py +0 -0
  640. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_tool_calling.py +0 -0
  641. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_trace_to_pref.py +0 -0
  642. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_tracker.py +0 -0
  643. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_trainer_coverage_v035.py +0 -0
  644. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_trainer_init.py +0 -0
  645. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_training_intelligence.py +0 -0
  646. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_training_speed.py +0 -0
  647. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_trust_remote_code.py +0 -0
  648. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_tui.py +0 -0
  649. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ui.py +0 -0
  650. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ui_chat.py +0 -0
  651. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ui_config_builder.py +0 -0
  652. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ui_live_monitor.py +0 -0
  653. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_ui_metrics.py +0 -0
  654. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_unsloth.py +0 -0
  655. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0401_part_c.py +0 -0
  656. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0401_part_d.py +0 -0
  657. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0401_part_e.py +0 -0
  658. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0402_part_a.py +0 -0
  659. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0402_part_b.py +0 -0
  660. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0403_part_a.py +0 -0
  661. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0403_part_b.py +0 -0
  662. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0403_part_c.py +0 -0
  663. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0404_part_a.py +0 -0
  664. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0404_part_b.py +0 -0
  665. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0405_part_a.py +0 -0
  666. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0406_part_a.py +0 -0
  667. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0410_part_a.py +0 -0
  668. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0410_part_b.py +0 -0
  669. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0410_part_c.py +0 -0
  670. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0420.py +0 -0
  671. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0430_part_a.py +0 -0
  672. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0430_part_b.py +0 -0
  673. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0430_part_c.py +0 -0
  674. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0430_part_d.py +0 -0
  675. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0440_part_a.py +0 -0
  676. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0440_part_b.py +0 -0
  677. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0440_part_c.py +0 -0
  678. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0440_part_d.py +0 -0
  679. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0440_review_followups.py +0 -0
  680. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0450.py +0 -0
  681. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0460_part_a.py +0 -0
  682. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0460_part_b.py +0 -0
  683. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0470_part_a.py +0 -0
  684. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0470_part_b.py +0 -0
  685. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0480_part_a.py +0 -0
  686. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0480_part_b.py +0 -0
  687. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0490.py +0 -0
  688. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0500_part_a.py +0 -0
  689. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0500_part_b.py +0 -0
  690. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0500_part_c.py +0 -0
  691. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0500_part_d.py +0 -0
  692. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0500_part_e.py +0 -0
  693. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0510.py +0 -0
  694. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0520.py +0 -0
  695. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0530.py +0 -0
  696. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v05310.py +0 -0
  697. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v05311.py +0 -0
  698. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0531_109.py +0 -0
  699. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0531_139.py +0 -0
  700. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0531_142.py +0 -0
  701. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0531_82.py +0 -0
  702. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0532.py +0 -0
  703. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0533.py +0 -0
  704. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0534.py +0 -0
  705. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0535.py +0 -0
  706. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0536.py +0 -0
  707. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0537.py +0 -0
  708. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0538.py +0 -0
  709. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0539.py +0 -0
  710. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0540.py +0 -0
  711. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0550.py +0 -0
  712. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0550_followups.py +0 -0
  713. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0560.py +0 -0
  714. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0570_part_a.py +0 -0
  715. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0570_part_b.py +0 -0
  716. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0570_part_c.py +0 -0
  717. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0570_part_d.py +0 -0
  718. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0580.py +0 -0
  719. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0590.py +0 -0
  720. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_a.py +0 -0
  721. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_b.py +0 -0
  722. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_c.py +0 -0
  723. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_d.py +0 -0
  724. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_e.py +0 -0
  725. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0600_part_f.py +0 -0
  726. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0610_part_b.py +0 -0
  727. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0610_part_d.py +0 -0
  728. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0610_part_e.py +0 -0
  729. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_part_a.py +0 -0
  730. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_part_b.py +0 -0
  731. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_part_c.py +0 -0
  732. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0620_part_d.py +0 -0
  733. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_followups.py +0 -0
  734. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_part_a.py +0 -0
  735. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_part_b.py +0 -0
  736. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_part_c.py +0 -0
  737. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_part_d.py +0 -0
  738. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0630_part_e.py +0 -0
  739. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0631_206.py +0 -0
  740. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_followups.py +0 -0
  741. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_a.py +0 -0
  742. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_b.py +0 -0
  743. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_c.py +0 -0
  744. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_d.py +0 -0
  745. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_e.py +0 -0
  746. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0640_part_f.py +0 -0
  747. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_followups.py +0 -0
  748. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_part_a.py +0 -0
  749. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_part_b.py +0 -0
  750. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_part_c.py +0 -0
  751. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_part_d.py +0 -0
  752. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0650_part_e.py +0 -0
  753. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_cli.py +0 -0
  754. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_followups.py +0 -0
  755. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_part_a.py +0 -0
  756. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_part_b.py +0 -0
  757. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_part_c.py +0 -0
  758. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_part_d.py +0 -0
  759. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0660_part_e.py +0 -0
  760. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_followups.py +0 -0
  761. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_a.py +0 -0
  762. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_b.py +0 -0
  763. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_c.py +0 -0
  764. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_d.py +0 -0
  765. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_e.py +0 -0
  766. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0670_part_f.py +0 -0
  767. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_followups.py +0 -0
  768. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_part_a.py +0 -0
  769. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_part_b.py +0 -0
  770. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_part_c.py +0 -0
  771. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_part_d.py +0 -0
  772. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0680_part_e.py +0 -0
  773. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0690_part_a.py +0 -0
  774. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0690_part_b.py +0 -0
  775. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0690_part_c.py +0 -0
  776. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0690_part_d.py +0 -0
  777. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0690_part_e.py +0 -0
  778. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_a.py +0 -0
  779. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_b.py +0 -0
  780. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_c.py +0 -0
  781. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_d.py +0 -0
  782. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_e.py +0 -0
  783. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0700_part_f.py +0 -0
  784. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0712.py +0 -0
  785. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0713.py +0 -0
  786. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0714.py +0 -0
  787. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0715.py +0 -0
  788. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0716.py +0 -0
  789. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0717.py +0 -0
  790. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_v0718.py +0 -0
  791. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_validator.py +0 -0
  792. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_vision.py +0 -0
  793. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_vllm_serve.py +0 -0
  794. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_why.py +0 -0
  795. {soup_cli-0.71.8 → soup_cli-0.71.9}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,53 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.9] - 2026-06-03
16
+
17
+ ### Added
18
+ - **Knowledge edit + unlearn — live wiring** (closes #193, #194, #196, #197,
19
+ #203). The v0.61.0 / v0.62.0 schema-only stubs are now live, validated on
20
+ SmolLM2-135M.
21
+ - **`soup edit set` (ROME / MEMIT / AlphaEdit) is live** (#194). New
22
+ `soup_cli/utils/edit_kernels.py` ships covariance-free rank-1 weight-edit
23
+ kernels: ROME (single-layer `W += δ·kᵀ/‖k‖²`), MEMIT (residual distributed
24
+ across a layer band), AlphaEdit (ROME update projected orthogonal to the
25
+ down-proj's top singular direction). `apply_edit` loads the model, optimises
26
+ the target residual, applies the rank-1 update, and optionally saves with
27
+ cwd-containment + symlink rejection. `--output`, `--device`, `--governor/
28
+ --no-governor` flags added. On a tiny model a ROME edit moved
29
+ `P("Lyon" | "The capital of France is")` from 0.0016 → 0.96.
30
+ - **`soup edit diff` live before/after generation** (#194). Pass
31
+ `--before-model` + `--after-model` (+ `--probes`) to generate completions
32
+ through both models and surface the probes whose output changed.
33
+ - **EditGovernor SQLite persistence + cross-process locking** (#196). New
34
+ `EditGovernorStore` (mirrors `namespace_pin.NamespacePinStore` —
35
+ $HOME/$CWD/$TMPDIR containment, TOCTOU symlink rejection, WAL +
36
+ busy_timeout, `fcntl`/`msvcrt` sidecar lock, POSIX 0600). `save_governor` /
37
+ `load_governor` / `default_governor_db_path` (env override
38
+ `SOUP_EDIT_GOVERNOR_DB`) persist per-base-model edit-count + verdict across
39
+ separate `soup edit set` runs.
40
+ - **`apply_edit` consults the EditGovernor automatically** (#197). When a
41
+ governor is supplied, `check_can_edit()` runs BEFORE the model load (refusing
42
+ on norm blowup / edit cap) and `record_edit()` runs AFTER with the measured
43
+ Frobenius delta.
44
+ - **Live GRACE codebook** (#203). `GraceCodebook` (epsilon-ball nearest-key
45
+ lookup), `apply_grace_edit` (captures a residual key + optimises a value +
46
+ appends to a codebook sidecar), `save_codebook` / `load_codebook` (atomic,
47
+ cwd-contained, symlink-rejected), `install_grace_hook` (decode-time residual
48
+ substitution). New `edited_model` / `grace_codebook` Registry artifact kinds.
49
+ - **`soup train --task unlearn` is live (NPO / SimNPO / RMU)** (#193). New
50
+ `soup_cli/utils/unlearn_kernels.py` (NPO `(2/β)·mean(-logσ(-β(πlp-reflp)))`,
51
+ length-normalised SimNPO, RMU representation steering) + a self-contained
52
+ `UnlearnTrainerWrapper` loop loading a LoRA policy, a frozen reference
53
+ (NPO/RMU), and forget/retain JSONL datasets. NPO/SimNPO forget loss
54
+ decreased on the tiny-model smoke. Warns when run without a retain set.
55
+
56
+ ### Security
57
+ - `_save_edited_model` / `UnlearnTrainerWrapper` output dirs + `save_codebook`
58
+ / `load_codebook` + `_load_unlearn_rows` enforce cwd-containment, raw-path
59
+ symlink rejection (TOCTOU), null-byte rejection, and file-size / per-line
60
+ caps. `apply_grace_edit` honours the governor for direct callers.
61
+
15
62
  ## [0.71.8] - 2026-06-03
16
63
 
17
64
  ### Added
@@ -120,7 +120,7 @@ src/soup_cli/
120
120
  templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
121
121
  ui/ - Web UI (FastAPI + HTML/JS SPA)
122
122
 
123
- tests/ - Test suite (278 files, 12917 tests)
123
+ tests/ - Test suite (279 files, 12998 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.8
3
+ Version: 0.71.9
4
4
  Summary: Fine-tune LLMs in one command. No SSH, no config hell.
5
5
  Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
6
6
  Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
@@ -183,20 +183,20 @@ infrastructure instead of improving models. Soup fixes that.
183
183
 
184
184
  ## What's New
185
185
 
186
- **v0.71.8Probes & SAE.** The activation-probe surfaces ship real weights, live SAE downloads,
187
- and an end-to-end capture → diff pipeline:
188
-
189
- - **`soup probe truth` / `soup probe harm`** — TruthfulQA-style honesty and HarmBench-style misuse
190
- activation probes (6 bundled bases each, 5% / 20% verdict bands). `--weights` loads a real
191
- calibrated probe; without it the bundled deterministic fallback is used.
192
- - **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** load a real calibrated sleeper
193
- probe direction instead of the synthetic fallback (cwd-contained, `allow_pickle=False`).
194
- - **`soup probe sae-diff <repo> --auto-download`** — fetch an allowlisted SAE from the HF Hub into
195
- `~/.soup/sae-cache/` (validated before any network call) and diff pre/post activations.
196
- - **`soup probe interference --measure <eval.jsonl> --base-model <m> --adapter a=path ...`**
197
- auto-measure the N×N adapter-interference matrix by actually loading the base + each LoRA adapter.
198
- - **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** a post-training hook
199
- writes an SAE-diff-ready per-token activation snapshot. Validated end-to-end on SmolLM2-135M.
186
+ **v0.71.9Knowledge edit + unlearn (live).** The surgical-edit and unlearning surfaces are now
187
+ real, validated on SmolLM2-135M:
188
+
189
+ - **`soup edit set --method rome|memit|alphaedit`** — surgical rank-1 weight edit that patches one
190
+ fact without re-training. On a tiny model a ROME edit moved P("Lyon" | "The capital of France is")
191
+ from 0.0016 0.96. `--output` saves the edited model; `--governor` refuses edits after norm blowup.
192
+ - **`soup edit diff --before-model <m> --after-model <m> --probes p.jsonl`** generate completions
193
+ through both models and surface the probes whose output changed.
194
+ - **`soup edit set --method grace`** — GRACE codebook edit: stores the fact in a discrete
195
+ (key, value) sidecar applied at decode time via a forward hook (survives thousands of edits).
196
+ - **Sequential-edit governor persistence** per-base-model edit count + verdict survive across
197
+ separate `soup edit set` runs (SQLite, cross-process-locked).
198
+ - **`soup train --task unlearn`** NPO / SimNPO / RMU unlearning from a `forget_set` (+ optional
199
+ `retain_set`); NPO/SimNPO drive the forget-set loss down while the retain set anchors capability.
200
200
 
201
201
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
202
202
 
@@ -49,20 +49,20 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.8Probes & SAE.** The activation-probe surfaces ship real weights, live SAE downloads,
53
- and an end-to-end capture → diff pipeline:
54
-
55
- - **`soup probe truth` / `soup probe harm`** — TruthfulQA-style honesty and HarmBench-style misuse
56
- activation probes (6 bundled bases each, 5% / 20% verdict bands). `--weights` loads a real
57
- calibrated probe; without it the bundled deterministic fallback is used.
58
- - **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** load a real calibrated sleeper
59
- probe direction instead of the synthetic fallback (cwd-contained, `allow_pickle=False`).
60
- - **`soup probe sae-diff <repo> --auto-download`** — fetch an allowlisted SAE from the HF Hub into
61
- `~/.soup/sae-cache/` (validated before any network call) and diff pre/post activations.
62
- - **`soup probe interference --measure <eval.jsonl> --base-model <m> --adapter a=path ...`**
63
- auto-measure the N×N adapter-interference matrix by actually loading the base + each LoRA adapter.
64
- - **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** a post-training hook
65
- writes an SAE-diff-ready per-token activation snapshot. Validated end-to-end on SmolLM2-135M.
52
+ **v0.71.9Knowledge edit + unlearn (live).** The surgical-edit and unlearning surfaces are now
53
+ real, validated on SmolLM2-135M:
54
+
55
+ - **`soup edit set --method rome|memit|alphaedit`** — surgical rank-1 weight edit that patches one
56
+ fact without re-training. On a tiny model a ROME edit moved P("Lyon" | "The capital of France is")
57
+ from 0.0016 0.96. `--output` saves the edited model; `--governor` refuses edits after norm blowup.
58
+ - **`soup edit diff --before-model <m> --after-model <m> --probes p.jsonl`** generate completions
59
+ through both models and surface the probes whose output changed.
60
+ - **`soup edit set --method grace`** — GRACE codebook edit: stores the fact in a discrete
61
+ (key, value) sidecar applied at decode time via a forward hook (survives thousands of edits).
62
+ - **Sequential-edit governor persistence** per-base-model edit count + verdict survive across
63
+ separate `soup edit set` runs (SQLite, cross-process-locked).
64
+ - **`soup train --task unlearn`** NPO / SimNPO / RMU unlearning from a `forget_set` (+ optional
65
+ `retain_set`); NPO/SimNPO drive the forget-set loss down while the retain set anchors capability.
66
66
 
67
67
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
68
68
 
@@ -139,21 +139,26 @@ State lives in `.soup/loop.yaml` (atomic write, cwd-contained, symlink-rejected)
139
139
  Surgical factual patches WITHOUT a full fine-tuning loop. Hospital data team correcting a misattributed drug interaction, lab fixing a wrong historical date, security team responding to a hallucinated CVE — all one CLI invocation.
140
140
 
141
141
  ```bash
142
- # Plan-only mode validates the request + prints the resolved EditPlan + exits 0.
142
+ # Live edit: optimises a residual + applies a rank-1 weight update, then saves.
143
143
  soup edit set \
144
- --base meta-llama/Llama-3.1-8B-Instruct \
144
+ --base HuggingFaceTB/SmolLM2-135M \
145
145
  --method rome \
146
- --subject "Paris is the capital of France" \
146
+ --subject "The capital of France is" \
147
147
  --target "Lyon" \
148
- --plan-only
148
+ --output ./edited --device cuda
149
+
150
+ # Plan-only mode validates the request + prints the resolved EditPlan + exits 0.
151
+ soup edit set --base ./model --method rome --subject "..." --target "..." --plan-only
149
152
 
150
- # Diff what the model "knew" before vs after the edit.
151
- soup edit diff <run-id-before> <run-id-after> --probes probes.jsonl --output diff.json
153
+ # Diff what the model says before vs after the edit (live generation).
154
+ soup edit diff before after \
155
+ --before-model ./base --after-model ./edited \
156
+ --probes probes.jsonl --output diff.json
152
157
  ```
153
158
 
154
- Sequential edit governor auto-switches **ROME AlphaEdit** at edit #10 (configurable) AND on detected norm-blowup (`||W - W_base||_F` over threshold). The governor refuses further edits past the per-base-model cap so a runaway script can't quietly corrupt your checkpoint.
159
+ The kernels are a covariance-free (`C = I`) variant of the ROME family well-defined, tractable on a 4 GB box, and validated on SmolLM2-135M (a ROME edit moved `P("Lyon" | "The capital of France is")` from 0.0016 0.96). **ROME** edits a single layer; **MEMIT** distributes the residual across a layer band; **AlphaEdit** projects the update orthogonal to the down-proj's top singular direction.
155
160
 
156
- The live ROME / MEMIT / AlphaEdit kernel + before/after generation in `edit diff` land in the next patch; `--plan-only` and the schema surface ship today so soup.yaml and CI invocations are stable.
161
+ The sequential edit governor is persisted (SQLite, cross-process-locked, `SOUP_EDIT_GOVERNOR_DB` override) so the per-base-model edit count + norm-blowup verdict survive across separate `soup edit set` runs. `soup edit set` consults it automatically: it refuses BEFORE the model load past the per-base cap or after a BLOWUP verdict, and records the measured `||ΔW||_F` after each edit. Pass `--no-governor` to opt out. `--registry-id <id>` attaches the edited model (or GRACE codebook) into the Registry lineage.
157
162
 
158
163
 
159
164
  ## Activation Steering (`soup steer`)
@@ -197,7 +202,7 @@ training:
197
202
  grace_codebook_dim: 768 # residual-stream width
198
203
  ```
199
204
 
200
- `grace` joins the existing `rome` / `memit` / `alphaedit` allowlist on `soup edit set`; the v0.61.0 sequential edit governor still gates the call when the per-base-model edit count or norm-blowup verdict trips.
205
+ `grace` joins the existing `rome` / `memit` / `alphaedit` allowlist on `soup edit set`; the sequential edit governor still gates the call when the per-base-model edit count or norm-blowup verdict trips. GRACE is live: `soup edit set --method grace --output ./ckpt` captures the residual key at the subject's last token, optimises a replacement value, and appends a `(key, value)` triple to a `grace_codebook.json` sidecar (atomic, cwd-contained). At inference the codebook is applied via a forward hook that substitutes the residual whenever it falls within an epsilon ball of a stored key — so the base weights are never modified and thousands of edits survive without norm blowup.
201
206
 
202
207
 
203
208
  ## Model Registry & Lineage
@@ -168,8 +168,9 @@ soup can pack --entry-id <id> --out r.can --attest <statement.json> Embed in-to
168
168
  soup audit-log tail / rotate Tail / rotate the per-command HIPAA/SOC2 audit log (~/.soup/audit.jsonl)
169
169
  soup --no-audit-log <cmd> / SOUP_NO_AUDIT_LOG=1 Opt out of the per-command audit line
170
170
  soup eval unlearning <run-id> --benchmark tofu|muse|wmdp Forget Quality + Model Utility + PrivLeak verdict
171
- soup edit set --base <m> --method rome|memit|alphaedit --subject "..." --target "..." Surgical knowledge edit (--plan-only available)
172
- soup edit diff <before-run> <after-run> --probes p.jsonl Knowledge-injection diff visualizer
171
+ soup edit set --base <m> --method rome|memit|alphaedit|grace --subject "..." --target "..." [--output <dir>] [--device cpu] [--governor/--no-governor] [--registry-id <id>] Live surgical knowledge edit (--plan-only available)
172
+ soup edit diff <before-run> <after-run> --probes p.jsonl [--before-model <m> --after-model <m>] Knowledge-injection diff (live before/after generation when both models given)
173
+ soup train --task unlearn NPO/SimNPO/RMU unlearning from data.forget_set (+ optional data.retain_set)
173
174
  soup ingest --source langfuse|langsmith|helicone|openpipe|otel|openai-stored --logs <jsonl> Universal trace importer (6 SaaS adapters → normalised JSONL)
174
175
  soup prune-prompt --input <jsonl> --output <jsonl> --min-frequency 0.95 Detect + strip shared system-prompt prefix
175
176
  soup prune-prompt ... --tokenizer <id-or-path> Tokenizer-aware prefix detection (decodes remaining ids, boundary-safe)
@@ -101,22 +101,27 @@ GDPR right-to-be-forgotten + CSAM/PII leak response, productized. Three method b
101
101
 
102
102
  ```yaml
103
103
  # unlearn.yaml
104
- base: meta-llama/Llama-3.1-8B-Instruct
104
+ base: HuggingFaceTB/SmolLM2-135M
105
105
  task: unlearn
106
106
  data:
107
107
  train: traces.jsonl
108
- forget_set: gdpr_deletion_set.jsonl
109
- retain_set: capability_anchors.jsonl
108
+ forget_set: gdpr_deletion_set.jsonl # rows to unlearn (messages / prompt+completion / text)
109
+ retain_set: capability_anchors.jsonl # optional — anchors general capability
110
110
  training:
111
111
  unlearn_method: npo # or simnpo / rmu
112
112
  unlearn_alpha: 0.5 # retain-set weighting [0.0, 10.0]
113
113
  ```
114
114
 
115
115
  ```bash
116
+ # Run the unlearn loop (validated on SmolLM2-135M — NPO/SimNPO drive forget loss down).
117
+ soup train --config unlearn.yaml --yes
118
+
116
119
  # Score the run on TOFU / MUSE / WMDP (OK / MINOR / MAJOR verdict).
117
120
  soup eval unlearning <run-id> --benchmark tofu --evidence evidence.json --output report.json
118
121
  ```
119
122
 
123
+ `soup train --task unlearn` is live (v0.71.9): it loads a LoRA-wrapped policy, a frozen reference copy (NPO / RMU), and the forget / retain JSONL sets, then optimises the per-method loss — NPO's `(2/β)·mean(-logσ(-β·(π_logp − ref_logp)))` drives the policy's forget-set log-prob below the reference (= forgetting), while the retain set anchors capability. Run NPO/SimNPO **with** a `retain_set` — without one the policy has no utility anchor and Soup warns loudly.
124
+
120
125
  Three orthogonal axes: **Forget Quality** (pre/post forget-loss delta), **Model Utility** (retain-accuracy preserved), **PrivLeak** (membership-inference AUC distance from 0.5). Bundled mini-fixtures for all three benchmarks ship in the box (v0.71.1 added MUSE + WMDP alongside the existing TOFU set), so `--benchmark muse|wmdp` runs without supplying evidence. The WMDP forget-set probes ship **redacted** (placeholder prompts + `REFUSED` responses) — Soup never bundles verbatim hazardous-knowledge content.
121
126
 
122
127
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.8"
7
+ version = "0.71.9"
8
8
  description = "Fine-tune LLMs in one command. No SSH, no config hell."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """Soup CLI — Fine-tune LLMs in one command."""
2
2
 
3
- __version__ = "0.71.8"
3
+ __version__ = "0.71.9"
@@ -49,13 +49,25 @@ def set_edit(
49
49
  None, "--layer", "-l",
50
50
  help="MLP layer index to edit (defaults to method-specific recommended layer).",
51
51
  ),
52
+ output: Optional[str] = typer.Option(
53
+ None, "--output", "-o",
54
+ help="Directory to save the edited model / GRACE codebook (cwd-contained).",
55
+ ),
56
+ device: Optional[str] = typer.Option(
57
+ None, "--device",
58
+ help="torch device (cpu / cuda). Defaults to CUDA when available.",
59
+ ),
60
+ use_governor: bool = typer.Option(
61
+ True, "--governor/--no-governor",
62
+ help="Consult the sequential-edit governor (refuse on norm blowup).",
63
+ ),
52
64
  plan_only: bool = typer.Option(
53
65
  False, "--plan-only",
54
- help="Print the resolved EditPlan and exit without applying (deferred to v0.61.1).",
66
+ help="Print the resolved EditPlan and exit without applying.",
55
67
  ),
56
68
  registry_id: Optional[str] = typer.Option(
57
69
  None, "--registry-id",
58
- help="Optional Registry entry id to attach the edited model as a child (v0.61.1).",
70
+ help="Optional Registry entry id to attach the edited model as a child.",
59
71
  ),
60
72
  ) -> None:
61
73
  """Apply a single surgical knowledge edit."""
@@ -97,32 +109,103 @@ def set_edit(
97
109
  )
98
110
  console.print(Panel(body, title="EditPlan", border_style="cyan"))
99
111
 
100
- if registry_id is not None:
101
- console.print(
102
- f"[dim]Will attach as Registry child of {escape(registry_id)} "
103
- f"once v0.61.1 lands.[/]"
104
- )
105
-
106
112
  if plan_only:
107
113
  console.print("[green]Plan-only mode — exiting without applying.[/]")
108
114
  return
109
115
 
110
- # Live apply: raises NotImplementedError with explicit v0.61.1 marker.
111
- # Exit code 3 distinguishes "deferred / not yet shipped" from "exit 2
112
- # = validation rejection" (matches v0.56.0 diagnose strict-mode policy).
116
+ # Load a persisted governor so sequential edits across separate `soup edit
117
+ # set` runs accumulate (#196 / #197). Best-effort a missing / unreadable
118
+ # governor DB never blocks an edit.
119
+ governor = None
120
+ store = None
121
+ if use_governor:
122
+ try:
123
+ from soup_cli.utils.edit_governor import (
124
+ EditGovernorStore,
125
+ default_governor_db_path,
126
+ load_governor,
127
+ save_governor,
128
+ )
129
+
130
+ store = EditGovernorStore(default_governor_db_path())
131
+ governor = load_governor(store, plan.base)
132
+ except (ValueError, OSError) as exc:
133
+ console.print(f"[dim]Governor disabled ({escape(str(exc))}).[/]")
134
+ governor = None
135
+ store = None
136
+
137
+ from soup_cli.utils.edit_governor import GovernedEditError
138
+
113
139
  try:
114
- apply_edit(plan)
115
- except NotImplementedError as exc:
140
+ result = apply_edit(
141
+ plan,
142
+ output_dir=output,
143
+ governor=governor,
144
+ device=device,
145
+ )
146
+ except GovernedEditError as exc:
116
147
  console.print(
117
148
  Panel(
118
- f"[yellow]{escape(str(exc))}[/]\n\n"
119
- f"Re-run with [bold]--plan-only[/] to validate the request "
120
- f"and exit 0 until v0.61.1 lands the live kernel.",
121
- title="Live edit deferred",
122
- border_style="yellow",
149
+ f"[red]Edit refused by governor:[/] {escape(str(exc))}",
150
+ title="Sequential-edit governor",
151
+ border_style="red",
123
152
  )
124
153
  )
125
- raise typer.Exit(3) from exc
154
+ if store is not None:
155
+ store.close()
156
+ raise typer.Exit(2) from exc
157
+ except (ValueError, RuntimeError, OSError) as exc:
158
+ console.print(f"[red]Edit failed:[/] {escape(str(exc))}")
159
+ if store is not None:
160
+ store.close()
161
+ raise typer.Exit(2) from exc
162
+
163
+ # Persist the updated governor state so the next edit sees the new count.
164
+ if governor is not None and store is not None:
165
+ try:
166
+ save_governor(store, governor)
167
+ except (ValueError, OSError):
168
+ pass
169
+ finally:
170
+ store.close()
171
+
172
+ console.print(
173
+ Panel(
174
+ f"[bold]Method:[/] {escape(result.method)}\n"
175
+ f"[bold]Layers edited:[/] {list(result.layers_edited)}\n"
176
+ f"[bold]Norm delta:[/] {result.norm_delta:.4f}\n"
177
+ f"[bold]Target prob:[/] {result.target_prob_before:.4f} -> "
178
+ f"{result.target_prob_after:.4f}\n"
179
+ + (
180
+ f"[bold]Saved:[/] {escape(result.output_dir)}\n"
181
+ if result.output_dir
182
+ else ""
183
+ )
184
+ + (
185
+ f"[bold]Governor:[/] count="
186
+ f"{governor.edit_count} verdict={escape(governor.last_verdict)}"
187
+ if governor is not None
188
+ else "[dim]Governor disabled.[/]"
189
+ ),
190
+ title="Edit applied",
191
+ border_style="green",
192
+ )
193
+ )
194
+
195
+ if registry_id is not None and result.output_dir is not None:
196
+ from soup_cli.registry.attach import attach_artifact
197
+
198
+ kind = "grace_codebook" if result.method == "grace" else "edited_model"
199
+ try:
200
+ attach_artifact(registry_id, path=result.output_dir, kind=kind)
201
+ console.print(
202
+ f"[green]Attached {kind} to Registry entry "
203
+ f"{escape(registry_id)}.[/]"
204
+ )
205
+ except (ValueError, FileNotFoundError) as exc:
206
+ console.print(
207
+ f"[yellow]Could not attach to Registry:[/] {escape(str(exc))}"
208
+ )
126
209
 
127
210
 
128
211
  @app.command(name="diff")
@@ -148,12 +231,25 @@ def diff_edit(
148
231
  10, "--top-k", "-k",
149
232
  help="Number of changed facts to surface (1-100).",
150
233
  ),
234
+ before_model: Optional[str] = typer.Option(
235
+ None, "--before-model",
236
+ help="Model path / HF id of the BEFORE model (enables live generation).",
237
+ ),
238
+ after_model: Optional[str] = typer.Option(
239
+ None, "--after-model",
240
+ help="Model path / HF id of the AFTER model (enables live generation).",
241
+ ),
242
+ device: Optional[str] = typer.Option(
243
+ None, "--device",
244
+ help="torch device (cpu / cuda). Defaults to CUDA when available.",
245
+ ),
151
246
  ) -> None:
152
247
  """Knowledge-injection diff: facts changed between before / after.
153
248
 
154
- Schema-only in v0.61.0 actual model loading + generation is the
155
- v0.61.1 deliverable. This release validates inputs + renders a
156
- placeholder diff table so the CLI surface is stable.
249
+ Pass both ``--before-model`` and ``--after-model`` (plus ``--probes``) to
250
+ generate the diff LIVE (v0.71.9 #194): each probe is run through both
251
+ models and changed completions are surfaced. Without model paths the
252
+ report is a validated placeholder.
157
253
  """
158
254
  from soup_cli.utils.edit_diff import build_diff_report, render_diff_table
159
255
 
@@ -163,6 +259,9 @@ def diff_edit(
163
259
  after_run_id=after,
164
260
  probe_file=probe_file,
165
261
  top_k=top_k,
262
+ before_model=before_model,
263
+ after_model=after_model,
264
+ device=device,
166
265
  )
167
266
  except (TypeError, ValueError, FileNotFoundError) as exc:
168
267
  console.print(f"[red]Cannot build diff:[/] {escape(str(exc))}")
@@ -904,6 +904,11 @@ def train(
904
904
  from soup_cli.trainer.classifier import ClassifierTrainerWrapper
905
905
 
906
906
  trainer_wrapper = ClassifierTrainerWrapper(cfg, **trainer_kwargs)
907
+ elif cfg.task == "unlearn":
908
+ # v0.71.9 #193 — NPO / SimNPO / RMU unlearning.
909
+ from soup_cli.trainer.unlearn import UnlearnTrainerWrapper
910
+
911
+ trainer_wrapper = UnlearnTrainerWrapper(cfg, **trainer_kwargs)
907
912
  else:
908
913
  trainer_wrapper = SFTTrainerWrapper(cfg, **trainer_kwargs)
909
914
  trainer_wrapper.setup(dataset)
@@ -47,6 +47,9 @@ _VALID_KINDS = frozenset(
47
47
  "judge_calibration",
48
48
  # v0.71.4 #173 — adapter branch-pointer JSON files.
49
49
  "branch_ref",
50
+ # v0.71.9 #194/#203 — knowledge-edited models + GRACE codebooks.
51
+ "edited_model",
52
+ "grace_codebook",
50
53
  }
51
54
  )
52
55
  _VALID_RELATIONS = frozenset(