soup-cli 0.71.30__tar.gz → 0.71.32__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 (870) hide show
  1. {soup_cli-0.71.30 → soup_cli-0.71.32}/.gitignore +4 -1
  2. {soup_cli-0.71.30 → soup_cli-0.71.32}/CHANGELOG.md +62 -0
  3. {soup_cli-0.71.30 → soup_cli-0.71.32}/CONTRIBUTING.md +5 -6
  4. {soup_cli-0.71.30 → soup_cli-0.71.32}/PKG-INFO +25 -19
  5. {soup_cli-0.71.30 → soup_cli-0.71.32}/README.md +24 -18
  6. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/commands.md +5 -1
  7. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/data.md +16 -0
  8. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/evaluation.md +5 -0
  9. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/models.md +11 -0
  10. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/serving-and-export.md +2 -2
  11. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/training.md +70 -0
  12. {soup_cli-0.71.30 → soup_cli-0.71.32}/pyproject.toml +1 -1
  13. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/__init__.py +1 -1
  14. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/data.py +328 -0
  15. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/infer.py +331 -3
  16. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/ship.py +32 -1
  17. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/train.py +9 -0
  18. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/config/schema.py +169 -0
  19. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/formats.py +28 -3
  20. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/judge.py +234 -1
  21. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/recipes/catalog.py +169 -1
  22. soup_cli-0.71.32/src/soup_cli/trainer/asr.py +445 -0
  23. soup_cli-0.71.32/src/soup_cli/trainer/online_dpo.py +432 -0
  24. soup_cli-0.71.32/src/soup_cli/utils/asr_metrics.py +164 -0
  25. soup_cli-0.71.32/src/soup_cli/utils/best_of_n.py +113 -0
  26. soup_cli-0.71.32/src/soup_cli/utils/evolve.py +120 -0
  27. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/gpu.py +13 -0
  28. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ship_verdict.py +3 -4
  29. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_recipes.py +4 -2
  30. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07124.py +2 -2
  31. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07125.py +8 -5
  32. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07128.py +2 -1
  33. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07130.py +2 -2
  34. soup_cli-0.71.32/tests/test_v07131.py +1207 -0
  35. soup_cli-0.71.32/tests/test_v07132.py +956 -0
  36. soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-prm-guided-grpo.md +0 -133
  37. soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-soup-shrink-depth-prune.md +0 -607
  38. soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-prm-guided-grpo-design.md +0 -152
  39. soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-soup-shrink-depth-prune-design.md +0 -218
  40. {soup_cli-0.71.30 → soup_cli-0.71.32}/.dockerignore +0 -0
  41. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/FUNDING.yml +0 -0
  42. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  43. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  44. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  45. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/pull_request_template.md +0 -0
  46. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/workflows/ci.yml +0 -0
  47. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/workflows/docker.yml +0 -0
  48. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/workflows/publish.yml +0 -0
  49. {soup_cli-0.71.30 → soup_cli-0.71.32}/.github/workflows/recipe-validation.yml +0 -0
  50. {soup_cli-0.71.30 → soup_cli-0.71.32}/.mailmap +0 -0
  51. {soup_cli-0.71.30 → soup_cli-0.71.32}/.pre-commit-config.yaml +0 -0
  52. {soup_cli-0.71.30 → soup_cli-0.71.32}/AGENTS.md +0 -0
  53. {soup_cli-0.71.30 → soup_cli-0.71.32}/CODEOWNERS +0 -0
  54. {soup_cli-0.71.30 → soup_cli-0.71.32}/CODE_OF_CONDUCT.md +0 -0
  55. {soup_cli-0.71.30 → soup_cli-0.71.32}/CONTRIBUTORS.md +0 -0
  56. {soup_cli-0.71.30 → soup_cli-0.71.32}/Dockerfile +0 -0
  57. {soup_cli-0.71.30 → soup_cli-0.71.32}/LICENSE +0 -0
  58. {soup_cli-0.71.30 → soup_cli-0.71.32}/NOTICE +0 -0
  59. {soup_cli-0.71.30 → soup_cli-0.71.32}/SECURITY.md +0 -0
  60. {soup_cli-0.71.30 → soup_cli-0.71.32}/docker-compose.yml +0 -0
  61. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/README.md +0 -0
  62. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/adapters-and-governance.md +0 -0
  63. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/backends-and-ops.md +0 -0
  64. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/peft-and-efficiency.md +0 -0
  65. {soup_cli-0.71.30 → soup_cli-0.71.32}/docs/performance-and-quantization.md +0 -0
  66. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/README.md +0 -0
  67. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/dpo_chat.yaml +0 -0
  68. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/dpo_example.yaml +0 -0
  69. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/grpo_reasoning.yaml +0 -0
  70. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/rlhf_step1_sft.yaml +0 -0
  71. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/rlhf_step2_reward.yaml +0 -0
  72. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  73. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/sft_basic.yaml +0 -0
  74. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/configs/vision_llama.yaml +0 -0
  75. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/data/alpaca_tiny.jsonl +0 -0
  76. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/data/chat_preferences.jsonl +0 -0
  77. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/data/dpo_sample.jsonl +0 -0
  78. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/data/reasoning_math.jsonl +0 -0
  79. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/reward_hacking/rewards.py +0 -0
  80. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/synthetic_workflow.md +0 -0
  81. {soup_cli-0.71.30 → soup_cli-0.71.32}/examples/synthetic_workflow.yaml +0 -0
  82. {soup_cli-0.71.30 → soup_cli-0.71.32}/soup.png +0 -0
  83. {soup_cli-0.71.30 → soup_cli-0.71.32}/soup_logo_svg.svg +0 -0
  84. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/__main__.py +0 -0
  85. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/autopilot/__init__.py +0 -0
  86. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/autopilot/analyzer.py +0 -0
  87. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/autopilot/decisions.py +0 -0
  88. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/autopilot/generate_config.py +0 -0
  89. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/__init__.py +0 -0
  90. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/pack.py +0 -0
  91. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/publish.py +0 -0
  92. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/run.py +0 -0
  93. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/schema.py +0 -0
  94. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/unpack.py +0 -0
  95. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cans/verify.py +0 -0
  96. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cli.py +0 -0
  97. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cloud/__init__.py +0 -0
  98. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/cloud/modal.py +0 -0
  99. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/__init__.py +0 -0
  100. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/_eval_v0550.py +0 -0
  101. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/_eval_v0610.py +0 -0
  102. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/_eval_v0650.py +0 -0
  103. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/_eval_v07110.py +0 -0
  104. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/_webhook_cli.py +0 -0
  105. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/ab.py +0 -0
  106. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/active_sample.py +0 -0
  107. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/adapters.py +0 -0
  108. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/advise.py +0 -0
  109. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/agent.py +0 -0
  110. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/airgap.py +0 -0
  111. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/apple_adapter.py +0 -0
  112. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/attest.py +0 -0
  113. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/audit_log.py +0 -0
  114. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/autopilot.py +0 -0
  115. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/bench.py +0 -0
  116. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/bom.py +0 -0
  117. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/build.py +0 -0
  118. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/can.py +0 -0
  119. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/chat.py +0 -0
  120. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/compile_cmd.py +0 -0
  121. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/compile_tools.py +0 -0
  122. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/completions.py +0 -0
  123. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/cost.py +0 -0
  124. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/data_doctor.py +0 -0
  125. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/data_forge.py +0 -0
  126. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/data_mix.py +0 -0
  127. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/data_score.py +0 -0
  128. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  129. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/deploy.py +0 -0
  130. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/diagnose.py +0 -0
  131. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/diff.py +0 -0
  132. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/distill_prompt.py +0 -0
  133. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/doctor.py +0 -0
  134. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/drift_alarm.py +0 -0
  135. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/edit.py +0 -0
  136. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/env.py +0 -0
  137. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/eval.py +0 -0
  138. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/expect.py +0 -0
  139. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/export.py +0 -0
  140. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/fetch.py +0 -0
  141. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/generate.py +0 -0
  142. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/history.py +0 -0
  143. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/ingest.py +0 -0
  144. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/init.py +0 -0
  145. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/iterative_dpo.py +0 -0
  146. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/license_advisor.py +0 -0
  147. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/llama.py +0 -0
  148. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/local_rl.py +0 -0
  149. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/lock.py +0 -0
  150. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/loop.py +0 -0
  151. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/mcp.py +0 -0
  152. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/merge.py +0 -0
  153. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  154. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/migrate.py +0 -0
  155. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/monitor.py +0 -0
  156. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/plan.py +0 -0
  157. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/plugins.py +0 -0
  158. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/probe.py +0 -0
  159. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/profile.py +0 -0
  160. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/prune_prompt.py +0 -0
  161. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/push.py +0 -0
  162. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/quantize.py +0 -0
  163. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/quickstart.py +0 -0
  164. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/ra_dit.py +0 -0
  165. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/recipes.py +0 -0
  166. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/registry.py +0 -0
  167. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/runs.py +0 -0
  168. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/serve.py +0 -0
  169. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/shrink.py +0 -0
  170. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/spectrum.py +0 -0
  171. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/steer.py +0 -0
  172. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/sweep.py +0 -0
  173. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/tokenizer.py +0 -0
  174. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/tui.py +0 -0
  175. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/tunability.py +0 -0
  176. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/ui.py +0 -0
  177. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/commands/why.py +0 -0
  178. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/config/__init__.py +0 -0
  179. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/config/loader.py +0 -0
  180. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/__init__.py +0 -0
  181. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  182. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  183. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  184. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  185. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  186. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  187. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  188. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  189. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  190. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  191. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  192. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  193. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/augment.py +0 -0
  194. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/chat_templates.py +0 -0
  195. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/collators.py +0 -0
  196. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/loader.py +0 -0
  197. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/loss_mask.py +0 -0
  198. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/providers/__init__.py +0 -0
  199. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/providers/_utils.py +0 -0
  200. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/providers/anthropic.py +0 -0
  201. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/providers/ollama.py +0 -0
  202. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/providers/vllm.py +0 -0
  203. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/sft_format.py +0 -0
  204. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/__init__.py +0 -0
  205. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/code.py +0 -0
  206. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/conversation.py +0 -0
  207. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/preference.py +0 -0
  208. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/qa.py +0 -0
  209. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/reasoning.py +0 -0
  210. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/tool_calling.py +0 -0
  211. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/templates/verifiable.py +0 -0
  212. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/traces/__init__.py +0 -0
  213. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/traces/pair_builder.py +0 -0
  214. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/traces/parsers.py +0 -0
  215. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/traces/quality.py +0 -0
  216. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/data/validator.py +0 -0
  217. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/envs/__init__.py +0 -0
  218. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/envs/_common.py +0 -0
  219. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/envs/calculator.py +0 -0
  220. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/envs/guess_number.py +0 -0
  221. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/envs/retrieval_qa.py +0 -0
  222. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/__init__.py +0 -0
  223. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/arena.py +0 -0
  224. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  225. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/calibrate.py +0 -0
  226. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  227. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/custom.py +0 -0
  228. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/forgetting.py +0 -0
  229. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/gate.py +0 -0
  230. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/human.py +0 -0
  231. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/leaderboard.py +0 -0
  232. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/eval/quant_check.py +0 -0
  233. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/experiment/__init__.py +0 -0
  234. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/experiment/tracker.py +0 -0
  235. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/mcp_server/__init__.py +0 -0
  236. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/mcp_server/registry.py +0 -0
  237. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/mcp_server/server.py +0 -0
  238. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/migrate/__init__.py +0 -0
  239. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/migrate/axolotl.py +0 -0
  240. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/migrate/common.py +0 -0
  241. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/migrate/llamafactory.py +0 -0
  242. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/migrate/unsloth.py +0 -0
  243. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/__init__.py +0 -0
  244. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/callback.py +0 -0
  245. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  246. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/display.py +0 -0
  247. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  248. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/hf_push.py +0 -0
  249. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  250. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/monitoring/trace_logger.py +0 -0
  251. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/plugins/__init__.py +0 -0
  252. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/py.typed +0 -0
  253. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/recipes/__init__.py +0 -0
  254. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/registry/__init__.py +0 -0
  255. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/registry/attach.py +0 -0
  256. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/registry/diff.py +0 -0
  257. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/registry/hashing.py +0 -0
  258. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/registry/store.py +0 -0
  259. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/__init__.py +0 -0
  260. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/audio.yaml +0 -0
  261. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/bco.yaml +0 -0
  262. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/chat.yaml +0 -0
  263. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/code.yaml +0 -0
  264. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/embedding.yaml +0 -0
  265. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  266. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  267. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  268. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/ipo.yaml +0 -0
  269. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/kto.yaml +0 -0
  270. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/longcontext.yaml +0 -0
  271. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/manifest.json +0 -0
  272. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/medical.yaml +0 -0
  273. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/moe.yaml +0 -0
  274. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/orpo.yaml +0 -0
  275. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/pretrain.yaml +0 -0
  276. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/reasoning.yaml +0 -0
  277. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/rlhf.yaml +0 -0
  278. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/simpo.yaml +0 -0
  279. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/tool-calling.yaml +0 -0
  280. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/templates/vision.yaml +0 -0
  281. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/__init__.py +0 -0
  282. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/bco.py +0 -0
  283. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/bitnet.py +0 -0
  284. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/classifier.py +0 -0
  285. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/distill.py +0 -0
  286. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/dpo.py +0 -0
  287. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/embedding.py +0 -0
  288. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/grpo.py +0 -0
  289. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/ipo.py +0 -0
  290. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/kto.py +0 -0
  291. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  292. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  293. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/mlx_routing.py +0 -0
  294. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/mlx_sft.py +0 -0
  295. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/mole_routing.py +0 -0
  296. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/orpo.py +0 -0
  297. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/ppo.py +0 -0
  298. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/preference.py +0 -0
  299. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/pretrain.py +0 -0
  300. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/prm.py +0 -0
  301. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/raft.py +0 -0
  302. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/reward_model.py +0 -0
  303. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/rewards.py +0 -0
  304. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/sft.py +0 -0
  305. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/simpo.py +0 -0
  306. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/tts.py +0 -0
  307. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/trainer/unlearn.py +0 -0
  308. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/tui_app.py +0 -0
  309. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/__init__.py +0 -0
  310. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/app.py +0 -0
  311. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/plugins/__init__.py +0 -0
  312. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/static/app.js +0 -0
  313. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/static/index.html +0 -0
  314. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/static/logo.png +0 -0
  315. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/static/logo.svg +0 -0
  316. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/ui/static/style.css +0 -0
  317. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/__init__.py +0 -0
  318. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/_eval_text.py +0 -0
  319. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ab_test.py +0 -0
  320. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/activation_offload.py +0 -0
  321. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/active_sampler.py +0 -0
  322. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_bisect.py +0 -0
  323. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_branch.py +0 -0
  324. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_diff.py +0 -0
  325. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_merge.py +0 -0
  326. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_pr.py +0 -0
  327. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_scan.py +0 -0
  328. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/adapter_sign.py +0 -0
  329. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/advanced_precision.py +0 -0
  330. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/advise.py +0 -0
  331. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/advise_history.py +0 -0
  332. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/agent_forge.py +0 -0
  333. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/agent_rollout.py +0 -0
  334. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/agent_sandbox.py +0 -0
  335. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/airgap_bundle.py +0 -0
  336. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/annex_xi.py +0 -0
  337. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/anthropic_messages.py +0 -0
  338. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/apple_adapter.py +0 -0
  339. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/attest.py +0 -0
  340. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/audit_log.py +0 -0
  341. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/auto_quant.py +0 -0
  342. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/backend_detect.py +0 -0
  343. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/batch_probe.py +0 -0
  344. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/behavior_battery.py +0 -0
  345. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/bitnet.py +0 -0
  346. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/blame.py +0 -0
  347. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/block_expansion.py +0 -0
  348. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/bom.py +0 -0
  349. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/brain_rot.py +0 -0
  350. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  351. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/build_dag.py +0 -0
  352. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/canary_discovery.py +0 -0
  353. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/canary_router.py +0 -0
  354. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/capability_suite.py +0 -0
  355. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/checklist_dsl.py +0 -0
  356. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  357. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/citation_faithful.py +0 -0
  358. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/classifier.py +0 -0
  359. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/cmaes_merge.py +0 -0
  360. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/compile_tools.py +0 -0
  361. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/completions.py +0 -0
  362. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/constants.py +0 -0
  363. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/convergence.py +0 -0
  364. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/crash.py +0 -0
  365. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  366. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/curriculum.py +0 -0
  367. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  368. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/cut_ce.py +0 -0
  369. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_doctor.py +0 -0
  370. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_forge.py +0 -0
  371. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_lint.py +0 -0
  372. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_mix.py +0 -0
  373. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_pipeline.py +0 -0
  374. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/data_score.py +0 -0
  375. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/deepspeed.py +0 -0
  376. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  377. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/demo_bundles.py +0 -0
  378. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  379. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/deploy_measure.py +0 -0
  380. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  381. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/_common.py +0 -0
  382. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/badge.py +0 -0
  383. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/citation.py +0 -0
  384. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  385. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  386. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/format.py +0 -0
  387. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/live.py +0 -0
  388. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  389. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  390. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  391. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/report.py +0 -0
  392. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/diagnose/runner.py +0 -0
  393. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/distill.py +0 -0
  394. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/dpo_variants.py +0 -0
  395. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/drift_alarm.py +0 -0
  396. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  397. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/echo_trap.py +0 -0
  398. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/edit_diff.py +0 -0
  399. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/edit_governor.py +0 -0
  400. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/edit_kernels.py +0 -0
  401. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/encoding.py +0 -0
  402. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/energy.py +0 -0
  403. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/env_lock.py +0 -0
  404. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/errors.py +0 -0
  405. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/eval_design.py +0 -0
  406. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  407. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  408. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/expectations.py +0 -0
  409. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/fetch_examples.py +0 -0
  410. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/flash_attn.py +0 -0
  411. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/fp8.py +0 -0
  412. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/freeze.py +0 -0
  413. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/fsdp.py +0 -0
  414. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  415. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/galore.py +0 -0
  416. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/gguf_quant.py +0 -0
  417. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/gpu_monitor.py +0 -0
  418. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/grace_codebook.py +0 -0
  419. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/graceful_save.py +0 -0
  420. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/grad_accum.py +0 -0
  421. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  422. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/grpo_long_context.py +0 -0
  423. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/grpo_variants.py +0 -0
  424. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/hardware_fit.py +0 -0
  425. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/harm_probe.py +0 -0
  426. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/hf.py +0 -0
  427. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/hf_space.py +0 -0
  428. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/hubs.py +0 -0
  429. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ingest_sources.py +0 -0
  430. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/integrations.py +0 -0
  431. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/interference.py +0 -0
  432. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/interference_live.py +0 -0
  433. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/irt.py +0 -0
  434. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/iterative_dpo.py +0 -0
  435. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  436. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/kernel_picker.py +0 -0
  437. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/knowledge_edit.py +0 -0
  438. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/kv_cache.py +0 -0
  439. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/launcher.py +0 -0
  440. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/license_advisor.py +0 -0
  441. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/license_matrix.py +0 -0
  442. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/liger.py +0 -0
  443. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/live_eval.py +0 -0
  444. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/llama_proxy.py +0 -0
  445. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/llama_server_timings.py +0 -0
  446. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/local_rl.py +0 -0
  447. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  448. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loftq_init.py +0 -0
  449. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/log_level.py +0 -0
  450. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/long_context.py +0 -0
  451. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/longlora.py +0 -0
  452. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loop_budget.py +0 -0
  453. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loop_daemon.py +0 -0
  454. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loop_iteration.py +0 -0
  455. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loop_stages.py +0 -0
  456. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/loop_state.py +0 -0
  457. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/lr_finder.py +0 -0
  458. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/lr_groups.py +0 -0
  459. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/magpie.py +0 -0
  460. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/metrics.py +0 -0
  461. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mii.py +0 -0
  462. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/minillm.py +0 -0
  463. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mix_proxy.py +0 -0
  464. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mixed_precision.py +0 -0
  465. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mlx.py +0 -0
  466. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mod.py +0 -0
  467. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/moe.py +0 -0
  468. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/moe_quant.py +0 -0
  469. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/mole_routing.py +0 -0
  470. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/multipack.py +0 -0
  471. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/multipack_sampler.py +0 -0
  472. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/multipack_trainer.py +0 -0
  473. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/namespace_pin.py +0 -0
  474. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/neat_packing.py +0 -0
  475. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ngram_spec.py +0 -0
  476. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/nlg_metrics.py +0 -0
  477. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ollama.py +0 -0
  478. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/onboarding.py +0 -0
  479. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  480. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/paths.py +0 -0
  481. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/peft_builder.py +0 -0
  482. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/peft_patches.py +0 -0
  483. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/peft_wiring.py +0 -0
  484. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/persona_hub.py +0 -0
  485. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/pipeline.py +0 -0
  486. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/preference_combine.py +0 -0
  487. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/prm.py +0 -0
  488. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/prm_reward.py +0 -0
  489. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/probe_kernel.py +0 -0
  490. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/probe_pack.py +0 -0
  491. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/profiler.py +0 -0
  492. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/profiling.py +0 -0
  493. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  494. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/prompt_compile.py +0 -0
  495. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/prompt_distill.py +0 -0
  496. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/prune_prompt.py +0 -0
  497. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/qat.py +0 -0
  498. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/qr_url.py +0 -0
  499. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/quality.py +0 -0
  500. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/quant_menu.py +0 -0
  501. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ra_dit.py +0 -0
  502. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ra_dit_run.py +0 -0
  503. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/raft.py +0 -0
  504. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/reasoning_effort.py +0 -0
  505. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/reasoning_parser.py +0 -0
  506. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/recipe_dag.py +0 -0
  507. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/recipe_run.py +0 -0
  508. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/registry.py +0 -0
  509. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/relora.py +0 -0
  510. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/replay.py +0 -0
  511. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/repro_receipt.py +0 -0
  512. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/reward_hack_control.py +0 -0
  513. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/reward_hacking.py +0 -0
  514. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ring_attention.py +0 -0
  515. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  516. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  517. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/run_cost.py +0 -0
  518. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/sae_diff.py +0 -0
  519. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/save_formats.py +0 -0
  520. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/server_tools.py +0 -0
  521. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/sglang.py +0 -0
  522. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/shortcuts.py +0 -0
  523. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/shrink.py +0 -0
  524. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/signing.py +0 -0
  525. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/sleeper_probe.py +0 -0
  526. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/soup_lock.py +0 -0
  527. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/spec_pairing.py +0 -0
  528. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/spectrum_scan.py +0 -0
  529. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/spike_recovery.py +0 -0
  530. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/sse_train_stream.py +0 -0
  531. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/steering.py +0 -0
  532. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/strict_safetensors.py +0 -0
  533. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/structured_output.py +0 -0
  534. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/sweep_config.py +0 -0
  535. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tail_latency.py +0 -0
  536. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/terraform_plan.py +0 -0
  537. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tool_outputs.py +0 -0
  538. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/topology.py +0 -0
  539. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tracing.py +0 -0
  540. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/trackers.py +0 -0
  541. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/train_event_buffer.py +0 -0
  542. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/trainer_plugins.py +0 -0
  543. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/trust_remote.py +0 -0
  544. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/truth_probe.py +0 -0
  545. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tts.py +0 -0
  546. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tts_codec.py +0 -0
  547. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/tunability.py +0 -0
  548. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/ui_env.py +0 -0
  549. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/uld.py +0 -0
  550. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  551. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/unlearning.py +0 -0
  552. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/unlearning_eval.py +0 -0
  553. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/unsloth.py +0 -0
  554. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/v028_features.py +0 -0
  555. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/vector_bank.py +0 -0
  556. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/vllm.py +0 -0
  557. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/vscode_setup.py +0 -0
  558. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/warmup.py +0 -0
  559. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/webhooks.py +0 -0
  560. {soup_cli-0.71.30 → soup_cli-0.71.32}/src/soup_cli/utils/why.py +0 -0
  561. {soup_cli-0.71.30 → soup_cli-0.71.32}/templates/chat.yaml +0 -0
  562. {soup_cli-0.71.30 → soup_cli-0.71.32}/templates/code.yaml +0 -0
  563. {soup_cli-0.71.30 → soup_cli-0.71.32}/templates/medical.yaml +0 -0
  564. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/__init__.py +0 -0
  565. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/conftest.py +0 -0
  566. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/qa/v053_qa.md +0 -0
  567. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/qa/v07114_qa.md +0 -0
  568. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/qa/v0716_qa.md +0 -0
  569. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_adapters.py +0 -0
  570. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_advanced_peft.py +0 -0
  571. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_assistant_mask.py +0 -0
  572. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_audio.py +0 -0
  573. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_auto_tuning.py +0 -0
  574. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_autopilot.py +0 -0
  575. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_awq_gptq_export.py +0 -0
  576. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_batch_probe.py +0 -0
  577. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_bco.py +0 -0
  578. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_bench.py +0 -0
  579. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_brain_rot_multilingual.py +0 -0
  580. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_bugfixes.py +0 -0
  581. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_build_dag.py +0 -0
  582. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_callback.py +0 -0
  583. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_cans.py +0 -0
  584. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_chat.py +0 -0
  585. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_chat_template.py +0 -0
  586. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_cli.py +0 -0
  587. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_cli_subprocess.py +0 -0
  588. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_code_review_critical.py +0 -0
  589. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_code_review_deferred.py +0 -0
  590. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_code_review_high.py +0 -0
  591. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_code_review_medium_low.py +0 -0
  592. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_code_review_recurring.py +0 -0
  593. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_config.py +0 -0
  594. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_cost.py +0 -0
  595. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_crash_reporter.py +0 -0
  596. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_curriculum.py +0 -0
  597. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_data.py +0 -0
  598. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_data_augment.py +0 -0
  599. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_data_sample.py +0 -0
  600. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_data_split.py +0 -0
  601. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_data_tools.py +0 -0
  602. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_dataset_hub.py +0 -0
  603. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_dataset_registry.py +0 -0
  604. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_deepspeed.py +0 -0
  605. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_deploy_ollama.py +0 -0
  606. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_diff.py +0 -0
  607. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_display.py +0 -0
  608. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_doctor.py +0 -0
  609. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_dpo_example.py +0 -0
  610. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_dpo_variants.py +0 -0
  611. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_embedding.py +0 -0
  612. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_errors.py +0 -0
  613. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_eval.py +0 -0
  614. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_eval_gate.py +0 -0
  615. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_eval_platform.py +0 -0
  616. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_export.py +0 -0
  617. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_formats.py +0 -0
  618. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_fp8_recipe.py +0 -0
  619. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_freeze_training.py +0 -0
  620. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_generate.py +0 -0
  621. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_gpu.py +0 -0
  622. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_grpo.py +0 -0
  623. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_hf_integration.py +0 -0
  624. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_infer.py +0 -0
  625. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_inference_advanced.py +0 -0
  626. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_init.py +0 -0
  627. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ipo.py +0 -0
  628. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_jinja_analyzer.py +0 -0
  629. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_kto.py +0 -0
  630. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_loader.py +0 -0
  631. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_log_level.py +0 -0
  632. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_loss_watchdog.py +0 -0
  633. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_merge.py +0 -0
  634. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_migrate.py +0 -0
  635. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_mlx_backend.py +0 -0
  636. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_moe.py +0 -0
  637. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_multi_adapter.py +0 -0
  638. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_multi_gpu.py +0 -0
  639. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_multipack_config.py +0 -0
  640. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_multipack_invariants.py +0 -0
  641. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_multipack_sampler.py +0 -0
  642. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_neat_packing.py +0 -0
  643. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_neftune_rslora.py +0 -0
  644. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_onnx_tensorrt_export.py +0 -0
  645. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_orpo.py +0 -0
  646. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_packing.py +0 -0
  647. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_a_wave1.py +0 -0
  648. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_a_wave2.py +0 -0
  649. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_b.py +0 -0
  650. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_c.py +0 -0
  651. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_d.py +0 -0
  652. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_e.py +0 -0
  653. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_part_f_hardening.py +0 -0
  654. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_peft_methods.py +0 -0
  655. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_peft_patches.py +0 -0
  656. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_performance.py +0 -0
  657. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_pissa_init.py +0 -0
  658. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ppo.py +0 -0
  659. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_preference_dispatcher.py +0 -0
  660. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_preference_multi.py +0 -0
  661. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_preference_multi_runtime.py +0 -0
  662. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_pretrain.py +0 -0
  663. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_profile.py +0 -0
  664. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_profiling.py +0 -0
  665. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_progress.py +0 -0
  666. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_push.py +0 -0
  667. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_qat.py +0 -0
  668. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_quality_filter.py +0 -0
  669. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_quant_check.py +0 -0
  670. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_quant_menu.py +0 -0
  671. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_quickstart.py +0 -0
  672. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_rank_pattern.py +0 -0
  673. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_recipes_v031.py +0 -0
  674. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_refusal_multilingual.py +0 -0
  675. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_registry.py +0 -0
  676. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_relora.py +0 -0
  677. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_replay.py +0 -0
  678. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_resume.py +0 -0
  679. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_rlvr.py +0 -0
  680. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_run_cost.py +0 -0
  681. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_runs.py +0 -0
  682. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_serve.py +0 -0
  683. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_server_generate.py +0 -0
  684. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_sglang_serve.py +0 -0
  685. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_simpo.py +0 -0
  686. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_smoke_train.py +0 -0
  687. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_speculative_decoding.py +0 -0
  688. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_sweep.py +0 -0
  689. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_synth_data_pro.py +0 -0
  690. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_templates_yaml.py +0 -0
  691. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_tensorboard.py +0 -0
  692. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_tool_calling.py +0 -0
  693. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_trace_to_pref.py +0 -0
  694. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_tracker.py +0 -0
  695. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_trainer_coverage_v035.py +0 -0
  696. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_trainer_init.py +0 -0
  697. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_training_intelligence.py +0 -0
  698. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_training_speed.py +0 -0
  699. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_trust_remote_code.py +0 -0
  700. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_tui.py +0 -0
  701. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ui.py +0 -0
  702. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ui_chat.py +0 -0
  703. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ui_config_builder.py +0 -0
  704. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ui_live_monitor.py +0 -0
  705. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_ui_metrics.py +0 -0
  706. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_unsloth.py +0 -0
  707. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0401_part_c.py +0 -0
  708. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0401_part_d.py +0 -0
  709. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0401_part_e.py +0 -0
  710. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0402_part_a.py +0 -0
  711. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0402_part_b.py +0 -0
  712. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0403_part_a.py +0 -0
  713. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0403_part_b.py +0 -0
  714. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0403_part_c.py +0 -0
  715. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0404_part_a.py +0 -0
  716. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0404_part_b.py +0 -0
  717. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0405_part_a.py +0 -0
  718. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0406_part_a.py +0 -0
  719. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0410_part_a.py +0 -0
  720. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0410_part_b.py +0 -0
  721. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0410_part_c.py +0 -0
  722. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0420.py +0 -0
  723. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0430_part_a.py +0 -0
  724. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0430_part_b.py +0 -0
  725. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0430_part_c.py +0 -0
  726. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0430_part_d.py +0 -0
  727. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0440_part_a.py +0 -0
  728. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0440_part_b.py +0 -0
  729. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0440_part_c.py +0 -0
  730. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0440_part_d.py +0 -0
  731. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0440_review_followups.py +0 -0
  732. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0450.py +0 -0
  733. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0460_part_a.py +0 -0
  734. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0460_part_b.py +0 -0
  735. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0470_part_a.py +0 -0
  736. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0470_part_b.py +0 -0
  737. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0480_part_a.py +0 -0
  738. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0480_part_b.py +0 -0
  739. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0490.py +0 -0
  740. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0500_part_a.py +0 -0
  741. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0500_part_b.py +0 -0
  742. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0500_part_c.py +0 -0
  743. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0500_part_d.py +0 -0
  744. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0500_part_e.py +0 -0
  745. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0510.py +0 -0
  746. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0520.py +0 -0
  747. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0530.py +0 -0
  748. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v05310.py +0 -0
  749. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v05311.py +0 -0
  750. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0531_109.py +0 -0
  751. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0531_139.py +0 -0
  752. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0531_142.py +0 -0
  753. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0531_82.py +0 -0
  754. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0532.py +0 -0
  755. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0533.py +0 -0
  756. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0534.py +0 -0
  757. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0535.py +0 -0
  758. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0536.py +0 -0
  759. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0537.py +0 -0
  760. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0538.py +0 -0
  761. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0539.py +0 -0
  762. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0540.py +0 -0
  763. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0550.py +0 -0
  764. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0550_followups.py +0 -0
  765. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0560.py +0 -0
  766. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0570_part_a.py +0 -0
  767. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0570_part_b.py +0 -0
  768. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0570_part_c.py +0 -0
  769. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0570_part_d.py +0 -0
  770. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0580.py +0 -0
  771. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0590.py +0 -0
  772. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_a.py +0 -0
  773. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_b.py +0 -0
  774. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_c.py +0 -0
  775. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_d.py +0 -0
  776. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_e.py +0 -0
  777. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0600_part_f.py +0 -0
  778. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0610_part_a.py +0 -0
  779. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0610_part_b.py +0 -0
  780. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0610_part_c.py +0 -0
  781. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0610_part_d.py +0 -0
  782. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0610_part_e.py +0 -0
  783. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_followups.py +0 -0
  784. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_part_a.py +0 -0
  785. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_part_b.py +0 -0
  786. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_part_c.py +0 -0
  787. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_part_d.py +0 -0
  788. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0620_part_e.py +0 -0
  789. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_followups.py +0 -0
  790. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_part_a.py +0 -0
  791. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_part_b.py +0 -0
  792. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_part_c.py +0 -0
  793. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_part_d.py +0 -0
  794. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0630_part_e.py +0 -0
  795. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0631_206.py +0 -0
  796. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_followups.py +0 -0
  797. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_a.py +0 -0
  798. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_b.py +0 -0
  799. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_c.py +0 -0
  800. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_d.py +0 -0
  801. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_e.py +0 -0
  802. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0640_part_f.py +0 -0
  803. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_followups.py +0 -0
  804. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_part_a.py +0 -0
  805. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_part_b.py +0 -0
  806. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_part_c.py +0 -0
  807. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_part_d.py +0 -0
  808. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0650_part_e.py +0 -0
  809. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_cli.py +0 -0
  810. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_followups.py +0 -0
  811. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_part_a.py +0 -0
  812. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_part_b.py +0 -0
  813. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_part_c.py +0 -0
  814. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_part_d.py +0 -0
  815. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0660_part_e.py +0 -0
  816. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_followups.py +0 -0
  817. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_a.py +0 -0
  818. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_b.py +0 -0
  819. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_c.py +0 -0
  820. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_d.py +0 -0
  821. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_e.py +0 -0
  822. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0670_part_f.py +0 -0
  823. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_followups.py +0 -0
  824. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_part_a.py +0 -0
  825. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_part_b.py +0 -0
  826. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_part_c.py +0 -0
  827. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_part_d.py +0 -0
  828. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0680_part_e.py +0 -0
  829. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0690_part_a.py +0 -0
  830. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0690_part_b.py +0 -0
  831. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0690_part_c.py +0 -0
  832. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0690_part_d.py +0 -0
  833. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0690_part_e.py +0 -0
  834. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_a.py +0 -0
  835. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_b.py +0 -0
  836. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_c.py +0 -0
  837. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_d.py +0 -0
  838. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_e.py +0 -0
  839. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0700_part_f.py +0 -0
  840. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07110.py +0 -0
  841. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07111.py +0 -0
  842. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07112.py +0 -0
  843. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07113.py +0 -0
  844. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07114.py +0 -0
  845. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07115.py +0 -0
  846. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07116.py +0 -0
  847. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07117.py +0 -0
  848. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07118.py +0 -0
  849. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07119.py +0 -0
  850. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0712.py +0 -0
  851. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07120.py +0 -0
  852. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07121.py +0 -0
  853. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07122.py +0 -0
  854. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07123.py +0 -0
  855. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07126.py +0 -0
  856. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07127.py +0 -0
  857. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v07129.py +0 -0
  858. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0713.py +0 -0
  859. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0714.py +0 -0
  860. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0715.py +0 -0
  861. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0716.py +0 -0
  862. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0717.py +0 -0
  863. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0718.py +0 -0
  864. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_v0719.py +0 -0
  865. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_validator.py +0 -0
  866. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_vision.py +0 -0
  867. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_vllm_serve.py +0 -0
  868. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_warmup.py +0 -0
  869. {soup_cli-0.71.30 → soup_cli-0.71.32}/tests/test_why.py +0 -0
  870. {soup_cli-0.71.30 → soup_cli-0.71.32}/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,68 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.32] - 2026-07-07
