soup-cli 0.71.30__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 (867) hide show
  1. {soup_cli-0.71.30 → soup_cli-0.71.31}/.gitignore +4 -1
  2. {soup_cli-0.71.30 → soup_cli-0.71.31}/CHANGELOG.md +32 -0
  3. {soup_cli-0.71.30 → soup_cli-0.71.31}/CONTRIBUTING.md +5 -6
  4. {soup_cli-0.71.30 → soup_cli-0.71.31}/PKG-INFO +21 -19
  5. {soup_cli-0.71.30 → soup_cli-0.71.31}/README.md +20 -18
  6. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/commands.md +4 -1
  7. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/data.md +9 -0
  8. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/evaluation.md +5 -0
  9. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/serving-and-export.md +2 -2
  10. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/training.md +28 -0
  11. {soup_cli-0.71.30 → soup_cli-0.71.31}/pyproject.toml +1 -1
  12. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/__init__.py +1 -1
  13. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/data.py +328 -0
  14. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/ship.py +32 -1
  15. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/train.py +4 -0
  16. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/config/schema.py +88 -0
  17. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/judge.py +234 -1
  18. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/recipes/catalog.py +36 -0
  19. soup_cli-0.71.31/src/soup_cli/trainer/online_dpo.py +432 -0
  20. soup_cli-0.71.31/src/soup_cli/utils/best_of_n.py +113 -0
  21. soup_cli-0.71.31/src/soup_cli/utils/evolve.py +120 -0
  22. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ship_verdict.py +3 -4
  23. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_recipes.py +3 -2
  24. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07124.py +2 -2
  25. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07125.py +8 -5
  26. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07128.py +2 -1
  27. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07130.py +2 -2
  28. soup_cli-0.71.31/tests/test_v07131.py +1207 -0
  29. soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-prm-guided-grpo.md +0 -133
  30. soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-soup-shrink-depth-prune.md +0 -607
  31. soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-prm-guided-grpo-design.md +0 -152
  32. soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-soup-shrink-depth-prune-design.md +0 -218
  33. {soup_cli-0.71.30 → soup_cli-0.71.31}/.dockerignore +0 -0
  34. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/FUNDING.yml +0 -0
  35. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  36. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  38. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/pull_request_template.md +0 -0
  39. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/workflows/ci.yml +0 -0
  40. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/workflows/docker.yml +0 -0
  41. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/workflows/publish.yml +0 -0
  42. {soup_cli-0.71.30 → soup_cli-0.71.31}/.github/workflows/recipe-validation.yml +0 -0
  43. {soup_cli-0.71.30 → soup_cli-0.71.31}/.mailmap +0 -0
  44. {soup_cli-0.71.30 → soup_cli-0.71.31}/.pre-commit-config.yaml +0 -0
  45. {soup_cli-0.71.30 → soup_cli-0.71.31}/AGENTS.md +0 -0
  46. {soup_cli-0.71.30 → soup_cli-0.71.31}/CODEOWNERS +0 -0
  47. {soup_cli-0.71.30 → soup_cli-0.71.31}/CODE_OF_CONDUCT.md +0 -0
  48. {soup_cli-0.71.30 → soup_cli-0.71.31}/CONTRIBUTORS.md +0 -0
  49. {soup_cli-0.71.30 → soup_cli-0.71.31}/Dockerfile +0 -0
  50. {soup_cli-0.71.30 → soup_cli-0.71.31}/LICENSE +0 -0
  51. {soup_cli-0.71.30 → soup_cli-0.71.31}/NOTICE +0 -0
  52. {soup_cli-0.71.30 → soup_cli-0.71.31}/SECURITY.md +0 -0
  53. {soup_cli-0.71.30 → soup_cli-0.71.31}/docker-compose.yml +0 -0
  54. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/README.md +0 -0
  55. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/adapters-and-governance.md +0 -0
  56. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/backends-and-ops.md +0 -0
  57. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/models.md +0 -0
  58. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/peft-and-efficiency.md +0 -0
  59. {soup_cli-0.71.30 → soup_cli-0.71.31}/docs/performance-and-quantization.md +0 -0
  60. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/README.md +0 -0
  61. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/dpo_chat.yaml +0 -0
  62. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/dpo_example.yaml +0 -0
  63. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/grpo_reasoning.yaml +0 -0
  64. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/rlhf_step1_sft.yaml +0 -0
  65. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/rlhf_step2_reward.yaml +0 -0
  66. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  67. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/sft_basic.yaml +0 -0
  68. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/configs/vision_llama.yaml +0 -0
  69. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/data/alpaca_tiny.jsonl +0 -0
  70. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/data/chat_preferences.jsonl +0 -0
  71. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/data/dpo_sample.jsonl +0 -0
  72. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/data/reasoning_math.jsonl +0 -0
  73. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/reward_hacking/rewards.py +0 -0
  74. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/synthetic_workflow.md +0 -0
  75. {soup_cli-0.71.30 → soup_cli-0.71.31}/examples/synthetic_workflow.yaml +0 -0
  76. {soup_cli-0.71.30 → soup_cli-0.71.31}/soup.png +0 -0
  77. {soup_cli-0.71.30 → soup_cli-0.71.31}/soup_logo_svg.svg +0 -0
  78. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/__main__.py +0 -0
  79. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/autopilot/__init__.py +0 -0
  80. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/autopilot/analyzer.py +0 -0
  81. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/autopilot/decisions.py +0 -0
  82. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/autopilot/generate_config.py +0 -0
  83. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/__init__.py +0 -0
  84. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/pack.py +0 -0
  85. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/publish.py +0 -0
  86. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/run.py +0 -0
  87. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/schema.py +0 -0
  88. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/unpack.py +0 -0
  89. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cans/verify.py +0 -0
  90. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cli.py +0 -0
  91. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cloud/__init__.py +0 -0
  92. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/cloud/modal.py +0 -0
  93. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/__init__.py +0 -0
  94. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0550.py +0 -0
  95. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0610.py +0 -0
  96. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v0650.py +0 -0
  97. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/_eval_v07110.py +0 -0
  98. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/_webhook_cli.py +0 -0
  99. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/ab.py +0 -0
  100. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/active_sample.py +0 -0
  101. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/adapters.py +0 -0
  102. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/advise.py +0 -0
  103. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/agent.py +0 -0
  104. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/airgap.py +0 -0
  105. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/apple_adapter.py +0 -0
  106. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/attest.py +0 -0
  107. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/audit_log.py +0 -0
  108. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/autopilot.py +0 -0
  109. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/bench.py +0 -0
  110. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/bom.py +0 -0
  111. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/build.py +0 -0
  112. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/can.py +0 -0
  113. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/chat.py +0 -0
  114. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/compile_cmd.py +0 -0
  115. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/compile_tools.py +0 -0
  116. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/completions.py +0 -0
  117. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/cost.py +0 -0
  118. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/data_doctor.py +0 -0
  119. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/data_forge.py +0 -0
  120. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/data_mix.py +0 -0
  121. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/data_score.py +0 -0
  122. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  123. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/deploy.py +0 -0
  124. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/diagnose.py +0 -0
  125. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/diff.py +0 -0
  126. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/distill_prompt.py +0 -0
  127. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/doctor.py +0 -0
  128. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/drift_alarm.py +0 -0
  129. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/edit.py +0 -0
  130. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/env.py +0 -0
  131. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/eval.py +0 -0
  132. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/expect.py +0 -0
  133. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/export.py +0 -0
  134. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/fetch.py +0 -0
  135. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/generate.py +0 -0
  136. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/history.py +0 -0
  137. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/infer.py +0 -0
  138. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/ingest.py +0 -0
  139. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/init.py +0 -0
  140. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/iterative_dpo.py +0 -0
  141. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/license_advisor.py +0 -0
  142. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/llama.py +0 -0
  143. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/local_rl.py +0 -0
  144. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/lock.py +0 -0
  145. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/loop.py +0 -0
  146. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/mcp.py +0 -0
  147. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/merge.py +0 -0
  148. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  149. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/migrate.py +0 -0
  150. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/monitor.py +0 -0
  151. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/plan.py +0 -0
  152. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/plugins.py +0 -0
  153. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/probe.py +0 -0
  154. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/profile.py +0 -0
  155. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/prune_prompt.py +0 -0
  156. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/push.py +0 -0
  157. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/quantize.py +0 -0
  158. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/quickstart.py +0 -0
  159. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/ra_dit.py +0 -0
  160. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/recipes.py +0 -0
  161. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/registry.py +0 -0
  162. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/runs.py +0 -0
  163. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/serve.py +0 -0
  164. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/shrink.py +0 -0
  165. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/spectrum.py +0 -0
  166. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/steer.py +0 -0
  167. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/sweep.py +0 -0
  168. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/tokenizer.py +0 -0
  169. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/tui.py +0 -0
  170. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/tunability.py +0 -0
  171. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/ui.py +0 -0
  172. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/commands/why.py +0 -0
  173. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/config/__init__.py +0 -0
  174. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/config/loader.py +0 -0
  175. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/__init__.py +0 -0
  176. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  177. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  178. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  179. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  180. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  181. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  182. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  183. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  184. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  185. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  186. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  187. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  188. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/augment.py +0 -0
  189. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/chat_templates.py +0 -0
  190. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/collators.py +0 -0
  191. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/formats.py +0 -0
  192. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/loader.py +0 -0
  193. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/loss_mask.py +0 -0
  194. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/providers/__init__.py +0 -0
  195. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/providers/_utils.py +0 -0
  196. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/providers/anthropic.py +0 -0
  197. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/providers/ollama.py +0 -0
  198. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/providers/vllm.py +0 -0
  199. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/sft_format.py +0 -0
  200. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/__init__.py +0 -0
  201. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/code.py +0 -0
  202. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/conversation.py +0 -0
  203. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/preference.py +0 -0
  204. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/qa.py +0 -0
  205. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/reasoning.py +0 -0
  206. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/tool_calling.py +0 -0
  207. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/templates/verifiable.py +0 -0
  208. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/traces/__init__.py +0 -0
  209. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/traces/pair_builder.py +0 -0
  210. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/traces/parsers.py +0 -0
  211. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/traces/quality.py +0 -0
  212. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/data/validator.py +0 -0
  213. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/envs/__init__.py +0 -0
  214. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/envs/_common.py +0 -0
  215. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/envs/calculator.py +0 -0
  216. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/envs/guess_number.py +0 -0
  217. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/envs/retrieval_qa.py +0 -0
  218. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/__init__.py +0 -0
  219. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/arena.py +0 -0
  220. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  221. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/calibrate.py +0 -0
  222. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  223. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/custom.py +0 -0
  224. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/forgetting.py +0 -0
  225. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/gate.py +0 -0
  226. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/human.py +0 -0
  227. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/leaderboard.py +0 -0
  228. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/eval/quant_check.py +0 -0
  229. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/experiment/__init__.py +0 -0
  230. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/experiment/tracker.py +0 -0
  231. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/mcp_server/__init__.py +0 -0
  232. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/mcp_server/registry.py +0 -0
  233. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/mcp_server/server.py +0 -0
  234. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/migrate/__init__.py +0 -0
  235. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/migrate/axolotl.py +0 -0
  236. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/migrate/common.py +0 -0
  237. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/migrate/llamafactory.py +0 -0
  238. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/migrate/unsloth.py +0 -0
  239. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/__init__.py +0 -0
  240. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/callback.py +0 -0
  241. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  242. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/display.py +0 -0
  243. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  244. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/hf_push.py +0 -0
  245. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  246. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/monitoring/trace_logger.py +0 -0
  247. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/plugins/__init__.py +0 -0
  248. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/py.typed +0 -0
  249. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/recipes/__init__.py +0 -0
  250. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/registry/__init__.py +0 -0
  251. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/registry/attach.py +0 -0
  252. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/registry/diff.py +0 -0
  253. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/registry/hashing.py +0 -0
  254. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/registry/store.py +0 -0
  255. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/__init__.py +0 -0
  256. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/audio.yaml +0 -0
  257. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/bco.yaml +0 -0
  258. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/chat.yaml +0 -0
  259. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/code.yaml +0 -0
  260. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/embedding.yaml +0 -0
  261. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  262. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  263. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  264. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/ipo.yaml +0 -0
  265. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/kto.yaml +0 -0
  266. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/longcontext.yaml +0 -0
  267. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/manifest.json +0 -0
  268. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/medical.yaml +0 -0
  269. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/moe.yaml +0 -0
  270. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/orpo.yaml +0 -0
  271. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/pretrain.yaml +0 -0
  272. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/reasoning.yaml +0 -0
  273. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/rlhf.yaml +0 -0
  274. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/simpo.yaml +0 -0
  275. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/tool-calling.yaml +0 -0
  276. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/templates/vision.yaml +0 -0
  277. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/__init__.py +0 -0
  278. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/bco.py +0 -0
  279. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/bitnet.py +0 -0
  280. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/classifier.py +0 -0
  281. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/distill.py +0 -0
  282. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/dpo.py +0 -0
  283. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/embedding.py +0 -0
  284. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/grpo.py +0 -0
  285. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/ipo.py +0 -0
  286. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/kto.py +0 -0
  287. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  288. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  289. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_routing.py +0 -0
  290. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/mlx_sft.py +0 -0
  291. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/mole_routing.py +0 -0
  292. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/orpo.py +0 -0
  293. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/ppo.py +0 -0
  294. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/preference.py +0 -0
  295. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/pretrain.py +0 -0
  296. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/prm.py +0 -0
  297. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/raft.py +0 -0
  298. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/reward_model.py +0 -0
  299. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/rewards.py +0 -0
  300. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/sft.py +0 -0
  301. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/simpo.py +0 -0
  302. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/tts.py +0 -0
  303. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/trainer/unlearn.py +0 -0
  304. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/tui_app.py +0 -0
  305. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/__init__.py +0 -0
  306. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/app.py +0 -0
  307. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/plugins/__init__.py +0 -0
  308. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/static/app.js +0 -0
  309. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/static/index.html +0 -0
  310. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/static/logo.png +0 -0
  311. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/static/logo.svg +0 -0
  312. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/ui/static/style.css +0 -0
  313. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/__init__.py +0 -0
  314. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/_eval_text.py +0 -0
  315. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ab_test.py +0 -0
  316. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/activation_offload.py +0 -0
  317. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/active_sampler.py +0 -0
  318. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_bisect.py +0 -0
  319. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_branch.py +0 -0
  320. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_diff.py +0 -0
  321. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_merge.py +0 -0
  322. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_pr.py +0 -0
  323. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_scan.py +0 -0
  324. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/adapter_sign.py +0 -0
  325. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/advanced_precision.py +0 -0
  326. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/advise.py +0 -0
  327. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/advise_history.py +0 -0
  328. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/agent_forge.py +0 -0
  329. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/agent_rollout.py +0 -0
  330. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/agent_sandbox.py +0 -0
  331. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/airgap_bundle.py +0 -0
  332. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/annex_xi.py +0 -0
  333. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/anthropic_messages.py +0 -0
  334. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/apple_adapter.py +0 -0
  335. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/attest.py +0 -0
  336. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/audit_log.py +0 -0
  337. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/auto_quant.py +0 -0
  338. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/backend_detect.py +0 -0
  339. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/batch_probe.py +0 -0
  340. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/behavior_battery.py +0 -0
  341. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/bitnet.py +0 -0
  342. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/blame.py +0 -0
  343. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/block_expansion.py +0 -0
  344. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/bom.py +0 -0
  345. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/brain_rot.py +0 -0
  346. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  347. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/build_dag.py +0 -0
  348. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/canary_discovery.py +0 -0
  349. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/canary_router.py +0 -0
  350. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/capability_suite.py +0 -0
  351. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/checklist_dsl.py +0 -0
  352. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  353. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/citation_faithful.py +0 -0
  354. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/classifier.py +0 -0
  355. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/cmaes_merge.py +0 -0
  356. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/compile_tools.py +0 -0
  357. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/completions.py +0 -0
  358. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/constants.py +0 -0
  359. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/convergence.py +0 -0
  360. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/crash.py +0 -0
  361. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  362. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/curriculum.py +0 -0
  363. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  364. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/cut_ce.py +0 -0
  365. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_doctor.py +0 -0
  366. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_forge.py +0 -0
  367. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_lint.py +0 -0
  368. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_mix.py +0 -0
  369. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_pipeline.py +0 -0
  370. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/data_score.py +0 -0
  371. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/deepspeed.py +0 -0
  372. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  373. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/demo_bundles.py +0 -0
  374. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  375. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/deploy_measure.py +0 -0
  376. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  377. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/_common.py +0 -0
  378. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/badge.py +0 -0
  379. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/citation.py +0 -0
  380. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  381. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  382. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/format.py +0 -0
  383. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/live.py +0 -0
  384. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  385. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  386. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  387. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/report.py +0 -0
  388. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/diagnose/runner.py +0 -0
  389. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/distill.py +0 -0
  390. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/dpo_variants.py +0 -0
  391. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/drift_alarm.py +0 -0
  392. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  393. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/echo_trap.py +0 -0
  394. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/edit_diff.py +0 -0
  395. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/edit_governor.py +0 -0
  396. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/edit_kernels.py +0 -0
  397. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/encoding.py +0 -0
  398. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/energy.py +0 -0
  399. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/env_lock.py +0 -0
  400. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/errors.py +0 -0
  401. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/eval_design.py +0 -0
  402. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  403. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  404. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/expectations.py +0 -0
  405. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/fetch_examples.py +0 -0
  406. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/flash_attn.py +0 -0
  407. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/fp8.py +0 -0
  408. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/freeze.py +0 -0
  409. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/fsdp.py +0 -0
  410. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  411. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/galore.py +0 -0
  412. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/gguf_quant.py +0 -0
  413. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/gpu.py +0 -0
  414. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/gpu_monitor.py +0 -0
  415. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/grace_codebook.py +0 -0
  416. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/graceful_save.py +0 -0
  417. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/grad_accum.py +0 -0
  418. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  419. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/grpo_long_context.py +0 -0
  420. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/grpo_variants.py +0 -0
  421. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/hardware_fit.py +0 -0
  422. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/harm_probe.py +0 -0
  423. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/hf.py +0 -0
  424. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/hf_space.py +0 -0
  425. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/hubs.py +0 -0
  426. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ingest_sources.py +0 -0
  427. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/integrations.py +0 -0
  428. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/interference.py +0 -0
  429. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/interference_live.py +0 -0
  430. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/irt.py +0 -0
  431. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/iterative_dpo.py +0 -0
  432. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  433. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/kernel_picker.py +0 -0
  434. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/knowledge_edit.py +0 -0
  435. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/kv_cache.py +0 -0
  436. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/launcher.py +0 -0
  437. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/license_advisor.py +0 -0
  438. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/license_matrix.py +0 -0
  439. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/liger.py +0 -0
  440. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/live_eval.py +0 -0
  441. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/llama_proxy.py +0 -0
  442. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/llama_server_timings.py +0 -0
  443. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/local_rl.py +0 -0
  444. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  445. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loftq_init.py +0 -0
  446. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/log_level.py +0 -0
  447. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/long_context.py +0 -0
  448. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/longlora.py +0 -0
  449. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loop_budget.py +0 -0
  450. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loop_daemon.py +0 -0
  451. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loop_iteration.py +0 -0
  452. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loop_stages.py +0 -0
  453. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/loop_state.py +0 -0
  454. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/lr_finder.py +0 -0
  455. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/lr_groups.py +0 -0
  456. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/magpie.py +0 -0
  457. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/metrics.py +0 -0
  458. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mii.py +0 -0
  459. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/minillm.py +0 -0
  460. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mix_proxy.py +0 -0
  461. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mixed_precision.py +0 -0
  462. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mlx.py +0 -0
  463. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mod.py +0 -0
  464. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/moe.py +0 -0
  465. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/moe_quant.py +0 -0
  466. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/mole_routing.py +0 -0
  467. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/multipack.py +0 -0
  468. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/multipack_sampler.py +0 -0
  469. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/multipack_trainer.py +0 -0
  470. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/namespace_pin.py +0 -0
  471. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/neat_packing.py +0 -0
  472. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ngram_spec.py +0 -0
  473. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/nlg_metrics.py +0 -0
  474. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ollama.py +0 -0
  475. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/onboarding.py +0 -0
  476. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  477. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/paths.py +0 -0
  478. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/peft_builder.py +0 -0
  479. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/peft_patches.py +0 -0
  480. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/peft_wiring.py +0 -0
  481. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/persona_hub.py +0 -0
  482. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/pipeline.py +0 -0
  483. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/preference_combine.py +0 -0
  484. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/prm.py +0 -0
  485. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/prm_reward.py +0 -0
  486. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/probe_kernel.py +0 -0
  487. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/probe_pack.py +0 -0
  488. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/profiler.py +0 -0
  489. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/profiling.py +0 -0
  490. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  491. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/prompt_compile.py +0 -0
  492. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/prompt_distill.py +0 -0
  493. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/prune_prompt.py +0 -0
  494. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/qat.py +0 -0
  495. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/qr_url.py +0 -0
  496. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/quality.py +0 -0
  497. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/quant_menu.py +0 -0
  498. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ra_dit.py +0 -0
  499. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ra_dit_run.py +0 -0
  500. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/raft.py +0 -0
  501. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/reasoning_effort.py +0 -0
  502. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/reasoning_parser.py +0 -0
  503. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/recipe_dag.py +0 -0
  504. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/recipe_run.py +0 -0
  505. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/registry.py +0 -0
  506. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/relora.py +0 -0
  507. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/replay.py +0 -0
  508. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/repro_receipt.py +0 -0
  509. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/reward_hack_control.py +0 -0
  510. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/reward_hacking.py +0 -0
  511. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ring_attention.py +0 -0
  512. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  513. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  514. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/run_cost.py +0 -0
  515. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/sae_diff.py +0 -0
  516. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/save_formats.py +0 -0
  517. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/server_tools.py +0 -0
  518. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/sglang.py +0 -0
  519. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/shortcuts.py +0 -0
  520. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/shrink.py +0 -0
  521. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/signing.py +0 -0
  522. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/sleeper_probe.py +0 -0
  523. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/soup_lock.py +0 -0
  524. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/spec_pairing.py +0 -0
  525. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/spectrum_scan.py +0 -0
  526. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/spike_recovery.py +0 -0
  527. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/sse_train_stream.py +0 -0
  528. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/steering.py +0 -0
  529. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/strict_safetensors.py +0 -0
  530. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/structured_output.py +0 -0
  531. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/sweep_config.py +0 -0
  532. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tail_latency.py +0 -0
  533. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/terraform_plan.py +0 -0
  534. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tool_outputs.py +0 -0
  535. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/topology.py +0 -0
  536. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tracing.py +0 -0
  537. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/trackers.py +0 -0
  538. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/train_event_buffer.py +0 -0
  539. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/trainer_plugins.py +0 -0
  540. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/trust_remote.py +0 -0
  541. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/truth_probe.py +0 -0
  542. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tts.py +0 -0
  543. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tts_codec.py +0 -0
  544. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/tunability.py +0 -0
  545. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/ui_env.py +0 -0
  546. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/uld.py +0 -0
  547. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  548. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/unlearning.py +0 -0
  549. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/unlearning_eval.py +0 -0
  550. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/unsloth.py +0 -0
  551. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/v028_features.py +0 -0
  552. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/vector_bank.py +0 -0
  553. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/vllm.py +0 -0
  554. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/vscode_setup.py +0 -0
  555. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/warmup.py +0 -0
  556. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/webhooks.py +0 -0
  557. {soup_cli-0.71.30 → soup_cli-0.71.31}/src/soup_cli/utils/why.py +0 -0
  558. {soup_cli-0.71.30 → soup_cli-0.71.31}/templates/chat.yaml +0 -0
  559. {soup_cli-0.71.30 → soup_cli-0.71.31}/templates/code.yaml +0 -0
  560. {soup_cli-0.71.30 → soup_cli-0.71.31}/templates/medical.yaml +0 -0
  561. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/__init__.py +0 -0
  562. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/conftest.py +0 -0
  563. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/qa/v053_qa.md +0 -0
  564. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/qa/v07114_qa.md +0 -0
  565. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/qa/v0716_qa.md +0 -0
  566. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_adapters.py +0 -0
  567. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_advanced_peft.py +0 -0
  568. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_assistant_mask.py +0 -0
  569. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_audio.py +0 -0
  570. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_auto_tuning.py +0 -0
  571. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_autopilot.py +0 -0
  572. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_awq_gptq_export.py +0 -0
  573. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_batch_probe.py +0 -0
  574. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_bco.py +0 -0
  575. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_bench.py +0 -0
  576. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_brain_rot_multilingual.py +0 -0
  577. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_bugfixes.py +0 -0
  578. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_build_dag.py +0 -0
  579. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_callback.py +0 -0
  580. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_cans.py +0 -0
  581. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_chat.py +0 -0
  582. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_chat_template.py +0 -0
  583. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_cli.py +0 -0
  584. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_cli_subprocess.py +0 -0
  585. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_code_review_critical.py +0 -0
  586. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_code_review_deferred.py +0 -0
  587. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_code_review_high.py +0 -0
  588. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_code_review_medium_low.py +0 -0
  589. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_code_review_recurring.py +0 -0
  590. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_config.py +0 -0
  591. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_cost.py +0 -0
  592. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_crash_reporter.py +0 -0
  593. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_curriculum.py +0 -0
  594. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_data.py +0 -0
  595. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_data_augment.py +0 -0
  596. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_data_sample.py +0 -0
  597. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_data_split.py +0 -0
  598. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_data_tools.py +0 -0
  599. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_dataset_hub.py +0 -0
  600. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_dataset_registry.py +0 -0
  601. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_deepspeed.py +0 -0
  602. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_deploy_ollama.py +0 -0
  603. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_diff.py +0 -0
  604. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_display.py +0 -0
  605. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_doctor.py +0 -0
  606. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_dpo_example.py +0 -0
  607. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_dpo_variants.py +0 -0
  608. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_embedding.py +0 -0
  609. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_errors.py +0 -0
  610. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_eval.py +0 -0
  611. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_eval_gate.py +0 -0
  612. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_eval_platform.py +0 -0
  613. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_export.py +0 -0
  614. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_formats.py +0 -0
  615. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_fp8_recipe.py +0 -0
  616. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_freeze_training.py +0 -0
  617. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_generate.py +0 -0
  618. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_gpu.py +0 -0
  619. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_grpo.py +0 -0
  620. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_hf_integration.py +0 -0
  621. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_infer.py +0 -0
  622. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_inference_advanced.py +0 -0
  623. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_init.py +0 -0
  624. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ipo.py +0 -0
  625. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_jinja_analyzer.py +0 -0
  626. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_kto.py +0 -0
  627. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_loader.py +0 -0
  628. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_log_level.py +0 -0
  629. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_loss_watchdog.py +0 -0
  630. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_merge.py +0 -0
  631. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_migrate.py +0 -0
  632. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_mlx_backend.py +0 -0
  633. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_moe.py +0 -0
  634. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_multi_adapter.py +0 -0
  635. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_multi_gpu.py +0 -0
  636. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_multipack_config.py +0 -0
  637. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_multipack_invariants.py +0 -0
  638. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_multipack_sampler.py +0 -0
  639. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_neat_packing.py +0 -0
  640. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_neftune_rslora.py +0 -0
  641. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_onnx_tensorrt_export.py +0 -0
  642. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_orpo.py +0 -0
  643. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_packing.py +0 -0
  644. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_a_wave1.py +0 -0
  645. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_a_wave2.py +0 -0
  646. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_b.py +0 -0
  647. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_c.py +0 -0
  648. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_d.py +0 -0
  649. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_e.py +0 -0
  650. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_part_f_hardening.py +0 -0
  651. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_peft_methods.py +0 -0
  652. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_peft_patches.py +0 -0
  653. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_performance.py +0 -0
  654. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_pissa_init.py +0 -0
  655. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ppo.py +0 -0
  656. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_preference_dispatcher.py +0 -0
  657. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_preference_multi.py +0 -0
  658. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_preference_multi_runtime.py +0 -0
  659. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_pretrain.py +0 -0
  660. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_profile.py +0 -0
  661. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_profiling.py +0 -0
  662. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_progress.py +0 -0
  663. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_push.py +0 -0
  664. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_qat.py +0 -0
  665. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_quality_filter.py +0 -0
  666. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_quant_check.py +0 -0
  667. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_quant_menu.py +0 -0
  668. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_quickstart.py +0 -0
  669. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_rank_pattern.py +0 -0
  670. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_recipes_v031.py +0 -0
  671. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_refusal_multilingual.py +0 -0
  672. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_registry.py +0 -0
  673. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_relora.py +0 -0
  674. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_replay.py +0 -0
  675. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_resume.py +0 -0
  676. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_rlvr.py +0 -0
  677. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_run_cost.py +0 -0
  678. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_runs.py +0 -0
  679. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_serve.py +0 -0
  680. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_server_generate.py +0 -0
  681. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_sglang_serve.py +0 -0
  682. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_simpo.py +0 -0
  683. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_smoke_train.py +0 -0
  684. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_speculative_decoding.py +0 -0
  685. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_sweep.py +0 -0
  686. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_synth_data_pro.py +0 -0
  687. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_templates_yaml.py +0 -0
  688. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_tensorboard.py +0 -0
  689. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_tool_calling.py +0 -0
  690. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_trace_to_pref.py +0 -0
  691. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_tracker.py +0 -0
  692. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_trainer_coverage_v035.py +0 -0
  693. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_trainer_init.py +0 -0
  694. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_training_intelligence.py +0 -0
  695. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_training_speed.py +0 -0
  696. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_trust_remote_code.py +0 -0
  697. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_tui.py +0 -0
  698. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ui.py +0 -0
  699. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ui_chat.py +0 -0
  700. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ui_config_builder.py +0 -0
  701. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ui_live_monitor.py +0 -0
  702. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_ui_metrics.py +0 -0
  703. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_unsloth.py +0 -0
  704. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0401_part_c.py +0 -0
  705. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0401_part_d.py +0 -0
  706. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0401_part_e.py +0 -0
  707. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0402_part_a.py +0 -0
  708. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0402_part_b.py +0 -0
  709. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0403_part_a.py +0 -0
  710. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0403_part_b.py +0 -0
  711. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0403_part_c.py +0 -0
  712. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0404_part_a.py +0 -0
  713. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0404_part_b.py +0 -0
  714. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0405_part_a.py +0 -0
  715. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0406_part_a.py +0 -0
  716. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0410_part_a.py +0 -0
  717. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0410_part_b.py +0 -0
  718. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0410_part_c.py +0 -0
  719. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0420.py +0 -0
  720. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0430_part_a.py +0 -0
  721. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0430_part_b.py +0 -0
  722. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0430_part_c.py +0 -0
  723. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0430_part_d.py +0 -0
  724. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0440_part_a.py +0 -0
  725. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0440_part_b.py +0 -0
  726. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0440_part_c.py +0 -0
  727. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0440_part_d.py +0 -0
  728. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0440_review_followups.py +0 -0
  729. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0450.py +0 -0
  730. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0460_part_a.py +0 -0
  731. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0460_part_b.py +0 -0
  732. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0470_part_a.py +0 -0
  733. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0470_part_b.py +0 -0
  734. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0480_part_a.py +0 -0
  735. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0480_part_b.py +0 -0
  736. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0490.py +0 -0
  737. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0500_part_a.py +0 -0
  738. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0500_part_b.py +0 -0
  739. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0500_part_c.py +0 -0
  740. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0500_part_d.py +0 -0
  741. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0500_part_e.py +0 -0
  742. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0510.py +0 -0
  743. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0520.py +0 -0
  744. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0530.py +0 -0
  745. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v05310.py +0 -0
  746. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v05311.py +0 -0
  747. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0531_109.py +0 -0
  748. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0531_139.py +0 -0
  749. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0531_142.py +0 -0
  750. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0531_82.py +0 -0
  751. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0532.py +0 -0
  752. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0533.py +0 -0
  753. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0534.py +0 -0
  754. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0535.py +0 -0
  755. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0536.py +0 -0
  756. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0537.py +0 -0
  757. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0538.py +0 -0
  758. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0539.py +0 -0
  759. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0540.py +0 -0
  760. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0550.py +0 -0
  761. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0550_followups.py +0 -0
  762. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0560.py +0 -0
  763. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0570_part_a.py +0 -0
  764. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0570_part_b.py +0 -0
  765. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0570_part_c.py +0 -0
  766. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0570_part_d.py +0 -0
  767. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0580.py +0 -0
  768. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0590.py +0 -0
  769. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_a.py +0 -0
  770. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_b.py +0 -0
  771. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_c.py +0 -0
  772. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_d.py +0 -0
  773. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_e.py +0 -0
  774. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0600_part_f.py +0 -0
  775. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0610_part_a.py +0 -0
  776. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0610_part_b.py +0 -0
  777. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0610_part_c.py +0 -0
  778. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0610_part_d.py +0 -0
  779. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0610_part_e.py +0 -0
  780. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_followups.py +0 -0
  781. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_part_a.py +0 -0
  782. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_part_b.py +0 -0
  783. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_part_c.py +0 -0
  784. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_part_d.py +0 -0
  785. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0620_part_e.py +0 -0
  786. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_followups.py +0 -0
  787. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_part_a.py +0 -0
  788. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_part_b.py +0 -0
  789. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_part_c.py +0 -0
  790. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_part_d.py +0 -0
  791. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0630_part_e.py +0 -0
  792. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0631_206.py +0 -0
  793. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_followups.py +0 -0
  794. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_a.py +0 -0
  795. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_b.py +0 -0
  796. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_c.py +0 -0
  797. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_d.py +0 -0
  798. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_e.py +0 -0
  799. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0640_part_f.py +0 -0
  800. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_followups.py +0 -0
  801. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_part_a.py +0 -0
  802. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_part_b.py +0 -0
  803. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_part_c.py +0 -0
  804. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_part_d.py +0 -0
  805. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0650_part_e.py +0 -0
  806. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_cli.py +0 -0
  807. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_followups.py +0 -0
  808. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_part_a.py +0 -0
  809. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_part_b.py +0 -0
  810. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_part_c.py +0 -0
  811. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_part_d.py +0 -0
  812. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0660_part_e.py +0 -0
  813. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_followups.py +0 -0
  814. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_a.py +0 -0
  815. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_b.py +0 -0
  816. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_c.py +0 -0
  817. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_d.py +0 -0
  818. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_e.py +0 -0
  819. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0670_part_f.py +0 -0
  820. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_followups.py +0 -0
  821. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_part_a.py +0 -0
  822. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_part_b.py +0 -0
  823. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_part_c.py +0 -0
  824. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_part_d.py +0 -0
  825. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0680_part_e.py +0 -0
  826. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0690_part_a.py +0 -0
  827. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0690_part_b.py +0 -0
  828. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0690_part_c.py +0 -0
  829. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0690_part_d.py +0 -0
  830. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0690_part_e.py +0 -0
  831. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_a.py +0 -0
  832. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_b.py +0 -0
  833. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_c.py +0 -0
  834. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_d.py +0 -0
  835. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_e.py +0 -0
  836. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0700_part_f.py +0 -0
  837. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07110.py +0 -0
  838. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07111.py +0 -0
  839. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07112.py +0 -0
  840. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07113.py +0 -0
  841. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07114.py +0 -0
  842. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07115.py +0 -0
  843. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07116.py +0 -0
  844. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07117.py +0 -0
  845. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07118.py +0 -0
  846. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07119.py +0 -0
  847. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0712.py +0 -0
  848. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07120.py +0 -0
  849. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07121.py +0 -0
  850. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07122.py +0 -0
  851. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07123.py +0 -0
  852. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07126.py +0 -0
  853. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07127.py +0 -0
  854. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v07129.py +0 -0
  855. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0713.py +0 -0
  856. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0714.py +0 -0
  857. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0715.py +0 -0
  858. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0716.py +0 -0
  859. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0717.py +0 -0
  860. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0718.py +0 -0
  861. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_v0719.py +0 -0
  862. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_validator.py +0 -0
  863. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_vision.py +0 -0
  864. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_vllm_serve.py +0 -0
  865. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_warmup.py +0 -0
  866. {soup_cli-0.71.30 → soup_cli-0.71.31}/tests/test_why.py +0 -0
  867. {soup_cli-0.71.30 → 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,38 @@ 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
+
15
47
  ## [0.71.30] - 2026-07-05
16
48
 
17
49
  ### 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 (137 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, shrink
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 (307 files, 15334 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.30
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,27 +193,29 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.30Process-supervised RL: PRM-guided GRPO.** Use a trained Process Reward Model to score each *reasoning step* of a GRPO completion the o1-era training signal plus bundled toy environments so the openenv rollout path runs out-of-the-box.
197
-
198
- - **PRM as the GRPO reward.** Point `training.prm_reward` at a PRM you trained with
199
- `soup train task=prm`; it splits each completion into steps, scores every step with the PRM's
200
- reward head, and folds them (`min` / `prod` / `last`) into one reward that GRPO optimises —
201
- replacing `reward_fn`. It rides the reward-shaping + reward-hack-mitigation seam, so the
202
- v0.71.26 controller still watches it.
203
- - **Bundled rollout environments.** `soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`
204
- each expose a `rollout(prompts)` entry point; wire one with `rollout_backend=openenv` +
205
- `rollout_func=soup_cli.envs.calculator:rollout` (three ready-made `grpo-env-*` recipes ship it).
206
- - **Producer fixes too.** `soup train task=prm` now saves its tokenizer and no longer crashes on
207
- its own summary a PRM checkpoint is loadable standalone.
208
- - **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M (CPU): the PRM reward scores
209
- good completions above bad and drives GRPO's advantages (`rewards/prm_reward` logged). Tiny
210
- model + synthetic PRM not a production reward-model claim (scale help wanted: #286).
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).
211
212
 
212
213
  ```yaml
213
- task: grpo
214
+ task: online_dpo
214
215
  training:
215
- prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
216
- prm_aggregate: min # weakest-link (default) | prod | last
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
217
219
  ```
218
220
 
219
221
  Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -49,27 +49,29 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.30Process-supervised RL: PRM-guided GRPO.** Use a trained Process Reward Model to score each *reasoning step* of a GRPO completion the o1-era training signal plus bundled toy environments so the openenv rollout path runs out-of-the-box.
53
-
54
- - **PRM as the GRPO reward.** Point `training.prm_reward` at a PRM you trained with
55
- `soup train task=prm`; it splits each completion into steps, scores every step with the PRM's
56
- reward head, and folds them (`min` / `prod` / `last`) into one reward that GRPO optimises —
57
- replacing `reward_fn`. It rides the reward-shaping + reward-hack-mitigation seam, so the
58
- v0.71.26 controller still watches it.
59
- - **Bundled rollout environments.** `soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`
60
- each expose a `rollout(prompts)` entry point; wire one with `rollout_backend=openenv` +
61
- `rollout_func=soup_cli.envs.calculator:rollout` (three ready-made `grpo-env-*` recipes ship it).
62
- - **Producer fixes too.** `soup train task=prm` now saves its tokenizer and no longer crashes on
63
- its own summary a PRM checkpoint is loadable standalone.
64
- - **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M (CPU): the PRM reward scores
65
- good completions above bad and drives GRPO's advantages (`rewards/prm_reward` logged). Tiny
66
- model + synthetic PRM not a production reward-model claim (scale help wanted: #286).
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).
67
68
 
68
69
  ```yaml
69
- task: grpo
70
+ task: online_dpo
70
71
  training:
71
- prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
72
- prm_aggregate: min # weakest-link (default) | prod | last
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
73
75
  ```
74
76
 
75
77
  Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -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 137 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
 
@@ -401,6 +401,34 @@ advantages). Not a production reward-model claim; scale validation is help-wante
401
401
  (#286).
402
402
 
403
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).
430
+
431
+
404
432
  ## Weighted Multi-Objective Preference Loss
405
433
 
406
434
  Mix DPO / SimPO / ORPO / IPO terms in one training run by setting
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.30"
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.30"
3
+ __version__ = "0.71.31"