soup-cli 0.71.24__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.24 → soup_cli-0.71.26}/CHANGELOG.md +70 -0
  2. {soup_cli-0.71.24 → soup_cli-0.71.26}/CONTRIBUTING.md +4 -4
  3. {soup_cli-0.71.24 → soup_cli-0.71.26}/CONTRIBUTORS.md +3 -0
  4. {soup_cli-0.71.24 → soup_cli-0.71.26}/PKG-INFO +23 -11
  5. {soup_cli-0.71.24 → soup_cli-0.71.26}/README.md +23 -11
  6. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/README.md +1 -1
  7. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/commands.md +6 -1
  8. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/evaluation.md +56 -0
  9. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/serving-and-export.md +2 -2
  10. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/training.md +15 -0
  11. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/README.md +11 -0
  12. soup_cli-0.71.26/examples/reward_hacking/rewards.py +83 -0
  13. {soup_cli-0.71.24 → soup_cli-0.71.26}/pyproject.toml +1 -1
  14. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/__init__.py +1 -1
  15. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cli.py +12 -0
  16. soup_cli-0.71.26/src/soup_cli/commands/ship.py +609 -0
  17. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/train.py +77 -0
  18. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/schema.py +437 -4
  19. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/trace_logger.py +5 -0
  20. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/recipes/catalog.py +29 -1
  21. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/grpo.py +5 -0
  22. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/ppo.py +40 -0
  23. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/errors.py +51 -4
  24. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_wiring.py +166 -45
  25. soup_cli-0.71.26/src/soup_cli/utils/reward_hack_control.py +1122 -0
  26. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reward_hacking.py +12 -0
  27. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/rl_checkpoint.py +78 -11
  28. soup_cli-0.71.26/src/soup_cli/utils/ship_verdict.py +424 -0
  29. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_errors.py +58 -1
  30. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_recipes.py +3 -2
  31. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07124.py +3 -3
  32. soup_cli-0.71.26/tests/test_v07125.py +1014 -0
  33. soup_cli-0.71.26/tests/test_v07126.py +2315 -0
  34. {soup_cli-0.71.24 → soup_cli-0.71.26}/.dockerignore +0 -0
  35. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/FUNDING.yml +0 -0
  36. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  37. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  38. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  39. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/pull_request_template.md +0 -0
  40. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/ci.yml +0 -0
  41. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/docker.yml +0 -0
  42. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/publish.yml +0 -0
  43. {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/recipe-validation.yml +0 -0
  44. {soup_cli-0.71.24 → soup_cli-0.71.26}/.gitignore +0 -0
  45. {soup_cli-0.71.24 → soup_cli-0.71.26}/.mailmap +0 -0
  46. {soup_cli-0.71.24 → soup_cli-0.71.26}/.pre-commit-config.yaml +0 -0
  47. {soup_cli-0.71.24 → soup_cli-0.71.26}/AGENTS.md +0 -0
  48. {soup_cli-0.71.24 → soup_cli-0.71.26}/CODEOWNERS +0 -0
  49. {soup_cli-0.71.24 → soup_cli-0.71.26}/CODE_OF_CONDUCT.md +0 -0
  50. {soup_cli-0.71.24 → soup_cli-0.71.26}/Dockerfile +0 -0
  51. {soup_cli-0.71.24 → soup_cli-0.71.26}/LICENSE +0 -0
  52. {soup_cli-0.71.24 → soup_cli-0.71.26}/NOTICE +0 -0
  53. {soup_cli-0.71.24 → soup_cli-0.71.26}/SECURITY.md +0 -0
  54. {soup_cli-0.71.24 → soup_cli-0.71.26}/docker-compose.yml +0 -0
  55. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/adapters-and-governance.md +0 -0
  56. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/backends-and-ops.md +0 -0
  57. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/data.md +0 -0
  58. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/models.md +0 -0
  59. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/peft-and-efficiency.md +0 -0
  60. {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/performance-and-quantization.md +0 -0
  61. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/dpo_chat.yaml +0 -0
  62. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/dpo_example.yaml +0 -0
  63. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/grpo_reasoning.yaml +0 -0
  64. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step1_sft.yaml +0 -0
  65. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step2_reward.yaml +0 -0
  66. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  67. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/sft_basic.yaml +0 -0
  68. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/vision_llama.yaml +0 -0
  69. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/alpaca_tiny.jsonl +0 -0
  70. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/chat_preferences.jsonl +0 -0
  71. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/dpo_sample.jsonl +0 -0
  72. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/reasoning_math.jsonl +0 -0
  73. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/synthetic_workflow.md +0 -0
  74. {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/synthetic_workflow.yaml +0 -0
  75. {soup_cli-0.71.24 → soup_cli-0.71.26}/soup.png +0 -0
  76. {soup_cli-0.71.24 → soup_cli-0.71.26}/soup_logo_svg.svg +0 -0
  77. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/__main__.py +0 -0
  78. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/__init__.py +0 -0
  79. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/analyzer.py +0 -0
  80. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/decisions.py +0 -0
  81. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/generate_config.py +0 -0
  82. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/__init__.py +0 -0
  83. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/pack.py +0 -0
  84. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/publish.py +0 -0
  85. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/run.py +0 -0
  86. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/schema.py +0 -0
  87. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/unpack.py +0 -0
  88. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/verify.py +0 -0
  89. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cloud/__init__.py +0 -0
  90. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cloud/modal.py +0 -0
  91. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/__init__.py +0 -0
  92. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0550.py +0 -0
  93. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0610.py +0 -0
  94. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0650.py +0 -0
  95. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v07110.py +0 -0
  96. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_webhook_cli.py +0 -0
  97. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ab.py +0 -0
  98. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/active_sample.py +0 -0
  99. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/adapters.py +0 -0
  100. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/advise.py +0 -0
  101. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/agent.py +0 -0
  102. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/airgap.py +0 -0
  103. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/apple_adapter.py +0 -0
  104. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/attest.py +0 -0
  105. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/audit_log.py +0 -0
  106. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/autopilot.py +0 -0
  107. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/bench.py +0 -0
  108. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/bom.py +0 -0
  109. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/build.py +0 -0
  110. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/can.py +0 -0
  111. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/chat.py +0 -0
  112. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/compile_cmd.py +0 -0
  113. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/compile_tools.py +0 -0
  114. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/completions.py +0 -0
  115. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/cost.py +0 -0
  116. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data.py +0 -0
  117. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_forge.py +0 -0
  118. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_mix.py +0 -0
  119. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_score.py +0 -0
  120. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  121. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/deploy.py +0 -0
  122. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/diagnose.py +0 -0
  123. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/diff.py +0 -0
  124. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/distill_prompt.py +0 -0
  125. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/doctor.py +0 -0
  126. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/drift_alarm.py +0 -0
  127. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/edit.py +0 -0
  128. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/env.py +0 -0
  129. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/eval.py +0 -0
  130. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/expect.py +0 -0
  131. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/export.py +0 -0
  132. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/fetch.py +0 -0
  133. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/generate.py +0 -0
  134. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/history.py +0 -0
  135. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/infer.py +0 -0
  136. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ingest.py +0 -0
  137. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/init.py +0 -0
  138. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/iterative_dpo.py +0 -0
  139. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/license_advisor.py +0 -0
  140. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/llama.py +0 -0
  141. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/local_rl.py +0 -0
  142. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/lock.py +0 -0
  143. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/loop.py +0 -0
  144. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/merge.py +0 -0
  145. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  146. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/migrate.py +0 -0
  147. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/monitor.py +0 -0
  148. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/plan.py +0 -0
  149. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/plugins.py +0 -0
  150. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/probe.py +0 -0
  151. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/profile.py +0 -0
  152. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/prune_prompt.py +0 -0
  153. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/push.py +0 -0
  154. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/quantize.py +0 -0
  155. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/quickstart.py +0 -0
  156. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ra_dit.py +0 -0
  157. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/recipes.py +0 -0
  158. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/registry.py +0 -0
  159. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/runs.py +0 -0
  160. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/serve.py +0 -0
  161. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/spectrum.py +0 -0
  162. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/steer.py +0 -0
  163. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/sweep.py +0 -0
  164. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tokenizer.py +0 -0
  165. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tui.py +0 -0
  166. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tunability.py +0 -0
  167. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ui.py +0 -0
  168. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/why.py +0 -0
  169. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/__init__.py +0 -0
  170. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/loader.py +0 -0
  171. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/__init__.py +0 -0
  172. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  173. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  174. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  175. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  176. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  177. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  178. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  179. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  180. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  181. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  182. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  183. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  184. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/augment.py +0 -0
  185. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/chat_templates.py +0 -0
  186. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/collators.py +0 -0
  187. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/formats.py +0 -0
  188. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/loader.py +0 -0
  189. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/loss_mask.py +0 -0
  190. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/__init__.py +0 -0
  191. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/_utils.py +0 -0
  192. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/anthropic.py +0 -0
  193. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/ollama.py +0 -0
  194. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/vllm.py +0 -0
  195. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/sft_format.py +0 -0
  196. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/__init__.py +0 -0
  197. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/code.py +0 -0
  198. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/conversation.py +0 -0
  199. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/preference.py +0 -0
  200. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/qa.py +0 -0
  201. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/reasoning.py +0 -0
  202. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/tool_calling.py +0 -0
  203. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/verifiable.py +0 -0
  204. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/__init__.py +0 -0
  205. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/pair_builder.py +0 -0
  206. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/parsers.py +0 -0
  207. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/quality.py +0 -0
  208. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/validator.py +0 -0
  209. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/__init__.py +0 -0
  210. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/arena.py +0 -0
  211. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  212. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/calibrate.py +0 -0
  213. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  214. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/custom.py +0 -0
  215. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/forgetting.py +0 -0
  216. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/gate.py +0 -0
  217. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/human.py +0 -0
  218. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/judge.py +0 -0
  219. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/leaderboard.py +0 -0
  220. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/quant_check.py +0 -0
  221. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/experiment/__init__.py +0 -0
  222. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/experiment/tracker.py +0 -0
  223. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/__init__.py +0 -0
  224. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/axolotl.py +0 -0
  225. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/common.py +0 -0
  226. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/llamafactory.py +0 -0
  227. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/unsloth.py +0 -0
  228. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/__init__.py +0 -0
  229. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/callback.py +0 -0
  230. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  231. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/display.py +0 -0
  232. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  233. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/hf_push.py +0 -0
  234. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  235. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/plugins/__init__.py +0 -0
  236. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/py.typed +0 -0
  237. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/recipes/__init__.py +0 -0
  238. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/__init__.py +0 -0
  239. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/attach.py +0 -0
  240. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/diff.py +0 -0
  241. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/hashing.py +0 -0
  242. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/store.py +0 -0
  243. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/__init__.py +0 -0
  244. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/audio.yaml +0 -0
  245. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/bco.yaml +0 -0
  246. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/chat.yaml +0 -0
  247. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/code.yaml +0 -0
  248. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/embedding.yaml +0 -0
  249. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  250. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  251. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  252. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/ipo.yaml +0 -0
  253. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/kto.yaml +0 -0
  254. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/longcontext.yaml +0 -0
  255. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/manifest.json +0 -0
  256. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/medical.yaml +0 -0
  257. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/moe.yaml +0 -0
  258. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/orpo.yaml +0 -0
  259. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/pretrain.yaml +0 -0
  260. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/reasoning.yaml +0 -0
  261. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/rlhf.yaml +0 -0
  262. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/simpo.yaml +0 -0
  263. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/tool-calling.yaml +0 -0
  264. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/vision.yaml +0 -0
  265. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/__init__.py +0 -0
  266. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/bco.py +0 -0
  267. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/bitnet.py +0 -0
  268. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/classifier.py +0 -0
  269. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/distill.py +0 -0
  270. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/dpo.py +0 -0
  271. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/embedding.py +0 -0
  272. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/ipo.py +0 -0
  273. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/kto.py +0 -0
  274. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  275. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  276. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_routing.py +0 -0
  277. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_sft.py +0 -0
  278. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mole_routing.py +0 -0
  279. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/orpo.py +0 -0
  280. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/preference.py +0 -0
  281. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/pretrain.py +0 -0
  282. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/prm.py +0 -0
  283. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/raft.py +0 -0
  284. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/reward_model.py +0 -0
  285. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/rewards.py +0 -0
  286. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/sft.py +0 -0
  287. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/simpo.py +0 -0
  288. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/tts.py +0 -0
  289. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/unlearn.py +0 -0
  290. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/tui_app.py +0 -0
  291. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/__init__.py +0 -0
  292. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/app.py +0 -0
  293. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/plugins/__init__.py +0 -0
  294. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/app.js +0 -0
  295. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/index.html +0 -0
  296. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.png +0 -0
  297. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.svg +0 -0
  298. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/style.css +0 -0
  299. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/__init__.py +0 -0
  300. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/_eval_text.py +0 -0
  301. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ab_test.py +0 -0
  302. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/activation_offload.py +0 -0
  303. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/active_sampler.py +0 -0
  304. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_bisect.py +0 -0
  305. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_branch.py +0 -0
  306. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_diff.py +0 -0
  307. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_merge.py +0 -0
  308. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_pr.py +0 -0
  309. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_scan.py +0 -0
  310. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_sign.py +0 -0
  311. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advanced_precision.py +0 -0
  312. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advise.py +0 -0
  313. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advise_history.py +0 -0
  314. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_forge.py +0 -0
  315. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_rollout.py +0 -0
  316. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_sandbox.py +0 -0
  317. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/airgap_bundle.py +0 -0
  318. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/annex_xi.py +0 -0
  319. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/anthropic_messages.py +0 -0
  320. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/apple_adapter.py +0 -0
  321. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/attest.py +0 -0
  322. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/audit_log.py +0 -0
  323. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/auto_quant.py +0 -0
  324. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/backend_detect.py +0 -0
  325. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/batch_probe.py +0 -0
  326. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/behavior_battery.py +0 -0
  327. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/bitnet.py +0 -0
  328. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/blame.py +0 -0
  329. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/block_expansion.py +0 -0
  330. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/bom.py +0 -0
  331. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot.py +0 -0
  332. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  333. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/build_dag.py +0 -0
  334. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/canary_discovery.py +0 -0
  335. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/canary_router.py +0 -0
  336. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/capability_suite.py +0 -0
  337. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/checklist_dsl.py +0 -0
  338. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  339. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/citation_faithful.py +0 -0
  340. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/classifier.py +0 -0
  341. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cmaes_merge.py +0 -0
  342. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/compile_tools.py +0 -0
  343. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/completions.py +0 -0
  344. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/constants.py +0 -0
  345. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/convergence.py +0 -0
  346. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/crash.py +0 -0
  347. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  348. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum.py +0 -0
  349. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  350. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cut_ce.py +0 -0
  351. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_forge.py +0 -0
  352. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_mix.py +0 -0
  353. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_pipeline.py +0 -0
  354. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_score.py +0 -0
  355. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deepspeed.py +0 -0
  356. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  357. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/demo_bundles.py +0 -0
  358. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  359. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_measure.py +0 -0
  360. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  361. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/_common.py +0 -0
  362. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/badge.py +0 -0
  363. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/citation.py +0 -0
  364. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  365. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  366. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/format.py +0 -0
  367. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/live.py +0 -0
  368. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  369. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  370. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  371. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/report.py +0 -0
  372. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/runner.py +0 -0
  373. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/distill.py +0 -0
  374. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/dpo_variants.py +0 -0
  375. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/drift_alarm.py +0 -0
  376. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  377. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/echo_trap.py +0 -0
  378. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_diff.py +0 -0
  379. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_governor.py +0 -0
  380. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_kernels.py +0 -0
  381. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/encoding.py +0 -0
  382. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/energy.py +0 -0
  383. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/env_lock.py +0 -0
  384. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_design.py +0 -0
  385. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  386. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  387. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/expectations.py +0 -0
  388. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fetch_examples.py +0 -0
  389. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/flash_attn.py +0 -0
  390. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fp8.py +0 -0
  391. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/freeze.py +0 -0
  392. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp.py +0 -0
  393. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  394. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/galore.py +0 -0
  395. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gguf_quant.py +0 -0
  396. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gpu.py +0 -0
  397. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gpu_monitor.py +0 -0
  398. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grace_codebook.py +0 -0
  399. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/graceful_save.py +0 -0
  400. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grad_accum.py +0 -0
  401. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  402. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_long_context.py +0 -0
  403. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_variants.py +0 -0
  404. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hardware_fit.py +0 -0
  405. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/harm_probe.py +0 -0
  406. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hf.py +0 -0
  407. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hf_space.py +0 -0
  408. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hubs.py +0 -0
  409. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ingest_sources.py +0 -0
  410. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/integrations.py +0 -0
  411. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/interference.py +0 -0
  412. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/interference_live.py +0 -0
  413. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/irt.py +0 -0
  414. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/iterative_dpo.py +0 -0
  415. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  416. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/kernel_picker.py +0 -0
  417. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/knowledge_edit.py +0 -0
  418. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/kv_cache.py +0 -0
  419. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/launcher.py +0 -0
  420. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/license_advisor.py +0 -0
  421. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/license_matrix.py +0 -0
  422. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/liger.py +0 -0
  423. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/live_eval.py +0 -0
  424. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/llama_proxy.py +0 -0
  425. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/llama_server_timings.py +0 -0
  426. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl.py +0 -0
  427. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  428. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loftq_init.py +0 -0
  429. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/log_level.py +0 -0
  430. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/long_context.py +0 -0
  431. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/longlora.py +0 -0
  432. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_budget.py +0 -0
  433. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_daemon.py +0 -0
  434. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_iteration.py +0 -0
  435. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_stages.py +0 -0
  436. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_state.py +0 -0
  437. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/lr_finder.py +0 -0
  438. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/lr_groups.py +0 -0
  439. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/magpie.py +0 -0
  440. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/metrics.py +0 -0
  441. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mii.py +0 -0
  442. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/minillm.py +0 -0
  443. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mix_proxy.py +0 -0
  444. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mixed_precision.py +0 -0
  445. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mlx.py +0 -0
  446. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mod.py +0 -0
  447. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/moe.py +0 -0
  448. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/moe_quant.py +0 -0
  449. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mole_routing.py +0 -0
  450. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack.py +0 -0
  451. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_sampler.py +0 -0
  452. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_trainer.py +0 -0
  453. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/namespace_pin.py +0 -0
  454. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/neat_packing.py +0 -0
  455. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ngram_spec.py +0 -0
  456. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/nlg_metrics.py +0 -0
  457. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ollama.py +0 -0
  458. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/onboarding.py +0 -0
  459. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  460. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/paths.py +0 -0
  461. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_builder.py +0 -0
  462. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_patches.py +0 -0
  463. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/persona_hub.py +0 -0
  464. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/pipeline.py +0 -0
  465. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/preference_combine.py +0 -0
  466. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prm.py +0 -0
  467. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/probe_kernel.py +0 -0
  468. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/probe_pack.py +0 -0
  469. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiler.py +0 -0
  470. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiling.py +0 -0
  471. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  472. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_compile.py +0 -0
  473. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_distill.py +0 -0
  474. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prune_prompt.py +0 -0
  475. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/qat.py +0 -0
  476. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/qr_url.py +0 -0
  477. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/quality.py +0 -0
  478. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/quant_menu.py +0 -0
  479. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit.py +0 -0
  480. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit_run.py +0 -0
  481. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/raft.py +0 -0
  482. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_effort.py +0 -0
  483. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_parser.py +0 -0
  484. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_dag.py +0 -0
  485. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_run.py +0 -0
  486. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/registry.py +0 -0
  487. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/relora.py +0 -0
  488. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/replay.py +0 -0
  489. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/repro_receipt.py +0 -0
  490. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ring_attention.py +0 -0
  491. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  492. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/run_cost.py +0 -0
  493. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sae_diff.py +0 -0
  494. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/save_formats.py +0 -0
  495. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/server_tools.py +0 -0
  496. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sglang.py +0 -0
  497. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/shortcuts.py +0 -0
  498. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/signing.py +0 -0
  499. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sleeper_probe.py +0 -0
  500. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/soup_lock.py +0 -0
  501. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spec_pairing.py +0 -0
  502. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spectrum_scan.py +0 -0
  503. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spike_recovery.py +0 -0
  504. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sse_train_stream.py +0 -0
  505. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/steering.py +0 -0
  506. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/strict_safetensors.py +0 -0
  507. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/structured_output.py +0 -0
  508. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sweep_config.py +0 -0
  509. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tail_latency.py +0 -0
  510. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/terraform_plan.py +0 -0
  511. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tool_outputs.py +0 -0
  512. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/topology.py +0 -0
  513. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tracing.py +0 -0
  514. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trackers.py +0 -0
  515. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/train_event_buffer.py +0 -0
  516. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trainer_plugins.py +0 -0
  517. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trust_remote.py +0 -0
  518. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/truth_probe.py +0 -0
  519. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tts.py +0 -0
  520. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tts_codec.py +0 -0
  521. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tunability.py +0 -0
  522. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ui_env.py +0 -0
  523. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/uld.py +0 -0
  524. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  525. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning.py +0 -0
  526. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning_eval.py +0 -0
  527. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unsloth.py +0 -0
  528. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/v028_features.py +0 -0
  529. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vector_bank.py +0 -0
  530. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vllm.py +0 -0
  531. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vscode_setup.py +0 -0
  532. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/warmup.py +0 -0
  533. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/webhooks.py +0 -0
  534. {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/why.py +0 -0
  535. {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/chat.yaml +0 -0
  536. {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/code.yaml +0 -0
  537. {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/medical.yaml +0 -0
  538. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/__init__.py +0 -0
  539. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/conftest.py +0 -0
  540. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v053_qa.md +0 -0
  541. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v07114_qa.md +0 -0
  542. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v0716_qa.md +0 -0
  543. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_adapters.py +0 -0
  544. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_advanced_peft.py +0 -0
  545. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_assistant_mask.py +0 -0
  546. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_audio.py +0 -0
  547. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_auto_tuning.py +0 -0
  548. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_autopilot.py +0 -0
  549. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_awq_gptq_export.py +0 -0
  550. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_batch_probe.py +0 -0
  551. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bco.py +0 -0
  552. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bench.py +0 -0
  553. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_brain_rot_multilingual.py +0 -0
  554. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bugfixes.py +0 -0
  555. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_build_dag.py +0 -0
  556. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_callback.py +0 -0
  557. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cans.py +0 -0
  558. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_chat.py +0 -0
  559. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_chat_template.py +0 -0
  560. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cli.py +0 -0
  561. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cli_subprocess.py +0 -0
  562. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_config.py +0 -0
  563. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cost.py +0 -0
  564. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_crash_reporter.py +0 -0
  565. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_curriculum.py +0 -0
  566. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data.py +0 -0
  567. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_augment.py +0 -0
  568. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_sample.py +0 -0
  569. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_split.py +0 -0
  570. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_tools.py +0 -0
  571. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dataset_hub.py +0 -0
  572. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dataset_registry.py +0 -0
  573. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_deepspeed.py +0 -0
  574. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_deploy_ollama.py +0 -0
  575. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_diff.py +0 -0
  576. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_display.py +0 -0
  577. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_doctor.py +0 -0
  578. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dpo_example.py +0 -0
  579. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dpo_variants.py +0 -0
  580. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_embedding.py +0 -0
  581. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval.py +0 -0
  582. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval_gate.py +0 -0
  583. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval_platform.py +0 -0
  584. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_export.py +0 -0
  585. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_formats.py +0 -0
  586. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_fp8_recipe.py +0 -0
  587. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_freeze_training.py +0 -0
  588. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_generate.py +0 -0
  589. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_gpu.py +0 -0
  590. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_grpo.py +0 -0
  591. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_hf_integration.py +0 -0
  592. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_infer.py +0 -0
  593. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_inference_advanced.py +0 -0
  594. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_init.py +0 -0
  595. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ipo.py +0 -0
  596. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_jinja_analyzer.py +0 -0
  597. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_kto.py +0 -0
  598. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_loader.py +0 -0
  599. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_log_level.py +0 -0
  600. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_loss_watchdog.py +0 -0
  601. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_merge.py +0 -0
  602. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_migrate.py +0 -0
  603. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_mlx_backend.py +0 -0
  604. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_moe.py +0 -0
  605. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multi_adapter.py +0 -0
  606. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multi_gpu.py +0 -0
  607. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_config.py +0 -0
  608. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_invariants.py +0 -0
  609. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_sampler.py +0 -0
  610. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_neat_packing.py +0 -0
  611. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_neftune_rslora.py +0 -0
  612. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_onnx_tensorrt_export.py +0 -0
  613. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_orpo.py +0 -0
  614. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_packing.py +0 -0
  615. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_a_wave1.py +0 -0
  616. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_a_wave2.py +0 -0
  617. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_b.py +0 -0
  618. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_c.py +0 -0
  619. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_d.py +0 -0
  620. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_e.py +0 -0
  621. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_f_hardening.py +0 -0
  622. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_peft_methods.py +0 -0
  623. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_peft_patches.py +0 -0
  624. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_performance.py +0 -0
  625. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_pissa_init.py +0 -0
  626. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ppo.py +0 -0
  627. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_dispatcher.py +0 -0
  628. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_multi.py +0 -0
  629. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_multi_runtime.py +0 -0
  630. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_pretrain.py +0 -0
  631. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_profile.py +0 -0
  632. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_profiling.py +0 -0
  633. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_progress.py +0 -0
  634. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_push.py +0 -0
  635. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_qat.py +0 -0
  636. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quality_filter.py +0 -0
  637. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quant_check.py +0 -0
  638. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quant_menu.py +0 -0
  639. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quickstart.py +0 -0
  640. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_rank_pattern.py +0 -0
  641. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_recipes_v031.py +0 -0
  642. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_refusal_multilingual.py +0 -0
  643. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_registry.py +0 -0
  644. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_relora.py +0 -0
  645. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_replay.py +0 -0
  646. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_resume.py +0 -0
  647. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_rlvr.py +0 -0
  648. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_run_cost.py +0 -0
  649. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_runs.py +0 -0
  650. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_serve.py +0 -0
  651. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_server_generate.py +0 -0
  652. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_sglang_serve.py +0 -0
  653. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_simpo.py +0 -0
  654. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_smoke_train.py +0 -0
  655. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_speculative_decoding.py +0 -0
  656. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_sweep.py +0 -0
  657. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_synth_data_pro.py +0 -0
  658. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_templates_yaml.py +0 -0
  659. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tensorboard.py +0 -0
  660. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tool_calling.py +0 -0
  661. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trace_to_pref.py +0 -0
  662. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tracker.py +0 -0
  663. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trainer_coverage_v035.py +0 -0
  664. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trainer_init.py +0 -0
  665. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_training_intelligence.py +0 -0
  666. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_training_speed.py +0 -0
  667. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trust_remote_code.py +0 -0
  668. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tui.py +0 -0
  669. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui.py +0 -0
  670. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_chat.py +0 -0
  671. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_config_builder.py +0 -0
  672. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_live_monitor.py +0 -0
  673. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_metrics.py +0 -0
  674. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_unsloth.py +0 -0
  675. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_c.py +0 -0
  676. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_d.py +0 -0
  677. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_e.py +0 -0
  678. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0402_part_a.py +0 -0
  679. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0402_part_b.py +0 -0
  680. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_a.py +0 -0
  681. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_b.py +0 -0
  682. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_c.py +0 -0
  683. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0404_part_a.py +0 -0
  684. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0404_part_b.py +0 -0
  685. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0405_part_a.py +0 -0
  686. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0406_part_a.py +0 -0
  687. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_a.py +0 -0
  688. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_b.py +0 -0
  689. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_c.py +0 -0
  690. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0420.py +0 -0
  691. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_a.py +0 -0
  692. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_b.py +0 -0
  693. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_c.py +0 -0
  694. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_d.py +0 -0
  695. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_a.py +0 -0
  696. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_b.py +0 -0
  697. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_c.py +0 -0
  698. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_d.py +0 -0
  699. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_review_followups.py +0 -0
  700. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0450.py +0 -0
  701. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0460_part_a.py +0 -0
  702. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0460_part_b.py +0 -0
  703. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0470_part_a.py +0 -0
  704. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0470_part_b.py +0 -0
  705. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0480_part_a.py +0 -0
  706. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0480_part_b.py +0 -0
  707. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0490.py +0 -0
  708. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_a.py +0 -0
  709. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_b.py +0 -0
  710. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_c.py +0 -0
  711. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_d.py +0 -0
  712. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_e.py +0 -0
  713. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0510.py +0 -0
  714. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0520.py +0 -0
  715. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0530.py +0 -0
  716. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v05310.py +0 -0
  717. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v05311.py +0 -0
  718. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_109.py +0 -0
  719. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_139.py +0 -0
  720. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_142.py +0 -0
  721. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_82.py +0 -0
  722. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0532.py +0 -0
  723. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0533.py +0 -0
  724. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0534.py +0 -0
  725. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0535.py +0 -0
  726. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0536.py +0 -0
  727. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0537.py +0 -0
  728. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0538.py +0 -0
  729. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0539.py +0 -0
  730. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0540.py +0 -0
  731. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0550.py +0 -0
  732. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0550_followups.py +0 -0
  733. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0560.py +0 -0
  734. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_a.py +0 -0
  735. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_b.py +0 -0
  736. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_c.py +0 -0
  737. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_d.py +0 -0
  738. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0580.py +0 -0
  739. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0590.py +0 -0
  740. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_a.py +0 -0
  741. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_b.py +0 -0
  742. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_c.py +0 -0
  743. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_d.py +0 -0
  744. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_e.py +0 -0
  745. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_f.py +0 -0
  746. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_a.py +0 -0
  747. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_b.py +0 -0
  748. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_c.py +0 -0
  749. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_d.py +0 -0
  750. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_e.py +0 -0
  751. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_followups.py +0 -0
  752. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_a.py +0 -0
  753. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_b.py +0 -0
  754. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_c.py +0 -0
  755. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_d.py +0 -0
  756. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_e.py +0 -0
  757. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_followups.py +0 -0
  758. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_a.py +0 -0
  759. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_b.py +0 -0
  760. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_c.py +0 -0
  761. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_d.py +0 -0
  762. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_e.py +0 -0
  763. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0631_206.py +0 -0
  764. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_followups.py +0 -0
  765. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_a.py +0 -0
  766. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_b.py +0 -0
  767. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_c.py +0 -0
  768. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_d.py +0 -0
  769. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_e.py +0 -0
  770. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_f.py +0 -0
  771. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_followups.py +0 -0
  772. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_a.py +0 -0
  773. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_b.py +0 -0
  774. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_c.py +0 -0
  775. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_d.py +0 -0
  776. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_e.py +0 -0
  777. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_cli.py +0 -0
  778. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_followups.py +0 -0
  779. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_a.py +0 -0
  780. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_b.py +0 -0
  781. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_c.py +0 -0
  782. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_d.py +0 -0
  783. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_e.py +0 -0
  784. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_followups.py +0 -0
  785. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_a.py +0 -0
  786. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_b.py +0 -0
  787. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_c.py +0 -0
  788. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_d.py +0 -0
  789. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_e.py +0 -0
  790. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_f.py +0 -0
  791. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_followups.py +0 -0
  792. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_a.py +0 -0
  793. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_b.py +0 -0
  794. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_c.py +0 -0
  795. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_d.py +0 -0
  796. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_e.py +0 -0
  797. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_a.py +0 -0
  798. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_b.py +0 -0
  799. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_c.py +0 -0
  800. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_d.py +0 -0
  801. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_e.py +0 -0
  802. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_a.py +0 -0
  803. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_b.py +0 -0
  804. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_c.py +0 -0
  805. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_d.py +0 -0
  806. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_e.py +0 -0
  807. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_f.py +0 -0
  808. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07110.py +0 -0
  809. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07111.py +0 -0
  810. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07112.py +0 -0
  811. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07113.py +0 -0
  812. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07114.py +0 -0
  813. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07115.py +0 -0
  814. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07116.py +0 -0
  815. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07117.py +0 -0
  816. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07118.py +0 -0
  817. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07119.py +0 -0
  818. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0712.py +0 -0
  819. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07120.py +0 -0
  820. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07121.py +0 -0
  821. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07122.py +0 -0
  822. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07123.py +0 -0
  823. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0713.py +0 -0
  824. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0714.py +0 -0
  825. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0715.py +0 -0
  826. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0716.py +0 -0
  827. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0717.py +0 -0
  828. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0718.py +0 -0
  829. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0719.py +0 -0
  830. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_validator.py +0 -0
  831. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_vision.py +0 -0
  832. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_vllm_serve.py +0 -0
  833. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_warmup.py +0 -0
  834. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_why.py +0 -0
  835. {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,76 @@ 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
+
53
+ ## [0.71.25] - 2026-06-27
54
+
55
+ ### Added
56
+ - **`soup ship` — the SHIP / DON'T-SHIP verdict.** After fine-tuning, answer one
57
+ question: did the model get better, or did I break it? `soup ship` fuses two
58
+ checks into a single binary decision — **leg 1**: the task metric *strictly*
59
+ improved (base → tuned); AND **leg 2**: no general benchmark regressed past a
60
+ forgetting threshold (default 0.05 absolute points). It SHIPs only when both
61
+ hold — otherwise DON'T SHIP, *even if the task metric looks great*. The output
62
+ is a one-screen verdict + the reason, with CI-gateable exit codes
63
+ (0 = SHIP, 2 = DON'T SHIP, 1 = runtime error).
64
+ - Leg-1 modes: `--task-mode metric` (eval accuracy) or `judge_score`
65
+ (LLM-as-a-judge); pairwise win-rate is planned for a later release.
66
+ - Leg-2 suite: built-in mini benchmarks by default (offline, CPU), or
67
+ `--general-suite <names>` to route lm-eval benchmarks; `--baseline
68
+ registry://… | file.json` supplies recorded base scores.
69
+ - `--evidence ev.json` decides offline from pre-computed scores (no model
70
+ load); `--output verdict.json` persists the machine-readable verdict.
71
+ - Friendlier error messages: the CUDA-OOM hint now also suggests
72
+ `gradient_checkpointing` and `4bit` quantization, plus new mappings for
73
+ Hugging Face gated repos (`huggingface-cli login` / `HF_TOKEN`) and
74
+ `trust_remote_code` errors. Closes #272
75
+ ([#282](https://github.com/MakazhanAlpamys/Soup/pull/282) by [@Akshaya-reddy18](https://github.com/Akshaya-reddy18)).
76
+
77
+ ### Security
78
+ - `soup ship` input hardening: `--evidence` is opened with `O_NOFOLLOW` + an
79
+ fstat size cap (16 MiB) under cwd containment; `--task-eval` is cwd-contained
80
+ and symlink-rejected; `--judge-model` is validated by scheme/host via
81
+ `urlparse` (blocks the `http://localhost.attacker.com` prefix bypass);
82
+ lm-eval model ids reject `,`/`=` injection; `--general-suite` is bounded
83
+ (≤ 50 names, ≤ 256 chars each).
84
+
15
85
  ## [0.71.24] - 2026-06-21
16
86
 
17
87
  ### 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 (296 files, 14514 tests)
123
+ tests/ - Test suite (298 files, 14788 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
150
150
  pytest tests/ --cov=soup_cli --cov-report=html
151
151
  ```
152
152
 
153
- ### Test Files (296 files)
153
+ ### Test Files (297 files)
154
154
 
155
155
  > A representative sample of the suite below. The full table lives in
156
156
  > [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
@@ -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))
@@ -41,6 +42,8 @@ Listed by first contribution. PR numbers link the work.
41
42
  - `--energy` flag for `soup bom emit` — thread energy/CO₂ into the ML-BOM ([#256](https://github.com/MakazhanAlpamys/Soup/pull/256))
42
43
  - **shatakshi-1404** ([@shatakshi-1404](https://github.com/shatakshi-1404))
43
44
  - Unit tests for the `warmup.py` auto-warmup-steps helper ([#274](https://github.com/MakazhanAlpamys/Soup/pull/274))
45
+ - **Kondamwar Akshaya Shrikant** ([@Akshaya-reddy18](https://github.com/Akshaya-reddy18))
46
+ - Friendlier error messages — richer CUDA-OOM hint + Hugging Face gated-repo and `trust_remote_code` mappings + tests ([#282](https://github.com/MakazhanAlpamys/Soup/pull/282))
44
47
 
45
48
  ---
46
49
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.24
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,17 +189,22 @@ infrastructure instead of improving models. Soup fixes that.
189
189
 
190
190
  ## What's New
191
191
 
192
- **v0.71.242026 model-family recipes (catalog 116 133).** 17 new ready-made SFT recipes for the open-weight models that shipped Feb–Jun 2026:
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
- - **Qwen 3.5 family (Apache-2.0)** `qwen3.5-0.8b/2b/4b/9b/27b-sft` dense, plus the
195
- `35b-a3b` / `122b-a10b` / `397b-a17b` MoE sizes (262K context, native vision).
196
- - **Qwen 3.6 (Apache-2.0)** `qwen3.6-27b-sft` + `qwen3.6-35b-a3b-sft`.
197
- - **Frontier MoE** `deepseek-v4-flash-sft` / `deepseek-v4-pro-sft` (MIT),
198
- `glm-5.1-sft` (MIT), `kimi-k2.5-sft` / `kimi-k2.6-sft` (Modified MIT),
199
- `minimax-m3-sft` (MiniMax Community License), `mistral-large-3-sft` (Apache-2.0).
200
- - **Stale repo-ID fix** — `glm-5-sft` now points at `zai-org/GLM-5` (the org migrated from `THUDM`).
201
- - Every base repo-ID was verified to resolve on Hugging Face. Grab one with
202
- `soup recipes use <name>` or browse all 133 via `soup recipes list`.
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.
204
+
205
+ ```bash
206
+ soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
207
+ ```
203
208
 
204
209
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
205
210
 
@@ -385,6 +390,13 @@ pre-commit install # optional: ruff lint+format on commit
385
390
  See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow and [SECURITY.md](SECURITY.md) to
386
391
  report a vulnerability.
387
392
 
393
+ ## Contributors
394
+
395
+ Built by the community ❤️ — thank you to everyone who has contributed. See
396
+ [CONTRIBUTORS.md](CONTRIBUTORS.md).
397
+
398
+ [![Contributors](https://contrib.rocks/image?repo=MakazhanAlpamys/Soup)](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
399
+
388
400
  ## License
389
401
 
390
402
  [Apache-2.0](LICENSE). Copyright © the Soup contributors.
@@ -49,17 +49,22 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.242026 model-family recipes (catalog 116 133).** 17 new ready-made SFT recipes for the open-weight models that shipped Feb–Jun 2026:
53
-
54
- - **Qwen 3.5 family (Apache-2.0)** `qwen3.5-0.8b/2b/4b/9b/27b-sft` dense, plus the
55
- `35b-a3b` / `122b-a10b` / `397b-a17b` MoE sizes (262K context, native vision).
56
- - **Qwen 3.6 (Apache-2.0)** `qwen3.6-27b-sft` + `qwen3.6-35b-a3b-sft`.
57
- - **Frontier MoE** `deepseek-v4-flash-sft` / `deepseek-v4-pro-sft` (MIT),
58
- `glm-5.1-sft` (MIT), `kimi-k2.5-sft` / `kimi-k2.6-sft` (Modified MIT),
59
- `minimax-m3-sft` (MiniMax Community License), `mistral-large-3-sft` (Apache-2.0).
60
- - **Stale repo-ID fix** — `glm-5-sft` now points at `zai-org/GLM-5` (the org migrated from `THUDM`).
61
- - Every base repo-ID was verified to resolve on Hugging Face. Grab one with
62
- `soup recipes use <name>` or browse all 133 via `soup recipes list`.
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.
64
+
65
+ ```bash
66
+ soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
67
+ ```
63
68
 
64
69
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
65
70
 
@@ -245,6 +250,13 @@ pre-commit install # optional: ruff lint+format on commit
245
250
  See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow and [SECURITY.md](SECURITY.md) to
246
251
  report a vulnerability.
247
252
 
253
+ ## Contributors
254
+
255
+ Built by the community ❤️ — thank you to everyone who has contributed. See
256
+ [CONTRIBUTORS.md](CONTRIBUTORS.md).
257
+
258
+ [![Contributors](https://contrib.rocks/image?repo=MakazhanAlpamys/Soup)](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
259
+
248
260
  ## License
249
261
 
250
262
  [Apache-2.0](LICENSE). Copyright © the Soup contributors.
@@ -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
@@ -148,6 +148,10 @@ soup runs show <run_id> Run details + loss graph + cost
148
148
  soup runs compare <run_1> <run_2> Compare two runs
149
149
  soup runs replay <run_id> Replay summary + loss curve from history (also plots a benchmark-score curve when the metric lives in eval_results)
150
150
  soup why [run_id] Explain training anomalies (heuristic)
151
+ soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no forgetting (exit 0=SHIP / 2=DON'T / 1=error) (v0.71.25)
152
+ soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
153
+ soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
154
+ soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
151
155
  soup tui Full-screen Textual dashboard (requires [tui] extra)
152
156
  soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
153
157
  soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
@@ -241,6 +245,7 @@ soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub dive
241
245
  soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
242
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)
243
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)
244
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)
245
250
  soup train --minillm-enabled [--minillm-teacher-mix-ratio 0.3] MiniLLM reverse-KL distillation — LIVE (v0.70.0; live v0.71.11)
246
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)
@@ -14,6 +14,7 @@
14
14
  - [Sequential A/B Harness (`soup ab`)](#sequential-ab-harness-soup-ab)
15
15
  - [Drift Alarm (`soup drift-alarm`)](#drift-alarm-soup-drift-alarm)
16
16
  - [Diagnose (Post-Training Report Card)](#diagnose-post-training-report-card)
17
+ - [Ship Verdict (`soup ship`)](#ship-verdict-soup-ship)
17
18
  - [NLG Evaluation Metrics (BLEU + ROUGE)](#nlg-evaluation-metrics-bleu--rouge)
18
19
  - [Quant Calibration (KL Divergence)](#quant-calibration-kl-divergence)
19
20
  - [Model Arena (Elo Tournament)](#model-arena-elo-tournament)
@@ -301,6 +302,61 @@ a built-in probe set; `format` only fires when the dataset's own targets look li
301
302
  **Post-training gate:** `soup train --diagnose-gate <evidence.json>` runs the same scorer after training finishes and refuses to mark the run successful when any mode comes back MAJOR. Composes with `--gate <eval-suite>` (v0.26) — the eval gate catches accuracy regressions vs a baseline; the diagnose gate catches behaviour regressions the eval suite is blind to.
302
303
 
303
304
 
305
+ ## Ship Verdict (`soup ship`)
306
+
307
+ After fine-tuning, `soup ship` answers one question — did the model get better, or did I
308
+ break it? — as a single binary **SHIP / DON'T SHIP** plus a one-screen reason. It fuses two
309
+ legs into one decision:
310
+
311
+ - **Leg 1 (task win):** the task metric *strictly* improved, base → tuned.
312
+ - **Leg 2 (the moat):** *no* general benchmark regressed past the forgetting threshold
313
+ (default `0.05` **absolute** points — same semantics as `EvalGateConfig.regression_threshold`).
314
+
315
+ ```
316
+ SHIP ⇔ task_tuned > task_base AND ∀ benchmark: base − tuned ≤ forgetting_threshold
317
+ else DON'T SHIP — even if the task metric looks great.
318
+ ```
319
+
320
+ Exit codes are CI-gateable: **0 = SHIP, 2 = DON'T SHIP, 1 = runtime error**. A tie on leg 1, a
321
+ single regressed benchmark, or a missing baseline all yield DON'T SHIP (a missing baseline
322
+ *refuses* rather than silently shipping).
323
+
324
+ ```bash
325
+ # Live: base vs a LoRA adapter, metric leg + default mini benchmarks
326
+ soup ship --base HuggingFaceTB/SmolLM2-135M-Instruct --adapter ./out \
327
+ --task-eval tasks.jsonl --device cuda
328
+
329
+ # Leg-1 via LLM-as-a-judge instead of an accuracy metric
330
+ soup ship --base <m> --adapter ./out --task-eval tasks.jsonl \
331
+ --task-mode judge_score --judge-model ollama://llama3.1
332
+
333
+ # Leg-2 via lm-eval benchmarks, base scores supplied by --baseline
334
+ soup ship --base <m> --tuned ./out --task-eval tasks.jsonl \
335
+ --general-suite mmlu,hellaswag --baseline registry://abc123
336
+
337
+ # Offline: decide from pre-computed scores, persist the verdict JSON
338
+ soup ship --evidence evidence.json --output verdict.json
339
+ ```
340
+
341
+ **`--evidence` shape** (no model load — the offline / CI path):
342
+
343
+ ```json
344
+ {
345
+ "task": {"mode": "metric", "base": 0.40, "tuned": 0.55},
346
+ "benchmarks": {
347
+ "mini_mmlu": {"base": 0.80, "tuned": 0.79},
348
+ "mini_common_sense": {"base": 0.60, "tuned": 0.62}
349
+ }
350
+ }
351
+ ```
352
+
353
+ Leg-2 defaults to the built-in mini benchmarks (`mini_mmlu` / `mini_common_sense` /
354
+ `mini_instruction`) — offline, CPU, instant. `--general-suite <names>` with non-mini names
355
+ routes through the lm-eval harness. Pairwise judge win-rate (`--task-mode pairwise`) is planned
356
+ for a later release. The engine lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure
357
+ function — the whole truth table is CPU-testable).
358
+
359
+
304
360
  ## NLG Evaluation Metrics (BLEU + ROUGE)
305
361
 
306
362
  Pure-Python BLEU + ROUGE-1 / ROUGE-2 / ROUGE-L for `soup eval custom`:
@@ -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.24"
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.24"
3
+ __version__ = "0.71.26"
@@ -233,6 +233,18 @@ app.command(
233
233
  ),
234
234
  )(_diagnose_cmd.diagnose)
235
235
 
236
+ # v0.71.25 — `soup ship` SHIP / DON'T-SHIP verdict engine.
237
+ from soup_cli.commands import ship as _ship_cmd # noqa: E402
238
+
239
+ app.add_typer(
240
+ _ship_cmd.app,
241
+ name="ship",
242
+ help=(
243
+ "SHIP / DON'T SHIP verdict after fine-tuning: task win AND no "
244
+ "catastrophic forgetting, fused into one decision (v0.71.25)."
245
+ ),
246
+ )
247
+
236
248
  # v0.58.0 — `soup loop` CLI-first data flywheel capstone.
237
249
  from soup_cli.commands import loop as _loop_cmd # noqa: E402
238
250