16
+
17
+ ### Added
18
+ - **ASR fine-tuning (`task='asr'`, Whisper)** — fine-tune Whisper on your accent
19
+ or domain, locally. whisper-tiny (39M) / base (74M) train on a 4 GB GPU.
20
+ - New `AsrTrainerWrapper` (HF `Seq2SeqTrainer` + `WhisperProcessor`); data rows
21
+ are `{"audio": <path>, "text": <transcript>}` under the new `data.format='asr'`.
22
+ Audio decodes via the hardened `load_audio_mono` (16 kHz mono, soundfile
23
+ pre-probe + `O_NOFOLLOW` + symlink/size guards); transcripts become decoder
24
+ labels (pad → −100, decoder-start token stripped).
25
+ - Optional LoRA on q/v attention projections via `training.asr_lora: true`
26
+ (default full fine-tune); `training.asr_language` / `training.asr_task`
27
+ (`transcribe`|`translate`) set the decoder prefix and are persisted to an
28
+ `asr_generation.json` sidecar so inference restores them.
29
+ - **`soup infer --task asr`** — transcribe an `{"audio": path[, "text": ref]}`
30
+ JSONL; reports per-row and corpus WER/CER when references are present. Loads a
31
+ full model or a PEFT/LoRA adapter dir. Flags: `--asr-language`, `--asr-task`,
32
+ `--audio-dir` (audio paths are cwd/dir-contained; UNC/traversal rejected).
33
+ - New pure-python `utils/asr_metrics.py` — WER / CER / `word_accuracy`
34
+ (= 1 − WER, for a higher-is-better ship metric leg) / `corpus_wer`, with a
35
+ light Whisper-style text normalizer (no new dependency).
36
+ - Recipes: `whisper-tiny-asr`, `whisper-base-asr` (live-trainable),
37
+ `whisper-large-v3-asr` (parse-only, needs a larger GPU), plus
38
+ `smolvlm-256m-sft` (vision). Catalog 138 → 142.
39
+
40
+ ### Fixed
41
+ - `model_size_from_name` now knows Whisper checkpoint sizes (tiny…large), so the
42
+ hardware-fit gate no longer mistakes a 39M whisper-tiny for the 7B default and
43
+ blocks ASR training on consumer GPUs.
44
+
45
+ ## [0.71.31] - 2026-07-06
46
+
47
+ ### Added
48
+ - **Judge-in-the-loop suite** — put an LLM judge in the loop across the workflow:
49
+ - **`task='online_dpo'`** — Online DPO training (wraps TRL `OnlineDPOTrainer`):
50
+ the model generates two completions per prompt on-policy each step and a
51
+ *judge* (a pairwise LLM judge over the existing ollama/openai-compatible
52
+ backend) OR a `reward_model` picks the winner. Config:
53
+ `training.online_dpo_judge: "ollama://model"` (or set `reward_model` —
54
+ exactly one), `online_dpo_loss_type: sigmoid|ipo`, `online_dpo_max_new_tokens`;
55
+ `beta` reuses `dpo_beta`. Transformers + text only. Recipe:
56
+ `online-dpo-smollm2-135m`. Adapts to the installed TRL: on trl 0.19.x the
57
+ judge is a swap-debiased *pairwise* comparison; on trl 1.x (which removed
58
+ pairwise judges) the same `JudgeEvaluator` is used as a *pointwise*
59
+ reward function — a documented per-version behaviour difference.
60
+ - **`soup data best-of-n`** — Best-of-N rejection sampling (BOND-lite): sample
61
+ N completions from `--base` locally, a `--judge` scores each pointwise, and
62
+ the winner is written as an SFT chat row (with provenance). `--emit-pairs`
63
+ also writes winner-vs-loser DPO pairs.
64
+ - **`soup data evolve`** — Evol-Instruct instruction evolution (WizardLM depth
65
+ / breadth) over an ollama/vllm provider, completing the synthetic-data suite
66
+ (Magpie / Forge / Persona / evolve).
67
+ - **`soup ship --task-mode pairwise`** — a true pairwise judge win-rate as the
68
+ ship leg-1 task-win (base = 0.5 coin-flip, tuned = its win-rate; swap-debiased),
69
+ fusing with the catastrophic-forgetting guard into one SHIP / DON'T-SHIP verdict.
70
+
71
+ ### Security
72
+ - `soup data best-of-n` / `evolve` write outputs via atomic `mkstemp` + `os.replace`
73
+ (re-validated cwd containment), closing the TOCTOU symlink-swap window between the
74
+ containment check and the write. All judge/provider URLs are SSRF-validated; model
75
+ loads probe `trust_remote_code`.
76
+
15
77
  ## [0.71.30] - 2026-07-05
