soup-cli 0.71.25__tar.gz → 0.71.26__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 (835) hide show
  1. {soup_cli-0.71.25 → soup_cli-0.71.26}/CHANGELOG.md +38 -0
  2. {soup_cli-0.71.25 → soup_cli-0.71.26}/CONTRIBUTING.md +3 -3
  3. {soup_cli-0.71.25 → soup_cli-0.71.26}/CONTRIBUTORS.md +1 -0
  4. {soup_cli-0.71.25 → soup_cli-0.71.26}/PKG-INFO +13 -12
  5. {soup_cli-0.71.25 → soup_cli-0.71.26}/README.md +13 -12
  6. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/README.md +1 -1
  7. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/commands.md +2 -1
  8. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/serving-and-export.md +2 -2
  9. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/training.md +15 -0
  10. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/README.md +11 -0
  11. soup_cli-0.71.26/examples/reward_hacking/rewards.py +83 -0
  12. {soup_cli-0.71.25 → soup_cli-0.71.26}/pyproject.toml +1 -1
  13. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/__init__.py +1 -1
  14. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/train.py +77 -0
  15. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/schema.py +437 -4
  16. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/trace_logger.py +5 -0
  17. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/recipes/catalog.py +29 -1
  18. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/grpo.py +5 -0
  19. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/ppo.py +40 -0
  20. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/peft_wiring.py +166 -45
  21. soup_cli-0.71.26/src/soup_cli/utils/reward_hack_control.py +1122 -0
  22. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/reward_hacking.py +12 -0
  23. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/rl_checkpoint.py +78 -11
  24. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_recipes.py +3 -2
  25. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07124.py +3 -3
  26. soup_cli-0.71.26/tests/test_v07126.py +2315 -0
  27. {soup_cli-0.71.25 → soup_cli-0.71.26}/.dockerignore +0 -0
  28. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/FUNDING.yml +0 -0
  29. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  30. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  32. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/pull_request_template.md +0 -0
  33. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/ci.yml +0 -0
  34. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/docker.yml +0 -0
  35. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/publish.yml +0 -0
  36. {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/recipe-validation.yml +0 -0
  37. {soup_cli-0.71.25 → soup_cli-0.71.26}/.gitignore +0 -0
  38. {soup_cli-0.71.25 → soup_cli-0.71.26}/.mailmap +0 -0
  39. {soup_cli-0.71.25 → soup_cli-0.71.26}/.pre-commit-config.yaml +0 -0
  40. {soup_cli-0.71.25 → soup_cli-0.71.26}/AGENTS.md +0 -0
  41. {soup_cli-0.71.25 → soup_cli-0.71.26}/CODEOWNERS +0 -0
  42. {soup_cli-0.71.25 → soup_cli-0.71.26}/CODE_OF_CONDUCT.md +0 -0
  43. {soup_cli-0.71.25 → soup_cli-0.71.26}/Dockerfile +0 -0
  44. {soup_cli-0.71.25 → soup_cli-0.71.26}/LICENSE +0 -0
  45. {soup_cli-0.71.25 → soup_cli-0.71.26}/NOTICE +0 -0
  46. {soup_cli-0.71.25 → soup_cli-0.71.26}/SECURITY.md +0 -0
  47. {soup_cli-0.71.25 → soup_cli-0.71.26}/docker-compose.yml +0 -0
  48. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/adapters-and-governance.md +0 -0
  49. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/backends-and-ops.md +0 -0
  50. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/data.md +0 -0
  51. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/evaluation.md +0 -0
  52. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/models.md +0 -0
  53. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/peft-and-efficiency.md +0 -0
  54. {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/performance-and-quantization.md +0 -0
  55. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/dpo_chat.yaml +0 -0
  56. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/dpo_example.yaml +0 -0
  57. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/grpo_reasoning.yaml +0 -0
  58. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step1_sft.yaml +0 -0
  59. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step2_reward.yaml +0 -0
  60. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  61. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/sft_basic.yaml +0 -0
  62. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/vision_llama.yaml +0 -0
  63. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/alpaca_tiny.jsonl +0 -0
  64. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/chat_preferences.jsonl +0 -0
  65. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/dpo_sample.jsonl +0 -0
  66. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/reasoning_math.jsonl +0 -0
  67. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/synthetic_workflow.md +0 -0
  68. {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/synthetic_workflow.yaml +0 -0
  69. {soup_cli-0.71.25 → soup_cli-0.71.26}/soup.png +0 -0
  70. {soup_cli-0.71.25 → soup_cli-0.71.26}/soup_logo_svg.svg +0 -0
  71. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/__main__.py +0 -0
  72. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/__init__.py +0 -0
  73. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/analyzer.py +0 -0
  74. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/decisions.py +0 -0
  75. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/generate_config.py +0 -0
  76. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/__init__.py +0 -0
  77. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/pack.py +0 -0
  78. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/publish.py +0 -0
  79. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/run.py +0 -0
  80. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/schema.py +0 -0
  81. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/unpack.py +0 -0
  82. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/verify.py +0 -0
  83. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cli.py +0 -0
  84. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cloud/__init__.py +0 -0
  85. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cloud/modal.py +0 -0
  86. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/__init__.py +0 -0
  87. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0550.py +0 -0
  88. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0610.py +0 -0
  89. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0650.py +0 -0
  90. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v07110.py +0 -0
  91. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_webhook_cli.py +0 -0
  92. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ab.py +0 -0
  93. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/active_sample.py +0 -0
  94. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/adapters.py +0 -0
  95. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/advise.py +0 -0
  96. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/agent.py +0 -0
  97. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/airgap.py +0 -0
  98. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/apple_adapter.py +0 -0
  99. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/attest.py +0 -0
  100. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/audit_log.py +0 -0
  101. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/autopilot.py +0 -0
  102. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/bench.py +0 -0
  103. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/bom.py +0 -0
  104. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/build.py +0 -0
  105. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/can.py +0 -0
  106. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/chat.py +0 -0
  107. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/compile_cmd.py +0 -0
  108. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/compile_tools.py +0 -0
  109. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/completions.py +0 -0
  110. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/cost.py +0 -0
  111. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data.py +0 -0
  112. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_forge.py +0 -0
  113. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_mix.py +0 -0
  114. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_score.py +0 -0
  115. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  116. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/deploy.py +0 -0
  117. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/diagnose.py +0 -0
  118. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/diff.py +0 -0
  119. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/distill_prompt.py +0 -0
  120. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/doctor.py +0 -0
  121. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/drift_alarm.py +0 -0
  122. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/edit.py +0 -0
  123. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/env.py +0 -0
  124. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/eval.py +0 -0
  125. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/expect.py +0 -0
  126. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/export.py +0 -0
  127. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/fetch.py +0 -0
  128. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/generate.py +0 -0
  129. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/history.py +0 -0
  130. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/infer.py +0 -0
  131. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ingest.py +0 -0
  132. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/init.py +0 -0
  133. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/iterative_dpo.py +0 -0
  134. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/license_advisor.py +0 -0
  135. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/llama.py +0 -0
  136. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/local_rl.py +0 -0
  137. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/lock.py +0 -0
  138. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/loop.py +0 -0
  139. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/merge.py +0 -0
  140. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  141. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/migrate.py +0 -0
  142. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/monitor.py +0 -0
  143. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/plan.py +0 -0
  144. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/plugins.py +0 -0
  145. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/probe.py +0 -0
  146. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/profile.py +0 -0
  147. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/prune_prompt.py +0 -0
  148. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/push.py +0 -0
  149. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/quantize.py +0 -0
  150. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/quickstart.py +0 -0
  151. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ra_dit.py +0 -0
  152. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/recipes.py +0 -0
  153. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/registry.py +0 -0
  154. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/runs.py +0 -0
  155. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/serve.py +0 -0
  156. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ship.py +0 -0
  157. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/spectrum.py +0 -0
  158. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/steer.py +0 -0
  159. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/sweep.py +0 -0
  160. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tokenizer.py +0 -0
  161. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tui.py +0 -0
  162. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tunability.py +0 -0
  163. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ui.py +0 -0
  164. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/why.py +0 -0
  165. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/__init__.py +0 -0
  166. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/loader.py +0 -0
  167. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/__init__.py +0 -0
  168. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  169. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  170. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  171. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  172. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  173. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  174. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  175. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  176. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  177. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  178. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  179. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  180. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/augment.py +0 -0
  181. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/chat_templates.py +0 -0
  182. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/collators.py +0 -0
  183. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/formats.py +0 -0
  184. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/loader.py +0 -0
  185. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/loss_mask.py +0 -0
  186. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/__init__.py +0 -0
  187. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/_utils.py +0 -0
  188. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/anthropic.py +0 -0
  189. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/ollama.py +0 -0
  190. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/vllm.py +0 -0
  191. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/sft_format.py +0 -0
  192. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/__init__.py +0 -0
  193. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/code.py +0 -0
  194. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/conversation.py +0 -0
  195. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/preference.py +0 -0
  196. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/qa.py +0 -0
  197. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/reasoning.py +0 -0
  198. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/tool_calling.py +0 -0
  199. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/verifiable.py +0 -0
  200. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/__init__.py +0 -0
  201. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/pair_builder.py +0 -0
  202. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/parsers.py +0 -0
  203. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/quality.py +0 -0
  204. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/validator.py +0 -0
  205. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/__init__.py +0 -0
  206. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/arena.py +0 -0
  207. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  208. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/calibrate.py +0 -0
  209. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  210. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/custom.py +0 -0
  211. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/forgetting.py +0 -0
  212. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/gate.py +0 -0
  213. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/human.py +0 -0
  214. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/judge.py +0 -0
  215. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/leaderboard.py +0 -0
  216. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/quant_check.py +0 -0
  217. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/experiment/__init__.py +0 -0
  218. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/experiment/tracker.py +0 -0
  219. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/__init__.py +0 -0
  220. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/axolotl.py +0 -0
  221. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/common.py +0 -0
  222. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/llamafactory.py +0 -0
  223. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/unsloth.py +0 -0
  224. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/__init__.py +0 -0
  225. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/callback.py +0 -0
  226. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  227. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/display.py +0 -0
  228. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  229. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/hf_push.py +0 -0
  230. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  231. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/plugins/__init__.py +0 -0
  232. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/py.typed +0 -0
  233. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/recipes/__init__.py +0 -0
  234. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/__init__.py +0 -0
  235. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/attach.py +0 -0
  236. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/diff.py +0 -0
  237. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/hashing.py +0 -0
  238. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/store.py +0 -0
  239. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/__init__.py +0 -0
  240. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/audio.yaml +0 -0
  241. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/bco.yaml +0 -0
  242. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/chat.yaml +0 -0
  243. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/code.yaml +0 -0
  244. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/embedding.yaml +0 -0
  245. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  246. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  247. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  248. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/ipo.yaml +0 -0
  249. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/kto.yaml +0 -0
  250. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/longcontext.yaml +0 -0
  251. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/manifest.json +0 -0
  252. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/medical.yaml +0 -0
  253. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/moe.yaml +0 -0
  254. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/orpo.yaml +0 -0
  255. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/pretrain.yaml +0 -0
  256. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/reasoning.yaml +0 -0
  257. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/rlhf.yaml +0 -0
  258. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/simpo.yaml +0 -0
  259. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/tool-calling.yaml +0 -0
  260. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/vision.yaml +0 -0
  261. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/__init__.py +0 -0
  262. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/bco.py +0 -0
  263. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/bitnet.py +0 -0
  264. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/classifier.py +0 -0
  265. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/distill.py +0 -0
  266. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/dpo.py +0 -0
  267. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/embedding.py +0 -0
  268. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/ipo.py +0 -0
  269. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/kto.py +0 -0
  270. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  271. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  272. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_routing.py +0 -0
  273. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_sft.py +0 -0
  274. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mole_routing.py +0 -0
  275. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/orpo.py +0 -0
  276. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/preference.py +0 -0
  277. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/pretrain.py +0 -0
  278. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/prm.py +0 -0
  279. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/raft.py +0 -0
  280. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/reward_model.py +0 -0
  281. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/rewards.py +0 -0
  282. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/sft.py +0 -0
  283. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/simpo.py +0 -0
  284. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/tts.py +0 -0
  285. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/unlearn.py +0 -0
  286. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/tui_app.py +0 -0
  287. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/__init__.py +0 -0
  288. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/app.py +0 -0
  289. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/plugins/__init__.py +0 -0
  290. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/app.js +0 -0
  291. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/index.html +0 -0
  292. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.png +0 -0
  293. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.svg +0 -0
  294. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/style.css +0 -0
  295. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/__init__.py +0 -0
  296. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/_eval_text.py +0 -0
  297. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ab_test.py +0 -0
  298. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/activation_offload.py +0 -0
  299. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/active_sampler.py +0 -0
  300. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_bisect.py +0 -0
  301. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_branch.py +0 -0
  302. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_diff.py +0 -0
  303. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_merge.py +0 -0
  304. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_pr.py +0 -0
  305. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_scan.py +0 -0
  306. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_sign.py +0 -0
  307. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advanced_precision.py +0 -0
  308. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advise.py +0 -0
  309. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advise_history.py +0 -0
  310. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_forge.py +0 -0
  311. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_rollout.py +0 -0
  312. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_sandbox.py +0 -0
  313. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/airgap_bundle.py +0 -0
  314. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/annex_xi.py +0 -0
  315. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/anthropic_messages.py +0 -0
  316. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/apple_adapter.py +0 -0
  317. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/attest.py +0 -0
  318. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/audit_log.py +0 -0
  319. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/auto_quant.py +0 -0
  320. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/backend_detect.py +0 -0
  321. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/batch_probe.py +0 -0
  322. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/behavior_battery.py +0 -0
  323. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/bitnet.py +0 -0
  324. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/blame.py +0 -0
  325. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/block_expansion.py +0 -0
  326. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/bom.py +0 -0
  327. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot.py +0 -0
  328. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  329. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/build_dag.py +0 -0
  330. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/canary_discovery.py +0 -0
  331. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/canary_router.py +0 -0
  332. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/capability_suite.py +0 -0
  333. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/checklist_dsl.py +0 -0
  334. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  335. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/citation_faithful.py +0 -0
  336. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/classifier.py +0 -0
  337. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cmaes_merge.py +0 -0
  338. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/compile_tools.py +0 -0
  339. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/completions.py +0 -0
  340. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/constants.py +0 -0
  341. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/convergence.py +0 -0
  342. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/crash.py +0 -0
  343. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  344. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum.py +0 -0
  345. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  346. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cut_ce.py +0 -0
  347. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_forge.py +0 -0
  348. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_mix.py +0 -0
  349. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_pipeline.py +0 -0
  350. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_score.py +0 -0
  351. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deepspeed.py +0 -0
  352. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  353. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/demo_bundles.py +0 -0
  354. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  355. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_measure.py +0 -0
  356. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  357. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/_common.py +0 -0
  358. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/badge.py +0 -0
  359. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/citation.py +0 -0
  360. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  361. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  362. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/format.py +0 -0
  363. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/live.py +0 -0
  364. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  365. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  366. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  367. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/report.py +0 -0
  368. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/runner.py +0 -0
  369. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/distill.py +0 -0
  370. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/dpo_variants.py +0 -0
  371. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/drift_alarm.py +0 -0
  372. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  373. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/echo_trap.py +0 -0
  374. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_diff.py +0 -0
  375. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_governor.py +0 -0
  376. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_kernels.py +0 -0
  377. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/encoding.py +0 -0
  378. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/energy.py +0 -0
  379. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/env_lock.py +0 -0
  380. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/errors.py +0 -0
  381. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_design.py +0 -0
  382. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  383. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  384. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/expectations.py +0 -0
  385. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fetch_examples.py +0 -0
  386. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/flash_attn.py +0 -0
  387. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fp8.py +0 -0
  388. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/freeze.py +0 -0
  389. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp.py +0 -0
  390. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  391. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/galore.py +0 -0
  392. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gguf_quant.py +0 -0
  393. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gpu.py +0 -0
  394. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gpu_monitor.py +0 -0
  395. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grace_codebook.py +0 -0
  396. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/graceful_save.py +0 -0
  397. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grad_accum.py +0 -0
  398. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  399. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_long_context.py +0 -0
  400. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_variants.py +0 -0
  401. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hardware_fit.py +0 -0
  402. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/harm_probe.py +0 -0
  403. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hf.py +0 -0
  404. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hf_space.py +0 -0
  405. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hubs.py +0 -0
  406. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ingest_sources.py +0 -0
  407. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/integrations.py +0 -0
  408. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/interference.py +0 -0
  409. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/interference_live.py +0 -0
  410. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/irt.py +0 -0
  411. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/iterative_dpo.py +0 -0
  412. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  413. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/kernel_picker.py +0 -0
  414. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/knowledge_edit.py +0 -0
  415. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/kv_cache.py +0 -0
  416. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/launcher.py +0 -0
  417. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/license_advisor.py +0 -0
  418. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/license_matrix.py +0 -0
  419. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/liger.py +0 -0
  420. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/live_eval.py +0 -0
  421. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/llama_proxy.py +0 -0
  422. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/llama_server_timings.py +0 -0
  423. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl.py +0 -0
  424. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  425. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loftq_init.py +0 -0
  426. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/log_level.py +0 -0
  427. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/long_context.py +0 -0
  428. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/longlora.py +0 -0
  429. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_budget.py +0 -0
  430. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_daemon.py +0 -0
  431. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_iteration.py +0 -0
  432. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_stages.py +0 -0
  433. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_state.py +0 -0
  434. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/lr_finder.py +0 -0
  435. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/lr_groups.py +0 -0
  436. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/magpie.py +0 -0
  437. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/metrics.py +0 -0
  438. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mii.py +0 -0
  439. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/minillm.py +0 -0
  440. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mix_proxy.py +0 -0
  441. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mixed_precision.py +0 -0
  442. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mlx.py +0 -0
  443. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mod.py +0 -0
  444. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/moe.py +0 -0
  445. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/moe_quant.py +0 -0
  446. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mole_routing.py +0 -0
  447. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack.py +0 -0
  448. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_sampler.py +0 -0
  449. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_trainer.py +0 -0
  450. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/namespace_pin.py +0 -0
  451. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/neat_packing.py +0 -0
  452. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ngram_spec.py +0 -0
  453. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/nlg_metrics.py +0 -0
  454. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ollama.py +0 -0
  455. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/onboarding.py +0 -0
  456. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  457. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/paths.py +0 -0
  458. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/peft_builder.py +0 -0
  459. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/peft_patches.py +0 -0
  460. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/persona_hub.py +0 -0
  461. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/pipeline.py +0 -0
  462. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/preference_combine.py +0 -0
  463. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prm.py +0 -0
  464. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/probe_kernel.py +0 -0
  465. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/probe_pack.py +0 -0
  466. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiler.py +0 -0
  467. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiling.py +0 -0
  468. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  469. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_compile.py +0 -0
  470. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_distill.py +0 -0
  471. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prune_prompt.py +0 -0
  472. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/qat.py +0 -0
  473. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/qr_url.py +0 -0
  474. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/quality.py +0 -0
  475. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/quant_menu.py +0 -0
  476. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit.py +0 -0
  477. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit_run.py +0 -0
  478. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/raft.py +0 -0
  479. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_effort.py +0 -0
  480. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_parser.py +0 -0
  481. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_dag.py +0 -0
  482. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_run.py +0 -0
  483. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/registry.py +0 -0
  484. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/relora.py +0 -0
  485. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/replay.py +0 -0
  486. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/repro_receipt.py +0 -0
  487. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ring_attention.py +0 -0
  488. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  489. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/run_cost.py +0 -0
  490. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sae_diff.py +0 -0
  491. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/save_formats.py +0 -0
  492. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/server_tools.py +0 -0
  493. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sglang.py +0 -0
  494. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ship_verdict.py +0 -0
  495. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/shortcuts.py +0 -0
  496. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/signing.py +0 -0
  497. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sleeper_probe.py +0 -0
  498. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/soup_lock.py +0 -0
  499. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spec_pairing.py +0 -0
  500. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spectrum_scan.py +0 -0
  501. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spike_recovery.py +0 -0
  502. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sse_train_stream.py +0 -0
  503. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/steering.py +0 -0
  504. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/strict_safetensors.py +0 -0
  505. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/structured_output.py +0 -0
  506. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sweep_config.py +0 -0
  507. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tail_latency.py +0 -0
  508. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/terraform_plan.py +0 -0
  509. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tool_outputs.py +0 -0
  510. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/topology.py +0 -0
  511. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tracing.py +0 -0
  512. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trackers.py +0 -0
  513. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/train_event_buffer.py +0 -0
  514. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trainer_plugins.py +0 -0
  515. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trust_remote.py +0 -0
  516. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/truth_probe.py +0 -0
  517. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tts.py +0 -0
  518. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tts_codec.py +0 -0
  519. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tunability.py +0 -0
  520. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ui_env.py +0 -0
  521. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/uld.py +0 -0
  522. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  523. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning.py +0 -0
  524. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning_eval.py +0 -0
  525. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unsloth.py +0 -0
  526. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/v028_features.py +0 -0
  527. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vector_bank.py +0 -0
  528. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vllm.py +0 -0
  529. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vscode_setup.py +0 -0
  530. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/warmup.py +0 -0
  531. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/webhooks.py +0 -0
  532. {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/why.py +0 -0
  533. {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/chat.yaml +0 -0
  534. {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/code.yaml +0 -0
  535. {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/medical.yaml +0 -0
  536. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/__init__.py +0 -0
  537. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/conftest.py +0 -0
  538. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v053_qa.md +0 -0
  539. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v07114_qa.md +0 -0
  540. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v0716_qa.md +0 -0
  541. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_adapters.py +0 -0
  542. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_advanced_peft.py +0 -0
  543. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_assistant_mask.py +0 -0
  544. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_audio.py +0 -0
  545. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_auto_tuning.py +0 -0
  546. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_autopilot.py +0 -0
  547. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_awq_gptq_export.py +0 -0
  548. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_batch_probe.py +0 -0
  549. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bco.py +0 -0
  550. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bench.py +0 -0
  551. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_brain_rot_multilingual.py +0 -0
  552. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bugfixes.py +0 -0
  553. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_build_dag.py +0 -0
  554. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_callback.py +0 -0
  555. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cans.py +0 -0
  556. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_chat.py +0 -0
  557. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_chat_template.py +0 -0
  558. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cli.py +0 -0
  559. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cli_subprocess.py +0 -0
  560. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_config.py +0 -0
  561. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cost.py +0 -0
  562. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_crash_reporter.py +0 -0
  563. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_curriculum.py +0 -0
  564. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data.py +0 -0
  565. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_augment.py +0 -0
  566. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_sample.py +0 -0
  567. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_split.py +0 -0
  568. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_tools.py +0 -0
  569. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dataset_hub.py +0 -0
  570. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dataset_registry.py +0 -0
  571. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_deepspeed.py +0 -0
  572. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_deploy_ollama.py +0 -0
  573. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_diff.py +0 -0
  574. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_display.py +0 -0
  575. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_doctor.py +0 -0
  576. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dpo_example.py +0 -0
  577. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dpo_variants.py +0 -0
  578. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_embedding.py +0 -0
  579. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_errors.py +0 -0
  580. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval.py +0 -0
  581. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval_gate.py +0 -0
  582. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval_platform.py +0 -0
  583. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_export.py +0 -0
  584. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_formats.py +0 -0
  585. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_fp8_recipe.py +0 -0
  586. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_freeze_training.py +0 -0
  587. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_generate.py +0 -0
  588. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_gpu.py +0 -0
  589. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_grpo.py +0 -0
  590. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_hf_integration.py +0 -0
  591. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_infer.py +0 -0
  592. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_inference_advanced.py +0 -0
  593. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_init.py +0 -0
  594. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ipo.py +0 -0
  595. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_jinja_analyzer.py +0 -0
  596. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_kto.py +0 -0
  597. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_loader.py +0 -0
  598. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_log_level.py +0 -0
  599. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_loss_watchdog.py +0 -0
  600. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_merge.py +0 -0
  601. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_migrate.py +0 -0
  602. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_mlx_backend.py +0 -0
  603. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_moe.py +0 -0
  604. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multi_adapter.py +0 -0
  605. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multi_gpu.py +0 -0
  606. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_config.py +0 -0
  607. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_invariants.py +0 -0
  608. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_sampler.py +0 -0
  609. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_neat_packing.py +0 -0
  610. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_neftune_rslora.py +0 -0
  611. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_onnx_tensorrt_export.py +0 -0
  612. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_orpo.py +0 -0
  613. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_packing.py +0 -0
  614. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_a_wave1.py +0 -0
  615. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_a_wave2.py +0 -0
  616. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_b.py +0 -0
  617. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_c.py +0 -0
  618. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_d.py +0 -0
  619. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_e.py +0 -0
  620. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_f_hardening.py +0 -0
  621. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_peft_methods.py +0 -0
  622. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_peft_patches.py +0 -0
  623. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_performance.py +0 -0
  624. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_pissa_init.py +0 -0
  625. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ppo.py +0 -0
  626. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_dispatcher.py +0 -0
  627. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_multi.py +0 -0
  628. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_multi_runtime.py +0 -0
  629. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_pretrain.py +0 -0
  630. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_profile.py +0 -0
  631. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_profiling.py +0 -0
  632. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_progress.py +0 -0
  633. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_push.py +0 -0
  634. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_qat.py +0 -0
  635. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quality_filter.py +0 -0
  636. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quant_check.py +0 -0
  637. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quant_menu.py +0 -0
  638. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quickstart.py +0 -0
  639. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_rank_pattern.py +0 -0
  640. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_recipes_v031.py +0 -0
  641. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_refusal_multilingual.py +0 -0
  642. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_registry.py +0 -0
  643. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_relora.py +0 -0
  644. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_replay.py +0 -0
  645. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_resume.py +0 -0
  646. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_rlvr.py +0 -0
  647. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_run_cost.py +0 -0
  648. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_runs.py +0 -0
  649. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_serve.py +0 -0
  650. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_server_generate.py +0 -0
  651. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_sglang_serve.py +0 -0
  652. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_simpo.py +0 -0
  653. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_smoke_train.py +0 -0
  654. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_speculative_decoding.py +0 -0
  655. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_sweep.py +0 -0
  656. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_synth_data_pro.py +0 -0
  657. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_templates_yaml.py +0 -0
  658. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tensorboard.py +0 -0
  659. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tool_calling.py +0 -0
  660. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trace_to_pref.py +0 -0
  661. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tracker.py +0 -0
  662. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trainer_coverage_v035.py +0 -0
  663. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trainer_init.py +0 -0
  664. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_training_intelligence.py +0 -0
  665. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_training_speed.py +0 -0
  666. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trust_remote_code.py +0 -0
  667. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tui.py +0 -0
  668. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui.py +0 -0
  669. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_chat.py +0 -0
  670. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_config_builder.py +0 -0
  671. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_live_monitor.py +0 -0
  672. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_metrics.py +0 -0
  673. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_unsloth.py +0 -0
  674. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_c.py +0 -0
  675. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_d.py +0 -0
  676. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_e.py +0 -0
  677. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0402_part_a.py +0 -0
  678. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0402_part_b.py +0 -0
  679. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_a.py +0 -0
  680. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_b.py +0 -0
  681. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_c.py +0 -0
  682. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0404_part_a.py +0 -0
  683. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0404_part_b.py +0 -0
  684. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0405_part_a.py +0 -0
  685. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0406_part_a.py +0 -0
  686. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_a.py +0 -0
  687. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_b.py +0 -0
  688. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_c.py +0 -0
  689. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0420.py +0 -0
  690. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_a.py +0 -0
  691. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_b.py +0 -0
  692. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_c.py +0 -0
  693. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_d.py +0 -0
  694. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_a.py +0 -0
  695. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_b.py +0 -0
  696. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_c.py +0 -0
  697. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_d.py +0 -0
  698. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_review_followups.py +0 -0
  699. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0450.py +0 -0
  700. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0460_part_a.py +0 -0
  701. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0460_part_b.py +0 -0
  702. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0470_part_a.py +0 -0
  703. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0470_part_b.py +0 -0
  704. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0480_part_a.py +0 -0
  705. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0480_part_b.py +0 -0
  706. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0490.py +0 -0
  707. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_a.py +0 -0
  708. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_b.py +0 -0
  709. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_c.py +0 -0
  710. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_d.py +0 -0
  711. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_e.py +0 -0
  712. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0510.py +0 -0
  713. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0520.py +0 -0
  714. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0530.py +0 -0
  715. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v05310.py +0 -0
  716. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v05311.py +0 -0
  717. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_109.py +0 -0
  718. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_139.py +0 -0
  719. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_142.py +0 -0
  720. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_82.py +0 -0
  721. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0532.py +0 -0
  722. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0533.py +0 -0
  723. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0534.py +0 -0
  724. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0535.py +0 -0
  725. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0536.py +0 -0
  726. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0537.py +0 -0
  727. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0538.py +0 -0
  728. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0539.py +0 -0
  729. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0540.py +0 -0
  730. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0550.py +0 -0
  731. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0550_followups.py +0 -0
  732. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0560.py +0 -0
  733. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_a.py +0 -0
  734. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_b.py +0 -0
  735. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_c.py +0 -0
  736. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_d.py +0 -0
  737. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0580.py +0 -0
  738. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0590.py +0 -0
  739. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_a.py +0 -0
  740. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_b.py +0 -0
  741. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_c.py +0 -0
  742. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_d.py +0 -0
  743. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_e.py +0 -0
  744. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_f.py +0 -0
  745. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_a.py +0 -0
  746. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_b.py +0 -0
  747. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_c.py +0 -0
  748. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_d.py +0 -0
  749. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_e.py +0 -0
  750. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_followups.py +0 -0
  751. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_a.py +0 -0
  752. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_b.py +0 -0
  753. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_c.py +0 -0
  754. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_d.py +0 -0
  755. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_e.py +0 -0
  756. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_followups.py +0 -0
  757. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_a.py +0 -0
  758. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_b.py +0 -0
  759. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_c.py +0 -0
  760. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_d.py +0 -0
  761. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_e.py +0 -0
  762. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0631_206.py +0 -0
  763. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_followups.py +0 -0
  764. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_a.py +0 -0
  765. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_b.py +0 -0
  766. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_c.py +0 -0
  767. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_d.py +0 -0
  768. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_e.py +0 -0
  769. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_f.py +0 -0
  770. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_followups.py +0 -0
  771. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_a.py +0 -0
  772. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_b.py +0 -0
  773. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_c.py +0 -0
  774. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_d.py +0 -0
  775. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_e.py +0 -0
  776. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_cli.py +0 -0
  777. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_followups.py +0 -0
  778. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_a.py +0 -0
  779. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_b.py +0 -0
  780. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_c.py +0 -0
  781. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_d.py +0 -0
  782. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_e.py +0 -0
  783. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_followups.py +0 -0
  784. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_a.py +0 -0
  785. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_b.py +0 -0
  786. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_c.py +0 -0
  787. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_d.py +0 -0
  788. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_e.py +0 -0
  789. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_f.py +0 -0
  790. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_followups.py +0 -0
  791. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_a.py +0 -0
  792. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_b.py +0 -0
  793. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_c.py +0 -0
  794. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_d.py +0 -0
  795. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_e.py +0 -0
  796. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_a.py +0 -0
  797. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_b.py +0 -0
  798. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_c.py +0 -0
  799. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_d.py +0 -0
  800. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_e.py +0 -0
  801. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_a.py +0 -0
  802. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_b.py +0 -0
  803. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_c.py +0 -0
  804. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_d.py +0 -0
  805. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_e.py +0 -0
  806. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_f.py +0 -0
  807. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07110.py +0 -0
  808. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07111.py +0 -0
  809. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07112.py +0 -0
  810. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07113.py +0 -0
  811. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07114.py +0 -0
  812. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07115.py +0 -0
  813. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07116.py +0 -0
  814. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07117.py +0 -0
  815. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07118.py +0 -0
  816. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07119.py +0 -0
  817. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0712.py +0 -0
  818. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07120.py +0 -0
  819. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07121.py +0 -0
  820. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07122.py +0 -0
  821. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07123.py +0 -0
  822. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07125.py +0 -0
  823. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0713.py +0 -0
  824. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0714.py +0 -0
  825. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0715.py +0 -0
  826. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0716.py +0 -0
  827. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0717.py +0 -0
  828. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0718.py +0 -0
  829. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0719.py +0 -0
  830. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_validator.py +0 -0
  831. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_vision.py +0 -0
  832. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_vllm_serve.py +0 -0
  833. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_warmup.py +0 -0
  834. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_why.py +0 -0
  835. {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,44 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.26] - 2026-07-01
16
+
17
+ ### Added
18
+ - **Closed-loop reward-hacking auto-mitigation.** The trainer now *detects*
19
+ reward hacking mid-run and *self-corrects* — instead of only halting. Set
20
+ `training.reward_hack_mitigation` (or `soup train --reward-hack-mitigation`)
21
+ to one of four modes on a GRPO/PPO run (requires `reward_hack_detector`):
22
+ - `log_only` — instrument only: append a per-step `mitigation_log.jsonl`
23
+ (drop_pct, verdict, reward mean/std, completion-length trend, repetition)
24
+ and *never* touch training.
25
+ - `kl_control` — a reversible **bang-bang + hysteresis** controller: when the
26
+ hacking signal trips, raise the KL coefficient β (geometric, clamped to
27
+ `[floor, ceil]`, never crossing 0); relax it when the signal recovers.
28
+ Dwell + release-patience prevent flapping; a multi-signal vote combines the
29
+ detector drop with a length-trend and repetition signal.
30
+ - `pid_lagrangian` — a **PID-Lagrangian** controller (Stooke et al.) that
31
+ holds the hacking signal at a target, plus an **escalation ladder**:
32
+ raise β → roll back to the last-good RL checkpoint → early-stop.
33
+ - Anti-gaming hardening: per-signal EMA/median smoothing,
34
+ conservative-on-disagreement voting, a reward-distribution-drift guard, and
35
+ optional bounded **reward shaping** on the gamed proxy (length / repetition
36
+ / sentinel). A plain-English give-up explanation is logged on early-stop.
37
+ - **Proof-of-mechanism only** (see Known Limitations): validated on
38
+ SmolLM2-135M + a synthetic length-hacking task on a single RTX 3050 — all
39
+ four stages pass live, including a real mid-run rollback. PPO ships **BETA**
40
+ (mechanism unit-tested; the on-GPU proof is GRPO-only).
41
+ - Ready-made `qwen2.5-coder-7b-sft` recipe for `Qwen/Qwen2.5-Coder-7B-Instruct`
42
+ (catalog 133 → 134)
43
+ ([#285](https://github.com/MakazhanAlpamys/Soup/pull/285) by [@Deadpool2000](https://github.com/Deadpool2000)).
44
+
45
+ ### Security
46
+ - `RLCheckpointCallback.restore_checkpoint` / `save_checkpoint` refuse a
47
+ **symlinked** `optimizer.pt` — `torch.load(weights_only=False)` on an
48
+ attacker-placed symlink in a shared checkpoint dir was an RCE vector.
49
+ - Bool-before-int/float guards on every new `reward_hack_*` numeric field;
50
+ `reward_hack_signals` bounded (`max_length=4`); the mitigation log writer is
51
+ cwd-contained with symlink-reject-on-rotate and secret redaction.
52
+
15
53
  ## [0.71.25] - 2026-06-27
16
54
 
17
55
  ### Added
@@ -110,17 +110,17 @@ src/soup_cli/
110
110
  experiment/ - SQLite experiment tracking
111
111
  eval/ - Eval platform (custom tasks, LLM judge, human eval, leaderboard)
112
112
  migrate/ - Config migration (LLaMA-Factory, Axolotl, Unsloth)
113
- recipes/ - Ready-made configs for popular models (133 recipes)
113
+ recipes/ - Ready-made configs for popular models (134 recipes)
114
114
  autopilot/ - Zero-config decision engine (v0.25.0)
115
115
  registry/ - Model Registry (hashing, store, diff, attach) (v0.26.0 + v0.33.0)
116
116
  cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0)
117
117
  data/traces/ - Trace-to-Preference harvester (v0.26.0)
118
118
  data/collators.py - CrossDocCollator for sample packing (v0.33.0)
119
- utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler
119
+ utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict
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 (297 files, 14593 tests)
123
+ tests/ - Test suite (298 files, 14788 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -25,6 +25,7 @@ Listed by first contribution. PR numbers link the work.
25
25
  - Happy-path + CPU-warning tests for `soup bench` ([#31](https://github.com/MakazhanAlpamys/Soup/pull/31))
26
26
  - `soup cost` — cloud GPU training cost estimation ([#42](https://github.com/MakazhanAlpamys/Soup/pull/42))
27
27
  - `--nccl` flag for `soup doctor` multi-GPU bandwidth checks ([#178](https://github.com/MakazhanAlpamys/Soup/pull/178))
28
+ - Ready-made `qwen2.5-coder-7b-sft` recipe ([#285](https://github.com/MakazhanAlpamys/Soup/pull/285))
28
29
  - **Chinmaya Sahu** ([@csking101](https://github.com/csking101))
29
30
  - DPO example config, sample data, and tests ([#48](https://github.com/MakazhanAlpamys/Soup/pull/48))
30
31
  - FP8 `rowwise` + `rowwise_with_gw_hp` scaling recipes ([#62](https://github.com/MakazhanAlpamys/Soup/pull/62))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.25
3
+ Version: 0.71.26
4
4
  Summary: Fine-tune and post-train 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
@@ -189,20 +189,21 @@ infrastructure instead of improving models. Soup fixes that.
189
189
 
190
190
  ## What's New
191
191
 
192
- **v0.71.25`soup ship`: the SHIP / DON'T-SHIP verdict.** After fine-tuning, answer one question did the model get better, or did I break it?
192
+ **v0.71.26Closed-loop reward-hacking auto-mitigation.** Your GRPO/PPO trainer now *detects* reward hacking mid-run and *self-corrects*instead of only halting. No OSS RLHF library closes this loop.
193
193
 
194
- - **One binary decision, not a dashboard.** `soup ship` SHIPs only when **(1)** the task
195
- metric *strictly* improved AND **(2)** no general benchmark regressed past a forgetting
196
- threshold (default 5% absolute). Otherwise DON'T SHIP *even if the task metric looks great*.
197
- - **The moat is leg 2.** A catastrophic-forgetting / regression gate, fused with the task win
198
- into a single verdict + a one-screen reason.
199
- - **CI-gateable.** Exit `0 = SHIP`, `2 = DON'T SHIP`, `1 = runtime error`.
200
- - **Works offline.** `soup ship --evidence ev.json` decides from pre-computed scores (no model
201
- load); leg-2 defaults to built-in mini benchmarks (CPU, instant). `--general-suite` routes
202
- lm-eval benchmarks; `--baseline registry://… | file.json` supplies recorded base scores.
194
+ - **Detect correct continue.** When the hacking signal trips, the controller raises the
195
+ KL coefficient β (bang-bang + hysteresis, or a PID-Lagrangian controller), and — if hacking
196
+ persists **rolls back to the last-good checkpoint**, then early-stops as a last resort.
197
+ - **Anti-gaming hardening.** Multi-signal voting (RM cluster-separation + length-trend +
198
+ repetition), signal smoothing, conservative-on-disagreement, a reward-distribution-drift
199
+ guard, and optional bounded **reward shaping** on the gamed proxy.
200
+ - **Observe first.** `reward_hack_mitigation=log_only` streams a per-step `mitigation_log.jsonl`
201
+ and never touches training see the hacking happen before you let the controller act.
202
+ - **Honest scope.** Proof-of-mechanism on SmolLM2-135M + a synthetic hacking task on one RTX
203
+ 3050 (all four stages validated live, including a real rollback). PPO ships BETA.
203
204
 
204
205
  ```bash
205
- soup ship --base <model> --adapter <lora> --task-eval tasks.jsonl # → SHIP / DON'T SHIP
206
+ soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect raise KL recover
206
207
  ```
207
208
 
208
209
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -49,20 +49,21 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.25`soup ship`: the SHIP / DON'T-SHIP verdict.** After fine-tuning, answer one question did the model get better, or did I break it?
53
-
54
- - **One binary decision, not a dashboard.** `soup ship` SHIPs only when **(1)** the task
55
- metric *strictly* improved AND **(2)** no general benchmark regressed past a forgetting
56
- threshold (default 5% absolute). Otherwise DON'T SHIP *even if the task metric looks great*.
57
- - **The moat is leg 2.** A catastrophic-forgetting / regression gate, fused with the task win
58
- into a single verdict + a one-screen reason.
59
- - **CI-gateable.** Exit `0 = SHIP`, `2 = DON'T SHIP`, `1 = runtime error`.
60
- - **Works offline.** `soup ship --evidence ev.json` decides from pre-computed scores (no model
61
- load); leg-2 defaults to built-in mini benchmarks (CPU, instant). `--general-suite` routes
62
- lm-eval benchmarks; `--baseline registry://… | file.json` supplies recorded base scores.
52
+ **v0.71.26Closed-loop reward-hacking auto-mitigation.** Your GRPO/PPO trainer now *detects* reward hacking mid-run and *self-corrects*instead of only halting. No OSS RLHF library closes this loop.
53
+
54
+ - **Detect correct continue.** When the hacking signal trips, the controller raises the
55
+ KL coefficient β (bang-bang + hysteresis, or a PID-Lagrangian controller), and — if hacking
56
+ persists **rolls back to the last-good checkpoint**, then early-stops as a last resort.
57
+ - **Anti-gaming hardening.** Multi-signal voting (RM cluster-separation + length-trend +
58
+ repetition), signal smoothing, conservative-on-disagreement, a reward-distribution-drift
59
+ guard, and optional bounded **reward shaping** on the gamed proxy.
60
+ - **Observe first.** `reward_hack_mitigation=log_only` streams a per-step `mitigation_log.jsonl`
61
+ and never touches training see the hacking happen before you let the controller act.
62
+ - **Honest scope.** Proof-of-mechanism on SmolLM2-135M + a synthetic hacking task on one RTX
63
+ 3050 (all four stages validated live, including a real rollback). PPO ships BETA.
63
64
 
64
65
  ```bash
65
- soup ship --base <model> --adapter <lora> --task-eval tasks.jsonl # → SHIP / DON'T SHIP
66
+ soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect raise KL recover
66
67
  ```
67
68
 
68
69
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -11,7 +11,7 @@ feature reference — every `soup` capability, grouped by area.
11
11
  | [PEFT, long context & efficiency](peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning |
12
12
  | [Performance & quantization](performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
13
13
  | [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
14
- | [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
14
+ | [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
15
15
  | [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
16
16
  | [Adapters, registry & governance](adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls |
17
17
  | [Backends, platform & ops](backends-and-ops.md) | MLX/Unsloth backends, Modal cloud GPU training, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
@@ -129,7 +129,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
129
129
  soup migrate --from axolotl config.yml Import config from Axolotl
130
130
  soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
131
131
  soup migrate --from llamafactory c.yaml --dry-run Preview without writing
132
- soup recipes list List all 133 ready-made recipes
132
+ soup recipes list List all 134 ready-made recipes
133
133
  soup recipes show llama3.1-8b-sft Print recipe YAML
134
134
  soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
135
135
  soup recipes search "reasoning" Search by keyword/task/size
@@ -245,6 +245,7 @@ soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub dive
245
245
  soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
246
246
  soup iterative-dpo --base-model <m> --reward-model <rm> --prompts <p.jsonl> --output-dir <out> --rounds N --pairs-per-round N [--plan-only] Iterative DPO loop driver — LIVE sample→score→pair→train (v0.70.0; live v0.71.11)
247
247
  soup train --reward-hack-detector info_rm|rm_ensemble [--reward-hack-halt] Reward-hacking detector for GRPO — LIVE callback (v0.70.0; live v0.71.11)
248
+ soup train --reward-hack-mitigation off|log_only|kl_control|pid_lagrangian Closed-loop reward-hacking auto-mitigation (detect → raise KL/β → rollback → early-stop); GRPO/PPO, requires --reward-hack-detector; PPO BETA (v0.71.26)
248
249
  soup train --uld-strategy wasserstein|topk_align [--uld-top-k N] Cross-tokenizer ULD on task='distill' — LIVE W1/topk loss (v0.70.0; live v0.71.11)
249
250
  soup train --minillm-enabled [--minillm-teacher-mix-ratio 0.3] MiniLLM reverse-KL distillation — LIVE (v0.70.0; live v0.71.11)
250
251
  soup train --rl-checkpoint-save-every-steps N [--rl-checkpoint-keep-last N] Mid-epoch checkpoint for GRPO/PPO — LIVE (v0.70.0; live v0.71.11)
@@ -418,7 +418,7 @@ soup ui
418
418
 
419
419
  **Pages:**
420
420
  - **Dashboard** — view all experiment runs, loss charts, system info, multi-run comparison
421
- - **New Training** — create configs from templates or 133 ready-made recipes, validate, start training with live SSE log streaming and progress bar
421
+ - **New Training** — create configs from templates or 134 ready-made recipes, validate, start training with live SSE log streaming and progress bar
422
422
  - **Data Explorer** — browse and inspect datasets (JSONL, JSON, CSV, Parquet)
423
423
  - **Model Chat** — chat with streaming responses, configurable temperature/top_p/max_tokens, system prompt, adapter selection, markdown rendering, chat export
424
424
 
@@ -427,7 +427,7 @@ soup ui
427
427
  - **Enhanced Metrics** — 2x2 chart grid (loss, LR, grad_norm, throughput) + GPU memory chart, eval results table
428
428
  - **Multi-Run Compare** — overlay loss curves from up to 5 runs side-by-side
429
429
  - **Chat Upgrade** — SSE streaming via proxy, typing indicator, cancel button, markdown renderer (bold, italic, code blocks), chat export as JSON
430
- - **Config Builder** — recipe dropdown (133 recipes), config schema API for dynamic form generation
430
+ - **Config Builder** — recipe dropdown (134 recipes), config schema API for dynamic form generation
431
431
 
432
432
  **Security:** The Web UI generates a random auth token at startup (printed to console). All mutating endpoints (start/stop training, delete runs, inspect data, validate config) require `Authorization: Bearer <token>` header. CORS is restricted to the served origin. Data inspection is sandboxed to the working directory.
433
433
 
@@ -50,6 +50,10 @@ Six surfaces protect the training loop from the failure modes that cost a real G
50
50
  soup train --config soup.yaml \
51
51
  --reward-hack-detector info_rm --reward-hack-halt # halt on HACK verdict
52
52
 
53
+ # Closed-loop reward-hacking MITIGATION (v0.71.26) — detect AND self-correct
54
+ soup train --config grpo.yaml --reward-hack-mitigation kl_control # raise KL, recover
55
+ soup train --config grpo.yaml --reward-hack-mitigation log_only # observe only, no action
56
+
53
57
  # Cross-tokenizer distillation — Llama -> Mistral, no shared vocab needed
54
58
  # (Universal Logit Distillation, Boizard et al. 2024 arXiv:2402.12030)
55
59
  soup train --config soup.yaml --uld-strategy wasserstein
@@ -100,6 +104,17 @@ soup train --config grpo.yaml \
100
104
 
101
105
  `--echo-trap-tokenizer-aware` switches echo-trap n-grams from whitespace tokens to the active tokenizer's integer ids. This catches subword repetition that punctuation-heavy decoded text can hide, but the score becomes tokenizer-specific rather than vocabulary-agnostic.
102
106
 
107
+ ### Closed-loop reward-hacking auto-mitigation (v0.71.26)
108
+
109
+ The detectors above *halt*; `training.reward_hack_mitigation` (or the `--reward-hack-mitigation` flag) makes the trainer *self-correct* mid-run. It requires `reward_hack_detector` on a `grpo`/`ppo` transformers run, and has four modes:
110
+
111
+ - **`log_only`** — observe only. Appends a per-step `mitigation_log.jsonl` under the run's output dir (the InfoRM/ensemble drop, the OK/WARN/HACK verdict, reward mean/std, completion-length trend, repetition) and provably never mutates β. Run this first to *see* hacking before you let a controller act on it.
112
+ - **`kl_control`** — a reversible **bang-bang + hysteresis** controller. When a multi-signal vote (`reward_hack_signals`: the detector drop + `length_trend` + `repetition`) stays above `reward_hack_trip_band` for `reward_hack_dwell_steps`, it multiplies β by `reward_hack_kl_gain` (clamped to `[reward_hack_beta_floor > 0, reward_hack_beta_ceil]`, never crossing 0); after `reward_hack_release_patience` below-band steps it relaxes β back toward the floor. Dwell + release-patience stop it flapping. β is written to **both** `trainer.beta` and `trainer.args.beta` so it takes effect on stock GRPO *and* Soup's GRPO variants (and `trainer.args.kl_coef` on PPO).
113
+ - **`pid_lagrangian`** — a **PID-Lagrangian** controller (Stooke et al. 2020) that holds the hacking signal at `reward_hack_signal_target` (Kp/Ki/Kd with integral anti-windup via `reward_hack_integral_clamp`), plus an **escalation ladder**: raise β → after `reward_hack_rollback_patience` persistent-HACK steps roll back to the last-good RL checkpoint (needs `rl_checkpoint_save_every_steps`) → after `reward_hack_max_recovery_attempts` rollbacks, early-stop with a plain-English give-up explanation.
114
+ - **Anti-gaming hardening** (any control mode): `reward_hack_signal_smoothing` (`ema`/`median` over `reward_hack_smoothing_window`), `reward_hack_conservative_on_disagreement` (when detectors disagree, keep KL high + guard against a bimodal reward-distribution collapse), and `reward_hack_reward_shaping` (subtract a bounded `reward_hack_shaping_strength` penalty on the gamed proxy — `length`/`repetition`/`sentinel` — over the reward-fn seam).
115
+
116
+ **Scope:** proof-of-mechanism only. Validated on SmolLM2-135M + a synthetic length-hacking task on a single RTX 3050 (all four modes live, including a real mid-run rollback). PPO ships **BETA** — the buffer + `kl_coef` mutation are wired and unit-tested, but the on-GPU proof is GRPO-only. Whether the loop suppresses hacking without collapsing true reward on 7B+ with a real reward model is an open, community-validatable question. `reward_hack_mitigation ∈ {kl_control, pid_lagrangian}` is mutually exclusive with `ref_model_ema_alpha` (both drive the KL/ref dynamics).
117
+
103
118
  Every detector composes with v0.34 `soup why` (anomaly explainer), v0.32 spike recovery, and the v0.53.11 #127 `GRPOStabilityCallback` so a single GRPO run can have InfoRM + echo-trap + spike-recovery + in-place ref-model EMA all active simultaneously without duplicating trajectory / state collection. The reward-hack and echo-trap callbacks read the per-step rewards through a shared, thread-safe capture buffer (Soup wraps your reward functions so it never has to monkeypatch TRL); `rm_ensemble` needs ≥2 reward functions to compute a divergence. The MiniLLM teacher-mix is an offline distribution-blend analog of the paper's on-policy teacher-mixed *sampling*, and ULD compares the distributions after clamping teacher ids to the teacher vocab (correct for same-family / extended-vocab pairs; a genuinely different tokenization needs a sequence-alignment step). The reference-model EMA (`--ref-model-ema-alpha`) updates in place — no full `state_dict` round-trip — so it is cheap at 70B+ scale.
104
119
 
105
120
 
@@ -402,6 +402,17 @@ output_dir: ./output_advanced/
402
402
 
403
403
  See the [config schema](../src/soup_cli/config/schema.py) (the single source of truth) for all available options.
404
404
 
405
+ ## Reward-hacking mitigation demo
406
+
407
+ `reward_hacking/rewards.py` provides synthetic reward functions for the
408
+ closed-loop reward-hacking mitigation feature (`soup train
409
+ --reward-hack-mitigation`): a gameable `length_hack_reward` / `sentinel_reward`
410
+ proxy decoupled from a held-out `true_score`. Point a GRPO config's
411
+ `training.reward_fn` at a `.py` that re-exports one as `reward_fn`, enable
412
+ `reward_hack_detector: info_rm` + `reward_hack_mitigation: kl_control`, and watch
413
+ `mitigation_log.jsonl` under the run's output dir. See
414
+ [docs/training.md](../docs/training.md#closed-loop-reward-hacking-auto-mitigation-v07126).
415
+
405
416
  ## Learn More
406
417
 
407
418
  - **README**: [Main documentation](../README.md)
@@ -0,0 +1,83 @@
1
+ """Synthetic reward-hacking task for the v0.71.26 closed-loop mitigation demo.
2
+
3
+ These reward functions are the reusable GPU-experiment fixture for the
4
+ reward-hacking auto-mitigation controller. They implement a *gameable* proxy
5
+ reward that is deliberately decoupled from a held-out *true* quality score, so
6
+ a policy can visibly "hack" the proxy while the true score stagnates or drops.
7
+
8
+ Use one of the proxies as the training reward and log ``true_score`` alongside
9
+ it to see the divergence:
10
+
11
+ soup train --config examples/reward_hacking/grpo_length_hack.yaml
12
+
13
+ Reward-function signature (TRL GRPO/PPO): ``fn(prompts, completions, **kwargs)
14
+ -> list[float]``. ``completions`` are plain strings (non-conversational) or
15
+ lists of ``{"role", "content"}`` message dicts (conversational).
16
+ """
17
+
18
+ from typing import Any
19
+
20
+ # The synthetic "correct answer" the TRUE scorer looks for. Orthogonal to both
21
+ # the length proxy and the sentinel proxy.
22
+ _TARGET_ANSWER = "42"
23
+ # The gameable sentinel token the sentinel proxy pays for.
24
+ _SENTINEL = "GOLD"
25
+ # Length (in whitespace tokens) at which the length proxy saturates.
26
+ _LENGTH_SATURATION = 32.0
27
+ # Above this word count the true scorer considers the answer padded / verbose.
28
+ _CONCISE_MAX_WORDS = 16
29
+
30
+
31
+ def _text(completion: Any) -> str:
32
+ """Extract assistant text from a string or list-of-message-dicts completion."""
33
+ if isinstance(completion, str):
34
+ return completion
35
+ if isinstance(completion, dict):
36
+ return str(completion.get("content", ""))
37
+ if isinstance(completion, (list, tuple)):
38
+ parts = []
39
+ for item in completion:
40
+ if isinstance(item, dict):
41
+ parts.append(str(item.get("content", "")))
42
+ else:
43
+ parts.append(str(item))
44
+ return "".join(parts)
45
+ return str(completion)
46
+
47
+
48
+ def length_hack_reward(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
49
+ """Gameable proxy: reward proportional to completion length (bounded [0, 1]).
50
+
51
+ A policy maximises this by padding output — orthogonal to real quality.
52
+ """
53
+ return [
54
+ min(1.0, len(_text(comp).split()) / _LENGTH_SATURATION)
55
+ for comp in completions
56
+ ]
57
+
58
+
59
+ def sentinel_reward(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
60
+ """Gameable proxy: +1 iff the completion contains the sentinel token."""
61
+ return [1.0 if _SENTINEL in _text(comp) else 0.0 for comp in completions]
62
+
63
+
64
+ def true_score(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
65
+ """Held-out TRUE quality, decoupled from both proxies.
66
+
67
+ Rewards the correct answer token concisely: 1.0 for a concise correct
68
+ answer, 0.3 for a correct-but-verbose answer, 0.0 otherwise. Padding
69
+ (length hack) pushes past the concise limit and spamming the sentinel does
70
+ nothing here — so gaming either proxy does NOT raise the true score.
71
+ """
72
+ out: list[float] = []
73
+ for comp in completions:
74
+ text = _text(comp)
75
+ has_answer = _TARGET_ANSWER in text
76
+ concise = len(text.split()) <= _CONCISE_MAX_WORDS
77
+ if has_answer and concise:
78
+ out.append(1.0)
79
+ elif has_answer:
80
+ out.append(0.3)
81
+ else:
82
+ out.append(0.0)
83
+ return out
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.25"
7
+ version = "0.71.26"
8
8
  description = "Fine-tune and post-train 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 and post-train LLMs in one command."""
2
2
 
3
- __version__ = "0.71.25"
3
+ __version__ = "0.71.26"
@@ -167,6 +167,31 @@ def train(
167
167
  "training.echo_trap_enabled=true on grpo/ppo."
168
168
  ),
169
169
  ),
170
+ reward_hack_detector: str = typer.Option(
171
+ None,
172
+ "--reward-hack-detector",
173
+ help=(
174
+ "Reward-hacking detector for GRPO/PPO: info_rm | rm_ensemble. "
175
+ "Overrides training.reward_hack_detector. (v0.71.26)"
176
+ ),
177
+ ),
178
+ reward_hack_halt: bool = typer.Option(
179
+ False,
180
+ "--reward-hack-halt",
181
+ help=(
182
+ "Auto-halt training on a HACK verdict. Requires "
183
+ "--reward-hack-detector (or training.reward_hack_detector). (v0.71.26)"
184
+ ),
185
+ ),
186
+ reward_hack_mitigation: str = typer.Option(
187
+ None,
188
+ "--reward-hack-mitigation",
189
+ help=(
190
+ "Closed-loop reward-hacking mitigation mode: off | log_only | "
191
+ "kl_control | pid_lagrangian. Requires training.reward_hack_detector "
192
+ "on grpo/ppo. Overrides training.reward_hack_mitigation. (v0.71.26)"
193
+ ),
194
+ ),
170
195
  minillm_on_policy: bool = typer.Option(
171
196
  False,
172
197
  "--minillm-on-policy",
@@ -344,6 +369,48 @@ def train(
344
369
  cfg.training.echo_trap_tokenizer_aware = True
345
370
  console.print("[green]Echo-trap tokenizer-aware scoring enabled[/]")
346
371
 
372
+ # --- Reward-hack detector / halt shortcut (v0.71.26) ---
373
+ if reward_hack_detector is not None:
374
+ if reward_hack_detector not in ("info_rm", "rm_ensemble"):
375
+ console.print(
376
+ "[red]--reward-hack-detector must be info_rm or rm_ensemble[/]"
377
+ )
378
+ raise typer.Exit(1)
379
+ cfg.training.reward_hack_detector = reward_hack_detector
380
+ console.print(f"[green]Reward-hack detector:[/] {reward_hack_detector}")
381
+ if reward_hack_halt:
382
+ if cfg.training.reward_hack_detector is None:
383
+ console.print(
384
+ "[red]--reward-hack-halt requires --reward-hack-detector "
385
+ "(or training.reward_hack_detector)[/]"
386
+ )
387
+ raise typer.Exit(1)
388
+ cfg.training.reward_hack_halt = True
389
+ console.print("[green]Reward-hack auto-halt enabled[/]")
390
+
391
+ # --- Reward-hack mitigation shortcut (v0.71.26) ---
392
+ if reward_hack_mitigation is not None:
393
+ valid_modes = ("off", "log_only", "kl_control", "pid_lagrangian")
394
+ if reward_hack_mitigation not in valid_modes:
395
+ console.print(
396
+ "[red]--reward-hack-mitigation must be one of "
397
+ f"{', '.join(valid_modes)}[/]"
398
+ )
399
+ raise typer.Exit(1)
400
+ if (
401
+ reward_hack_mitigation != "off"
402
+ and cfg.training.reward_hack_detector is None
403
+ ):
404
+ console.print(
405
+ "[red]--reward-hack-mitigation requires "
406
+ "training.reward_hack_detector to be set (the signal source)[/]"
407
+ )
408
+ raise typer.Exit(1)
409
+ cfg.training.reward_hack_mitigation = reward_hack_mitigation
410
+ console.print(
411
+ f"[green]Reward-hack mitigation:[/] {reward_hack_mitigation}"
412
+ )
413
+
347
414
  # --- MiniLLM on-policy rollout shortcut (v0.71.18 #257) ---
348
415
  if minillm_on_policy:
349
416
  if not cfg.training.minillm_enabled:
@@ -618,6 +685,16 @@ def train(
618
685
  script_args.append("--tensorboard")
619
686
  if echo_trap_tokenizer_aware:
620
687
  script_args.append("--echo-trap-tokenizer-aware")
688
+ if reward_hack_detector is not None:
689
+ script_args.extend(
690
+ ["--reward-hack-detector", reward_hack_detector]
691
+ )
692
+ if reward_hack_halt:
693
+ script_args.append("--reward-hack-halt")
694
+ if reward_hack_mitigation is not None:
695
+ script_args.extend(
696
+ ["--reward-hack-mitigation", reward_hack_mitigation]
697
+ )
621
698
  if yes:
622
699
  script_args.append("--yes")
623
700
  argv = build_accelerate_argv(