soup-cli 0.71.29__tar.gz → 0.71.31__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 (865) hide show
  1. {soup_cli-0.71.29 → soup_cli-0.71.31}/.gitignore +4 -1
  2. {soup_cli-0.71.29 → soup_cli-0.71.31}/CHANGELOG.md +70 -0
  3. {soup_cli-0.71.29 → soup_cli-0.71.31}/CONTRIBUTING.md +5 -6
  4. {soup_cli-0.71.29 → soup_cli-0.71.31}/PKG-INFO +23 -16
  5. {soup_cli-0.71.29 → soup_cli-0.71.31}/README.md +22 -15
  6. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/README.md +1 -1
  7. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/commands.md +4 -1
  8. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/data.md +9 -0
  9. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/evaluation.md +5 -0
  10. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/serving-and-export.md +2 -2
  11. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/training.md +84 -1
  12. {soup_cli-0.71.29 → soup_cli-0.71.31}/pyproject.toml +1 -1
  13. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/__init__.py +1 -1
  14. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/data.py +328 -0
  15. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/ship.py +32 -1
  16. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/train.py +4 -0
  17. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/config/schema.py +163 -0
  18. soup_cli-0.71.31/src/soup_cli/envs/__init__.py +18 -0
  19. soup_cli-0.71.31/src/soup_cli/envs/_common.py +29 -0
  20. soup_cli-0.71.31/src/soup_cli/envs/calculator.py +41 -0
  21. soup_cli-0.71.31/src/soup_cli/envs/guess_number.py +44 -0
  22. soup_cli-0.71.31/src/soup_cli/envs/retrieval_qa.py +54 -0
  23. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/judge.py +234 -1
  24. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/recipes/catalog.py +135 -0
  25. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/grpo.py +51 -31
  26. soup_cli-0.71.31/src/soup_cli/trainer/online_dpo.py +432 -0
  27. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/prm.py +58 -2
  28. soup_cli-0.71.31/src/soup_cli/utils/best_of_n.py +113 -0
  29. soup_cli-0.71.31/src/soup_cli/utils/evolve.py +120 -0
  30. soup_cli-0.71.31/src/soup_cli/utils/prm_reward.py +373 -0
  31. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ship_verdict.py +3 -4
  32. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_recipes.py +4 -2
  33. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07124.py +3 -3
  34. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07125.py +8 -5
  35. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07128.py +2 -1
  36. soup_cli-0.71.31/tests/test_v07130.py +797 -0
  37. soup_cli-0.71.31/tests/test_v07131.py +1207 -0
  38. soup_cli-0.71.29/docs/superpowers/plans/2026-07-05-soup-shrink-depth-prune.md +0 -607
  39. soup_cli-0.71.29/docs/superpowers/specs/2026-07-05-soup-shrink-depth-prune-design.md +0 -218
  40. {soup_cli-0.71.29 → soup_cli-0.71.31}/.dockerignore +0 -0
  41. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/FUNDING.yml +0 -0
  42. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  43. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  44. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  45. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/pull_request_template.md +0 -0
  46. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/workflows/ci.yml +0 -0
  47. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/workflows/docker.yml +0 -0
  48. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/workflows/publish.yml +0 -0
  49. {soup_cli-0.71.29 → soup_cli-0.71.31}/.github/workflows/recipe-validation.yml +0 -0
  50. {soup_cli-0.71.29 → soup_cli-0.71.31}/.mailmap +0 -0
  51. {soup_cli-0.71.29 → soup_cli-0.71.31}/.pre-commit-config.yaml +0 -0
  52. {soup_cli-0.71.29 → soup_cli-0.71.31}/AGENTS.md +0 -0
  53. {soup_cli-0.71.29 → soup_cli-0.71.31}/CODEOWNERS +0 -0
  54. {soup_cli-0.71.29 → soup_cli-0.71.31}/CODE_OF_CONDUCT.md +0 -0
  55. {soup_cli-0.71.29 → soup_cli-0.71.31}/CONTRIBUTORS.md +0 -0
  56. {soup_cli-0.71.29 → soup_cli-0.71.31}/Dockerfile +0 -0
  57. {soup_cli-0.71.29 → soup_cli-0.71.31}/LICENSE +0 -0
  58. {soup_cli-0.71.29 → soup_cli-0.71.31}/NOTICE +0 -0
  59. {soup_cli-0.71.29 → soup_cli-0.71.31}/SECURITY.md +0 -0
  60. {soup_cli-0.71.29 → soup_cli-0.71.31}/docker-compose.yml +0 -0
  61. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/adapters-and-governance.md +0 -0
  62. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/backends-and-ops.md +0 -0
  63. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/models.md +0 -0
  64. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/peft-and-efficiency.md +0 -0
  65. {soup_cli-0.71.29 → soup_cli-0.71.31}/docs/performance-and-quantization.md +0 -0
  66. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/README.md +0 -0
  67. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/dpo_chat.yaml +0 -0
  68. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/dpo_example.yaml +0 -0
  69. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/grpo_reasoning.yaml +0 -0
  70. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/rlhf_step1_sft.yaml +0 -0
  71. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/rlhf_step2_reward.yaml +0 -0
  72. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  73. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/sft_basic.yaml +0 -0
  74. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/configs/vision_llama.yaml +0 -0
  75. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/data/alpaca_tiny.jsonl +0 -0
  76. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/data/chat_preferences.jsonl +0 -0
  77. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/data/dpo_sample.jsonl +0 -0
  78. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/data/reasoning_math.jsonl +0 -0
  79. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/reward_hacking/rewards.py +0 -0
  80. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/synthetic_workflow.md +0 -0
  81. {soup_cli-0.71.29 → soup_cli-0.71.31}/examples/synthetic_workflow.yaml +0 -0
  82. {soup_cli-0.71.29 → soup_cli-0.71.31}/soup.png +0 -0
  83. {soup_cli-0.71.29 → soup_cli-0.71.31}/soup_logo_svg.svg +0 -0
  84. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/__main__.py +0 -0
  85. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/autopilot/__init__.py +0 -0
  86. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/autopilot/analyzer.py +0 -0
  87. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/autopilot/decisions.py +0 -0
  88. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/autopilot/generate_config.py +0 -0
  89. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/__init__.py +0 -0
  90. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/pack.py +0 -0
  91. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/publish.py +0 -0
  92. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/run.py +0 -0
  93. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/schema.py +0 -0
  94. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/unpack.py +0 -0
  95. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cans/verify.py +0 -0
  96. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cli.py +0 -0
  97. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cloud/__init__.py +0 -0
  98. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/cloud/modal.py +0 -0
  99. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/__init__.py +0 -0
  100. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0550.py +0 -0
  101. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0610.py +0 -0
  102. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0650.py +0 -0
  103. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v07110.py +0 -0
  104. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/_webhook_cli.py +0 -0
  105. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/ab.py +0 -0
  106. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/active_sample.py +0 -0
  107. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/adapters.py +0 -0
  108. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/advise.py +0 -0
  109. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/agent.py +0 -0
  110. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/airgap.py +0 -0
  111. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/apple_adapter.py +0 -0
  112. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/attest.py +0 -0
  113. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/audit_log.py +0 -0
  114. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/autopilot.py +0 -0
  115. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/bench.py +0 -0
  116. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/bom.py +0 -0
  117. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/build.py +0 -0
  118. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/can.py +0 -0
  119. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/chat.py +0 -0
  120. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/compile_cmd.py +0 -0
  121. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/compile_tools.py +0 -0
  122. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/completions.py +0 -0
  123. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/cost.py +0 -0
  124. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/data_doctor.py +0 -0
  125. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/data_forge.py +0 -0
  126. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/data_mix.py +0 -0
  127. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/data_score.py +0 -0
  128. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  129. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/deploy.py +0 -0
  130. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/diagnose.py +0 -0
  131. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/diff.py +0 -0
  132. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/distill_prompt.py +0 -0
  133. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/doctor.py +0 -0
  134. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/drift_alarm.py +0 -0
  135. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/edit.py +0 -0
  136. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/env.py +0 -0
  137. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/eval.py +0 -0
  138. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/expect.py +0 -0
  139. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/export.py +0 -0
  140. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/fetch.py +0 -0
  141. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/generate.py +0 -0
  142. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/history.py +0 -0
  143. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/infer.py +0 -0
  144. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/ingest.py +0 -0
  145. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/init.py +0 -0
  146. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/iterative_dpo.py +0 -0
  147. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/license_advisor.py +0 -0
  148. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/llama.py +0 -0
  149. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/local_rl.py +0 -0
  150. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/lock.py +0 -0
  151. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/loop.py +0 -0
  152. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/mcp.py +0 -0
  153. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/merge.py +0 -0
  154. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  155. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/migrate.py +0 -0
  156. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/monitor.py +0 -0
  157. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/plan.py +0 -0
  158. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/plugins.py +0 -0
  159. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/probe.py +0 -0
  160. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/profile.py +0 -0
  161. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/prune_prompt.py +0 -0
  162. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/push.py +0 -0
  163. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/quantize.py +0 -0
  164. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/quickstart.py +0 -0
  165. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/ra_dit.py +0 -0
  166. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/recipes.py +0 -0
  167. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/registry.py +0 -0
  168. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/runs.py +0 -0
  169. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/serve.py +0 -0
  170. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/shrink.py +0 -0
  171. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/spectrum.py +0 -0
  172. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/steer.py +0 -0
  173. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/sweep.py +0 -0
  174. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/tokenizer.py +0 -0
  175. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/tui.py +0 -0
  176. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/tunability.py +0 -0
  177. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/ui.py +0 -0
  178. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/commands/why.py +0 -0
  179. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/config/__init__.py +0 -0
  180. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/config/loader.py +0 -0
  181. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/__init__.py +0 -0
  182. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  183. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  184. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  185. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  186. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  187. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  188. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  189. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  190. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  191. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  192. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  193. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  194. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/augment.py +0 -0
  195. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/chat_templates.py +0 -0
  196. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/collators.py +0 -0
  197. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/formats.py +0 -0
  198. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/loader.py +0 -0
  199. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/loss_mask.py +0 -0
  200. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/providers/__init__.py +0 -0
  201. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/providers/_utils.py +0 -0
  202. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/providers/anthropic.py +0 -0
  203. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/providers/ollama.py +0 -0
  204. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/providers/vllm.py +0 -0
  205. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/sft_format.py +0 -0
  206. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/__init__.py +0 -0
  207. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/code.py +0 -0
  208. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/conversation.py +0 -0
  209. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/preference.py +0 -0
  210. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/qa.py +0 -0
  211. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/reasoning.py +0 -0
  212. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/tool_calling.py +0 -0
  213. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/templates/verifiable.py +0 -0
  214. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/traces/__init__.py +0 -0
  215. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/traces/pair_builder.py +0 -0
  216. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/traces/parsers.py +0 -0
  217. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/traces/quality.py +0 -0
  218. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/data/validator.py +0 -0
  219. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/__init__.py +0 -0
  220. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/arena.py +0 -0
  221. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  222. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/calibrate.py +0 -0
  223. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  224. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/custom.py +0 -0
  225. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/forgetting.py +0 -0
  226. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/gate.py +0 -0
  227. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/human.py +0 -0
  228. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/leaderboard.py +0 -0
  229. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/eval/quant_check.py +0 -0
  230. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/experiment/__init__.py +0 -0
  231. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/experiment/tracker.py +0 -0
  232. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/mcp_server/__init__.py +0 -0
  233. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/mcp_server/registry.py +0 -0
  234. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/mcp_server/server.py +0 -0
  235. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/migrate/__init__.py +0 -0
  236. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/migrate/axolotl.py +0 -0
  237. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/migrate/common.py +0 -0
  238. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/migrate/llamafactory.py +0 -0
  239. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/migrate/unsloth.py +0 -0
  240. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/__init__.py +0 -0
  241. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/callback.py +0 -0
  242. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  243. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/display.py +0 -0
  244. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  245. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/hf_push.py +0 -0
  246. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  247. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/monitoring/trace_logger.py +0 -0
  248. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/plugins/__init__.py +0 -0
  249. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/py.typed +0 -0
  250. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/recipes/__init__.py +0 -0
  251. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/registry/__init__.py +0 -0
  252. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/registry/attach.py +0 -0
  253. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/registry/diff.py +0 -0
  254. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/registry/hashing.py +0 -0
  255. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/registry/store.py +0 -0
  256. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/__init__.py +0 -0
  257. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/audio.yaml +0 -0
  258. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/bco.yaml +0 -0
  259. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/chat.yaml +0 -0
  260. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/code.yaml +0 -0
  261. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/embedding.yaml +0 -0
  262. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  263. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  264. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  265. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/ipo.yaml +0 -0
  266. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/kto.yaml +0 -0
  267. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/longcontext.yaml +0 -0
  268. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/manifest.json +0 -0
  269. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/medical.yaml +0 -0
  270. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/moe.yaml +0 -0
  271. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/orpo.yaml +0 -0
  272. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/pretrain.yaml +0 -0
  273. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/reasoning.yaml +0 -0
  274. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/rlhf.yaml +0 -0
  275. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/simpo.yaml +0 -0
  276. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/tool-calling.yaml +0 -0
  277. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/templates/vision.yaml +0 -0
  278. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/__init__.py +0 -0
  279. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/bco.py +0 -0
  280. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/bitnet.py +0 -0
  281. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/classifier.py +0 -0
  282. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/distill.py +0 -0
  283. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/dpo.py +0 -0
  284. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/embedding.py +0 -0
  285. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/ipo.py +0 -0
  286. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/kto.py +0 -0
  287. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  288. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  289. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_routing.py +0 -0
  290. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_sft.py +0 -0
  291. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/mole_routing.py +0 -0
  292. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/orpo.py +0 -0
  293. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/ppo.py +0 -0
  294. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/preference.py +0 -0
  295. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/pretrain.py +0 -0
  296. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/raft.py +0 -0
  297. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/reward_model.py +0 -0
  298. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/rewards.py +0 -0
  299. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/sft.py +0 -0
  300. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/simpo.py +0 -0
  301. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/tts.py +0 -0
  302. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/trainer/unlearn.py +0 -0
  303. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/tui_app.py +0 -0
  304. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/__init__.py +0 -0
  305. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/app.py +0 -0
  306. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/plugins/__init__.py +0 -0
  307. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/static/app.js +0 -0
  308. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/static/index.html +0 -0
  309. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/static/logo.png +0 -0
  310. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/static/logo.svg +0 -0
  311. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/ui/static/style.css +0 -0
  312. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/__init__.py +0 -0
  313. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/_eval_text.py +0 -0
  314. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ab_test.py +0 -0
  315. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/activation_offload.py +0 -0
  316. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/active_sampler.py +0 -0
  317. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_bisect.py +0 -0
  318. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_branch.py +0 -0
  319. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_diff.py +0 -0
  320. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_merge.py +0 -0
  321. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_pr.py +0 -0
  322. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_scan.py +0 -0
  323. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_sign.py +0 -0
  324. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/advanced_precision.py +0 -0
  325. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/advise.py +0 -0
  326. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/advise_history.py +0 -0
  327. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/agent_forge.py +0 -0
  328. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/agent_rollout.py +0 -0
  329. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/agent_sandbox.py +0 -0
  330. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/airgap_bundle.py +0 -0
  331. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/annex_xi.py +0 -0
  332. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/anthropic_messages.py +0 -0
  333. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/apple_adapter.py +0 -0
  334. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/attest.py +0 -0
  335. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/audit_log.py +0 -0
  336. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/auto_quant.py +0 -0
  337. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/backend_detect.py +0 -0
  338. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/batch_probe.py +0 -0
  339. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/behavior_battery.py +0 -0
  340. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/bitnet.py +0 -0
  341. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/blame.py +0 -0
  342. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/block_expansion.py +0 -0
  343. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/bom.py +0 -0
  344. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/brain_rot.py +0 -0
  345. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  346. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/build_dag.py +0 -0
  347. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/canary_discovery.py +0 -0
  348. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/canary_router.py +0 -0
  349. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/capability_suite.py +0 -0
  350. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/checklist_dsl.py +0 -0
  351. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  352. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/citation_faithful.py +0 -0
  353. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/classifier.py +0 -0
  354. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/cmaes_merge.py +0 -0
  355. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/compile_tools.py +0 -0
  356. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/completions.py +0 -0
  357. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/constants.py +0 -0
  358. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/convergence.py +0 -0
  359. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/crash.py +0 -0
  360. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  361. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/curriculum.py +0 -0
  362. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  363. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/cut_ce.py +0 -0
  364. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_doctor.py +0 -0
  365. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_forge.py +0 -0
  366. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_lint.py +0 -0
  367. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_mix.py +0 -0
  368. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_pipeline.py +0 -0
  369. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/data_score.py +0 -0
  370. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/deepspeed.py +0 -0
  371. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  372. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/demo_bundles.py +0 -0
  373. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  374. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/deploy_measure.py +0 -0
  375. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  376. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/_common.py +0 -0
  377. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/badge.py +0 -0
  378. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/citation.py +0 -0
  379. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  380. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  381. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/format.py +0 -0
  382. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/live.py +0 -0
  383. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  384. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  385. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  386. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/report.py +0 -0
  387. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/runner.py +0 -0
  388. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/distill.py +0 -0
  389. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/dpo_variants.py +0 -0
  390. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/drift_alarm.py +0 -0
  391. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  392. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/echo_trap.py +0 -0
  393. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/edit_diff.py +0 -0
  394. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/edit_governor.py +0 -0
  395. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/edit_kernels.py +0 -0
  396. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/encoding.py +0 -0
  397. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/energy.py +0 -0
  398. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/env_lock.py +0 -0
  399. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/errors.py +0 -0
  400. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/eval_design.py +0 -0
  401. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  402. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  403. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/expectations.py +0 -0
  404. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/fetch_examples.py +0 -0
  405. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/flash_attn.py +0 -0
  406. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/fp8.py +0 -0
  407. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/freeze.py +0 -0
  408. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/fsdp.py +0 -0
  409. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  410. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/galore.py +0 -0
  411. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/gguf_quant.py +0 -0
  412. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/gpu.py +0 -0
  413. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/gpu_monitor.py +0 -0
  414. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/grace_codebook.py +0 -0
  415. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/graceful_save.py +0 -0
  416. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/grad_accum.py +0 -0
  417. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  418. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/grpo_long_context.py +0 -0
  419. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/grpo_variants.py +0 -0
  420. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/hardware_fit.py +0 -0
  421. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/harm_probe.py +0 -0
  422. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/hf.py +0 -0
  423. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/hf_space.py +0 -0
  424. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/hubs.py +0 -0
  425. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ingest_sources.py +0 -0
  426. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/integrations.py +0 -0
  427. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/interference.py +0 -0
  428. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/interference_live.py +0 -0
  429. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/irt.py +0 -0
  430. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/iterative_dpo.py +0 -0
  431. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  432. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/kernel_picker.py +0 -0
  433. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/knowledge_edit.py +0 -0
  434. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/kv_cache.py +0 -0
  435. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/launcher.py +0 -0
  436. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/license_advisor.py +0 -0
  437. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/license_matrix.py +0 -0
  438. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/liger.py +0 -0
  439. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/live_eval.py +0 -0
  440. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/llama_proxy.py +0 -0
  441. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/llama_server_timings.py +0 -0
  442. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/local_rl.py +0 -0
  443. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  444. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loftq_init.py +0 -0
  445. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/log_level.py +0 -0
  446. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/long_context.py +0 -0
  447. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/longlora.py +0 -0
  448. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loop_budget.py +0 -0
  449. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loop_daemon.py +0 -0
  450. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loop_iteration.py +0 -0
  451. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loop_stages.py +0 -0
  452. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/loop_state.py +0 -0
  453. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/lr_finder.py +0 -0
  454. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/lr_groups.py +0 -0
  455. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/magpie.py +0 -0
  456. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/metrics.py +0 -0
  457. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mii.py +0 -0
  458. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/minillm.py +0 -0
  459. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mix_proxy.py +0 -0
  460. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mixed_precision.py +0 -0
  461. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mlx.py +0 -0
  462. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mod.py +0 -0
  463. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/moe.py +0 -0
  464. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/moe_quant.py +0 -0
  465. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/mole_routing.py +0 -0
  466. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/multipack.py +0 -0
  467. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/multipack_sampler.py +0 -0
  468. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/multipack_trainer.py +0 -0
  469. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/namespace_pin.py +0 -0
  470. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/neat_packing.py +0 -0
  471. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ngram_spec.py +0 -0
  472. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/nlg_metrics.py +0 -0
  473. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ollama.py +0 -0
  474. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/onboarding.py +0 -0
  475. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  476. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/paths.py +0 -0
  477. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/peft_builder.py +0 -0
  478. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/peft_patches.py +0 -0
  479. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/peft_wiring.py +0 -0
  480. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/persona_hub.py +0 -0
  481. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/pipeline.py +0 -0
  482. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/preference_combine.py +0 -0
  483. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/prm.py +0 -0
  484. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/probe_kernel.py +0 -0
  485. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/probe_pack.py +0 -0
  486. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/profiler.py +0 -0
  487. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/profiling.py +0 -0
  488. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  489. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/prompt_compile.py +0 -0
  490. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/prompt_distill.py +0 -0
  491. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/prune_prompt.py +0 -0
  492. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/qat.py +0 -0
  493. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/qr_url.py +0 -0
  494. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/quality.py +0 -0
  495. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/quant_menu.py +0 -0
  496. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ra_dit.py +0 -0
  497. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ra_dit_run.py +0 -0
  498. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/raft.py +0 -0
  499. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/reasoning_effort.py +0 -0
  500. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/reasoning_parser.py +0 -0
  501. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/recipe_dag.py +0 -0
  502. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/recipe_run.py +0 -0
  503. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/registry.py +0 -0
  504. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/relora.py +0 -0
  505. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/replay.py +0 -0
  506. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/repro_receipt.py +0 -0
  507. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/reward_hack_control.py +0 -0
  508. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/reward_hacking.py +0 -0
  509. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ring_attention.py +0 -0
  510. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  511. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  512. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/run_cost.py +0 -0
  513. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/sae_diff.py +0 -0
  514. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/save_formats.py +0 -0
  515. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/server_tools.py +0 -0
  516. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/sglang.py +0 -0
  517. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/shortcuts.py +0 -0
  518. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/shrink.py +0 -0
  519. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/signing.py +0 -0
  520. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/sleeper_probe.py +0 -0
  521. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/soup_lock.py +0 -0
  522. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/spec_pairing.py +0 -0
  523. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/spectrum_scan.py +0 -0
  524. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/spike_recovery.py +0 -0
  525. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/sse_train_stream.py +0 -0
  526. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/steering.py +0 -0
  527. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/strict_safetensors.py +0 -0
  528. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/structured_output.py +0 -0
  529. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/sweep_config.py +0 -0
  530. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tail_latency.py +0 -0
  531. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/terraform_plan.py +0 -0
  532. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tool_outputs.py +0 -0
  533. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/topology.py +0 -0
  534. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tracing.py +0 -0
  535. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/trackers.py +0 -0
  536. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/train_event_buffer.py +0 -0
  537. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/trainer_plugins.py +0 -0
  538. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/trust_remote.py +0 -0
  539. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/truth_probe.py +0 -0
  540. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tts.py +0 -0
  541. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tts_codec.py +0 -0
  542. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/tunability.py +0 -0
  543. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/ui_env.py +0 -0
  544. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/uld.py +0 -0
  545. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  546. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/unlearning.py +0 -0
  547. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/unlearning_eval.py +0 -0
  548. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/unsloth.py +0 -0
  549. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/v028_features.py +0 -0
  550. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/vector_bank.py +0 -0
  551. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/vllm.py +0 -0
  552. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/vscode_setup.py +0 -0
  553. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/warmup.py +0 -0
  554. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/webhooks.py +0 -0
  555. {soup_cli-0.71.29 → soup_cli-0.71.31}/src/soup_cli/utils/why.py +0 -0
  556. {soup_cli-0.71.29 → soup_cli-0.71.31}/templates/chat.yaml +0 -0
  557. {soup_cli-0.71.29 → soup_cli-0.71.31}/templates/code.yaml +0 -0
  558. {soup_cli-0.71.29 → soup_cli-0.71.31}/templates/medical.yaml +0 -0
  559. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/__init__.py +0 -0
  560. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/conftest.py +0 -0
  561. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/qa/v053_qa.md +0 -0
  562. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/qa/v07114_qa.md +0 -0
  563. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/qa/v0716_qa.md +0 -0
  564. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_adapters.py +0 -0
  565. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_advanced_peft.py +0 -0
  566. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_assistant_mask.py +0 -0
  567. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_audio.py +0 -0
  568. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_auto_tuning.py +0 -0
  569. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_autopilot.py +0 -0
  570. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_awq_gptq_export.py +0 -0
  571. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_batch_probe.py +0 -0
  572. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_bco.py +0 -0
  573. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_bench.py +0 -0
  574. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_brain_rot_multilingual.py +0 -0
  575. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_bugfixes.py +0 -0
  576. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_build_dag.py +0 -0
  577. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_callback.py +0 -0
  578. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_cans.py +0 -0
  579. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_chat.py +0 -0
  580. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_chat_template.py +0 -0
  581. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_cli.py +0 -0
  582. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_cli_subprocess.py +0 -0
  583. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_code_review_critical.py +0 -0
  584. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_code_review_deferred.py +0 -0
  585. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_code_review_high.py +0 -0
  586. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_code_review_medium_low.py +0 -0
  587. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_code_review_recurring.py +0 -0
  588. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_config.py +0 -0
  589. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_cost.py +0 -0
  590. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_crash_reporter.py +0 -0
  591. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_curriculum.py +0 -0
  592. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_data.py +0 -0
  593. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_data_augment.py +0 -0
  594. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_data_sample.py +0 -0
  595. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_data_split.py +0 -0
  596. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_data_tools.py +0 -0
  597. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_dataset_hub.py +0 -0
  598. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_dataset_registry.py +0 -0
  599. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_deepspeed.py +0 -0
  600. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_deploy_ollama.py +0 -0
  601. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_diff.py +0 -0
  602. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_display.py +0 -0
  603. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_doctor.py +0 -0
  604. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_dpo_example.py +0 -0
  605. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_dpo_variants.py +0 -0
  606. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_embedding.py +0 -0
  607. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_errors.py +0 -0
  608. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_eval.py +0 -0
  609. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_eval_gate.py +0 -0
  610. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_eval_platform.py +0 -0
  611. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_export.py +0 -0
  612. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_formats.py +0 -0
  613. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_fp8_recipe.py +0 -0
  614. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_freeze_training.py +0 -0
  615. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_generate.py +0 -0
  616. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_gpu.py +0 -0
  617. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_grpo.py +0 -0
  618. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_hf_integration.py +0 -0
  619. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_infer.py +0 -0
  620. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_inference_advanced.py +0 -0
  621. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_init.py +0 -0
  622. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ipo.py +0 -0
  623. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_jinja_analyzer.py +0 -0
  624. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_kto.py +0 -0
  625. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_loader.py +0 -0
  626. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_log_level.py +0 -0
  627. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_loss_watchdog.py +0 -0
  628. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_merge.py +0 -0
  629. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_migrate.py +0 -0
  630. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_mlx_backend.py +0 -0
  631. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_moe.py +0 -0
  632. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_multi_adapter.py +0 -0
  633. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_multi_gpu.py +0 -0
  634. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_multipack_config.py +0 -0
  635. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_multipack_invariants.py +0 -0
  636. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_multipack_sampler.py +0 -0
  637. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_neat_packing.py +0 -0
  638. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_neftune_rslora.py +0 -0
  639. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_onnx_tensorrt_export.py +0 -0
  640. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_orpo.py +0 -0
  641. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_packing.py +0 -0
  642. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_a_wave1.py +0 -0
  643. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_a_wave2.py +0 -0
  644. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_b.py +0 -0
  645. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_c.py +0 -0
  646. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_d.py +0 -0
  647. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_e.py +0 -0
  648. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_part_f_hardening.py +0 -0
  649. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_peft_methods.py +0 -0
  650. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_peft_patches.py +0 -0
  651. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_performance.py +0 -0
  652. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_pissa_init.py +0 -0
  653. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ppo.py +0 -0
  654. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_preference_dispatcher.py +0 -0
  655. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_preference_multi.py +0 -0
  656. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_preference_multi_runtime.py +0 -0
  657. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_pretrain.py +0 -0
  658. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_profile.py +0 -0
  659. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_profiling.py +0 -0
  660. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_progress.py +0 -0
  661. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_push.py +0 -0
  662. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_qat.py +0 -0
  663. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_quality_filter.py +0 -0
  664. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_quant_check.py +0 -0
  665. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_quant_menu.py +0 -0
  666. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_quickstart.py +0 -0
  667. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_rank_pattern.py +0 -0
  668. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_recipes_v031.py +0 -0
  669. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_refusal_multilingual.py +0 -0
  670. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_registry.py +0 -0
  671. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_relora.py +0 -0
  672. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_replay.py +0 -0
  673. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_resume.py +0 -0
  674. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_rlvr.py +0 -0
  675. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_run_cost.py +0 -0
  676. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_runs.py +0 -0
  677. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_serve.py +0 -0
  678. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_server_generate.py +0 -0
  679. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_sglang_serve.py +0 -0
  680. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_simpo.py +0 -0
  681. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_smoke_train.py +0 -0
  682. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_speculative_decoding.py +0 -0
  683. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_sweep.py +0 -0
  684. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_synth_data_pro.py +0 -0
  685. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_templates_yaml.py +0 -0
  686. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_tensorboard.py +0 -0
  687. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_tool_calling.py +0 -0
  688. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_trace_to_pref.py +0 -0
  689. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_tracker.py +0 -0
  690. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_trainer_coverage_v035.py +0 -0
  691. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_trainer_init.py +0 -0
  692. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_training_intelligence.py +0 -0
  693. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_training_speed.py +0 -0
  694. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_trust_remote_code.py +0 -0
  695. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_tui.py +0 -0
  696. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ui.py +0 -0
  697. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ui_chat.py +0 -0
  698. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ui_config_builder.py +0 -0
  699. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ui_live_monitor.py +0 -0
  700. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_ui_metrics.py +0 -0
  701. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_unsloth.py +0 -0
  702. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0401_part_c.py +0 -0
  703. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0401_part_d.py +0 -0
  704. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0401_part_e.py +0 -0
  705. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0402_part_a.py +0 -0
  706. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0402_part_b.py +0 -0
  707. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0403_part_a.py +0 -0
  708. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0403_part_b.py +0 -0
  709. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0403_part_c.py +0 -0
  710. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0404_part_a.py +0 -0
  711. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0404_part_b.py +0 -0
  712. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0405_part_a.py +0 -0
  713. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0406_part_a.py +0 -0
  714. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0410_part_a.py +0 -0
  715. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0410_part_b.py +0 -0
  716. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0410_part_c.py +0 -0
  717. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0420.py +0 -0
  718. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0430_part_a.py +0 -0
  719. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0430_part_b.py +0 -0
  720. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0430_part_c.py +0 -0
  721. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0430_part_d.py +0 -0
  722. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0440_part_a.py +0 -0
  723. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0440_part_b.py +0 -0
  724. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0440_part_c.py +0 -0
  725. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0440_part_d.py +0 -0
  726. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0440_review_followups.py +0 -0
  727. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0450.py +0 -0
  728. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0460_part_a.py +0 -0
  729. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0460_part_b.py +0 -0
  730. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0470_part_a.py +0 -0
  731. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0470_part_b.py +0 -0
  732. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0480_part_a.py +0 -0
  733. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0480_part_b.py +0 -0
  734. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0490.py +0 -0
  735. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0500_part_a.py +0 -0
  736. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0500_part_b.py +0 -0
  737. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0500_part_c.py +0 -0
  738. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0500_part_d.py +0 -0
  739. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0500_part_e.py +0 -0
  740. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0510.py +0 -0
  741. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0520.py +0 -0
  742. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0530.py +0 -0
  743. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v05310.py +0 -0
  744. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v05311.py +0 -0
  745. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0531_109.py +0 -0
  746. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0531_139.py +0 -0
  747. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0531_142.py +0 -0
  748. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0531_82.py +0 -0
  749. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0532.py +0 -0
  750. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0533.py +0 -0
  751. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0534.py +0 -0
  752. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0535.py +0 -0
  753. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0536.py +0 -0
  754. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0537.py +0 -0
  755. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0538.py +0 -0
  756. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0539.py +0 -0
  757. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0540.py +0 -0
  758. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0550.py +0 -0
  759. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0550_followups.py +0 -0
  760. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0560.py +0 -0
  761. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0570_part_a.py +0 -0
  762. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0570_part_b.py +0 -0
  763. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0570_part_c.py +0 -0
  764. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0570_part_d.py +0 -0
  765. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0580.py +0 -0
  766. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0590.py +0 -0
  767. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_a.py +0 -0
  768. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_b.py +0 -0
  769. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_c.py +0 -0
  770. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_d.py +0 -0
  771. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_e.py +0 -0
  772. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0600_part_f.py +0 -0
  773. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0610_part_a.py +0 -0
  774. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0610_part_b.py +0 -0
  775. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0610_part_c.py +0 -0
  776. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0610_part_d.py +0 -0
  777. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0610_part_e.py +0 -0
  778. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_followups.py +0 -0
  779. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_part_a.py +0 -0
  780. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_part_b.py +0 -0
  781. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_part_c.py +0 -0
  782. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_part_d.py +0 -0
  783. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0620_part_e.py +0 -0
  784. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_followups.py +0 -0
  785. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_part_a.py +0 -0
  786. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_part_b.py +0 -0
  787. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_part_c.py +0 -0
  788. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_part_d.py +0 -0
  789. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0630_part_e.py +0 -0
  790. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0631_206.py +0 -0
  791. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_followups.py +0 -0
  792. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_a.py +0 -0
  793. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_b.py +0 -0
  794. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_c.py +0 -0
  795. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_d.py +0 -0
  796. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_e.py +0 -0
  797. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0640_part_f.py +0 -0
  798. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_followups.py +0 -0
  799. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_part_a.py +0 -0
  800. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_part_b.py +0 -0
  801. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_part_c.py +0 -0
  802. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_part_d.py +0 -0
  803. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0650_part_e.py +0 -0
  804. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_cli.py +0 -0
  805. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_followups.py +0 -0
  806. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_part_a.py +0 -0
  807. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_part_b.py +0 -0
  808. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_part_c.py +0 -0
  809. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_part_d.py +0 -0
  810. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0660_part_e.py +0 -0
  811. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_followups.py +0 -0
  812. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_a.py +0 -0
  813. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_b.py +0 -0
  814. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_c.py +0 -0
  815. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_d.py +0 -0
  816. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_e.py +0 -0
  817. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0670_part_f.py +0 -0
  818. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_followups.py +0 -0
  819. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_part_a.py +0 -0
  820. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_part_b.py +0 -0
  821. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_part_c.py +0 -0
  822. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_part_d.py +0 -0
  823. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0680_part_e.py +0 -0
  824. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0690_part_a.py +0 -0
  825. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0690_part_b.py +0 -0
  826. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0690_part_c.py +0 -0
  827. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0690_part_d.py +0 -0
  828. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0690_part_e.py +0 -0
  829. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_a.py +0 -0
  830. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_b.py +0 -0
  831. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_c.py +0 -0
  832. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_d.py +0 -0
  833. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_e.py +0 -0
  834. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0700_part_f.py +0 -0
  835. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07110.py +0 -0
  836. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07111.py +0 -0
  837. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07112.py +0 -0
  838. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07113.py +0 -0
  839. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07114.py +0 -0
  840. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07115.py +0 -0
  841. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07116.py +0 -0
  842. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07117.py +0 -0
  843. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07118.py +0 -0
  844. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07119.py +0 -0
  845. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0712.py +0 -0
  846. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07120.py +0 -0
  847. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07121.py +0 -0
  848. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07122.py +0 -0
  849. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07123.py +0 -0
  850. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07126.py +0 -0
  851. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07127.py +0 -0
  852. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v07129.py +0 -0
  853. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0713.py +0 -0
  854. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0714.py +0 -0
  855. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0715.py +0 -0
  856. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0716.py +0 -0
  857. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0717.py +0 -0
  858. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0718.py +0 -0
  859. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_v0719.py +0 -0
  860. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_validator.py +0 -0
  861. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_vision.py +0 -0
  862. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_vllm_serve.py +0 -0
  863. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_warmup.py +0 -0
  864. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_why.py +0 -0
  865. {soup_cli-0.71.29 → soup_cli-0.71.31}/tests/test_windows_encoding.py +0 -0