16
78
 
17
79
  ### 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 (142 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 (309 files, 15663 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.32
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,33 @@ 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.32ASR fine-tuning (Whisper).** Fine-tune Whisper on your accent or domain, locally. whisper-tiny (39M) and base (74M) train on a 4 GB GPUa new modality that actually runs on a laptop card.
197
+
198
+ - **`task='asr'`.** A new `AsrTrainerWrapper` (HF `Seq2SeqTrainer` + `WhisperProcessor`). Data rows
199
+ are `{"audio": <path>, "text": <transcript>}` under `data.format='asr'`; audio decodes to 16 kHz
200
+ mono through the hardened loader (soundfile pre-probe + symlink/size guards). Opt-in LoRA on q/v
201
+ via `training.asr_lora: true` (default full fine-tune); `training.asr_language` / `asr_task`
202
+ (`transcribe`|`translate`) set and persist — the decoder prefix for inference.
203
+ - **`soup infer --task asr`.** Transcribe an `{"audio"[, "text"]}` JSONL and get per-row + corpus
204
+ **WER / CER** when references are present. Loads a full model or a LoRA adapter dir; audio paths
205
+ are containment-checked (traversal / UNC rejected).
206
+ - **Pure-python metrics.** New `soup_cli.utils.asr_metrics` (WER / CER / `word_accuracy` /
207
+ `corpus_wer`) no new dependency, reusable as a higher-is-better ship metric leg.
208
+ - **Recipes.** `whisper-tiny-asr` / `whisper-base-asr` (live-trainable), `whisper-large-v3-asr`
209
+ (parse-only). Catalog 138 142.
210
+ - **Proof-of-mechanism, honestly.** Live-validated on an RTX 3050: a memorization task drove
211
+ WER 1.000 → 0.000 (loss 7.2 → 0.0005 at 0.4/4 GB). Real accent/domain gains need real audio;
212
+ WER/CER use a light normalizer, not the full Whisper text normalizer.
211
213
 
212
214
  ```yaml
213
- task: grpo
215
+ base: openai/whisper-tiny
216
+ task: asr
217
+ data:
218
+ format: asr # rows: {"audio": "clip.wav", "text": "hello world"}
219
+ audio_dir: ./data/audio
214
220
  training:
215
- prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
216
- prm_aggregate: min # weakest-link (default) | prod | last
221
+ asr_language: en
222
+ asr_lora: true # optional; default = full fine-tune
217
223
  ```
218
224
 
219
225
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -49,27 +49,33 @@ 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.32ASR fine-tuning (Whisper).** Fine-tune Whisper on your accent or domain, locally. whisper-tiny (39M) and base (74M) train on a 4 GB GPUa new modality that actually runs on a laptop card.
53
+
54
+ - **`task='asr'`.** A new `AsrTrainerWrapper` (HF `Seq2SeqTrainer` + `WhisperProcessor`). Data rows
55
+ are `{"audio": <path>, "text": <transcript>}` under `data.format='asr'`; audio decodes to 16 kHz
56
+ mono through the hardened loader (soundfile pre-probe + symlink/size guards). Opt-in LoRA on q/v
57
+ via `training.asr_lora: true` (default full fine-tune); `training.asr_language` / `asr_task`
58
+ (`transcribe`|`translate`) set and persist — the decoder prefix for inference.
59
+ - **`soup infer --task asr`.** Transcribe an `{"audio"[, "text"]}` JSONL and get per-row + corpus
60
+ **WER / CER** when references are present. Loads a full model or a LoRA adapter dir; audio paths
61
+ are containment-checked (traversal / UNC rejected).
62
+ - **Pure-python metrics.** New `soup_cli.utils.asr_metrics` (WER / CER / `word_accuracy` /
63
+ `corpus_wer`) no new dependency, reusable as a higher-is-better ship metric leg.
64
+ - **Recipes.** `whisper-tiny-asr` / `whisper-base-asr` (live-trainable), `whisper-large-v3-asr`
65
+ (parse-only). Catalog 138 142.
66
+ - **Proof-of-mechanism, honestly.** Live-validated on an RTX 3050: a memorization task drove
67
+ WER 1.000 → 0.000 (loss 7.2 → 0.0005 at 0.4/4 GB). Real accent/domain gains need real audio;
68
+ WER/CER use a light normalizer, not the full Whisper text normalizer.
67
69
 