@@ -40,9 +40,12 @@ report.xml
40
40
  .env
41
41
  *.key
42
42
 
43
- # Internal plan + Claude Code local dev instructions (not for repo)
43
+ # Internal plan + local dev instructions (not for repo)
44
44
  .claude/
45
45
  .coverage
46
46
 
47
+ # Internal brainstorming plans + design specs (local-only, not for repo)
48
+ docs/superpowers/
49
+
47
50
  # Local scratch / temp scripts at repo root (e.g. _smoke.py, _scratch.py) — never committed
48
51
  /_*.py
@@ -12,6 +12,76 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.31] - 2026-07-06
16
+
17
+ ### Added
18
+ - **Judge-in-the-loop suite** — put an LLM judge in the loop across the workflow:
19
+ - **`task='online_dpo'`** — Online DPO training (wraps TRL `OnlineDPOTrainer`):
20
+ the model generates two completions per prompt on-policy each step and a
21
+ *judge* (a pairwise LLM judge over the existing ollama/openai-compatible
22
+ backend) OR a `reward_model` picks the winner. Config:
23
+ `training.online_dpo_judge: "ollama://model"` (or set `reward_model` —
24
+ exactly one), `online_dpo_loss_type: sigmoid|ipo`, `online_dpo_max_new_tokens`;
25
+ `beta` reuses `dpo_beta`. Transformers + text only. Recipe:
26
+ `online-dpo-smollm2-135m`. Adapts to the installed TRL: on trl 0.19.x the
27
+ judge is a swap-debiased *pairwise* comparison; on trl 1.x (which removed
28
+ pairwise judges) the same `JudgeEvaluator` is used as a *pointwise*
29
+ reward function — a documented per-version behaviour difference.
30
+ - **`soup data best-of-n`** — Best-of-N rejection sampling (BOND-lite): sample
31
+ N completions from `--base` locally, a `--judge` scores each pointwise, and
32
+ the winner is written as an SFT chat row (with provenance). `--emit-pairs`
33
+ also writes winner-vs-loser DPO pairs.
34
+ - **`soup data evolve`** — Evol-Instruct instruction evolution (WizardLM depth
35
+ / breadth) over an ollama/vllm provider, completing the synthetic-data suite
36
+ (Magpie / Forge / Persona / evolve).
37
+ - **`soup ship --task-mode pairwise`** — a true pairwise judge win-rate as the
38
+ ship leg-1 task-win (base = 0.5 coin-flip, tuned = its win-rate; swap-debiased),
39
+ fusing with the catastrophic-forgetting guard into one SHIP / DON'T-SHIP verdict.
40
+
41
+ ### Security
42
+ - `soup data best-of-n` / `evolve` write outputs via atomic `mkstemp` + `os.replace`
43
+ (re-validated cwd containment), closing the TOCTOU symlink-swap window between the
44
+ containment check and the write. All judge/provider URLs are SSRF-validated; model
45
+ loads probe `trust_remote_code`.
46
+
47
+ ## [0.71.30] - 2026-07-05
48
+
49
+ ### Added
50
+ - **PRM-guided GRPO** — use a trained Process Reward Model as the *per-step*
51
+ reward inside GRPO (the o1-era process-supervision signal). Set
52
+ `training.prm_reward: <PRM dir|id>` (a model produced by `soup train`
53
+ `task=prm`) and `training.prm_aggregate: min|prod|last`; the PRM splits each
54
+ generated completion into reasoning steps, scores every step with its reward
55
+ head, and folds the per-step scores into one scalar reward that GRPO
56
+ optimises. The PRM reward *replaces* `reward_fn` and rides the existing
57
+ reward-shaping + reward-hack-mitigation seam, so the v0.71.26 controller
58
+ observes it. Cross-validators gate `task='grpo'` + `backend='transformers'` +
59
+ `modality='text'`. Default aggregation is `min` (weakest-link); `prod`
60
+ assumes calibrated `[0,1]` step scores.
61
+ - **Bundled rollout environments** — three pure-Python toy environments
62
+ (`soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`) exposing a
63
+ `rollout(prompts)` entry point so the live `openenv` GRPO rollout path runs
64
+ out-of-the-box: `training.rollout_backend=openenv` +
65
+ `training.rollout_func=soup_cli.envs.calculator:rollout`. Three ready-made
66
+ recipes added (`grpo-env-calculator` / `grpo-env-retrieval-qa` /
67
+ `grpo-env-guess-number`); catalog 134 → 137.
68
+
69
+ ### Fixed
70
+ - **`soup train task=prm` producer conformance** (surfaced by the v0.71.30 live
71
+ smoke): the PRM trainer now casts its reward head to the base-model dtype
72
+ (bf16 CUDA runs previously crashed on the first `compute_loss`), saves the
73
+ tokenizer alongside the model (so a PRM checkpoint is loadable standalone),
74
+ and returns the standard trainer-result shape (previously the CLI crashed with
75
+ a `KeyError: 'initial_loss'` right after saving).
76
+
77
+ ### Notes
78
+ - Proof-of-mechanism only: validated on a tiny model (SmolLM2-135M) with a tiny
79
+ synthetic PRM and synthetic reward — not a production reward-model claim
80
+ (scale ask tracked in #286). The bundled environments are deterministic
81
+ single-shot *seeders*, not interactive multi-turn model-in-the-loop episodes
82
+ (the live `openenv` contract passes only prompts). Step split is a newline
83
+ heuristic; PRM completions are scored one forward pass each.
84
+
15
85
  ## [0.71.29] - 2026-07-05
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 (134 recipes)
113
+ recipes/ - Ready-made configs for popular models (138 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, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint
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, reward_hack_control, data_doctor, data_lint, shrink, best_of_n, evolve
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 (306 files, 15224 tests)
123
+ tests/ - Test suite (308 files, 15421 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,10 +150,9 @@ 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 (306 files)
153
+ ### Test Files (307 files)
154
154
 
155
- > A representative sample of the suite below. The full table lives in
156
- > [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
155
+ > A representative sample of the suite below. Run `pytest tests/ -v` for the complete list.
157
156
 
158
157
 
159
158
  | File | Covers |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.29
3
+ Version: 0.71.31
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
@@ -193,22 +193,29 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.29Make your model smaller, locally: `soup shrink`.** Depth-prune the least-important layers, then distill-heal with a binary SHIP / DON'T-SHIP verdict. Based on "The Unreasonable Ineffectiveness of the Deeper Layers" (arXiv:2403.17887).
196
+ **v0.71.31Judge-in-the-loop suite.** Put an LLM judge in the loop across the whole workflow: train against a judge, mine winners from a base model, grow instruction diversity, and decide SHIP with a true pairwise judge win-rate.
197
+
198
+ - **`task='online_dpo'`.** Online DPO (wraps TRL `OnlineDPOTrainer`): the model generates two
199
+ completions per prompt on-policy each step and a *judge* (a pairwise LLM judge over your local
200
+ ollama / OpenAI-compatible endpoint) — or a `reward_model` — picks the winner. Set
201
+ `training.online_dpo_judge: "ollama://llama3.1"` (or `reward_model`, exactly one).
202
+ - **`soup data best-of-n`.** Best-of-N rejection sampling: sample N completions from `--base`
203
+ locally, a `--judge` scores each, and the winner becomes an SFT row (`--emit-pairs` also writes
204
+ winner-vs-loser DPO pairs).
205
+ - **`soup data evolve`.** WizardLM Evol-Instruct (depth / breadth) over an ollama / vllm provider —
206
+ completing the synthetic-data suite (Magpie / Forge / Persona / evolve).
207
+ - **`soup ship --task-mode pairwise` (#284).** A true swap-debiased judge win-rate as the ship
208
+ leg-1 task-win, fused with the catastrophic-forgetting guard into one SHIP / DON'T-SHIP verdict.
209
+ - **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M: online-DPO trains with a
210
+ synthetic judge (`rewards/*` + `objective/kl` logged), best-of-N samples + picks, evolve loops.
211
+ Not a production RLHF claim (scale help wanted: #286).
197
212
 
198
- - **Importance-ranked depth pruning.** One forward pass per calibration prompt scores each
199
- contiguous layer block by the angular distance of the residual stream across it; the
200
- least-important block is dropped (the first and last layer are always protected).
201
- - **Distill-heal, Minitron-style.** `--heal` distills the original model into the pruned
202
- student (LoRA logit-KD) as an isolated `soup train` run, then fuses the adapter back so you
203
- ship a single dense smaller model — not a base + adapter.
204
- - **A verdict, not a dashboard.** Every run ends in **SHIP** or **DON'T SHIP** on a
205
- before/after perplexity ratio (`exit 0 = SHIP`, `2 = DON'T`, `1 = error`), so it drops into CI.
206
- - **Runs on a laptop GPU.** Live-validated on Windows + RTX 3050 with SmolLM2-135M: drop 25 %
207
- (30 → 22 layers, 21 % params) and drop-4 + CPU heal (perplexity recovered to ×1.35).
208
-
209
- ```bash
210
- soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
211
- --calib calib.jsonl --heal heal.jsonl --heal-steps 200 -o shrunk --device cpu
213
+ ```yaml
214
+ task: online_dpo
215
+ training:
216
+ online_dpo_judge: "ollama://llama3.1" # a pairwise judge (or set reward_model)
217
+ online_dpo_loss_type: sigmoid # sigmoid | ipo
218
+ online_dpo_max_new_tokens: 64
212
219
  ```
213
220
 
214
221
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -49,22 +49,29 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.29Make your model smaller, locally: `soup shrink`.** Depth-prune the least-important layers, then distill-heal with a binary SHIP / DON'T-SHIP verdict. Based on "The Unreasonable Ineffectiveness of the Deeper Layers" (arXiv:2403.17887).
53
-
54
- - **Importance-ranked depth pruning.** One forward pass per calibration prompt scores each
55
- contiguous layer block by the angular distance of the residual stream across it; the
56
- least-important block is dropped (the first and last layer are always protected).
57
- - **Distill-heal, Minitron-style.** `--heal` distills the original model into the pruned
58
- student (LoRA logit-KD) as an isolated `soup train` run, then fuses the adapter back so you
59
- ship a single dense smaller model not a base + adapter.
60
- - **A verdict, not a dashboard.** Every run ends in **SHIP** or **DON'T SHIP** on a
61
- before/after perplexity ratio (`exit 0 = SHIP`, `2 = DON'T`, `1 = error`), so it drops into CI.
62
- - **Runs on a laptop GPU.** Live-validated on Windows + RTX 3050 with SmolLM2-135M: drop 25 %
63
- (30 22 layers, 21 % params) and drop-4 + CPU heal (perplexity recovered to ×1.35).
52
+ **v0.71.31Judge-in-the-loop suite.** Put an LLM judge in the loop across the whole workflow: train against a judge, mine winners from a base model, grow instruction diversity, and decide SHIP with a true pairwise judge win-rate.
53
+
54
+ - **`task='online_dpo'`.** Online DPO (wraps TRL `OnlineDPOTrainer`): the model generates two
55
+ completions per prompt on-policy each step and a *judge* (a pairwise LLM judge over your local
56
+ ollama / OpenAI-compatible endpoint) or a `reward_model` picks the winner. Set
57
+ `training.online_dpo_judge: "ollama://llama3.1"` (or `reward_model`, exactly one).
58
+ - **`soup data best-of-n`.** Best-of-N rejection sampling: sample N completions from `--base`
59
+ locally, a `--judge` scores each, and the winner becomes an SFT row (`--emit-pairs` also writes
60
+ winner-vs-loser DPO pairs).
61
+ - **`soup data evolve`.** WizardLM Evol-Instruct (depth / breadth) over an ollama / vllm provider
62
+ completing the synthetic-data suite (Magpie / Forge / Persona / evolve).
63
+ - **`soup ship --task-mode pairwise` (#284).** A true swap-debiased judge win-rate as the ship
64
+ leg-1 task-win, fused with the catastrophic-forgetting guard into one SHIP / DON'T-SHIP verdict.
65
+ - **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M: online-DPO trains with a
66
+ synthetic judge (`rewards/*` + `objective/kl` logged), best-of-N samples + picks, evolve loops.
67
+ Not a production RLHF claim (scale help wanted: #286).
64
68
 
65
- ```bash
66
- soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
67
- --calib calib.jsonl --heal heal.jsonl --heal-steps 200 -o shrunk --device cpu
69
+ ```yaml
70
+ task: online_dpo
71
+ training:
72
+ online_dpo_judge: "ollama://llama3.1" # a pairwise judge (or set reward_model)
73
+ online_dpo_loss_type: sigmoid # sigmoid | ipo
74
+ online_dpo_max_new_tokens: 64
68
75
  ```
69
76
 
70
77
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -8,7 +8,7 @@ feature reference — every `soup` capability, grouped by area.
8
8
  | Guide | Covers |
9
9
  |---|---|
10
10
  | [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
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 |
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, depth pruning + distill-heal (`soup shrink`) |
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
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` |
@@ -133,7 +133,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
133
133
  soup migrate --from axolotl config.yml Import config from Axolotl
134
134
  soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
135
135
  soup migrate --from llamafactory c.yaml --dry-run Preview without writing
136
- soup recipes list List all 134 ready-made recipes
136
+ soup recipes list List all 138 ready-made recipes
137
137
  soup recipes show llama3.1-8b-sft Print recipe YAML
138
138
  soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
139
139
  soup recipes search "reasoning" Search by keyword/task/size
@@ -155,6 +155,7 @@ soup why [run_id] Explain training anomalies (heuris
155
155
  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)
156
156
  soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
157
157
  soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
158
+ soup ship ... --task-mode pairwise --judge-model ollama://llama3.1 Leg-1 via swap-debiased judge win-rate (base=0.5) (v0.71.31)
158
159
  soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
159
160
  soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
160
161
  soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
@@ -250,6 +251,8 @@ soup local-rl train --db <path> --model <id> [--scheduler-dir <dir>] [--hour H]
250
251
  soup build <manifest.yaml> [--dry-run] [--output-dir <dir>] dbt-for-SFT DAG: validate + plan + live materialise (v0.69.0; live v0.71.6)
251
252
  soup expect <data.jsonl> <suite.yaml> Expectations suite: PII / token-length / refusal / judge (v0.69.0)
252
253
  soup data gen-magpie --base <m> --provider ollama|vllm --target N --output <jsonl> [--base-url <url>] [--quality-filter] Magpie synthetic generator — live (v0.69.0; live v0.71.6)
254
+ soup data best-of-n --base <m> --prompts <jsonl> --n 8 --judge <url> -o <sft.jsonl> [--emit-pairs <dpo.jsonl>] Best-of-N rejection sampling: sample N locally, judge picks winner -> SFT (+ DPO) rows (v0.71.31)
255
+ soup data evolve --input <seeds.jsonl> --provider ollama|vllm --model <m> --strategy depth|breadth --rounds N -o <jsonl> Evol-Instruct (WizardLM) instruction evolution (v0.71.31)
253
256
  soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub diversity sampler (v0.69.0)
254
257
  soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
255
258
  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)
@@ -62,6 +62,15 @@ soup data persona-mix --prompts prompts.jsonl --n 500 --output mixed.jsonl
62
62
 
63
63
  # Brain-rot detector (arXiv 2510.13928) — refuses to train on excessive slop
64
64
  soup data brain-rot data.jsonl --strict --max-major-fraction 0.10
65
+
66
+ # Best-of-N rejection sampling (v0.71.31) — sample N locally, a judge picks the winner
67
+ soup data best-of-n --base HuggingFaceTB/SmolLM2-135M-Instruct \
68
+ --prompts prompts.jsonl --n 8 --judge ollama://llama3.1 \
69
+ -o best_of_n.jsonl --emit-pairs pairs.jsonl
70
+
71
+ # Evol-Instruct (WizardLM depth/breadth, v0.71.31) — grow instruction diversity
72
+ soup data evolve --input seeds.jsonl --provider ollama --model llama3.1 \
73
+ --strategy depth --rounds 2 -o evolved.jsonl
65
74
  ```
66
75
 
67
76
  Every command applies the project-wide TOCTOU policy (`os.lstat + S_ISLNK` symlink rejection before any open) and cwd containment via the shared `paths.enforce_under_cwd_and_no_symlink` helper. All five are LIVE: `soup build` materialises with five built-in transforms (`identity` / `drop_empty` / `lowercase` / `strip` / `dedup_exact`) and SQLite-tracked incremental re-transform (v0.71.6); `soup data gen-magpie` harvests via raw completion against `--provider ollama|vllm` (loopback-only; `anthropic` rejected — no raw-completion endpoint, v0.71.6).
@@ -330,6 +330,11 @@ soup ship --base HuggingFaceTB/SmolLM2-135M-Instruct --adapter ./out \
330
330
  soup ship --base <m> --adapter ./out --task-eval tasks.jsonl \
331
331
  --task-mode judge_score --judge-model ollama://llama3.1
332
332
 
333
+ # Leg-1 via a true pairwise judge win-rate (v0.71.31 #284) — the judge picks
334
+ # base vs tuned per prompt (swap-debiased); base = 0.5 coin-flip, won <=> winrate > 0.5
335
+ soup ship --base <m> --adapter ./out --task-eval tasks.jsonl \
336
+ --task-mode pairwise --judge-model ollama://llama3.1
337
+
333
338
  # Leg-2 via lm-eval benchmarks, base scores supplied by --baseline
334
339
  soup ship --base <m> --tuned ./out --task-eval tasks.jsonl \
335
340
  --general-suite mmlu,hellaswag --baseline registry://abc123
@@ -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 134 ready-made recipes, validate, start training with live SSE log streaming and progress bar
421
+ - **New Training** — create configs from templates or 138 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 (134 recipes), config schema API for dynamic form generation
430
+ - **Config Builder** — recipe dropdown (138 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
 
@@ -15,6 +15,7 @@
15
15
  - [EBFT / GDPO Loss Variants](#ebft--gdpo-loss-variants)
16
16
  - [GRPO Objective Variants](#grpo-objective-variants)
17
17
  - [Process Reward Model (PRM)](#process-reward-model-prm)
18
+ - [PRM-guided GRPO (process-supervised RL)](#prm-guided-grpo-process-supervised-rl)
18
19
  - [Weighted Multi-Objective Preference Loss](#weighted-multi-objective-preference-loss)
19
20
  - [MoE Model Support](#moe-model-support)
20
21
  - [Vision / Multimodal Fine-tuning](#vision--multimodal-fine-tuning)
@@ -343,7 +344,89 @@ training:
343
344
 
344
345
  The trainer loads `AutoModelForCausalLM`, attaches an `nn.Linear(hidden, 1)`
345
346
  reward head, and computes MSE between predicted scalars at step-boundary tokens
346
- and the per-step labels.
347
+ and the per-step labels. The reward head is saved inside the model checkpoint
348
+ (`reward_head.*` in `model.safetensors`) and the tokenizer is saved alongside it,
349
+ so the resulting directory is loadable standalone.
350
+
351
+
352
+ ## PRM-guided GRPO (process-supervised RL)
353
+
354
+ Use a trained PRM as the **per-step reward** inside GRPO — the o1-era
355
+ process-supervision signal. Set `training.prm_reward` to a PRM directory (a
356
+ `task=prm` checkpoint) or HF id; the PRM splits each generated completion into
357
+ reasoning steps (newline heuristic), scores every step with its reward head, and
358
+ folds the per-step scores into one scalar reward that GRPO optimises. It
359
+ **replaces** `reward_fn` and rides the existing reward-shaping +
360
+ reward-hack-mitigation seam, so the v0.71.26 controller still observes it (TRL
361
+ logs it as `rewards/prm_reward`).
362
+
363
+ ```yaml
364
+ task: grpo
365
+ backend: transformers # required (the PRM reward runs a transformers forward)
366
+ modality: text # required
367
+ data:
368
+ format: chatml
369
+ train: ./grpo_prompts.jsonl
370
+ training:
371
+ prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir (or HF id)
372
+ prm_aggregate: min # weakest-link (default) | prod | last
373
+ num_generations: 4
374
+ grpo_beta: 0.04
375
+ ```
376
+
377
+ `prm_aggregate='min'` (weakest-link, the standard PRM aggregation) is the safe
378
+ default; `prod` assumes calibrated `[0,1]` step scores (Soup's PRM head is
379
+ trained with unconstrained MSE, so `prod` can blow up on uncalibrated labels).
380
+
381
+ **Bundled rollout environments.** Three deterministic pure-Python toy
382
+ environments seed the openenv rollout path out-of-the-box — pair any of them
383
+ with `rollout_backend=openenv`:
384
+
385
+ ```yaml
386
+ training:
387
+ rollout_backend: openenv
388
+ rollout_func: soup_cli.envs.calculator:rollout # or retrieval_qa / guess_number
389
+ reward_fn: verifiable
390
+ verifiable_domain: math
391
+ ```
392
+
393
+ Ready-made recipes: `grpo-env-calculator`, `grpo-env-retrieval-qa`,
394
+ `grpo-env-guess-number`. The environments are deterministic single-shot
395
+ prompt/answer *seeders* (the live openenv contract passes only the seed prompts,
396
+ not the model) — not interactive multi-turn episodes.
397
+
398
+ **Scope:** proof-of-mechanism only — validated on SmolLM2-135M with a tiny
399
+ synthetic PRM (the PRM reward scores good completions above bad and drives GRPO's
400
+ advantages). Not a production reward-model claim; scale validation is help-wanted
401
+ (#286).
402
+
403
+
404
+ ## Online DPO (`task='online_dpo'`) — judge in the loop (v0.71.31)
405
+
406
+ Unlike offline DPO (static `prompt/chosen/rejected` rows), **Online DPO** generates
407
+ two completions per prompt **on-policy** each step and asks a *judge* — or a
408
+ *reward model* — which is better; the winner becomes `chosen`, the loser
409
+ `rejected`. The judge closes the loop. Wraps TRL `OnlineDPOTrainer`; data is
410
+ prompt-only (like GRPO). Transformers + text only.
411
+
412
+ ```yaml
413
+ base: HuggingFaceTB/SmolLM2-135M-Instruct
414
+ task: online_dpo
415
+ data:
416
+ train: ./data/prompts.jsonl # prompt-only (or any format — prompts are extracted)
417
+ training:
418
+ online_dpo_judge: "ollama://llama3.1" # a pairwise judge (ollama://|https://|http://localhost)
419
+ # OR: reward_model: ./my-reward-model # exactly one of judge / reward_model
420
+ online_dpo_loss_type: sigmoid # sigmoid | ipo
421
+ online_dpo_max_new_tokens: 64
422
+ dpo_beta: 0.1
423
+ lora: { r: 8, alpha: 16, target_modules: auto }
424
+ ```
425
+
426
+ The judge is Soup's own OpenAI-compatible `JudgeEvaluator` adapted to TRL's
427
+ `BasePairwiseJudge` (swap-debiased: a winner is only recorded when both A,B and
428
+ B,A orders agree). Recipe: `online-dpo-smollm2-135m`. Proof-of-mechanism was
429
+ validated on SmolLM2-135M with a synthetic judge (not a production RLHF claim; #286).
347
430
 
348
431
 
349
432
  ## Weighted Multi-Objective Preference Loss
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.29"
7
+ version = "0.71.31"
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.29"
3
+ __version__ = "0.71.31"