68
70
  ```yaml
69
- task: grpo
71
+ base: openai/whisper-tiny
72
+ task: asr
73
+ data:
74
+ format: asr # rows: {"audio": "clip.wav", "text": "hello world"}
75
+ audio_dir: ./data/audio
70
76
  training:
71
- prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
72
- prm_aggregate: min # weakest-link (default) | prod | last
77
+ asr_language: en
78
+ asr_lora: true # optional; default = full fine-tune
73
79
  ```
74
80
 
75
81
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -19,6 +19,7 @@ soup train --config soup.yaml --push-as user/repo --hf-resume Resume from lates
19
19
  soup train --config soup.yaml --find-lr LR range finder: write recommended LR JSON
20
20
  soup train --config soup.yaml --cloud modal --gpu a100 Render a Modal.com app for serverless GPU training (plan-only; --cloud-submit submits live)
21
21
  soup infer --model ./output --input p.jsonl Batch inference
22
+ soup infer --task asr --model <whisper|adapter> --input a.jsonl --output o.jsonl [--audio-dir d --asr-language en --asr-task transcribe|translate] Whisper transcription + WER/CER
22
23
  soup chat --model ./output Interactive chat
23
24
  soup push --model ./output --repo user/name Upload to HuggingFace
24
25
  soup push --model ./output --repo user/name --collection user/coll-abc123 Add to HF Collection
@@ -133,7 +134,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
133
134
  soup migrate --from axolotl config.yml Import config from Axolotl
134
135
  soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
135
136
  soup migrate --from llamafactory c.yaml --dry-run Preview without writing
136
- soup recipes list List all 137 ready-made recipes
137
+ soup recipes list List all 138 ready-made recipes
137
138
  soup recipes show llama3.1-8b-sft Print recipe YAML
138
139
  soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
139
140
  soup recipes search "reasoning" Search by keyword/task/size
@@ -155,6 +156,7 @@ soup why [run_id] Explain training anomalies (heuris
155
156
  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
157
  soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
157
158
  soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
159
+ 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
160
  soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
159
161
  soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
160
162
  soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
@@ -250,6 +252,8 @@ soup local-rl train --db <path> --model <id> [--scheduler-dir <dir>] [--hour H]
250
252
  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
253
  soup expect <data.jsonl> <suite.yaml> Expectations suite: PII / token-length / refusal / judge (v0.69.0)
252
254
  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)
255
+ 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)
256
+ 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
257
  soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub diversity sampler (v0.69.0)
254
258
  soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
255
259
  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).
@@ -343,6 +352,13 @@ Or use `.txt` files directly (one document per line).
343
352
  {"audio": "recording.wav", "messages": [{"role": "user", "content": "Transcribe."}, {"role": "assistant", "content": "Hello world."}]}
344
353
  ```
345
354
 
355
+ **ASR (Whisper transcription — `data.format: asr`, v0.71.32):**
356
+ ```json
357
+ {"audio": "clip.wav", "text": "hello world"}
358
+ ```
359
+ Audio paths resolve under `data.audio_dir` (containment-checked). Used by
360
+ `task: asr` and `soup infer --task asr`. See [Training → ASR](training.md).
361
+
346
362
  **PRM (process reward, stepwise-supervised):**
347
363
  ```json
348
364
  {"prompt": "Solve 2+2", "completions": ["First, add", "Result is 4"], "labels": [true, true]}
@@ -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
@@ -40,6 +40,17 @@ Soup works with **any** of the **340,000+** text-generation models on [HuggingFa
40
40
  | Qwen2-VL-7B-Instruct | 7B | LLaVA, ShareGPT4V |
41
41
  | Pixtral-12B-2409 | 12B | LLaVA, ShareGPT4V |
42
42
 
43
+ ### ASR Models (`task: asr`, Whisper — v0.71.32)
44
+
45
+ | Recipe | Base | Size | Status |
46
+ |---|---|---|---|
47
+ | `whisper-tiny-asr` | openai/whisper-tiny | 39M | Live on 4 GB |
48
+ | `whisper-base-asr` | openai/whisper-base | 74M | Live on 4 GB |
49
+ | `whisper-large-v3-asr` | openai/whisper-large-v3 | 1.5B | Parse-only (larger GPU) |
50
+
51
+ Rows are `{"audio": <path>, "text": <transcript>}` with `data.format: asr`. See
52
+ [Training → ASR fine-tuning](training.md).
53
+
43
54
  ### Quick Size Guide
44
55
 
45
56
  | VRAM | Max Model (QLoRA 4-bit) | Example |
@@ -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
@@ -533,6 +561,48 @@ training:
533
561
  {"audio": "recording.wav", "messages": [{"role": "user", "content": "Transcribe this audio."}, {"role": "assistant", "content": "Hello world."}]}
534
562
  ```
535
563
 
564
+ ### ASR fine-tuning (`task='asr'`, Whisper) — v0.71.32
565
+
566
+ Fine-tune Whisper on your accent or domain. whisper-tiny (39M) and base (74M)
567
+ train on a 4 GB GPU. Rows are `{"audio": <path>, "text": <transcript>}` under
568
+ `data.format='asr'`; audio decodes to 16 kHz mono through the hardened loader.
569
+
570
+ ```yaml
571
+ base: openai/whisper-tiny
572
+ task: asr
573
+ data:
574
+ train: ./data/train.jsonl
575
+ format: asr # rows: {"audio": "clip.wav", "text": "hello world"}
576
+ audio_dir: ./data/audio # audio paths resolve here (containment-checked)
577
+ training:
578
+ epochs: 3
579
+ lr: 1e-4
580
+ batch_size: 2
581
+ asr_language: en # optional; sets + persists the decoder prefix
582
+ asr_task: transcribe # transcribe | translate
583
+ asr_lora: true # optional LoRA on q/v; default = full fine-tune
584
+ quantization: none
585
+ output: ./out
586
+ ```
587
+
588
+ ```json
589
+ {"audio": "clip0.wav", "text": "hello world"}
590
+ ```
591
+
592
+ Transcribe + score after training:
593
+
594
+ ```bash
595
+ soup infer --task asr --model ./out --input eval.jsonl --output preds.jsonl --audio-dir ./data/audio
596
+ # -> preds carry {"transcription", "wer", "cer"} per row + a corpus WER summary
597
+ ```
598
+
599
+ Notes: `task='asr'` requires `backend='transformers'` and a Whisper base (a
600
+ non-Whisper base is rejected before download). `asr_language`/`asr_task` persist
601
+ to an `asr_generation.json` sidecar so `soup infer --task asr` restores them
602
+ (override with `--asr-language`/`--asr-task`). WER/CER use a light normalizer —
603
+ good for before/after deltas, not leaderboard-comparable absolutes.
604
+ `whisper-large-v3-asr` ships parse-only (needs a larger GPU).
605
+
536
606
 
537
607
  ## GRPO Plus — Objective Variants, Long-Context RL, Multi-Turn Agents
538
608
 
@@ -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.32"
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.32"